1
0
Fork 0

Compare commits

..

No commits in common. "sychoi" and "main" have entirely different histories.
sychoi ... main

73 changed files with 1873 additions and 3798 deletions

26
.gitignore vendored
View File

@ -1,26 +0,0 @@
# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode
# just upload home_dir
show_dir/*

View File

@ -375,17 +375,16 @@ class Tb_dept_class {
},
{ field: "DEPT_NM", title: "부서명", width: 150,
editor: tb_custom_editor.upper,
hozAlign:"left",
validator:{
type:tb_custom_validator.stringNumeric,
parameters: "특수문자를 입력할 수 없습니다."
}
},
{ field: "PAR_DEPT_CD", title: "상위부서코드", width: 150, cssClass:"editable-cell" },
{ field: "PAR_DEPT_NM", title: "상위부서명", width: 200, formatter:function(cell){console.log( this.getWidth());} },
{ field: "PAR_DEPT_NM", title: "상위부서명", width: 200, },
{ field: "BIZ_AREA_CD", title: "사업장코드", width: 150, cssClass:"editable-cell" },
{ field: "BIZ_AREA_NM", title: "사업장명", width: 200, },
{ field: "EMP_NO", title: "관리자", width: 100, cssClass:"editable-cell", },
{ field: "EMP_NO", title: "관리자", width: 100, cssClass:"editable-cell" },
{ field: "USE_FLG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, },
];

View File

@ -76,48 +76,16 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 테이블 컨테이너 -->
<div class="table-container">
<div class="inner-container">
<!-- 수평 테이블 컨테이너 시작 -->
<div class="inner-container flexrow gap20">
<!-- 테이블 박스 시작 -->
<div class="table-box flex-1" id="main_table">
<!-- 테이블 헤더(제목, 추가, 삭제) -->
<div class="table-title">
<p class="title">설비 <span> 더블 클릭하면 수정창이 열립니다.</span></p>
<!-- 버튼 -->
<div class="button-box">
<button class="add-btn reverse-btn">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
추가
</button>
<button class="remove-btn reverse-btn">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
삭제
</button>
</div>
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="tb-height-full">
<div class="hy-table"></div>
</div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
<div class="flexcol flex-2 gap10">
<!-- 수평 테이블 컨테이너 시작 -->
<div class="flexrow gap20">
<!-- 테이블 박스 시작 -->
<div class="table-box flex-1" id="process_table">
<div class="table-box flex-1" id="main_table">
<!-- 테이블 헤더(제목, 추가, 삭제) -->
<div class="table-title">
<p class="title">공정</p>
<p class="title">설비 <span> 더블 클릭하면 수정창이 열립니다.</span></p>
<!-- 버튼 -->
<div class="button-box">
@ -131,22 +99,54 @@ include_once _SVC_INC_PATH_ . "/header.php";
</button>
</div>
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="tb-height-half">
<div class="tb-height-full">
<div class="hy-table"></div>
</div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
<div class="table-box flex-1" id="repair_table">
<!-- 테이블 헤더(제목, 추가, 삭제) -->
<div class="table-title">
<p class="title">수리내역</p>
<div class="flexcol flex-2 gap10">
<!-- 버튼 -->
<!-- <div class="button-box">
<!-- 테이블 박스 시작 -->
<div class="table-box flex-1" id="process_table">
<div class="table-title">
<p class="title">공정</p>
<!-- 버튼 -->
<div class="button-box">
<button class="add-btn reverse-btn">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
추가
</button>
<button class="remove-btn reverse-btn">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
삭제
</button>
</div>
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 -->
<div class="tb-height-half">
<div class="hy-table"></div>
</div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
<div class="table-box flex-1" id="repair_table">
<!-- 테이블 헤더(제목, 추가, 삭제) -->
<div class="table-title">
<p class="title">수리내역</p>
<!-- 버튼 -->
<!-- <div class="button-box">
<button class="add-btn reverse-btn">
<?php //include _SVC_INC_PATH_ . '/img/add.php' ?>
추가
@ -156,22 +156,22 @@ include_once _SVC_INC_PATH_ . "/header.php";
삭제
</button>
</div> -->
<!-- 버튼 종료 // -->
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="tb-height-half">
<div class="hy-table"></div>
</div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="tb-height-half">
<div class="hy-table"></div>
</div>
<!-- 테이블 종료 // -->
</div>
</div>
</div>
<!-- 수평 테이블 컨테이너 종료 // -->
</div>

View File

@ -297,13 +297,12 @@ class Tb_insp_class {
},
{ field: "INSP_NAME", title: "검사항목명", width: 500,
editor: "input",
hozAlign:"left",
validator:{
type:tb_custom_validator.stringNumeric,
parameters: "특수문자를 입력할 수 없습니다."
},
},
{ field: "INSP_METH", title: "검사유형",hozAlign:"left", width: 100, editor:"input"},
{ field: "INSP_METH", title: "검사유형", width: 100, editor:"input"},
{ field: "USEFLAG", title: "사용", width: 50, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" }, },
];
@ -378,51 +377,10 @@ class Tb_insp_class {
this.cellEdited && this.cellEdited(cell);
});
//엑셀연결
document.getElementById('excel_down').addEventListener('click', function (e) {
getExcel2();
});
document.getElementById('excel_up').addEventListener('click', function (e) {
document.getElementById('fileInput').click();
});
document.getElementById('fileInput').addEventListener('change', function (e) {
let file = e.target.files[0];
if (!file) {
console.log('파일이 선택되지 않았습니다.');
return;
}
let reader = new FileReader();
reader.onload = (e) => {
let data = e.target.result;
let workbook = XLSX.read(data, { type: 'binary' });
workbook.SheetNames.forEach((sheetName) => {
let rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header:1 });
console.log(rows);
rows.slice(1).forEach((row,index) => {
let rowToAdd = {
INSP_ITEM: row[0],
INSP_NAME: row[1],
INSP_METH: row[2],
USEFLAG: row[3],
_STATUS_: "I"
};
console.log('행추가 ', rowToAdd);
Tb_insp.tbList.addRow(rowToAdd);
});
});
};
reader.readAsBinaryString(file);
});
// 추가
["click", "keypress"].forEach((evt) => {
this.addBtn.addEventListener(evt, () => {
this.addRow && this.addRow() && this.addRow(rowToAdd);
this.addRow && this.addRow();
});
});
// 삭제

View File

@ -35,7 +35,6 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="button-container">
<div class="button-box">
<button class="point-btn" id="excel_down">엑셀 다운로드</button>
<input type="file" id="fileInput" style="display: none;" accept=".xlsx, .xls">
<button class="point-btn" id="excel_up">엑셀 업로드</button>
<button class="point-btn" id="filter_btn">조회</button>
<button class="point-btn" id="put_btn">저장</button>
@ -99,7 +98,5 @@ include_once _SVC_INC_PATH_ . "/header.php";
<?php include_once _SVC_INC_PATH_ . "/footer_common.php"; ?>
<script src="./insp.js"></script>
<script src="./insp_excel.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.5/xlsx.full.min.js"></script>
<?php
include_once _SVC_INC_PATH_ . "/footer.php";

View File

@ -1,127 +0,0 @@
let getExcel2 = function (data) {
//Todo: 컴퍼넌트. 주석 삭제하지 말자
let sheet_title = "검사항목";
let file_name = "검사항목";
const work_Book = new ExcelJS.Workbook(); // ExcelJS 라이브러리로 새 워크북 생성
const work_Sheet = work_Book.addWorksheet(sheet_title); // 새 워크시트 추가
const all_border = {
top: { style: "thin", color: { argb: "FF000000" } },
left: { style: "thin", color: { argb: "FF000000" } },
bottom: { style: "thin", color: { argb: "FF000000" } },
right: { style: "thin", color: { argb: "FF000000" } },
};
const field_css = {
yellow: {
border: all_border,
font: { color: { argb: "FF9C5700" }, bold: true },
alignment: { vertical: "middle", horizontal: "center" },
fill: {
type: "pattern",
pattern: "solid",
fgColor: { argb: "FFFFEB9C" },
},
},
green: {
border: all_border,
font: { color: { argb: "FF006100" }, bold: true },
alignment: { vertical: "middle", horizontal: "center" },
fill: {
type: "pattern",
pattern: "solid",
fgColor: { argb: "FFC6EFCE" },
},
},
red: {
border: all_border,
font: { color: { argb: "FF9C0006" }, bold: true },
alignment: { vertical: "middle", horizontal: "center" },
fill: {
type: "pattern",
pattern: "solid",
fgColor: { argb: "FFFFC7CE" },
},
},
blue: {
border: all_border,
font: { font: { size: 11 }, color: { argb: "0E3979" }, bold: true },
alignment: { vertical: "middle", horizontal: "center" },
fill: {
type: "pattern",
pattern: "solid",
fgColor: { argb: "EAEFF3" },
}
},
title: {
font: { size: 15, bold: true },
alignment: { vertical: "middle", horizontal: "center" },
},
box: {
border: all_border,
alignment: { vertical: "middle", horizontal: "center" },
font: { size: 11 },
},
};
// // 첫 번째 행 설정, 높이와 제목 설정
// let ws_row1 = work_Sheet.getRow(1);
// ws_row1.height = 32;
// ws_row1.getCell(1).value = "검사항목";
// ws_row1.getCell(1).style = field_css.title
// work_Sheet.mergeCells('A1:E1');
let ws_row = work_Sheet.getRow(1);
ws_row.height = 25;
// ws_row.getCell(1).style = field_css.blue;
// ws_row.getCell(1).value = "NO.";
ws_row.getCell(1).style = field_css.blue;
ws_row.getCell(1).value = "검사항목";
ws_row.getCell(2).style = field_css.blue;
ws_row.getCell(2).value = "검사항목명";
ws_row.getCell(3).style = field_css.blue;
ws_row.getCell(3).value = "검사유형";
ws_row.getCell(4).style = field_css.blue;
ws_row.getCell(4).value = "사용";
work_Sheet.columns = [
{ width: 15 },
{ width: 30 },
{ width: 15 },
{ width: 15 },
{ width: 9 },
];
// 파일 생성 및 다운로드 부분
work_Book.xlsx.writeBuffer().then((data) => {
const blob = new Blob([data], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
});
const url = window.URL.createObjectURL(blob);
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = file_name;
anchor.click();
window.URL.revokeObjectURL(url);
});
}

View File

@ -13,13 +13,13 @@ class Tb_item_class {
let _this = this;
_this.tbList ="";
_this.itemData = "";
_this.ITEM_CD = "";
this.ajaxUrl = "./item.ajax.php";
this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table");
// this.upBtn = this.container.querySelector(".up-btn") || "";
// this.downBtn = this.container.querySelector(".down-btn") || "";
this.addBtn = this.container.querySelector(".add-btn");
_this.ITEM_CD = "";
this.removeBtn = this.container.querySelector(".remove-btn");
}
@ -279,7 +279,7 @@ class Tb_item_class {
},
{ formatter: "rownum", title: "NO", width: 50 },
{ field: "ITEM_CD", title: "품목", width: 150,editor:'input',editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, }, //품목 코드
{ field: "ITEM_NM", title: "품명", width: 250,editor:'input', hozAlign:"left" }, //품목 코드
{ field: "ITEM_NM", title: "품명", width: 250,editor:'input', }, //품목 코드
{ field: "DRAW_NO", title: "도면", width: 200,editor:'input' }, //도면 번호 - popup
{ field: "ITEM_GRP", title: "품목 그룹", width: 80,
editor:"list",
@ -522,7 +522,7 @@ class Tb_routing_class {
_this.fileData = JSON.parse(data).data;
console.log(_this.fileData);
if(rowData._STATUS_ !== "I"){
rowData.FILE_NM = _this.fileData.file_name;
this.tbList.updateData([
@ -546,7 +546,7 @@ class Tb_routing_class {
]);
}
console.log(this.tbList.getData());
}else{
kuls_alert(data.msg);
}
@ -1365,8 +1365,8 @@ class Tb_pic_class {
let _this = this;
_this.file = "";
_this.itemData ="";
_this.download_url = "/include/getFile.php";
this.ajaxUrl = "./item.ajax.php";
_this.download_url = "/include/getFile.php";
this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table");
this.addBtn = this.container.querySelector(".add-btn");
@ -1501,7 +1501,7 @@ class Tb_pic_class {
},
complete: () => {
window.clearTimeout(talert);
this.getMainList();
// this.tbList.clearAlert();
// this.setFilter();
},
@ -1706,11 +1706,11 @@ class Tb_pic_class {
{ field: "SID", visible:false},
{ field: "FILE_ID", visible:false},
{ field: "MAKE_TM", title: "등록일", width: 100, formatter: (cell)=>{
// let dateData = cell.getValue().date.substring(0,10);
// if(dateData == '1900-01-01'){
// dateData = '';
// }
return cell;
let dateData = cell.getValue().date.substring(0,10);
if(dateData == '1900-01-01'){
dateData = '';
}
return dateData;
}
},
{ field: "MAKE_USER_ID",title: "등록자", width: 100 },

View File

@ -294,14 +294,12 @@ class Tb_facility_class {
{ formatter: "rownum", title: "NO", width: 50},
{ field: "FACLT_NM", title: "설비", width: 150, editor: "input" , editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' },},
{ field: "FACLT_CD", visible: false, width: 150},
// { field: "DEFECT_DT", title: "발생일", width: 150,editor:'date', editorParams:{
// min:"01/01/2000", // the minimum allowed value for the date picker
// max:"02/12/9999", // the maximum allowed value for the date picker
// format:"yyyy-MM-dd", // the format of the date value stored in the cell
// verticalNavigation:"table"}},
// { field: "DEF_TM", title: "발생시간", width: 150, editor: tb_custom_editor.time },
{ field: "DEFECT_CONTENT", title: "고장내역", width: 300, editor: "input"},
{ field: "DEFECT_DT", title: "발생일", width: 150},
{ field: "DEFECT_DT", title: "고장일자", width: 150,editor:'date', editorParams:{
min:"01/01/2000", // the minimum allowed value for the date picker
max:"02/12/9999", // the maximum allowed value for the date picker
format:"yyyy-MM-dd", // the format of the date value stored in the cell
verticalNavigation:"table"}},
{ field: "DEFECT_CONTENT", title: "고장내역", width: 150, editor: "input"},
];
const commonFieldData = {
headerSort: true,

View File

@ -299,12 +299,11 @@ class Tb_facility_class {
{ field: "FACLT_NM", title: "설비", width: 150,editor: "input", editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, },
{ field: "FACLT_CD", visible: false, width: 150},
{ field: "REPAIR_NO", visible: false, width: 150},
{ field: "REPAIR_DT", title: "수리일자", width: 150,editor:'date', editorParams: {max:'9999-12-31'} },
{ field: "REPAIR_CONTENT", title: "수리내역", width: 150,editor: "input" },
{ field: "REPAIR_BP_NM", title: "수리업체", width: 100,editor: "input" },
{ field: "REPAIR_AMT", title: "수리금액", width: 150,editor: "input", formatter:"money", formatterParams:{ decimal:".",precision:0 } },
{ field: "REPAIR_AMT", title: "수리금액", width: 150,editor: "input" },
{ field: "REPAIR_TEL_NO", title: "연락처", width: 200,editor: "input"},
// { field: "REPAIR_DT", title: "수리일자", width: 150,editor:'date', editorParams: {max:'9999-12-31'} },
{ field: "REPAIR_DT", title: "수리일자", width: 150 }
];
const commonFieldData = {
headerSort: true,

View File

@ -1,9 +1,4 @@
<?php
/*
* @Overview 불량실적 등록
* @History 2024-04-29 / 김승혁 / 문단정렬
*/
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
include_once _HOME_INC_PATH_ . "/ajax_init.php";
@ -15,7 +10,6 @@ if (class_exists("SangsengApi")) {
$_REQUEST['mode'] = isset($_REQUEST['mode']) ? $_REQUEST['mode'] : "";
switch ($_REQUEST['mode']) {
//로그인
case "memberLogin":
if (csrf_check('memberLogin')) {
$retval['mesg'] = cUtil\Mlang::getText("정상적인 접근이 아닙니다.");
@ -45,9 +39,45 @@ switch ($_REQUEST['mode']) {
unset($_COOKIE['kuls_save_session']);
}
}
break;
//토큰
case "getItemList":
$sql = "USP_B_ITEM_S20";
// $params = Array(
// "ITEM_CD" => $_REQUEST['ITEM_CD'],
// );
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if ($rst) {
$retval['code'] = 1;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
$retval['data'] = $rows;
}
break;
case "getDefList":
$sql = "USP_P_DEF_RSLT_S20";
// $params = Array(
// "ITEM_CD" => $_REQUEST['ITEM_CD'],
// );
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if ($rst) {
$retval['code'] = 1;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
$retval['data'] = $rows;
}
break;
case "memberTokenLogin":
if (csrf_check('memberLogin')) {
$retval['mesg'] = cUtil\Mlang::getText("정상적인 접근이 아닙니다.");
@ -80,9 +110,16 @@ switch ($_REQUEST['mode']) {
$retval['data']['save_id'] = '';
}
}
break;
//로그인
case "memberJoin":
$minfo = $baseObj->getMember($_REQUEST['member_id']);
if (csrf_check('memberJoin')) {
@ -114,15 +151,29 @@ switch ($_REQUEST['mode']) {
$retval['code'] = $baseObj->join($ins_row);
$retval['mesg'] = cUtil\Mlang::getText("등록에 실패하였습니다.");
}
break;
//로그아웃
case "memberLogout":
$apiObj->pushApi($GLOBALS['_Umem']['member_id'], "종료");
$retval['code'] = $baseObj->logout();
break;
//메뉴리스트
case "getSiteMenuList":
$mnuObj = new Menu(TB_menu_list);
@ -139,12 +190,13 @@ switch ($_REQUEST['mode']) {
}
break;
//거래처목록
case "getPartnerList":
$sql = "USP_B_BIZ_PARTNER_S10";
$params = array(
"P_USE_FLG" => "Y",
"P_BP_CD" => "",
"P_BP_CD" => "",
"P_PUR_FLG" => "",
"P_SAL_FLG" => ""
);
@ -155,16 +207,16 @@ switch ($_REQUEST['mode']) {
if ($rst) {
$retval['code'] = 1;
while ($row = $baseObj->DB->fetch_array($rst)) {
// $row['BP_PRSN_CELL_NO'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_CELL_NO']);
// $row['BP_PRSN_EMAIL'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_EMAIL']);
// $row['BP_PRSN_TEL_NO'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_TEL_NO']);
// $row['BP_PRSN_CELL_NO'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_CELL_NO']);
// $row['BP_PRSN_EMAIL'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_EMAIL']);
// $row['BP_PRSN_TEL_NO'] = $baseObj->lcrypt->dec_secure($row['BP_PRSN_TEL_NO']);
$rows[] = $row;
}
$retval['data'] = $rows;
}
break;
//사업장
case "getBizareaList":
$sql = "USP_B_BIZ_AREA_S10";
$params = Array(
@ -172,7 +224,10 @@ switch ($_REQUEST['mode']) {
,"BP_NM" => "" //거래처명
,"USEFLAG" => 'Y'
);
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if ($rst) {
$retval['code'] = 1;
@ -185,57 +240,10 @@ switch ($_REQUEST['mode']) {
break;
// 사원정보
case 'getWorkerList':
$squl = "USP_B_EMPLOYEE_S10";
$params = Array(
"EMP_NO" => "",
"P_EMP_NM" => "",
"P_DEPT_CD" => "",
"P_DEPT_NM" => "",
"RET_FLG" => "N"
);
$rst = $baseObj->DB->exec($squl,$params);
$rows = array();
if( $rst ){
$retval['code'] = true;
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
}else{
$retval['code'] = false;
}
break;
// 부서정보
case 'getDeptList':
$squl = "USP_B_DEPT_S10";
$params = Array(
"BIZ_AREA_NM" => "",
"DEPT_NM" => "",
"USE_FLG" => "Y"
);
$rst = $baseObj->DB->exec($squl, $params);
$rows = array();
if ($rst) {
$retval['code'] = true;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
break;
//부서 트리
case "getDeptTree":
$sql = "USP_B_DEPT_HISTORY_S11";
$params = array(
@ -263,42 +271,62 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 품목 정보
case "getItemList":
$sql = "USP_B_ITEM_S20";
$params = Array(
"ITEM_NM" => '',
);
$rst = $baseObj->DB->exec($sql, $params);
// 사원정보
case 'getWorkerList':
$squl = "USP_B_EMPLOYEE_S10";
$params = Array(
"EMP_NO" => "",
"P_EMP_NM" => "",
"P_DEPT_CD" => "",
"P_DEPT_NM" => "",
"RET_FLG" => "N"
);
$rst = $baseObj->DB->exec($squl,$params);
$rows = array();
if( $rst ){
$retval['code'] = true;
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
}else{
$retval['code'] = false;
}
break;
// 부서정보
case 'getDeptList':
$squl = "USP_B_DEPT_S10";
$params = Array(
"BIZ_AREA_NM" => "",
"DEPT_NM" => "",
"USE_FLG" => "Y"
);
$rst = $baseObj->DB->exec($squl, $params);
$rows = array();
if ($rst) {
$retval['code'] = 1;
$retval['code'] = true;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
break;
// 불량실적
case "getDefList":
$sql = "USP_P_DEF_RSLT_S20";
// $params = Array(
// "ITEM_CD" => $_REQUEST['ITEM_CD'],
// );
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if ($rst) {
$retval['code'] = 1;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
$retval['data'] = $rows;
}
break;
// 생산오더(작업지시)별 공정 정보
// 생산오더(작업지시)별 공정 정보
case 'getOrderList':
$squl = "USP_P_WO_S20";
@ -318,7 +346,8 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 공정정보
// 공정정보
case 'getOperList':
$squl = "USP_B_OPERATION_S20";
$rst = $baseObj->DB->exec($squl);
@ -336,7 +365,6 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
$retval['code'] = false;
}
break;
// 특정 품목에 대한 공정정보
case 'getItemOperList':
$squl = "USP_B_OPERATION_S30";
@ -359,7 +387,7 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 설비 정보
// 설비 정보
case 'getFacilityList':
$squl = "USP_B_FACILITY_S10";
$params = Array(
@ -384,7 +412,7 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 검사항목 정보
// 검사항목 정보
case "getInspList":
$sql = "USP_B_INSP_ITEM_S10";
@ -408,7 +436,26 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 생산실적 오더 공정 정보
case "getBasecodeList":
$where = new DB_Where();
$where->add("CD.Code_Uid <> ?", $_REQUEST['Bran_Uid']);
if ($_REQUEST['Group_Uid']) {
$where->add("CD.Code_Uid <> ?", $_REQUEST['Group_Uid']);
}
$where->add("BR.Active = ?", "Y");
$where->add("GR.Active = ?", "Y");
$rows = $baseObj->getAllBaseCodeList($_REQUEST['Bran_Uid'], $_REQUEST['Group_Uid'] ?: "", "", $where);
for ($a = 0; $a < count($rows); $a++) {
$rows[$a]['Code_Uid_Old'] = $rows[$a]['Code_Uid'];
}
$retval['code'] = 1;
$retval['data'] = $rows;
break;
// 생산실적 오더 공정 정보
case 'getRegOrderList':
$squl = "USP_P_REG_WO_S20";
@ -428,7 +475,7 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
// 생산실적 설비 정보
// 생산실적 설비 정보
case 'getOrderFacilityList':
$squl = "USP_B_REG_FACILITY_S10";
@ -448,27 +495,10 @@ $retval['data'] = $mnuObj->tree_by_parent($rows, 'DEPT_CD', 'PAR_DEPT_CD', '');
}
break;
//기초코드
case "getBasecodeList":
$where = new DB_Where();
$where->add("CD.Code_Uid <> ?", $_REQUEST['Bran_Uid']);
if ($_REQUEST['Group_Uid']) {
$where->add("CD.Code_Uid <> ?", $_REQUEST['Group_Uid']);
}
$where->add("BR.Active = ?", "Y");
$where->add("GR.Active = ?", "Y");
$rows = $baseObj->getAllBaseCodeList($_REQUEST['Bran_Uid'], $_REQUEST['Group_Uid'] ?: "", "", $where);
for ($a = 0; $a < count($rows); $a++) {
$rows[$a]['Code_Uid_Old'] = $rows[$a]['Code_Uid'];
}
$retval['code'] = 1;
$retval['data'] = $rows;
break;
//기초코드
case "putBasecode":
$_REQUEST['reqdata'] = json_decode($_REQUEST['reqdata']);
$rst = true;
foreach ($_REQUEST['reqdata'] as $data) {

View File

@ -51,7 +51,6 @@ button {
color: #828282;
background-color: rgba(255, 255, 255, 0.973);
}
.basic-btn {
border: solid 2px transparent;
border-radius: 5px;
@ -79,94 +78,6 @@ button {
font-size: 13px;
}
.btn-danger {
height: 100%;
border: solid 2px red;
border-radius: 3px;
color: red;
background-color: white;
&:hover {
background-color: red;
color: white;
}
}
.close-btn {
border: solid 2px #cf5b5b;
color: white;
background-color: #cf5b5b;
border-radius: 3px;
&:hover {
background-color: white;
color: #cf5b5b;
}
}
// .run-btn {
// border: solid 2px #5b73cf;
// color: white;
// background-color: #5b73cf;
// border-radius: 3px;
// &:hover {
// background-color: white;
// color: #5b73cf;
// }
// }
// .norun-btn {
// border: solid 2px #f3da8f;
// color: white;
// background-color: #f3da8f;
// border-radius: 3px;
// &:hover {
// background-color: white;
// color: #f3da8f;
// }
// }
.disabled-btn, button[disabled] {
background-color: rgba(255, 255, 255, 0.973) !important;
color: #dddddd !important;
border-color: #e9e9e9 !important;
cursor: default !important;
&:hover {
background-color: rgba(255, 255, 255, 0.973) !important;
color: #dddddd !important;
border-color: #e9e9e9 !important;
}
}
.tab-btn {
background-color: white;
color: black;
border: solid 1px $gray-004;
height: 30px;
width: 25%;
border-right: none;
cursor: pointer;
text-wrap: nowrap;
&:hover {
background-color: $gray-004;
color: white;
}
}
.left-round{
border-radius: 50px 0px 0px 50px;
}
.right-round{
border-radius: 0px 50px 50px 0px;
border-right: solid 1px $gray-004;
}
// 전체 프레임
.have-image {
background-repeat: no-repeat;
@ -178,154 +89,68 @@ button {
height: calc(100vh - 48px);
display: flex;
justify-content: center;
position: relative;
}
.container .main-part {
width: calc(100% - 280px);
height: 100%;
display: flex;
flex-direction: column;
}
.breadcrumb {
.inner-container {
padding: 20px 15px;
a, i {
font-size: 15px;
}
a:nth-of-type(3) {
font-size: 20px;
color: #1F2859;
font-weight: 700;
}
}
position: absolute;
top: 0;
right: 0;
}
// item 탭메뉴
.sub-container {
width: 49%;
height: calc(100% - 25px);
.button-box {
&.main-table {
display: flex;
}
.tab-menu {
gap: 5px;
margin-bottom: 10px;
border-bottom: solid 2px $blue-005;
&.sub-table {
li {
border-left: solid 2px $blue-005;
border-right: solid 2px $blue-005;
border-top: solid 2px $blue-005;
border-radius: 5px 5px 0px 0px;
padding: 10px 12px;
color: black;
}
.first-tab {
background-color: $blue-005;
color: white;
}
}
.first-table-container {
display: flex;
height: calc(100% - 20px);
}
.second-table-container {
display: none;
height: calc(100% - 20px);
}
&.on {
.first-tab {
background-color: white;
color: black;
}
.second-tab {
background-color: $blue-005;
color: white;
}
.first-table-container {
display: none;
}
}
}
.tab-menu {
gap: 5px;
border-bottom: solid 2px #162788;
li {
border-left: solid 2px #162788;
border-right: solid 2px #162788;
border-top: solid 2px #162788;
border-radius: 5px 5px 0 0;
padding: 7px 12px;
background-color: white;
color: #162788;
min-width: 80px;
text-align: center;
font-size: 13px;
font-weight: 500;
&:hover{
background-color: #162788;
color: white;
}
&.on {
background-color: #162788;
color: white;
}
}
}
.tab-container {
height: 98%;
> div {
display: none;
height: calc(100vh - 320px);
.table-box:first-of-type, .tab-box:first-of-type {
width: 100%;
position: relative;
.table-title {
position: absolute;
top: -35px;
right: 0;
margin-bottom: 15px;
}
}
&.on {
.second-table-container {
display: flex;
}
}
}
// item 탭메뉴
// .sub-container {
// width: 49%;
// height: calc(100% - 25px);
// .tab-menu {
// gap: 5px;
// margin-bottom: 10px;
// border-bottom: solid 2px $blue-005;
// li {
// border-left: solid 2px $blue-005;
// border-right: solid 2px $blue-005;
// border-top: solid 2px $blue-005;
// border-radius: 5px 5px 0px 0px;
// padding: 10px 12px;
// color: black;
// }
// .first-tab {
// background-color: $blue-005;
// color: white;
// }
// }
// .first-table-container {
// display: flex;
// height: calc(100% - 20px);
// }
// .second-table-container {
// display: none;
// height: calc(100% - 20px);
// }
// &.on {
// .first-tab {
// background-color: white;
// color: black;
// }
// .second-tab {
// background-color: $blue-005;
// color: white;
// }
// .first-table-container {
// display: none;
// }
// .second-table-container {
// display: flex;
// }
// }
// }
// 메인 프레임
.table-title {
display: flex;
@ -341,7 +166,7 @@ button {
}
.contents-container {
height: calc(100vh - 235px);
height: calc(100vh - 140px);
width: 100%;
&.full-height {
@ -350,7 +175,7 @@ button {
.table-container {
width: 100%;
height: 98%;
height: calc(100% - 40px);
margin: 10px 0 30px 0;
.inner-container {
@ -385,16 +210,13 @@ button {
width: 100%;
height: 98%;
}
.sub-table, .inner-container{
&.flexrow {
width: 100%;
> .table-box {
width: 49%;
}
> .flexcol {
width: 49%;
}
.flexrow {
width: 100%;
> .table-box {
width: 49%;
}
> .flexcol {
width: 49%;
}
}
.flexcol {
@ -410,46 +232,3 @@ button {
}
.tb-height-full {
height: calc(100vh - 320px);
}
.tb-height-half {
height: calc(50vh - 205px);
}
.tb-height-30 {
height: calc(100vh - 600px);
}
.label-tag{
display: flex;
justify-content: center;
align-items: center;
height: 25px;
width: 60px;
border-radius: 5px;
span{
width: 6px;
height: 100%;
margin-right: 9px;
}
}
.blue-back{
background-color: #d2e7ff;
}
.green-back{
background-color: #d2ffd5;
}
.orange-back{
background-color: #ffe0d2;
}
.gray-back{
background-color: #d9d9d9;
}
.min-width-572{
min-width: 572px;
}

View File

@ -1,310 +1,92 @@
// 원기씨 바보바 대리님도 바보바보
// form 관련 css
// form.flexrow {
// .text-container {
// width: 100%;
// overflow-y: auto;
form {
height: 100%;
// .row-input-box {
// width: fit-content;
// 현장 작업자 실적등록 팝업
&[name=frmWorkData]{
width: 80vw;
// input {
// height: 15px;
// }
// .width-15 {
// width: 15%;
// min-width: 65px;
// }
// .width-30 {
// width: 30%;
// min-width: 140px;
// }
// label {
// min-width: 55px;
// width: 12%;
// display: block;
// padding: 5px;
// text-wrap: nowrap;
// text-align: end;
// }
// }
// }
// .img-container {
// width: 400px;
// border: solid 1px black;
// }
.input-box{
position: relative;
span{
position: absolute;
right: 15px;
top: 30%;
cursor: pointer;
i{
font-size: 1.2em;
color: $gray-004;
}
}
}
&>div{
width: 100%;
&.form-button-container{
height: fit-content;
padding: 10px 0px;
border-radius: 5px;
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
.form-button-box{
// width: 50%;
button{
border-radius: 50px;
border: solid 2px $blue-001;
color: $blue-001;
font-size: 1.1em;
font-weight: 600;
background-color: white;
min-width: 140px;
padding: 10px 14px;
text-wrap: nowrap;
&:hover, &.on{
background-color: $blue-001;
color: white;
}
// width: fit-content;
// padding: 0px 10px;
// height: 32px;
// border: solid 2px $blue-005;
// border-bottom: none;
// border-radius: 5px 5px 0 0;
// background: white;
// color: $blue-005;
// font-size: 13px;
// font-weight: 600;
// &:hover, &.on{
// background: $blue-005;
// color: white;
// }
}
}
// }
}
&.form-contents{
.info-container{
min-height: 510px;
height: 80vh;
width: 50%;
}
.detail-container{
min-height: 510px;
height: 80vh;
width: 50%;
overflow: hidden;
.detail-contents{
width: 100%;
.form-header{
width: 100%;
textarea{
height: 100px;
resize: none;
}
.add-btn{
margin-right: 10px;
}
}
.table-box{
width: 100%;
height: calc(100% - 70px);
&>div{
width: 100%;
}
.tab-menu{
width: 100%;
height: fit-content;
// border: none;
li{
height: 34px;
box-sizing: border-box;
// border-radius: 50px;
// border: solid 2px $blue-001;
// &:hover{
// background-color: $blue-001;
// }
// &.on{
// background-color: $blue-001;
// }
}
}
.table-title{
width: 99%;
.button-box{
width: 100%;
margin-top: 10px;
}
}
.hy-table{
margin: 0;
}
}
}
.height-full{
height: 100% !important;
}
.height-93{
height: 93% !important;
}
.height-half{
height: calc(100% - 220px) !important;
}
.round-tab-box{
width: calc(100% - 120px);
overflow: auto;
}
}
}
}
}
// 설비관리 대장 팝업
&[name=frmFacility]{
width: 800px;
height: 525px;
}
// 거래처 등록 팝업
&[name=frmPartner]{
width: 800px;
min-height: 525px;
height: 70vh;
}
.add-btn, .remove-btn {
form{
.add-btn, .remove-btn{
padding: 7px 12px;
cursor: pointer;
}
.form-contents {
height: 70% !important;
overflow: hidden;
.form-contents{
padding-top: 20px;
height: auto !important;
.form-box{
padding-bottom: 20px;
border-bottom: solid 1px;
.form-box {
overflow: auto;
background: #F6F6FC;
height: 100%;
padding: 20px 0px;
.input-container {
width: calc(100% - 10px);
height: -moz-fit-content;
height: fit-content;
.input-container{
width: 100%;
flex-wrap: wrap;
.input-box {
.input-box{
width: 100%;
height: -moz-fit-content;
height: fit-content;
align-items: center;
label, .input-title {
label, .input-title{
display: inline-block;
text-align: justify;
width: 100px;
padding-right: 10px;
margin: 0;
text-align: end;
}
input[type=button]{
width: 80px;
margin: 0 15px;
text-align: center;
}
label.form_toggle, .input-title.form_toggle {
text-align: start;
}
:after{
content: "";
width: 100%;
display: inline-block;
}
.check-label {
}
.check-label{
display: inline-flex;
width: 100px;
align-items: center;
label {
label{
width: auto;
}
}
input[type=text], input[type=tel], input[type=datetime-local], select, textarea {
border: solid 1px #c7c7c7;
input[type="text"], select{
box-sizing: border-box;
height: 30px;
width: calc(100% - 120px);
min-width: 100px;
padding: 0px 10px;
&.sub-input{
width: calc(100% - 6px);
}
}
.input-text{
width: calc(50% - 65px) !important;
text-align: center;
display: inline-block;
}
}
}
}
.img-container {
padding-right: 10px;
height: 100%;
gap: 5%;
.img-box {
height: 85%;
width: calc(100% - 2px);
border: solid 1px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
background-color: white;
.img-cover {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(8, 8, 8, 0.322);
justify-content: center;
align-items: center;
input {
width: 30%;
height: 10%;
text-align: center;
font-size: 1.2em;
}
}
&:hover .img-cover {
display: flex;
}
}
label {
height: 10%;
width: 100%;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.2em;
input {
display: none;
}
}
}
@ -323,7 +105,6 @@ form {
&:hover{
background: white;
border: solid 2px #f38814 !important;
color: #f38814;
}
}

View File

@ -1,124 +1,85 @@
#awn-popup-wrapper {
#awn-popup-wrapper{
display: flex;
align-items: center;
justify-content: center;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0, 0, 0, 0.7);
z-index: 10;
.awn-popup-body {
background: rgba(0, 0, 0, 0.7);
.awn-popup-body{
background: #fff;
box-shadow: 0px 0px 11px 0px rgba(0, 0, 0, 0.2);
box-shadow: 0px 0px 11px 0px rgba(0, 0, 0, 0.20);
border-radius: 5px;
font-size: 14px;
// max-width: 833px;
max-width: max-content;
// min-width: 500px;
// min-height: 531px;
// max-height: fit-content;
// height: 80vh;
max-width: 833px;
min-width: 500px;
height: 531px;
padding: 24px;
position: relative;
word-break: break-word;
&>div{
.awn-popup-confirm{
height: 100%;
.awn-form{
.awn-popup-search{
height: 100%;
}
.table-box{
padding: 0 10px;
width: calc(100% - 20px);
}
}
}
.awn-popup-confirm.custom-popup {
height: 500px;
min-width: 500px;
// overflow-y: auto;
// overflow-x: hidden;
overflow: hidden;
&.free-height{
height: auto;
}
// &.free-width{
// width: auto;
// }
.awn-popup-title {
overflow-y: auto;
overflow-x: hidden;
.awn-popup-title{
font-size: 20px;
margin-bottom: 10px;
i {
i{
font-size: 20px;
}
}
.awn-popup-search{
.awn-popup-search {
.s_exp {
.s_exp{
margin: 0 0 10px 0;
color: #1F2859;
color: $blue-004;
}
.s_fld {
.s_fld{
display: flex;
justify-content: flex-end;
gap: 6px;
align-items: center;
height: 32px;
margin-bottom: 10px;
select, input {
select, input{
box-sizing: border-box;
height: 100%;
padding: 0 10px;
border-radius: 3px;
border: 1px solid #D9D9D9;
border: 1px solid $gray-003;
}
.btn-danger{
height: 100%;
border: solid 2px red;
border-radius: 3px;
color: red;
background-color: white;
&:hover{
background-color: red;
color: white;
}
}
}
}
.title-container{
justify-content: space-between;
}
.awn-popup-content {
.awn-popup-content{
max-height: 430px;
height: 100%;
padding: 0 10px;
overflow: auto;
.tabulator.hy-table{
height: 85%;;
}
}
.form-contents{
height: 90% !important;
overflow: auto;
.form-box{
height: fit-content;
overflow: visible;
}
.tabulator.hy-table{}
}
}
}
}
#awn-popup-wrapper .awn-popup-body.awn-popup-confirm{
height: auto;
}
@ -200,5 +161,5 @@
// }
// }
// }
// }
// }
}
}

View File

@ -82,8 +82,8 @@
.table-header .button-container{
width: 100%;
display: flex;
justify-content: flex-end;
justify-content: end;
}
.button-box{
@ -100,5 +100,7 @@
// table container
.table-container .button-box{
justify-content: flex-end;
}
justify-content: end;
}

View File

@ -3,56 +3,35 @@
width: 100%;
overflow-y: auto;
height: 100%;
border-right: solid 1px #e9e9e9;
border-right: solid 1px $gray-002;
display: flex;
flex-direction: column;
justify-content: space-between;
background: white;
position: absolute;
top: 0;
left: 0;
}
.container.on .side-nav {
width: 88px;
overflow-y: visible;
align-items: center;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container {
position: static;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li {
position: relative;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li span.fancytree-expander, .container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li span.fancytree-title {
display: none;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li span.fancytree-custom-icon {
margin: 0;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li ul {
position: absolute;
display: block;
left: 56px;
top: 0;
width: 250px;
background: #e9e9e9;
z-index: 2;
min-height: 52px;
max-height: 294px;
overflow: auto;
}
.container.on .side-nav .side-menu ul.fancytree-plain.fancytree-container > li ul li span.fancytree-title {
color: black;
display: block;
}
.container.on .side-nav .fold-btn-container {
margin: 0 0 30px 0;
padding-left: 0;
width: auto;
}
.container.on .side-nav .fold-btn-container .fold-btn {
transform: rotate(180deg);
}
.container.on .main-part {
width: calc(100% - 88px);
.container.on {
.side-nav {
width: 88px;
.fold-btn-container {
padding-left: 25%;
width: auto;
.fold-btn {
transform: rotate(180deg);
}
}
}
.main-part{
width: calc(100% - 88px);
}
}
.side-nav .fold-btn-container {
@ -73,66 +52,126 @@
cursor: pointer;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container {
border: none;
padding: 0px;
.side-nav .side-menu{
ul.fancytree-plain.fancytree-container{
border: none;
padding: 0px;
> li > span{
border-bottom: solid 1px $gray-002;
}
li {
min-height: 72px;
> span{
height: 72px;
display: inline-flex;
align-items: center;
&:hover, &:active{
span.fancytree-title{
color: #3c3c3c;
background-color: transparent;
border: none;
}
}
> span{
// 글자
color: #3c3c3c;
font-size: 15px;
// 아이콘
&.fancytree-custom-icon{
color: #98A7FA;
font-size: 24px;
}
}
// 활성화된 메뉴
&.fancytree-node.fancytree-active{
span.fancytree-title{
color: #3c3c3c;
background-color: transparent;
border: none;
}
&:hover, &:active{
span.fancytree-title{
color: #3c3c3c;
background-color: transparent;
border: none;
}
}
}
}
// 서브 메뉴
ul{
padding: 0px;
li{
min-height: 48px;
border-bottom: 1px solid $blue-003;
> span{
height: 48px;
width: fit-content;
padding-left: 1.5em;
span.fancytree-title{
font-size: 14px;
color: $blue-001;
}
}
&:hover{
background-color: $blue-003;
span.fancytree-title{
color: $blue-001;
}
}
}
}
}
}
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container > li > span {
border-bottom: solid 1px #e9e9e9;
.side-nav .side-menu {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li {
min-height: 72px;
.side-nav .side-menu ul {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span {
height: 72px;
display: inline-flex;
align-items: center;
.side-nav .side-menu ul li {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span:hover span.fancytree-title, .side-nav .side-menu ul.fancytree-plain.fancytree-container li > span:active span.fancytree-title {
color: #3c3c3c;
background-color: transparent;
border: none;
.side-nav .side-menu ul li span {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span > span {
color: #3c3c3c;
font-size: 15px;
.side-nav .side-menu > ul {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span > span.fancytree-custom-icon {
color: #98A7FA;
font-size: 24px;
.side-nav .side-menu > ul li span{
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span.fancytree-node.fancytree-active span.fancytree-title {
color: #3c3c3c;
background-color: transparent;
border: none;
.side-nav .side-menu > ul li.on {
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li > span.fancytree-node.fancytree-active:hover span.fancytree-title, .side-nav .side-menu ul.fancytree-plain.fancytree-container li > span.fancytree-node.fancytree-active:active span.fancytree-title {
color: #3c3c3c;
background-color: transparent;
border: none;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul {
padding: 0px;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul li {
min-height: 48px;
border-bottom: 1px solid #E1E4F9;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul li > span {
height: 48px;
width: -moz-fit-content;
width: fit-content;
padding-left: 1.5em;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul li > span span.fancytree-title {
font-size: 14px;
color: #4A5ED2;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul li:hover {
background-color: #E1E4F9;
}
.side-nav .side-menu ul.fancytree-plain.fancytree-container li ul li:hover span.fancytree-title {
color: #4A5ED2;
.side-nav .side-menu > ul > li > ul {
}
.side-nav .side-menu > ul > li > ul > li {
@ -140,34 +179,7 @@
}
.side-nav .side-menu > ul > li > ul > li > span {
color: #4A5ED2;
color: $blue-001;
font-size: 14px;
font-weight: 400;
}
.menu-icon {
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.menu-icon.base-icon {
background-image: url("../img/icon-shield.png");
}
.menu-icon.filed-icon {
background-image: url("../img/icon-industry.png");
}
.menu-icon.production-icon {
background-image: url("../img/icon-engineering.png");
}
.menu-icon.system-icon {
background-image: url("../img/icon-gear.png");
}
.menu-icon.insp-icon {
background-image: url("../img/icon-clipboard.svg");
width: 22px;
height: 22px;
margin-left: 0.6em;
}
.menu-icon.facility-icon {
background-image: url("../img/icon-cone.svg");
}

View File

@ -32,9 +32,7 @@
// 테이블
.tabulator-row{
background-color: transparent;
border: solid 0.5px $gray-002;
border-left: solid 0.5px transparent;
border-right: solid 0.5px transparent;
border-bottom: solid 1px $gray-002;
&:hover{
background-color: $gray-003;
@ -45,27 +43,12 @@
&.remove-row{
background-color: $red;
}
&.edit-row{
background-color: #d2ddff;
}
&.blank-row{
border: solid 0.5px red
}
.tabulator-cell{
border-right: solid 1px $gray-002;
// &.tabulator-editable{
// background-color: transparent ;
// &::after{
// content: "";
// }
// &:hover{
// background-color: $gray-003;
// }
// }
&.editable-cell, &.tabulator-editable{
// background-color: rgba(221, 221, 255, 0.548) ;
background-color: rgba(255, 253, 221, 0.548) ;
&::after{
content: "";
@ -103,7 +86,7 @@
&.tabulator-col-group{
.tabulator-col-group-cols{
border-top: solid 1px $gray-004;
border-top: solid 1px $gray-002;
}
}
@ -203,7 +186,7 @@
}
.tb-height-full .cont_hfix{
height: calc(100% - 44px);
height: calc(100% - 43px);
margin-top: 10px;
overflow: auto;
}
@ -255,13 +238,6 @@
}
.vue-table {
width: 3000px;
position: relative;
thead{
position: sticky;
left: 0;
top: 0;
}
th{
min-width: auto;
@ -285,12 +261,6 @@
&.width-200{
width: 200px;
}
&.width-230{
width: 230px;
}
&.width-800{
width: 800px;
}
.tabulator-col-group-cols{
display: none;
}
@ -331,26 +301,3 @@
}
}
.status-table.vue-table{
colgroup{
col{}
}
thead{
tr{
th{}
}
}
tbody{
tr{
td{
&.on{
background-color: $gray-002;
cursor: pointer;
}
}
}
}
}

View File

@ -1,99 +0,0 @@
.login-section {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.login-section .login-container {
display: flex;
gap: 80px;
}
.login-section .login-container .image-container {}
.login-section .login-container .image-container .image-box {
background: url('../img/login.png'), lightgray 50% / cover no-repeat;
min-height: 465px;
min-width: 400px;
height: 60vh;
width: 24vw;
border-radius: 15px;
margin-right: 10px;
background-position: center;
background-size: cover;
}
.login-section .login-container .form-container {
display: flex;
flex-direction: column;
justify-content: center;
gap: 40px;
}
.login-section .login-container .form-container .form-title p {
color: $blue-005;
font-family: 'GmarketSans';
font-size: 27px;
font-weight: 700;
margin: 0;
}
.login-section .login-container .form-container .login-form {
display: flex;
flex-direction: column;
gap: 24px;
min-width: 324px;
width: 20vw;
height: fit-content;
.login-check-field{
label{
font-family: 'Pretendard';
}
}
}
.login-section .login-container .form-container .login-form label {
font-weight: 300;
font-size: 14px;
color: black;
font-family: 'GmarketSans';
}
.login-section .login-container .form-container .login-form .login-put-field label {
display: block;
}
.login-section .login-container .form-container .login-form .login-put-field input {
width: calc(100% - 20px);
height: 40px;
border: solid 1px rgba(227, 227, 227, 1);
border-radius: 5px;
padding: 0 10px;
}
.login-section .login-container .form-container .login-form .login-check-field {
display: flex;
gap: 5px;
}
.login-section .login-container .form-container .login-form .login-check-field input {
width: 16px;
height: 16px;
margin: 0;
padding: 0;
}
.login-section .login-container .form-container .login-form .submit-btn {
width: 100%;
}
.login-section .login-container .form-container .login-form .submit-btn button {
width: 100%;
height: 40px;
font-family: 'GmarketSans';
font-weight: 400;
font-size: 15px;
}

View File

@ -1,6 +0,0 @@
.main-section .main-part {
background-image: url("../img/background.png");
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}

View File

@ -1,13 +0,0 @@
@import "common/color";
@import "common/common";
@import "component/header";
@import "component/sidebar";
@import "component/search";
@import "component/scrollbar";
@import "component/table";
@import "component/form";
@import "component/popup";
@import "page/login";
@import "page/main";

View File

@ -102,16 +102,38 @@ button {
color: #cf5b5b;
}
.disabled-btn, button[disabled] {
background-color: rgba(255, 255, 255, 0.973) !important;
color: #dddddd !important;
border-color: #e9e9e9 !important;
cursor: default !important;
.run-btn {
border: solid 2px #5b73cf;
color: white;
background-color: #5b73cf;
border-radius: 3px;
}
.disabled-btn:hover, button[disabled]:hover {
background-color: rgba(255, 255, 255, 0.973) !important;
color: #dddddd !important;
border-color: #e9e9e9 !important;
.run-btn:hover {
background-color: white;
color: #5b73cf;
}
.norun-btn {
border: solid 2px #f3da8f;
color: white;
background-color: #f3da8f;
border-radius: 3px;
}
.norun-btn:hover {
background-color: white;
color: #f3da8f;
}
.disabled-btn {
background-color: rgba(255, 255, 255, 0.973);
color: #dddddd;
border-color: #e9e9e9;
cursor: default;
}
.disabled-btn:hover {
background-color: rgba(255, 255, 255, 0.973);
color: #dddddd;
border-color: #e9e9e9;
}
.tab-btn {
@ -122,7 +144,6 @@ button {
width: 25%;
border-right: none;
cursor: pointer;
text-wrap: nowrap;
}
.tab-btn:hover {
background-color: #c7c7c7;
@ -345,10 +366,6 @@ button {
background-color: #d9d9d9;
}
.min-width-572 {
min-width: 572px;
}
header {
background: #1F2859;
display: flex;
@ -865,12 +882,6 @@ header .status-menu ul li a {
.vue-table {
width: 3000px;
position: relative;
}
.vue-table thead {
position: sticky;
left: 0;
top: 0;
}
.vue-table th {
min-width: auto;
@ -926,55 +937,31 @@ form {
form[name=frmWorkData] {
width: 80vw;
}
form[name=frmWorkData] .input-box {
position: relative;
}
form[name=frmWorkData] .input-box span {
position: absolute;
right: 15px;
top: 30%;
cursor: pointer;
}
form[name=frmWorkData] .input-box span i {
font-size: 1.2em;
color: #c7c7c7;
}
form[name=frmWorkData] > div {
width: 100%;
}
form[name=frmWorkData] > div.form-button-container {
height: -moz-fit-content;
height: fit-content;
padding: 10px 0px;
height: 80px;
border-radius: 5px;
border: 1px solid #e9e9e9;
background: #FAFAFA;
display: flex;
align-items: center;
width: 100%;
padding: 0 20px;
box-sizing: border-box;
}
form[name=frmWorkData] > div.form-button-container .form-button-box button {
border-radius: 50px;
border: solid 2px #4A5ED2;
color: #4A5ED2;
font-size: 1.1em;
font-weight: 600;
background-color: white;
min-width: 140px;
padding: 10px 14px;
text-wrap: nowrap;
}
form[name=frmWorkData] > div.form-button-container .form-button-box button:hover, form[name=frmWorkData] > div.form-button-container .form-button-box button.on {
background-color: #4A5ED2;
color: white;
form[name=frmWorkData] > div.form-button-container button {
width: 150px;
height: 40px;
}
form[name=frmWorkData] > div.form-contents .info-container {
min-height: 510px;
height: 80vh;
height: -moz-fit-content;
height: fit-content;
width: 50%;
}
form[name=frmWorkData] > div.form-contents .detail-container {
min-height: 510px;
height: 80vh;
height: 510px;
width: 50%;
overflow: hidden;
}
@ -986,7 +973,6 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .f
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header textarea {
height: 100px;
resize: none;
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .form-header .add-btn {
margin-right: 10px;
@ -1000,12 +986,6 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .t
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .tab-menu {
width: 100%;
height: -moz-fit-content;
height: fit-content;
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .tab-menu li {
height: 34px;
box-sizing: border-box;
}
form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .table-box .table-title {
width: 99%;
@ -1020,15 +1000,14 @@ form[name=frmWorkData] > div.form-contents .detail-container .detail-contents .t
form[name=frmWorkData] > div.form-contents .detail-container .height-full {
height: 100% !important;
}
form[name=frmWorkData] > div.form-contents .detail-container .height-93 {
height: 93% !important;
form[name=frmWorkData] > div.form-contents .detail-container .height-89 {
height: 89% !important;
}
form[name=frmWorkData] > div.form-contents .detail-container .height-half {
height: calc(100% - 220px) !important;
}
form[name=frmWorkData] > div.form-contents .detail-container .round-tab-box {
width: calc(100% - 120px);
overflow: auto;
}
form[name=frmFacility] {
width: 800px;
@ -1186,6 +1165,8 @@ form .btnFindAddr:hover {
font-size: 14px;
max-width: -moz-max-content;
max-width: max-content;
min-width: 500px;
min-height: 531px;
padding: 24px;
position: relative;
word-break: break-word;
@ -1202,7 +1183,6 @@ form .btnFindAddr:hover {
}
#awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup {
height: 500px;
min-width: 500px;
overflow: hidden;
}
#awn-popup-wrapper .awn-popup-body .awn-popup-confirm.custom-popup.free-height {

File diff suppressed because one or more lines are too long

View File

@ -11,11 +11,11 @@ $later = date('Y-m-d', strtotime('+14 days'));
//if( !$GLOBALS['_Umem']['member_id'] ) {
// move_page(_SVC_URL_, $GLOBALS['_Auth_']['deny_view']);
//}
//접근 권한(조회) 불가 처리
if( !$GLOBALS['_Auth_']['menuObj']->hasMenuAuth("R", $GLOBALS['_Auth_']['cate_id']) ){
hback($GLOBALS['_Auth_']['deny_view']);
}
//
////접근 권한(조회) 불가 처리
//if( !$GLOBALS['_Auth_']['menuObj']->hasMenuAuth("R", $GLOBALS['_Auth_']['cate_id']) ){
// hback($GLOBALS['_Auth_']['deny_view']);
//}
$menu_hist = array();
if( $GLOBALS['_Auth_']['menuObj'] ){

View File

@ -26,7 +26,7 @@ const tb_custom_editor = {
return editor;
},
upper: function (cell, onRendered, success, cancel) {
upper: function(cell, onRendered, success, cancel) {
// input 요소 생성
var input = document.createElement("input");
input.setAttribute("type", "text");
@ -68,85 +68,87 @@ const tb_custom_editor = {
return input;
},
onlyNumber: function (cell, onRendered, success, cancel) {
onlyNumber: function(cell, onRendered, success, cancel){
// 입력 요소 생성
const input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function () {
input.focus();
input.style.height = "100%";
onRendered(function(){
input.focus();
input.style.height = "100%";
});
function onChange() {
if (input.value.match(/^\d*$/)) {
// 숫자만 허용
success(input.value);
} else {
input.value = input.value.replace(/[^0-9]/g, "");
}
function onChange(){
if(input.value.match(/^\d*$/)){ // 숫자만 허용
success(input.value);
}else{
input.value = input.value.replace(/[^0-9]/g, '');
}
}
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange();
}
if (e.keyCode == 27) {
cancel();
}
input.addEventListener("keydown", function(e){
if(e.keyCode == 13){
onChange();
}
if(e.keyCode == 27){
cancel();
}
});
return input;
},
},
time: function (cell, onRendered, success, cancel) {
// 입력 요소 생성
const input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
time: function(cell, onRendered, success, cancel){
// 입력 요소 생성
const input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function () {
onRendered(function(){
input.focus();
input.select();
input.style.height = "100%";
});
});
// 변경사항이 완료되면 호출될 함수
function onChange() {
if (input.value.length === 5) {
// 'HH:mm' 형식 확인
success(input.value);
console.log(cell.getValue());
} else {
cancel();
}
// 변경사항이 완료되면 호출될 함수
function onChange(){
if (input.value.length === 5) { // 'HH:mm' 형식 확인
success(input.value);
console.log(cell.getValue())
} else {
cancel();
}
}
// 입력 이벤트 처리
input.addEventListener("input", function(){
var value = input.value.replace(/[^0-9]/g, ''); // 숫자만 입력 받음
// 입력 이벤트 처리
input.addEventListener("input", function () {
var value = input.value.replace(/[^0-9]/g, ""); // 숫자만 입력 받음
if (value.length > 2){
value = value.substring(0, 4); // 최대 4자리
input.value = value.replace(/(\d{2})(\d{1})/, '$1:$2');
};
});
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function(e){
if(e.keyCode == 13){
onChange();
}
if(e.keyCode == 27){
cancel();
}
});
return input;
},
if (value.length > 2) {
value = value.substring(0, 4); // 최대 4자리
input.value = value.replace(/(\d{2})(\d{1})/, "$1:$2");
}
});
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange();
}
if (e.keyCode == 27) {
cancel();
}
});
return input;
},
};
const tb_custom_formatter = {
@ -159,14 +161,11 @@ const tb_custom_formatter = {
return tgt.getValue();
},
time: function (cell, formatterParams, onRendered) {
return cell
.getValue()
.padStart(4, "0")
.replace(/(\d{2})(\d{2})/, "$1:$2");
time: function(cell, formatterParams, onRendered) {
return cell.getValue().padStart(4, '0').replace(/(\d{2})(\d{2})/, '$1:$2');
},
diffTitme: function (cell, formatterParams, onRendered) {
diffTitme: function(cell, formatterParams, onRendered){
let startTime = cell.getRow().getCell("OPER_ST_TM").getValue();
let endTime = cell.getRow().getCell("OPER_ED_TM").getValue();
if (startTime && endTime) {
@ -174,74 +173,69 @@ const tb_custom_formatter = {
let end = luxon.DateTime.fromFormat(endTime, "HH:mm");
// 날짜가 반전되는 경우를 처리 (예: 밤샘)
if (end < start) {
end = end.plus({ days: 1 });
end = end.plus({ days: 1 });
}
// 시간 차이 계산
let duration = end.diff(start, "minutes");
let duration = end.diff(start, 'minutes');
return duration.minutes; // 분 단위로 반환
} else {
return ""; // Return empty string if either time is missing
return ""; // Return empty string if either time is missing
}
},
}
};
const tb_custom_validator = {
onlyString: function (cell, value, parameters) {
onlyString: function(cell, value, parameters){
const regex = /^[가-힣A-Za-z\s]+$/;
return regex.test(value);
},
onlyEnglish: function (cell, value, parameters) {
onlyEnglish: function(cell, value, parameters){
const regex = /^[A-Za-z\s]+$/;
return regex.test(value);
},
stringNumeric: function (cell, value, parameters) {
stringNumeric: function(cell, value, parameters){
const regex = /^[가-힣ㄱ-ㅎㅏ-ㅣA-Za-z0-9\/\-\_\s]+$/;
return regex.test(value);
},
};
}
}
const formFormat = {
telInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
telInput: function(input){
let formattedNumber = input.value.replace(/[^0-9]/g, ''); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
if (formattedNumber.length > 10) {
formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 7) +
"-" +
formattedNumber.slice(7);
if(formattedNumber.length > 10) {
formattedNumber = formattedNumber.slice(0, 3) + '-' + formattedNumber.slice(3, 7) + '-' + formattedNumber.slice(7);
} else {
formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 6) +
"-" +
formattedNumber.slice(6);
formattedNumber = formattedNumber.slice(0, 3) + '-' + formattedNumber.slice(3, 6) + '-' + formattedNumber.slice(6);
}
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
},
inNumInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
inNumInput: function(input){
let formattedNumber = input.value.replace(/[^0-9]/g, ''); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
formattedNumber =
formattedNumber.slice(0, 6) + "-" + formattedNumber.slice(6, 13);
formattedNumber = formattedNumber.slice(0, 6) + '-' + formattedNumber.slice(6,13);
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
},
alphanumeric: function (input) {
input.value = input.value.toUpperCase().replace(/[^A-Z0-9]/g, "");
alphanumeric:function(input){
input.value = input.value.toUpperCase().replace(/[^A-Z0-9]/g, '');
},
submitValidate: function () {
submitValidate: function(){
let isValid = true;
return isValid;
},
};
}
}

View File

@ -151,38 +151,6 @@ class CreatePopup2 {
},
});
};
setData(e,tgt){
let row = tgt._row;
if( this.tabrow ){
let uptjson = {_STATUS_:this.tabrow.getData()['_STATUS_']||'U'};
Object.keys(this.columns).forEach( key => {
// if(!row.data[this.columns[key]]){
// row.data[this.columns[key]] = row.data[this.columns[key].replace(/[A-Z]+_/, "")]
// }
// uptjson[this.columns[key]] = row.data[this.columns[key]]; // 직접 할당
uptjson[key] = row.data[this.columns[key]]; // 직접 할당
// console.log(key)
} );
this.tabrow.update(uptjson);
}else{
Object.keys(this.columns).forEach( key => {
document.querySelector("#"+this.columns[key]).value = row.data[key];
})
}
};
/*
* @Overview 테이블 선택 함수
* @Parameter 이벤트, 타겟
*/
dbClick(e, tgt) {
let rowData = tgt._row.data
this.setData(e, tgt);
console.log(tgt);
this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}
}

View File

@ -262,9 +262,8 @@ class CreatePopup{
*/
dbClick(e, tgt) {
let rowData = tgt._row.data
this.setData(e, tgt);
console.log(tgt);
this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});

View File

@ -43,5 +43,5 @@ const varsIO_TYPE_FIN = <?=json_encode($GLOBALS['_IO_TYPE_FIN']?:Array())?>;
const varsNCR_CD = <?=json_encode($GLOBALS['_NCR_CD']?:Array())?>;
const varsTASK_TYPE = <?=json_encode($GLOBALS['_TASK_TYPE']?:Array())?>;
const varsSTOP_CD = <?=json_encode($GLOBALS['_STOP_CD']?:Array())?>;
const varsDEF_CD = <?=json_encode($GLOBALS['_DEF_CD']?:Array())?>;
const varsRSLT_GRP = <?=json_encode($GLOBALS['_RSLT_GRP']?:Array())?>;
const varsDEF_CD = <?=json_encode($GLOBALS['_DEF_CD']?:Array())?>;
const varsRSLT_GRP = <?= json_encode($GLOBALS['_RSLT_GRP'] ?: array()) ?>;

View File

@ -70,7 +70,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="table-container">
<div class="inner-container flexcol gap20">
<div class="sub-container flexrow flex-1 gap20">
<div class="flexrow flex-1 gap20">
<div class="table-box flex-1" id="main_tab">
<!-- 테이블 헤더 (제목, 추가, 삭제, 저장) -->
<div class="table-title">

View File

@ -654,8 +654,7 @@ class Tb_insp_list_class {
formatter: tb_common_funtions.formatterCheckboxIcon,
formatterParams: { checkval: "Y" },
},
{ field: 'OP_SEQ', formatter: "rownum", title: "NO", width: 50 },
{ field: 'OP_CD', title: "공정", width: 80 },
{ formatter: "rownum", title: "NO", width: 50 },
{
field: "INSP_ITEM",
title: "검사항목",
@ -804,17 +803,15 @@ class Tb_insp_list_class {
const selectData = Tb_insp_list.tbList.getSelectedData()[0];
Tb_insp_reg.addRow(
Tb_insp_reg.tbList.addRow(
{
OP_CD : selectData.OP_CD,
OP_SEQ : selectData.OP_SEQ,
INSP_ITEM : selectData.INSP_ITEM,
INSP_SEQ : selectData.INSP_SEQ,
SPEC_VAL : selectData.SPEC_VAL,
TOL_UPPER : selectData.TOL_UPPER,
TOL_LOWER : selectData.TOL_LOWER,
INSP_TOOL : selectData.INSP_TOOL,
}, selectData.INSP_SAMPL_QTY
}
);
});
});
@ -977,13 +974,11 @@ class Tb_insp_reg_class {
* @Parameter 없음
* @function 기본키, _STATUS_:I 값을 넣은 추가
*/
addRow(data, qty) {
this.qty = qty;
const rows = this.tbList.getRows();
addRow() {
this.tbList.addRow({
...data,
INSP_SEQ : rows.length + 1
_STATUS_: "I",
INSP_ITEM: this.code,
시료번호: this.시료번호,
});
}
@ -1101,9 +1096,6 @@ class Tb_insp_reg_class {
title: i,
width: 80,
editor:"input",
editable: (cell)=>{
return i<=this.qty
},
formatter: "money",
formatterParams: {
decimal: ".",
@ -1130,32 +1122,14 @@ class Tb_insp_reg_class {
formatter: tb_common_funtions.formatterCheckboxIcon,
formatterParams: { checkval: "Y" },
},
{ field: "OP_SEQ", title: "공순", width: 80 },
{ field: "OP_CD", title: "공정", width: 80 },
{ formatter: "rownum", title: "NO", width: 50 },
{ field: "INSP_ITEM", title: "검사항목", width: 100 },
{ field: "INSP_SEQ", title: "검사회차", width: 80 },
/* 추가할때마다 값이 입력된 행이 추가된다? */
{ field: "SPEC_VAL", title: "기준값", width: 80,
formatter: "money",
formatterParams: {
decimal: ".",
precision: 0,
},
},
{ field: "TOL_UPPER", title: "상한치", width: 80,
formatter: "money",
formatterParams: {
decimal: ".",
precision: 0,
},
},
{ field: "TOL_LOWER", title: "하한치", width: 80, formatter: "money",
formatterParams: {
decimal: ".",
precision: 0,
},
},
{ field: "INSP_TOOL", title: "측정기", width: 80, editor: "list", cssClass:"user-list" },
/* 추가할때마다 값이 입력된 행이 추가된다. */
{ field: "SPEC_VAL", title: "기준값", width: 80 },
{ field: "TOL_UPPER", title: "상한치", width: 80 },
{ field: "TOL_LOWER", title: "하한치", width: 80 },
{ field: "INSP_TOOL", title: "측정기", width: 80, editor: "editor" },
{
field: "INSP_TOOL",
title: "측정치",
@ -1232,7 +1206,12 @@ class Tb_insp_reg_class {
this.cellEdited && this.cellEdited(cell);
});
// 추가
["click", "keypress"].forEach((evt) => {
this.addBtn.addEventListener(evt, () => {
this.addRow && this.addRow();
});
});
// 삭제
["click", "keypress"].forEach((evt) => {
this.removeBtn.addEventListener(evt, () => {
@ -1244,7 +1223,7 @@ class Tb_insp_reg_class {
}
/*
* @Overview 파일 업로드
* @Overview 오더별 검사항목
*/
class Tb_file_upload_class {
constructor(container) {

View File

@ -1,11 +1,5 @@
<?php
$cate_id = "CNT_CT_WORKER";
/*
* @Overview 작업자별 가공시간
* @History 2024-04-22 / 최승연 / 최초작성
*/
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
include_once _SVC_INC_PATH_ . "/auth_check.php";
include_once _HOME_INC_PATH_ . "/ajax_init.php";
@ -18,13 +12,13 @@ if (!_notAuth("R")) {
case 'getWoOperList':
$squl = "USP_P_CNT_CT_WORKER_S10";
$squl = "USP_P_WO_OPER_RSLT_S20";
$params = array(
"P_EMP_NO" => $_REQUEST["EMP_NO"] ?: "",
"P_EMP_NM" => $_REQUEST["EMP_NM"] ?: "",
"P_ST_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
"P_START_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
);
$rst = $baseObj->DB->exec($squl, $params);

View File

@ -32,6 +32,7 @@ class Tb_main_class {
}
}
data.mode = mode
console.log(data)
// let USEFLAG = document.getElementById("USE_FLG").checked?"Y":"N"; //사용여부
ajax_json({
url: this.ajaxUrl,
@ -42,11 +43,10 @@ class Tb_main_class {
let originData = data.data;
originData = originData.map(el=>{
// 대기시간!!!!!!!! 변경할것
el[`REAL_RUN_TM_${el['WORK_DT']}`] = el['REAL_RUN_TM']
el[`REAL_RUN_TM_${el['WRK_DT']}`] = el['REAL_RUN_TM']
return el;
});
console.log(data.data);
console.log(originData);
originData = originData.reduce((acc, curr)=>{
const key = curr.EMP_NO + curr.WRK_TEAM;

View File

@ -13,11 +13,11 @@ if (!_notAuth("R")) {
case 'getDefOrderList':
$squl = "USP_P_CNT_DEF_WO_S10";
$squl = "USP_P_DEF_RSLT_S10";
$params = array(
"P_ITEM_GRP" => $_REQUEST["ITEM_GRP"] ?: "",
"P_ST_DATE" => $_REQUEST["date_st"],
"P_START_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
);
$rst = $baseObj->DB->exec($squl, $params);

View File

@ -48,7 +48,7 @@ class Tb_main_class {
});
originData = originData.reduce((acc, curr)=>{
const key = curr.WO_NO ;
const key = curr.WO_NO;
if(!acc[key]){
acc[key] = {...curr};
@ -197,7 +197,7 @@ setFilter() {
// formatterParams: { checkval: "Y" },
// },
{ formatter: "rownum", title: "NO", width: 50 },
{ field: "WO_NO", title: "오더번호", width: 100 ,visible : false},
{ field: "WO_NO", title: "오더번호", width: 100 },
{ field: "ITEM_CD", title: "품목", width: 100,},
{ field: "ITEM_GRP", title: "품목그룹", width: 100,},
...this.getDate()

View File

@ -15,7 +15,7 @@ if(!_notAuth("R")) {
// 생산오더 리스트 조회
case 'getDefectWorker':
$sql = "USP_P_CNT_DEF_EMP_S10";
$sql = "USP_P_WO_DEF_RSLT_S20";
$params = array(
"WRK_EMP_NO" => $_REQUEST['worker_pop'] ?: "",
"WRK_EMP_NM" => $_REQUEST['sub_worker_pop'] ?: "",

View File

@ -198,7 +198,7 @@ class Tb_main_class {
// },
// { formatter: "rownum", title: "NO", width: 50 },
{ field: "WRK_TEAM", title: "소속", width: 100 },
{ field: "EMP_NM", title: "성명", width: 100,},
{ field: "EMP_NO", title: "성명", width: 100,},
...this.getDate()
];
const commonFieldData = {

View File

@ -13,10 +13,10 @@ if (!_notAuth("R")) {
case 'getFacltCtList':
$squl = "USP_P_CNT_FACLT_CT_S10";
$squl = "USP_P_FACLT_OPER_S20";
$params = array(
"P_ST_DATE" => $_REQUEST["date_st"],
"P_START_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
"P_FACLT_CD" => $_REQUEST["FACLT_CD"] ?: "",
"P_FACLT_NM" => $_REQUEST["FACLT_NM"] ?: "",

View File

@ -13,12 +13,12 @@ if (!_notAuth("R")) {
case 'getOperWtList':
$squl = "USP_P_CNT_OPER_WT_S10";
$squl = "USP_P_WO_OPER_S20";
$params = array(
"P_OP_CD" => $_REQUEST["OP_CD"] ?: "",
"P_OP_NM" => $_REQUEST["OP_NM"] ?: "",
"P_ST_DATE" => $_REQUEST["date_st"],
"P_START_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
);
$rst = $baseObj->DB->exec($squl, $params);

View File

@ -13,7 +13,7 @@ if (!_notAuth("R")) {
case 'getFacltOperList':
$squl = "USP_P_CNT_PROD_FACLT_S10";
$squl = "USP_P_FACLT_OPER_S30";
$params = array(
"P_ST_DATE" => $_REQUEST["date_st"],

View File

@ -63,7 +63,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- <button class="point-btn" id="item_ex_down">엑셀다운</button>
<button class="point-btn" id="item_ex_load">엑셀업로드</button> -->
<button class="point-btn" id="filter_btn">조회</button>
<!--<button class="point-btn disabled-btn" id="put_item" disabled>저장</button>-->
<button class="point-btn disabled-btn" id="put_item" disabled>저장</button>
</div>
</div>
<!-- 조회 저장 버튼 종료 // -->

View File

@ -19,11 +19,12 @@ if (!_notAuth("R")) {
case 'getProdList':
$squl = "USP_P_CNT_PROD_WORKER_S10";
$squl = "USP_P_PRD_AMT_S10";
$params = array(
"P_ST_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
// "P_ITEM_GRP" => $_REQUEST["ITEM_GRP"] ?: "",
"P_START_DATE" => $_REQUEST["date_st"],
"P_ED_DATE" => $_REQUEST["date_ed"],
);
$rst = $baseObj->DB->exec($squl, $params);

View File

@ -218,14 +218,9 @@ setFilter() {
// console.log(avgValue);
// console.log(parseInt(realKeys.length));
let hap = Object.values(otherData).filter(v => {return v !== undefined && v !== null});
let avgValue = hap.reduce((a, b) => parseInt(a) + parseInt(b), 0) / hap.length;
console.log(avgValue);
console.log();
if(avgValue === NaN){
return false;
}
return avgValue;
}
/*
@ -244,9 +239,9 @@ setFilter() {
{ field: "DEPT_NM", title: "소속", width: 100 },
{ field: "EMP_NM", title: "작업자", width: 100,},
{ field: "MONTH_AMOUNT", title: "월합계", width: 100, bottomCalc: "sum", formatter:"money", bottomCalcFormatter:"money", bottomCalcFormatterParams:{ precision:0 }, formatterParams:{ precision:0 }},
{ field: "DAY_AVG", title: "일평균", width: 100, bottomCalc: "sum",formatter:function(cell){
return _this.dayAvg(cell) ? _this.dayAvg(cell): "";
}, bottomCalcFormatter:"money",formatterParams:{ precision:0 }, bottomCalcFormatterParams:{ precision:0 }
{ field: "DAY_AVG", title: "일평균", width: 100, bottomCalc: "sum", bottomCalcFormatter:"money", bottomCalcFormatterParams:{ precision:0 },formatter:function(cell){
return _this.dayAvg(cell);
},
},
...this.getDate()
];

View File

@ -63,7 +63,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- <button class="point-btn" id="item_ex_down">엑셀다운</button>
<button class="point-btn" id="item_ex_load">엑셀업로드</button> -->
<button class="point-btn" id="filter_btn">조회</button>
<!--<button class="point-btn disabled-btn" id="put_item" disabled>저장</button>-->
<button class="point-btn disabled-btn" id="put_item" disabled>저장</button>
</div>
</div>
<!-- 조회 저장 버튼 종료 // -->

View File

@ -90,7 +90,7 @@ if(!_notAuth("R")) {
$params = array_merge($params, Array(
"WO_NO" => $data['WO_NO']?:"",
"ORD_STATUS" => $data['ORD_STATUS'] == "Y"?"080":"",
"ORD_STATUS" => $data['ORD_STATUS'],
));
}
@ -108,36 +108,11 @@ if(!_notAuth("R")) {
}
break;
// 공정별 실적 조회
case 'getOrderList':
case "getOpList":
$sql = "USP_P_WO_OPER_RSLT_S30";
$sql = "USP_P_WO_S30";
$params = array(
"WO_NO" => $_REQUEST["WO_NO"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
);
$rst = $baseObj->DB->exec($sql, $params);
$row = array();
if ($rst) {
$retval['code'] = true;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
}
;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
break;
// 당일 오더완료내역 조회
case 'getOrderEndList':
$sql = "USP_P_WO_S40";
$params = array(
"date_st" => $_REQUEST['date_st'] ?: "",
"order_pop" => $_REQUEST['order_pop'] ?: "",
);
$rst = $baseObj->DB->exec($sql, $params);
@ -156,6 +131,7 @@ if(!_notAuth("R")) {
break;
}
}

View File

@ -39,23 +39,7 @@ class Tb_order_class {
success: (data) => {
console.log(data.code);
if(data.code) {
let Data = data.data
for(let tempData in Data){
if(Data[tempData].ORD_STATUS === "080"){
Data[tempData].ORD_STATUS = "Y"
}
// Data[tempData].ORD_STATUS =
// console.log(Data[tempData]);
}
// if(Data.ORD_STATUS = "080"){
// tempData.ORD_STATUS = "Y"
// console.log(tempData);
// }
this.tbList.setData(Data);
this.tbList.setData(data.data);
}else{
kuls_alert(data.mesg);
}
@ -122,17 +106,9 @@ class Tb_order_class {
* @function 선택된 모든 변경
*/
rowClick(e, tgt) {
let _this = this;
console.log(tgt);
let clickRow = tgt._row;
let clickData = clickRow?.data;
Tb_report.rowData = clickData;
Tb_report.getMainList();
if (tgt.isSelected()) {
tgt.deselect();
this.clearRemove(tgt);
// this.clearRemove(tgt);
} else {
this.tbList.deselectRow();
tgt.select();
@ -147,11 +123,7 @@ class Tb_order_class {
*/
cellClick(e, tgt) {
switch (tgt.getField()) {
case "ORD_STATUS":
// console.log(tgt.getValue());
tgt.setValue(tgt.getValue() == "Y" ? "" : "Y");
// this.clearRemove(tgt.getRow())
break;
default:
this.rowClick && this.rowClick(e, tgt);
break;
@ -175,9 +147,12 @@ class Tb_order_class {
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st');
return false;
}
console.log(this.tbList.getData().filter(row=> row._STATUS_));
const blankObj = this.tbList.getRows().filter(row => {
return Object.keys(row._row.data).filter(key => key !== '_STATUS_' && key !== 'USE_FLG').every(key => {
const value = row._row.data[key];
return (value === undefined || value === '');
});
@ -237,7 +212,7 @@ class Tb_order_class {
// field 정의
const fields = [
{formatter:"rownum", title:"NO", width:50},
{field:"ORD_STATUS", title:"완료", width:80, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval : "Y" },},
{field:"ORD_STATUS", title:"완료", width:80, cssClass: "editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: { checkval: "Y" },},
{field:"WO_NO", title:"생산오더", width:100},
{field:"ITEM_CD", title:"품목", width:100},
{field:"DRAW_NO", title:"도면번호", width:200},
@ -253,13 +228,6 @@ class Tb_order_class {
precision:0
}
},
{field:"PRD_QTY", title:"실적 수량", width:80,
formatter:"money",
formatterParams:{
decimal:".",
precision:0
}
},
{field:"UNIT", title:"단위", width:50},
{field:"", title:"", width:50},
{field:"", title:"비고", width: 300},
@ -303,7 +271,6 @@ class Tb_order_class {
filterBtn.addEventListener(evt, () => {
// setFilter 또는 setData
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st');
Tb_daily.getMainList('getOrderEndList','date_st');
});
});
// 저장
@ -319,44 +286,35 @@ class Tb_order_class {
class Tb_report_class {
constructor(container) {
let _this = this;
this.ajaxUrl = "./mng_order_result.ajax.php";
this.code =""; // 품목 코드
this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table")
// this.upBtn = this.container.querySelector(".up-btn") || ""
// this.downBtn = this.container.querySelector(".down-btn") || ""
// this.addBtn = this.container.querySelector(".add-btn")
// this.removeBtn = this.container.querySelector(".remove-btn")
_this.rowData ="";
// _this.itemcd ="";
}
// tableBuild 되었을때 getManList
getMainList() {
let _this = this;
if(_this.rowData == undefined){
return false;
}
console.log(_this.rowData);
// console.log(Tb_item.tbList.getSelectedData()[0]);
let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
ajax_json({
url: this.ajaxUrl,
data: { mode: "getOpList", WO_NO :_this.rowData?.WO_NO, ITEM_CD: _this.rowData?.ITEM_CD },
success: (data) => {
this.tbList.setData(data.data);
getMainList(code) {
// let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
// this.code = code;
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
// this.tbList.clearAlert();
// this.setFilter();
},
});
// ajax_json({
// url: this.ajaxUrl,
// data: { mode: "", PR_CD: this.code},
// success: (data) => {},
// error: (req, status, err) => {
// kuls_alert(err.message);
// },
// complete: () => {
// // window.clearTimeout(talert);
// // this.tbList.clearAlert();
// // this.setFilter();
// },
// });
}
setFilter() {}
@ -423,18 +381,18 @@ class Tb_report_class {
const fields = [
// 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고
{formatter:"rownum", title:"NO", width:50},
{field:"OP_SEQ", title:"공순", width:80},
{field:"OP_CD", title:"공정", width:80},
{field:"", title:"공순", width:80},
{field:"", title:"공정", width:80},
{title:"설비", cssClass:"width-150",
columns:[
{field:"FACLT_CD", title:"", width:50},
{field:"FACLT_NM", title:"", width:100},
{field:"", title:"", width:50},
{field:"", title:"", width:100},
]
},
{field:"EMP_NM", title:"작업자", width:100},
// {field:"ORD_QTY", title:"지시수량", width:80},
{field:"PRD_QTY", title:"실적수량", width:80},
// {field:"DEF_QTY", title:"불량수량", width:80},
{field:"", title:"작업자", width:100},
{field:"", title:"지시수량", width:80},
{field:"", title:"실적수량", width:80},
{field:"", title:"불량수량", width:80},
{field:"", title:"종료시간", width:150},
];
@ -489,69 +447,22 @@ class Tb_daily_class {
// this.removeBtn = this.container.querySelector(".remove-btn")
}
/*
* @Overview 데이터 조회 함수
* @Parameter mode : AJAX 비동깉 통신 사용할 STRING , ...test : 조회할 INPUT 태그의 ID
*/
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]]
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) => {
console.log(data.code);
if(data.code) {
let Data = data.data
for(let tempData in Data){
if(Data[tempData].ORD_STATUS === "080"){
Data[tempData].ORD_STATUS = "Y"
}
// Data[tempData].ORD_STATUS =
// console.log(Data[tempData]);
}
// if(Data.ORD_STATUS = "080"){
// tempData.ORD_STATUS = "Y"
// console.log(tempData);
// }
this.tbList.setData(Data);
}else{
kuls_alert(data.mesg);
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
// window.clearTimeout(talert);
this.tbList.clearAlert();
// this.setFilter();
// this.tbList.getRows().forEach(row=>{
// row.getCell("WO_NO").getElement().addEventListener("click",(e)=>{
// this.rowClick(e,row);
// })
// });
},
});
return true;
// tableBuild 되었을때 getManList
getMainList(code) {
// let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
// ajax_json({
// url: this.ajaxUrl,
// data: { mode: "" , PROCESS: this.code},
// success: (data) => {},
// error: (req, status, err) => {
// kuls_alert(err.message);
// },
// complete: () => {
// // window.clearTimeout(talert);
// // this.tbList.clearAlert();
// // this.setFilter();
// },
// });
}
setFilter() {}
@ -617,14 +528,14 @@ class Tb_daily_class {
// field 정의
const fields = [
{formatter:"rownum", title:"NO", width:50},
{field:"WO_NO", title:"생산오더", width:100},
{field:"ITEM_CD", title:"품목", width:100},
// {field:"", title:"오더번호", width:200},
{field:"BP_CD", title:"거래처", width:150},
{field:"DLVY_REQ_DT", title:"납기일", width:100},
{field:"ORD_TYPE", title:"지시 구분", width:100},
{field:"ORD_QTY", title:"지시 수량", width:100},
{field:"PRD_QTY", title:"물량 수량", width:100},
{field:"", title:"생산오더", width:100},
{field:"", title:"품목", width:100},
{field:"", title:"오더번호", width:200},
{field:"", title:"거래처", width:150},
{field:"", title:"납기일", width:100},
{field:"", title:"지시 구분", width:100},
{field:"", title:"지시 수량", width:100},
{field:"", title:"물량 수량", width:100},
{field:"", title:"최종공정</br>완료시간", width:100},
{field:"", title:"완료처리</br>시간", width:100},
];
@ -647,7 +558,7 @@ class Tb_daily_class {
// 데이터 불러오기
this.tbList.on("tableBuilt", () => {
this.getMainList('getOrderEndList','date_st');
this.getMainList('getOrderList','order_pop','order_product_pop','order_bp_pop','date_st');
});
// row 클릭 시에
this.tbList.on("rowClick", (e, tgt) => {

View File

@ -33,7 +33,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="order_product_pop">품목</label>
<div class="input-box">
<input type="text" id="order_product_pop">
<span onclick="popItem({'ITEM_CD':'order_product_pop'})"><?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?></span>
<?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?>
</div>
</div>
@ -41,7 +41,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="order_bp_pop">고객사</label>
<div class="input-box">
<input type="text" id="order_bp_pop">
<span onclick="popClient({'BP_CD':'order_bp_pop'})"><?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?></span>
<?php include _SVC_INC_PATH_ . '/img/popupIcon.php' ?>
</div>
</div>

View File

@ -118,7 +118,7 @@ class CreatePopup2 {
}
// 데이터 렌더링
getPopList(){
console.log("test");
console.log(this.columns);
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode: this.mode, columns : this.columns },
@ -137,18 +137,6 @@ class CreatePopup2 {
},
});
};
/*
* @Overview 테이블 선택 함수
* @Parameter 이벤트, 타겟
*/
dbClick(e, tgt) {
let rowData = tgt._row.data
this.setData(e, tgt);
console.log(tgt);
this.modal.delete();
// this.tabrow.updateData({[this.columns.tgt_name]:row.data['BIZ_AREA_NM']});
// tabrow.updateData({[tgt_id]:row.data['BIZ_AREA_CD'],[tgt_name]:row.data['BIZ_AREA_NM'],_STATUS_:tabrow.getData()['_STATUS_']||'U'});
}
}
@ -180,6 +168,5 @@ const popItemOper = function( columns, tabrow ){
});
Tb_modal.init();
}

View File

@ -256,8 +256,7 @@ if(!_notAuth("R")) {
"ORD_QTY" => $data['ORD_QTY'],
// "ORD_DT" => $data['ORD_DT']?:date("Y-m-d", time()),
// "ORD_DT" => date("Y-m-d", time()),
"WRK_QTY" => $data['WRK_QTY']?:"",
"WO_OP_AMT" => $data['WO_OP_AMT']?:"",
"ORD_TYPE" => $data['WRK_QTY']?:"",
"ORD_STATUS" => $data['PLANT_CD']?:"",
// "DLVY_REQ_DT" => date("Y-m-d", time()),
// "DLVY_REQ_DT" => $data['DLVY_REQ_DT']?:date("Y-m-d", time()),

View File

@ -109,7 +109,6 @@ class Tb_order_class {
let _this = this;
let clickRow = tgt._row;
let clickData = clickRow.data;
// Tb_process.prodData = clickData;
// Tb_check.prodData = clickData;
// Tb_check.getMainList(Tb_check.prodData);
@ -123,9 +122,6 @@ class Tb_order_class {
tgt.select();
}
if(document.getElementById("hidden_item_cd")?.value === clickData?.ITEM_CD){
return false;
}
Tb_process.getMainList();
}
@ -353,14 +349,6 @@ class Tb_order_class {
this.getMainList("getOrderList","order_date_st", "order_date_ed", "ITEM_CD"," ITEM_NM", "BP_CD", "BP_NM");
});
});
// 조회
["click", "keypress"].forEach((evt) => {
const copyBtn = document.querySelector("#copy_btn");
copyBtn.addEventListener(evt, () => {
Tb_process.copyRow();
});
});
// 저장
["click", "keypress"].forEach((evt) => {
const putBtn = document.querySelector("#put_btn");
@ -429,45 +417,7 @@ class Tb_process_class {
this.lastNum += 10;
this.tbList.addRow({ OP_SEQ : this.lastNum, WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" });
}
copyRow(){
let _this = this;
ajax_json({
url: "/ksvc/inc/common.ajax.php",
data: {mode: "getItemOperList", ITEM_CD: Tb_order.tbList.getSelectedData()[0].ITEM_CD },
success:( data ) => {
if( data.code ){
// console.log(data.data)
console.log(data.data);
let makingData =data.data
for(let temp in data.data){
if(this.lastNum == 0){
this.lastNum += 10;
_this.tbList.addRow({
OP_CD : makingData[temp].OP_CD,
OP_SEQ : makingData[temp].OP_SEQ ,
WO_OP_AMT : makingData[temp].WO_OP_AMT,
WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" });
}else{
this.lastNum += 10;
_this.tbList.addRow({
OP_CD : makingData[temp].OP_CD,
OP_SEQ : this.lastNum ,
WO_OP_AMT : makingData[temp].WO_OP_AMT,
WO_NO : Tb_order.tbList.getSelectedData()[0].WO_NO, _STATUS_: "I" });
}
}
}
console.log(this.lastNum);
},
error: (request, status, error)=>{
kuls_alert(error.message);
},
});
document.getElementById("hidden_item_cd").value = Tb_order.tbList?.getSelectedData()[0]?.ITEM_CD;
}
sortingRouting(){
let temArr = this.tbList.getData(); // 테이블 전체 데이터
@ -672,14 +622,13 @@ class Tb_process_class {
},
{formatter:"rownum", title:"NO", width:50},
{field:"OP_SEQ", title:"공순", width:100},
{field:"OP_CD", title:"공정", width:100,editor: "input"},
{field:"WO_OP_AMT", title:"공정 단가", width:80 ,editor: "input",
{field:"OP_CD", title:"공정", width:100,editor: "input"},
{field:"ORD_QTY", title:"지시 수량", width:80 ,editor: "input",
formatter: "money",
formatterParams: {
decimal:".",
precision:0
},
hozAlign: "right"
}
},
// {field:"", title:"준비시간</br>(분)", width:100},
// {field:"", title:"가공시간</br>(분)", width:100},

View File

@ -57,7 +57,6 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="input-box">
<label for="BP_NM"></label>
<input type="text" id="BP_NM" placeholder="거래처명">
<input type="hidden" id="hidden_item_cd">
</div>
</div>
</div>
@ -67,7 +66,6 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 -->
<div class="button-container">
<div class="button-box">
<button class="point-btn" id="copy_btn">편성</button>
<button class="point-btn" id="">SAP 조회</button>
<button class="point-btn" id="filter_btn">조회</button>
<button class="point-btn" id="put_btn">저장</button>

View File

@ -15,7 +15,7 @@ if (!_notAuth("R")) {
$params = array(
"date_st" => $_REQUEST["date_st"] ?: "",
"date_ed" => $_REQUEST["date_ed"] ?: "",
"WO_NO" => $_REQUEST["WO_NO_P"] ?: "",
"WO_NO" => $_REQUEST["WO_NO_P"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
"OP_CD" => $_REQUEST["OP_CD"] ?: "",
"FACLT_CD " => $_REQUEST["FACLT_CD_P"] ?: ""

View File

@ -154,6 +154,7 @@ class Tb_order_class {
*/
addRow() {
this.tbList.addRow({ _STATUS_: "I" });
this.saveButtonActive(false);
// this.orderModal();
}
/*
@ -162,7 +163,15 @@ class Tb_order_class {
* @function 선택된 모든 삭제
*/
saveButtonActive(boolean) {
if (boolean) {
document.getElementById("put_btn").classList.add("disabled-btn");
document.getElementById("put_btn").disabled = true;
} else {
document.getElementById("put_btn").classList.remove("disabled-btn");
document.getElementById("put_btn").disabled = false;
}
}
submitDateTime() {
let dateTimeValue = document.getElementById("MAKE_TM").value;
@ -170,55 +179,41 @@ class Tb_order_class {
console.log("서버로 보낼 날짜 및 시간: " + formattedDateTime);
}
removeRow() {
const selectedRows = this.tbList.getRows().filter(row=>{
return row.getData().check ==="Y"
const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기
// 선택된 각 행 삭제
selectedRows.forEach((row) => {
// STAUS D로 바꾸기
row.getData()._STATUS_ = row.getData()._STATUS_ == "I" ? null : "D";
const rowElement = row.getElement();
rowElement.classList.add("remove-row");
});
if(selectedRows.length > 0 ){
kuls_confirm("삭제","하시겠습니까?", ()=>{
// 선택된 각 행 삭제
selectedRows.forEach((row) => {
// STAUS D로 바꾸기
row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D";
const rowElement = row.getElement();
rowElement.classList.add("remove-row");
});
})
}else{
kuls_alert("삭제할 행을 선택해주세요.")
}
this.saveButtonActive(false);
}
/*
* @Overview 삭제 취소 함수
* @Parameter 삭제
* @function 클릭시 삭제 취소 & STATUS를 공란으로 변경
*/
clearRemove(tgt){
if(tgt._row.data._STATUS_ == "D"){
// console.log();
tgt._row.data._STATUS_ = "";
tgt._row.getElement().classList.remove("remove-row")
// const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기
}
}
// removeRow() {
// const selectedRows = this.tbList.getRows().filter(row=>{
// return row.getData().check ==="Y"
// });
// if(selectedRows.length > 0 ){
/*
* @Overview 테이블 수정 함수
* @Parameter
* @function 편집이 이후 저장될수 있도록 _STATUS_:U로 데이터 업데이트
*/
cellEdited(cell) {
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
}
// kuls_confirm("삭제","하시겠습니까?", ()=>{
// // 선택된 각 행 삭제
// selectedRows.forEach((row) => {
// // STAUS D로 바꾸기
// row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D";
// const rowElement = row.getElement();
// rowElement.classList.add("remove-row");
// });
// })
// }else{
// kuls_alert("삭제할 행을 선택해주세요.")
// }
// }
/*
* @Overview 테이블 선택 함수
@ -228,10 +223,14 @@ class Tb_order_class {
rowClick(e, tgt) {
if (tgt.isSelected()) {
tgt.deselect();
this.clearRemove(tgt)
this.updateBtn.classList.add("disabled-btn");
this.updateBtn.disabled = true;
//this.clearRemove(tgt)
} else {
this.tbList.deselectRow();
tgt.select();
this.updateBtn.disabled = false;
this.updateBtn.classList.remove("disabled-btn");
}
}
@ -263,18 +262,15 @@ class Tb_order_class {
DRAW_NO: 'DRAW_NO',
PRV_OP_CD: 'PRV_OP_CD',
ORD_QTY: 'ORD_QTY',
OP_WRK_QTY: 'OP_WRK_QTY',
MAKE_TM: 'MAKE_TM',
FACLT_CD: 'FACLT_CD',
FACLT_NM: 'FACLT_NM'
OP_WRK_QTY: 'OP_WRK_QTY'
},tgt.getRow())
break;
// case "FACLT_CD":
// popRegFacility({
// FACLT_CD: 'FACLT_CD',
// FACLT_NM:'FACLT_NM'
// },tgt.getRow())
// break;
case "FACLT_CD":
popRegFacility({
FACLT_CD: 'FACLT_CD',
FACLT_NM:'FACLT_NM'
},tgt.getRow())
break;
case "EMP_NM":
popWorker({
EMP_NO:'EMP_NO',
@ -293,6 +289,11 @@ class Tb_order_class {
// break;
}
}
// 셀 수정
cellEdited(cell) {
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
}
putData() {
const _this = this;
// 기본키 중복 확인 및 방지
@ -324,8 +325,9 @@ class Tb_order_class {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
this.tbList.clearAlert();
this.saveButtonActive(true);
this.updateBtn.disabled = false;
this.updateBtn.classList.remove("disabled-btn");
},
});
return true;
@ -346,23 +348,18 @@ class Tb_order_class {
* @Parameter 없음
*/
init() {
// field 정의
fields = [
const fields = [
// 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고
{ field:"check", title: "선택", width: 50, headerSort: false,formatter: tb_common_funtions.formatterCheckboxIcon,formatterParams: { checkval: "Y" },},
{ formatter: "rownum", title: "NO", width: 50 },
{ field: "WO_NO", title: "생산오더", width: 100,editor:tb_custom_editor.upper,
editable: (cell) => {
const val = cell.getData();
return val._STATUS_ === "I";
}, },
{ field: "WO_NO", title: "생산오더", width: 100,cssClass: "editable-cell" },
{ field: "WO_SEQ", width: 50, visible: false },
{ field: "RSLT_NO", width: 50, visible: false },
{ field: "ITEM_CD", width: 100, title: "품목"},
{ field: "ITEM_CD", width: 50, visible: false },
{ field: "DEF_NO", width: 50, visible: false },
{ field: "EMP_NO", width: 50, visible: false},
{ field: "ITEM_NM",title: "품목", width: 200,visible: false },
{ field: "ITEM_NM", visible: false },
{ field: "DRAW_NO", title: "도면번호", width: 200, hozAlign: "start" },
{ field: "OP_CD", title: "공정", width: 50 },
{ field: "OP_NM", title: "공정", width: 50, visible: false },
@ -370,7 +367,7 @@ class Tb_order_class {
title: "설비",
cssClass: "width-200",
columns: [
{ field: "FACLT_CD", width: 100 , },
{ field: "FACLT_CD", width: 100 ,cssClass: "editable-cell" },
{ field: "FACLT_NM", width: 100 },
]},
{ field: "ORD_QTY",
@ -397,24 +394,53 @@ class Tb_order_class {
title: "양품 수량",
width: 80,
formatter: "money",
hozAlign:"left",
formatterParams: { decimal: ",", precision: 0 },
editor: "input"
},
{
field: "RSLT_GRP",
visible: false,
},
{
field: "CODE_VAL",
title: "실적 그룹",
width: 80,
cssClass: "user-list editable-cell",
editor: "list",
editorParams: { values: varsRSLT_GRP },
formatter: tb_common_funtions.formatterSelect,
formatterParams:{ values : varsRSLT_GRP },
formatterParams:{ values : varsRSLT_GRP },
},
{ field: "EMP_NM", title: "작업자", width: 100 ,cssClass: "editable-cell"},
{ field: "MAKE_TM", title: "실적등록시간", width: 120 },
{ field: "WRK_DT", title: "실적일자",width: 120,},
{ field: "", title: "실적등록시간", width: 120,cssClass: "editable-cell" },
{ field: "", title: "실적일자",width: 120,},
// {
// field: "DEF_QTY",
// width: 100,
// formatter: "money",
// formatterParams: { decimal: ",", precision: 0 },
// visible:false
// },
// { field: "WRK_DT", title: "작업 일자", width: 80 }, //formatter mm-dd로
// {
// field: "ST_TM",
// title: "시작 시간",
// width: 120,
// },
// {
// field: "ED_TM",
// title: "종료 시간",
// width: 120,
// },
// {
// field: "",
// title: "가동 시간</br>(분)",
// width: 100,
// formatter: this.runningTime,
// },
];
const commonFieldData = {
headerSort: false,
@ -498,6 +524,15 @@ class Tb_order_class {
this.putData && this.putData();
});
});
//수정
["click", "keypress"].forEach((evt) => {
this.updateBtn.addEventListener(evt, () => {
this.orderModal(this.tbList.getSelectedRows()[0]._row);
});
});
// FORM 제출 클릭시
// document.querySelector("form[name=frmPrslt]").addEventListener("submit", orderPop.putData);
}
}
@ -516,15 +551,15 @@ Tb_order_report.init();
* @Overview 모달 추가 함수
*/
// function addFormRow() {
// document.querySelector(".add-row-container").innerHTML += `
// <div class="input-container flexrow gap06">
function addFormRow() {
document.querySelector(".add-row-container").innerHTML += `
<div class="input-container flexrow gap06">
// <div class="input-box flex-1">
// <p class="input-title"></p>
// <input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
// <input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
// </div>
<div class="input-box flex-1">
<p class="input-title"></p>
<input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
<input type="text" id="addRow" name="" class="form-control form-control-sm input-text"></input>
</div>
// </div>`;
// }
</div>`;
}

View File

@ -89,7 +89,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="button-container">
<div class="button-box">
<button class="point-btn" id="filter_btn">조회</button>
<button class="point-btn" id="put_btn">저장</button>
<button class="point-btn disabled-btn" id="put_btn">저장</button>
</div>
</div>
<!-- 조회 저장 버튼 종료 // -->
@ -113,7 +113,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<div class="table-title">
<p class="title">
생산 실적
<!-- <span> ※더블클릭하면 수정창이 열립니다.</span> -->
<span> ※더블클릭하면 수정창이 열립니다.</span>
</p>
<!-- 버튼 -->
@ -126,6 +126,10 @@ include_once _SVC_INC_PATH_ . "/header.php";
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
삭제
</button>
<button class="update-btn reverse-btn disabled-btn" disabled>
<?php include _SVC_INC_PATH_ . '/img/update.php' ?>
수정
</button>
</div>
<!-- 버튼 종료 // -->

View File

@ -4,10 +4,9 @@
class Tb_main_class {
constructor(container) {
let _this = this;
this.ajaxUrl = "./reg_plan.ajax.php";
this.tbList = "";
_this.lastGroupId = 0;
this.lastGroupId = 1;
this.container = document.querySelector(container);
this.table = this.container.querySelector(".hy-table");
// this.upBtn = this.container.querySelector(".up-btn") || "";
@ -16,101 +15,296 @@ class Tb_main_class {
this.removeBtn = this.container.querySelector(".remove-btn");
}
/*
* @Overview 생산계획등록
* @Parameter DATABASE로부터 받은 데이터
* @function DB 데이터 가공하여 바인딩.
*/
manageData(data) {
// console.log(data);
let _this = this;
let arr = new Array();
// let tempGRP = new Object();
// let tempQTY = new Object();
let tempArr = new Array();
const result = Object.groupBy(data.data, ({ SEQ_NO }) => SEQ_NO)
// for(let key in result){
//
// for (let i = 0; i <= result[key].length-1; i++) {
// let temp = result[key][i];
// let tempGRP = {};
// tempGRP['WRK_TEAM'] = temp.WRK_TEAM // 설비팀
// tempGRP['PLAN_FACLT_CD'] = temp.PLAN_FACLT_CD // 설비 코드
// tempGRP['PLAN_SEQ'] = temp.PLAN_SEQ // group id로 쓸 변수
// let date = temp.PLAN_DT.date.slice(0, 10);
// console.log(tempGRP['PLAN_SEQ']);
//
// if (temp?.AM_PLAN_QTY !== null) {
// tempGRP[`AM_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempGRP[`PM_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// if (temp?.NI_PLAN_QTY !== null) {
// tempGRP[`NI_PLAN_QTY_${date}`] = temp.ITEM_GRP
// }
// tempGRP['SEPER_ID'] = 'GRP';
// tempGRP['SEPER'] = '그룹';
// tempArr.push(tempGRP);
//
// }
//
//
// }
// const newObj2 = {};
// for (let i = 0; i < data.data.length; i++) {
// let temp = data.data[i]
// // console.log(temp);
// let tempGRP = {};
// let num = 0;
// let date = temp.PLAN_DT.date.slice(0, 10);
// tempGRP['WRK_TEAM'] = temp.WRK_TEAM
// tempGRP['PLAN_FACLT_CD'] = temp.PLAN_FACLT_CD
// tempGRP['PLAN_SEQ'] = temp.PLAN_SEQ
// tempGRP['DATE'] = date
// // if (temp?.AM_PLAN_QTY !== null) {
// // tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY
// // }
// // if (temp?.PM_PLAN_QTY !== null) {
// // tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY
// // }
// // if (temp?.NI_PLAN_QTY !== null) {
// // tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY
// // }
// if (temp?.AM_PLAN_QTY !== null) {
// tempGRP[`AM_PLAN_QTY`] = temp.AM_PLAN_QTY
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempGRP[`PM_PLAN_QTY`] = temp.PM_PLAN_QTY
// }
// // if (temp?.NI_PLAN_QTY !== null) {
// tempGRP[`NI_PLAN_QTY`] = temp.NI_PLAN_QTY
// // }
// tempGRP['SEPER_ID'] = 'PLAN';
// tempGRP['SEPER'] = '계획';
// console.log(tempGRP);
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
// tempArr2.push(tempGRP);
// }
for(let i=0; i<=Object.values(result).length; i++){
// console.log(Object.values(result)[]);
let makingITEM = Object.values(result)[i]?.map(function(rst){
let tempITEM ={};
let date = rst.PLAN_DT.date.slice(0, 10);
let arr = new Array();
tempITEM['SEQ_NO'] = rst.SEQ_NO
tempITEM['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
tempITEM['WRK_TEAM'] = rst.WRK_TEAM
tempITEM['SEPER'] = "그룹"
tempITEM[`AM_PLAN_QTY_${date}`] = rst.AMITEM
tempITEM[`PM_PLAN_QTY_${date}`] = rst.PMITEM
tempITEM[`NI_PLAN_QTY_${date}`] = rst.NIITEM
_this.lastGroupId = parseInt(rst.SEQ_NO);
return tempITEM;
})
let makingQTY = Object.values(result)[i]?.map(function(rst){
let tempQTY ={};
let date = rst.PLAN_DT.date.slice(0, 10);
let arr = new Array();
tempQTY['SEQ_NO'] = rst.SEQ_NO
tempQTY['SEPER'] = "계획"
tempQTY['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
tempQTY['WRK_TEAM'] = rst.WRK_TEAM
tempQTY[`AM_PLAN_QTY_${date}`] = rst.AMQTY
tempQTY[`PM_PLAN_QTY_${date}`] = rst.PMQTY
tempQTY[`NI_PLAN_QTY_${date}`] = rst.NIQTY
_this.lastGroupId = parseInt(rst.SEQ_NO);
return tempQTY;
})
let makingPRD = Object.values(result)[i]?.map(function(rst){
let tempPRD ={};
let date = rst.PLAN_DT.date.slice(0, 10);
let arr = new Array();
tempPRD['SEQ_NO'] = rst.SEQ_NO
tempPRD['SEPER'] = "실적"
tempPRD['PLAN_FACLT_CD'] = rst.PLAN_FACLT_CD
tempPRD['WRK_TEAM'] = rst.WRK_TEAM
tempPRD[`AM_PLAN_QTY_${date}`] = rst.AMPRD
tempPRD[`PM_PLAN_QTY_${date}`] = rst.PMPRD
tempPRD[`NI_PLAN_QTY_${date}`] = rst.NIPRD
_this.lastGroupId = parseInt(rst.SEQ_NO);
return tempPRD;
})
const sumObjItem = {};
const sumObjQty = {};
const sumObjPrd = {};
if(makingITEM !==undefined){
makingITEM.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjItem[key] = obj[key];
});
});
makingQTY.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjQty[key] = obj[key];
});
});
makingPRD.forEach(obj => {
Object.keys(obj).forEach(key => {
sumObjPrd[key] = obj[key];
});
});
arr.push(sumObjItem);
arr.push(sumObjQty);
arr.push(sumObjPrd);
// console.log(mergeObj(tempArr[0], tempArr[1], tempArr[2]));
for (let i = 0; i < data.data.length; i++) {
let temp = data.data[i];
// console.log(temp);
let tempQTY = {};
let date = temp.PLAN_DT.date.slice(0, 10);
tempQTY["WRK_TEAM"] = temp.WRK_TEAM;
tempQTY["PLAN_FACLT_CD"] = temp.PLAN_FACLT_CD;
tempQTY["PLAN_SEQ"] = temp.PLAN_SEQ;
tempQTY["DATE"] = date;
// if (temp?.AM_PLAN_QTY !== null) {
// tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY
// }
// if (temp?.NI_PLAN_QTY !== null) {
// tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY
// }
if (temp?.AM_PLAN_QTY !== null) {
tempQTY[`AM_PLAN_QTY`] = temp.ITEM_GRP;
}
if (temp?.PM_PLAN_QTY !== null) {
tempQTY[`PM_PLAN_QTY`] = temp.ITEM_GRP;
}
if (temp?.NI_PLAN_QTY !== null) {
tempQTY[`NI_PLAN_QTY`] = temp.ITEM_GRP;
}
tempQTY["SEPER_ID"] = "GRP";
tempQTY["SEPER"] = "그룹";
// console.log(temp);
let tempGRP = {};
tempGRP["WRK_TEAM"] = temp.WRK_TEAM;
tempGRP["PLAN_FACLT_CD"] = temp.PLAN_FACLT_CD;
tempGRP["PLAN_SEQ"] = temp.PLAN_SEQ;
tempGRP["DATE"] = date;
// if (temp?.AM_PLAN_QTY !== null) {
// tempQTY[`AM_PLAN_QTY_${date}`] = temp.AM_PLAN_QTY
// }
// if (temp?.PM_PLAN_QTY !== null) {
// tempQTY[`PM_PLAN_QTY_${date}`] = temp.PM_PLAN_QTY
// }
// if (temp?.NI_PLAN_QTY !== null) {
// tempQTY[`NI_PLAN_QTY_${date}`] = temp.NI_PLAN_QTY
// }
if (temp?.AM_PLAN_QTY !== null) {
tempGRP[`AM_PLAN_QTY`] = temp.AM_PLAN_QTY;
}
if (temp?.PM_PLAN_QTY !== null) {
tempGRP[`PM_PLAN_QTY`] = temp.PM_PLAN_QTY;
}
if (temp?.NI_PLAN_QTY !== null) {
tempGRP[`NI_PLAN_QTY`] = temp.NI_PLAN_QTY;
}
tempGRP["SEPER_ID"] = "PLAN";
tempGRP["SEPER"] = "계획";
// console.log(tempGRP);
tempArr.push(tempQTY);
tempArr.push(tempGRP);
}
// console.log(tempArr);
let makingData = Object.groupBy(tempArr, ({ SEPER_ID }) => SEPER_ID);
return arr;
const objects = [
{ id: 1, value: 10 },
{ id: 2, value: 20 },
{ id: 1, value: 30 },
{ id: 3, value: 40 },
];
const mergedObjects3 = [];
makingData["PLAN"].map((obj) => {
const existingObjIndex = mergedObjects3.findIndex(
(item) => item.PLAN_SEQ === obj.PLAN_SEQ
);
if (existingObjIndex !== -1) {
if (obj.AM_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].AM_PLAN_QTY = obj.AM_PLAN_QTY;
}
if (obj.PM_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].PM_PLAN_QTY = obj.PM_PLAN_QTY;
}
if (obj.NI_PLAN_QTY !== undefined) {
mergedObjects3[existingObjIndex].NI_PLAN_QTY = obj.NI_PLAN_QTY;
}
// mergedObjects3[existingObjIndex].AM_PLAN_QTY += obj.AM_PLAN_QTY;
// mergedObjects3[existingObjIndex].PM_PLAN_QTY += obj.PM_PLAN_QTY;
// mergedObjects3[existingObjIndex].NI_PLAN_QTY += obj.NI_PLAN_QTY;
} else {
mergedObjects3.push({ ...obj });
}
console.log(obj);
});
console.log(mergedObjects3);
const mergedObjects4 = [];
makingData["GRP"].map((obj) => {
const existingObjIndex = mergedObjects4.findIndex(
(item) => item.PLAN_SEQ === obj.PLAN_SEQ
);
if (existingObjIndex !== -1) {
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
if (obj.AM_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].AM_PLAN_QTY = obj.AM_PLAN_QTY;
}
if (obj.PM_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].PM_PLAN_QTY = obj.PM_PLAN_QTY;
}
if (obj.NI_PLAN_QTY !== undefined) {
mergedObjects4[existingObjIndex].NI_PLAN_QTY = obj.NI_PLAN_QTY;
}
// mergedObjects3[existingObjIndex].AM_PLAN_QTY += obj.AM_PLAN_QTY;
// mergedObjects3[existingObjIndex].PM_PLAN_QTY += obj.PM_PLAN_QTY;
// mergedObjects3[existingObjIndex].NI_PLAN_QTY += obj.NI_PLAN_QTY;
} else {
mergedObjects4.push({ ...obj });
}
});
console.log(mergedObjects4);
// const mergedObjects2 = makingData['GRP'].reduce((acc, obj) => {
// const existingObj = acc.find(item => item.PLAN_SEQ === obj.PLAN_SEQ);
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
//
//
//
//
// if (existingObj!== undefined) {
//
// if(existingObj[temp_AM]!== undefined){
// existingObj[temp_AM] = obj.AM_PLAN_QTY;
// }
// if(obj.PM_PLAN_QTY !== undefined){
// existingObj[temp_PM]= obj.PM_PLAN_QTY;
//
// }
// if(obj.NI_PLAN_QTY !== undefined){
// existingObj[temp_NI]= obj.NI_PLAN_QTY;
// }
//
// } else {
// acc.push({ ...obj });
// }
// return acc;
// }, []);
//
// // console.log(mergedObjects2);
//
// const mergedObjects = makingData['PLAN'].reduce((acc, obj) => {
// const existingObj = acc.find(item => item.PLAN_SEQ === obj.PLAN_SEQ);
// let temp_AM = 'AM_PLAN_QTY_'+obj.DATE
// let temp_PM = 'PM_PLAN_QTY_'+obj.DATE
// let temp_NI = 'NI_PLAN_QTY_'+obj.DATE
// // existingObj[temp_AM] = 1;
// if(existingObj !== undefined ){
// // console.log(existingObj);
// if(obj.AM_PLAN_QTY !== undefined){
//
// // console.log(obj.AM_PLAN_QTY);
// }
//
// }
//
// // console.log(existingObj[temp_AM]);
// if (existingObj !== undefined ) {
//
// if(obj.AM_PLAN_QTY !== undefined){
// // console.log('asdf');
// existingObj[temp_AM]= obj.AM_PLAN_QTY;
//
// }
// if(obj.PM_PLAN_QTY !== undefined){
// existingObj[temp_PM]= obj.PM_PLAN_QTY;
//
// }
// if(obj.NI_PLAN_QTY !== undefined){
// existingObj[temp_NI]= obj.NI_PLAN_QTY;
// }
//
// } else {
// acc.push({ ...obj });
// }
// return acc;
// }, []);
//
// // doubleArr.push(mergedObjects, mergedObjects2);
//
let newArr = mergedObjects4.concat(mergedObjects3);
// let group = Object.groupBy(newArr,({PLAN_SEQ}) => PLAN_SEQ)
// console.log(Object.values(group));
return newArr;
}
/*
@ -124,7 +318,7 @@ class Tb_main_class {
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).checked ? "Y" : "N";
} else {
@ -138,7 +332,8 @@ class Tb_main_class {
data: data,
success: (data) => {
console.log(data.code);
console.table(data.data);
if (data.code) {
//DB에서 받아온 데이터 가공하는 manageData 함수 참조
this.tbList.setData(this.manageData(data));
@ -168,15 +363,12 @@ class Tb_main_class {
* @Parameter 없음
*/
setFilter() {
this.tbList ="";
this.init();
this.getMainList(
"getPlanList",
"team_pop",
"product_pop",
"sub_product_pop",
"plan_date"
"sub_product_pop"
);
}
@ -186,31 +378,27 @@ class Tb_main_class {
* @function 기본키, _STATUS_:I 값을 넣은 추가
*/
addRow() {
console.log("test");
this.lastGroupId += 1;
// Tabulator 인스턴스에 데이터 추가
this.tbList.addRow({
SEQ_NO: this.lastGroupId,
groupId: this.lastGroupId + 1,
SEPER: "그룹",
_STATUS_: "I",
SEPER_ID: "GRP",
});
this.tbList.addRow({
SEQ_NO: this.lastGroupId,
groupId: this.lastGroupId + 1,
SEPER: "계획",
_STATUS_: "I",
SEPER_ID: "PLAN",
});
this.tbList.addRow({
SEQ_NO: this.lastGroupId,
groupId: this.lastGroupId + 1,
SEPER: "실적",
_STATUS_: "I",
SEPER_ID: "RST",
});
this.lastGroupId += 1;
}
/*
@ -299,78 +487,9 @@ class Tb_main_class {
* @function _STATUS_ 값이 있는 데이터만 추려서 없으면 생성, 있으면 수정하기
*/
putData() {
// let _this = this;
console.log(this.tbList.getData().filter((row) => row._STATUS_));
// 저장 시 상태 변화 없는 row 요청 X
if (this.tbList.getData().filter((row) => row._STATUS_).length == 0) {
this.getMainList();
return false;
}
const blankObj = [];
const reqData = [];
this.tbList.getRows().forEach((row) => {
// console.log(row.getData('_STATUS_'))
if (row.getData()["_STATUS_"]) {
if (
Object.keys(row._row.data)
.filter((key) => key !== "_STATUS_" && key !== "USE_FLG")
.every((key) => {
const value = row._row.data[key];
return value === undefined || value === "";
})
) {
blankObj.push(row);
} else {
reqData.push(row.getData());
}
}
});
let postdata = {
mode: "getOrderList",
reqdata: JSON.stringify(
this.tbList.getData().filter((row) => row._STATUS_)
),
};
if (blankObj.length !== 0) {
kuls_confirm(
"비어있는 행을 무시하고 진행하시겠습니까?",
"",
() => {
ajax_json({
url: this.ajaxUrl,
data: postdata,
success: function (data) {
if (data.code) {
kuls_success("저장되었습니다.");
this.getMainList();
Tb_insp_list.getMainList();
} else {
this.tbList.getRows().forEach((row) => {
//일부 적용된 열 update 처리
if (data.data.includes(row.getData()["PLANT_CD"])) {
row.update({ _STATUS_: "U" });
}
});
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {},
});
},
() => {
blankObj.forEach((row) => {
row.getElement().classList.add("blank-row");
});
console.log(blankObj);
}
);
}
console.log(this.tbList.getData());
// 기본키 중복 확인 및 방지
// _STATUS_ 있는 데이터만 들고와서 PUT하기
}
/*
@ -391,7 +510,7 @@ class Tb_main_class {
let month = ("0" + (date.getMonth() + 1)).slice(-2); // Adding leading zero
let day = ("0" + date.getDate()).slice(-2); // Adding leading zero
let formattedDate = `${month}${day}`;
console.log(formattedDate);
columns.push({
title: formattedDate,
columns: [
@ -402,7 +521,7 @@ class Tb_main_class {
editor: "input",
width: 50,
editable: (cell) => {
return cell.getRow().getPosition() % 3 !== 0;
return cell.getRow().getPosition() / 3 !== 1;
},
},
{
@ -412,7 +531,7 @@ class Tb_main_class {
editor: "input",
width: 50,
editable: (cell) => {
return cell.getRow().getPosition() % 3 !== 0;
return cell.getRow().getPosition() / 3 !== 1;
},
},
{
@ -422,7 +541,7 @@ class Tb_main_class {
width: 50,
editor: "input",
editable: (cell) => {
return cell.getRow().getPosition() % 3 !== 0;
return cell.getRow().getPosition() / 3 !== 1;
},
},
],
@ -437,18 +556,17 @@ class Tb_main_class {
* @Parameter 없음
*/
init() {
let fields = "";
// field 정의
fields = [
{field: "SEQ_NO", title: "id", width: 100, visible: false},
{field: "WRK_TEAM", title: "팀", width: 100, editor: "input"},
{field: "PLAN_FACLT_CD", title: "설비", width: 100, editor: "input"},
{field: "SEPER", title: "구분", width: 100},
const fields = [
{ field: "id", title: "id", width: 100, visible: false },
{ field: "WRK_TEAM", title: "팀", width: 100, editor: "input" },
{ field: "PLAN_FACLT_CD", title: "설비", width: 100, editor: "input" },
{ field: "SEPER", title: "구분", width: 100 },
// 날짜 필드 동적으로 넣을것 오늘부터 7일까지
...this.getDate(),
];
let commonFieldData = "";
commonFieldData = {
const commonFieldData = {
headerSort: false,
vertAlign: "middle",
hozAlign: "center",
@ -456,7 +574,7 @@ class Tb_main_class {
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
};
this.tbList = "";
this.tbList = new Tabulator(this.table, {
layout: "fitColumns",
// data: [
@ -465,12 +583,11 @@ class Tb_main_class {
// { groupId: this.lastGroupId, SEPER: "실적" },
// ], //기본 데이터
columns: fields, //컬럼 설정
groupBy: "SEQ_NO",
groupBy: "PLAN_SEQ",
columnDefaults: commonFieldData,
groupStartOpen: true,
});
}
init2(){
// 데이터 불러오기
this.tbList.on("tableBuilt", () => {
this.getMainList(
@ -497,8 +614,7 @@ init2(){
// 추가
["click", "keypress"].forEach((evt) => {
this.addBtn.addEventListener(evt, () => {
console.log("test");
this.addRow && this.addRow();
this.addRow();
});
});
// 삭제
@ -513,8 +629,6 @@ init2(){
const filterBtn = document.querySelector("#filter_btn");
filterBtn.addEventListener(evt, () => {
// setFilter 또는 setData
this.init();
this.setFilter();
// this.getMainList("getPlanList","team_pop","product_pop","sub_product_pop");
});
@ -530,4 +644,3 @@ init2(){
}
const Tb_production_plan = new Tb_main_class("#main_table");
Tb_production_plan.init();
Tb_production_plan.init2();

View File

@ -1,56 +1,2 @@
<?php
$cate_id = "STS_ORDER";
/*
* @Overview 생산오더별 진행현황
* @History 2024-04-22 / 이원기 / 최초작성
*/
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
include_once _SVC_INC_PATH_ . "/auth_check.php";
include_once _HOME_INC_PATH_ . "/ajax_init.php";
if (!_notAuth("R")) {
switch ($_REQUEST['mode']) {
// 생산오더별 진행현황
case 'getStsList':
$squl = "USP_P_WO_OPER_RSLT_S40";
$params = array(
"date_st" => $_REQUEST["order_date_st"] ?: "",
// "date_st" => "2024-04-16" ?: "",
"date_ed" => $_REQUEST["order_date_ed"] ?: "",
"WO_NO" => $_REQUEST["WO_NO_P"] ?: "",
"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;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
break;
}
}
if (!$_REQUEST['no_echo']) {
echo json_encode($retval);
// echo $retval;
}
$cate_id = "STS_ORDER";

View File

@ -19,7 +19,7 @@ const VueOperStatusCode = createApp({
}
},
mounted(){
this.getMainList("getStsList", "order_date_st", "order_date_ed");
this.getCodeList();
},
// computed: {
@ -28,99 +28,62 @@ const VueOperStatusCode = createApp({
// }
// },
methods:{
// 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) {
getCodeList() {
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
console.log(temp);
// 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, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P00000', 등록일: '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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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', 작업자 :'이창희'}
// ,{생산오더: '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', 작업자 :'이창희'}
//
//
// ];
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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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, 공정순서 : 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', 작업자 :'이창희'}
,{생산오더: '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', 작업자 :'이창희'}
];
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));
console.log(Object.values(Object.groupBy(temp,( {생산오더} )=>생산오더)));
let group = Object.values(Object.groupBy(temp,( {생산오더} )=>생산오더));
for(let i = 0; i < group.length; i++){
// delete group[i][0].계획수량;
// delete group[i][0].실적수량;
// delete group[i][0].투입시간;
// delete group[i][0].종료시간;
// delete group[i][0].예상종료시간;
// delete group[i][0].설비;
// delete group[i][0].작업자;
group[i][0].OP_CD = group[i].map(function(element){
group[i][0].공정 = 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 }
공정명: element.공정 ,
계획수량: element.계획수량,
실적수량 : element.실적수량,
투입시간:element.투입시간,
종료시간 : element.종료시간,
예상종료시간 : element.예상종료시간 ,
설비: element.설비,
작업자: element.작업자 }
});
console.log(group[i][0]);

View File

@ -100,7 +100,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 -->
<div class="button-container">
<div class="button-box">
<button class="point-btn" id="filter_btn" @click="this.getMainList('getStsList', 'order_date_st', 'order_date_ed')">조회</button>
<button class="point-btn" id="filter_btn" @click="getCodeList()">조회</button>
<button class="point-btn disabled-btn" id="put_btn" disabled>저장</button>
</div>
</div>
@ -156,29 +156,29 @@ 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.생산오더}}<br>{{code.등록일}}</td>
<td rowspan="5">{{code.품목}}<br>{{code.도면번호}}<br>{{code.업체명}}</td>
<td rowspan="5">{{code.납기일}}</td>
<td rowspan="5">{{code.작업순서}}</td>
<td rowspan="5">{{code.완료}}</td>
<td colspan="2" v-for="index in 10" :key="`process-${index-1}`">{{ code.OP_CD[index-1]?.OP_CD }}</td>
<td colspan="2" v-for="(process, index) in code.공정" :key="`process-${index}`">{{ process?.공정명 }}</td>
</tr>
<tr>
<td v-for="n in 20" :key="`plan-${n}`">
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.PRD_QTY : code['OP_CD'][(n-1)/2]?.PLAN_QTY }}
{{ n % 2 === 0 ? code['공정'][n/2-1]?.실적수량 : code['공정'][(n-1)/2]?.계획수량 }}
</td>
</tr>
<tr>
<td v-for="n in 20" :key="`tm-${n}`">
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.ED_TM : code['OP_CD'][(n-1)/2]?.ST_TM }}
{{ n % 2 === 0 ? code['공정'][n/2-1]?.종료시간 : code['공정'][(n-1)/2]?.투입시간 }}
</td>
</tr>
<tr>
<td colspan="2" v-for="index in 10" :key="`pre-${index}`">{{ code.OP_CD[index-1]?.예상종료시간 }}</td>
<td colspan="2" v-for="(process, index) in code.공정" :key="`pre-${index}`">{{ process?.예상종료시간 }}</td>
</tr>
<tr>
<td v-for="n in 20" :key="`fa-${n}`">
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.EMP_NM : code['OP_CD'][(n-1)/2]?.FACLT_CD }}
{{ n % 2 === 0 ? code['공정'][n/2-1]?.작업자 : code['공정'][(n-1)/2]?.설비 }}
</td>
</tr>

View File

@ -1,66 +0,0 @@
<!-- 헤더 -->
<div class="form-header flexrow form-box">
<div class="flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow flexend flex-1">
<div class="input-box flexrow flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box" style="width:calc(100% - 100px);">
<button type="button" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button>
</div>
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 160px);">
<div class="height-93">
<div class="hy-table" id="isDef_table"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,41 +0,0 @@
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">품목</label>
<input v-model="formData.ITEM_CD" type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">공정</label>
<input v-model="formData.OP_CD" type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height: calc(100% - 80px);">
<div class="height-93">
<div class="hy-table" id="isDefHst_table"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,23 +0,0 @@
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div class="height-93">
<div class="hy-table" id="isFacility_table"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,44 +0,0 @@
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div class="height-half">
<div class="hy-table" id="isFacility_table"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">고장등록시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1 flexfillstart">
<label for="" style="width:80px;">고장신고사유</label>
<textarea id="" name="" class="form-control form-control-sm"></textarea>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,75 +0,0 @@
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween gap10">
<ul class="flexrow tab-menu gap06">
<li id="first-tab" @click="isChangeTab('isInsp')" :class="{'on':isInspVal}">실적</li>
<li id="second-tab" @click="isChangeTab('isFile')" :class="{'on':isFileVal}">파일</li>
</ul>
<!-- tab container -->
<div v-if="isInspVal" class="table-box flexcol flexbetween" style="height:calc(100% - 43px);">
<div style="height:calc(100% - 112px);">
<div class="hy-table group-table groupby" id="isInsp_table"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1 flexrow flexend">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- tab container 종료 // -->
<!-- tab container -->
<div v-if="isFileVal" class="table-box flexcol flexbetween" style="height:calc(100% - 46px);">
<div style="height:calc(100% - 46px);">
<div class="hy-table" id="isInsp"></div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- tab container 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,47 +0,0 @@
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 148px);">
<div class="hy-table" id="isNoRun_table"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">작업종료시간</label>
<input v-model='dateTime' type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box flexrow">
<button v-for="(vals, idx) in Object.keys(STOP_CD)" @click="STOP_CD_val = vals; this.callBack();" :class="{'left-round':idx===0, 'right-round':idx===Object.keys(STOP_CD).length-1}" type="button" class="tab-btn">{{ STOP_CD[vals] }}</button>
<!-- STOP_CD 가져오기
FOR문 으로 BTN만들기
1번째와 마지막 BTN에 다른 클래스 추가하기 -->
<!-- <button type="button" @click="STOP_CD = ''" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button> -->
</div>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<button type="button" class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</button>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,54 +0,0 @@
<!-- 헤더 -->
<div class="form-header flexrow form-box">
<div class="flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">이전공정<br>양품수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 120px);">
<div class="height-93">
<div class="hy-table" id="isProd_table"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,34 +0,0 @@
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 112px);">
<div class="hy-table" id="isRun_table"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="run-time" style="width:80px;">가동시작시간</label>
<input v-model='dateTime' @change="this.callBack();" type="text" id="run-time" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<button type="button" class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</button>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,42 +0,0 @@
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">소속</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">작업자</label>
<input v-model="formData.EMP_NM" type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<!-- <div class="table-box flexcol flexbetween" style="height: calc(100% - 80px);"> -->
<div class="table-box flexcol flexbetween height-full" >
<div class="height-full">
<div class="hy-table groupby" id="isWorker_table"></div>
</div>
<!-- <div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
취소
</div>
</div>
</div> -->
</div>
<!-- 테이블 박스 종료 // -->

View File

@ -1,61 +0,0 @@
<?php
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
?>
<!-- file upload popup <첨부파일 등록> -->
<!-- 첨부파일 등록 팝업 -->
<div id="popup_file_upload">
<div class="awn-popup-confirm awn-partner custom-popup">
<div class="awn-popup-title"><i class="bi bi-card-heading"></i> 작업표준서</div>
<div class="awn-popup-search mb-block btn-ksmain-inject-block">
<!-- <div class="s_exp"> 더블클릭으로 선택/반영 합니다.</div>-->
<div class="s_fld form-inline d-block">
<!-- <label for="sgrp">오더번호: </label>
<select id="sgrp" name="sgrp" class="form-control form-select w100">
</select> -->
<!-- <label for="stxt">오더번호: </label>-->
<!-- <input type="text" class="form-control d-inline w120 align-bottom">-->
<!-- <label for="stxt">공정: </label>-->
<!-- <input type="text" name="stxt" id="stxt" class="form-control d-inline w120 align-bottom">-->
<!-- |
<button type="button" id="ptReset" class="btn btn-danger">
<i class="fa-regular fa-window-restore"></i>
초기화
</button> -->
</div>
</div>
<div class="awn-popup-content" style="padding: 10px 10px;">
<div class="table-box flex-1" id="main_table">
<!-- 테이블 헤더 (제목, 추가, 삭제, 저장) -->
<div class="table-title">
<p class="tilte"></p>
<!-- 버튼 -->
<!-- <div class="button-box">-->
<!-- <button class="add-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/add.php' ?>
<!-- 추가-->
<!-- </button>-->
<!-- <button class="remove-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/delete.php' ?>
<!-- 삭제-->
<!-- </button>-->
<!-- </div>-->
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="hy-table"></div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
</div>
</div>
<!-- file upload popup <첨부파일 등록> -->
<script src="/sts_order_prod/reg_prod_result.js"></script>

View File

@ -1,206 +0,0 @@
<?php
$cate_id = "STS_ORDER_PROD";
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
include_once _SVC_INC_PATH_ ."/auth_check.php";
include_once _HOME_INC_PATH_ ."/ajax_init.php";
if( !_notAuth("R") ){/************ 권한체크*/
switch( $_REQUEST['mode'] ){
// 작업자 조회
// 설비 조회
// 양품 수량 조회
// 불량 수량 조회
// 과거 불량이력 조회
// 설비 고장등록 조회
// 가동 vs 비가동
case "getWokerInfo":
$sql = "USP_P_REG_PROD_POP_S10";
$params = array(
'WO_NO' => $_REQUEST["WO_NO"] ?: "",
'OP_SEQ' => $_REQUEST["OP_SEQ"] ?: ""
);
$rst = $baseObj->DB->exec($sql,$params);
$rows = array();
if( $rst ){
$retval['code'] = true;
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
}
$retval['data'] = $rows;
$retval['mesg'] = "정상적으로 작동하였습니다.";
}else{
$retval['code'] = false;
}
break;
case "getRunInfo":
$sql = "USP_P_REG_PROD_RUN_S10";
$params = array(
'WO_NO' => $_REQUEST["WO_NO"] ?: "",
'WO_SEQ' => $_REQUEST["WO_SEQ"] ?: "",
'EMP_NO' => $_REQUEST["EMP_NO"] ?: "",
);
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if( $rst ){
$retval['code'] = true;
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
}
$retval['data'] = $rows;
$retval['mesg'] = "정상적으로 작동하였습니다.";
}else{
$retval['code'] = false;
}
break;
case "checkRunStatus":
$sql = "USP_P_REG_PROD_RUN_S20";
$params = array(
'WO_NO' => $_REQUEST["WO_NO"] ?: "",
'WO_SEQ' => $_REQUEST["WO_SEQ"] ?: "",
'EMP_NO' => $_REQUEST["EMP_NO"] ?: "",
);
$rst = $baseObj->DB->exec($sql, $params);
$rows = array();
if( $rst ){
$retval['code'] = true;
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
}
$retval['data'] = $rows;
$retval['mesg'] = "정상적으로 작동하였습니다.";
}else{
$retval['code'] = false;
}
break;
case "putRunInfo":
if (_notAuth("W")){ break; }
$_REQUEST["reqdata"] = json_decode($_REQUEST['reqdata']);
foreach ($_REQUEST['reqdata'] as $data) {
$data = (array) $data;
if($data['_STATUS_'] == 'U'){
$sql = 'USP_P_REG_PROD_RUN_U10';
$params = array(
"FACLT_OPER_NO" => $data['FACLT_OPER_NO']?:"",
"RUNSTOP_GB" => $data['RUNSTOP_GB']?:"",
"STOP_CD" => $data['STOP_CD'] ?: "",
"OPER_ED_TM" => $data['OPER_ED_TM'] ?: "",
"MAKE_USER_ID" => $GLOBALS['_Umem']['member_id'],
);
}else{
$sql = 'USP_P_REG_PROD_RUN_I10';
$params = array(
"FACLT_CD" => $data['FACLT_CD']?:"",
"WO_NO" => $data['WO_NO']?:"",
"WO_SEQ" => $data['WO_SEQ'] ?: "",
"WORK_DT" => $data['WORK_DT']?:"",
"RUNSTOP_GB" => $data['RUNSTOP_GB']?:"",
"OPER_ST_TM" => $data['OPER_ST_TM'] ?: "",
"EMP_NO" => $data['EMP_NO'] ?: "",
"MAKE_USER_ID" => $GLOBALS['_Umem']['member_id'],
);
}
$rst = $baseObj->DB->exec($sql, $params);
}
if ($rst && !$_REQUEST['RS_CODE']) {
$retval['code'] = true;
} else {
$retval['code'] = false;
$retval['mesg'] = $_REQUEST['RS_MSG'];
}
break;
case 'getRoutingList':
$sql = "USP_B_ROUTING_S10";
$params = Array(
"ITEM_CD" => $_REQUEST['ITEM_CD']?:"",
);
$rst = $baseObj->DB->exec($sql,$params);
$rows = array();
if( $rst ){
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
};
$retval['code'] = true;
$retval['data'] = $rows;
// print_r($retval['data']);
$retval['mesg'] = '정상 동작 되었습니다.';
}else{
$retval['code'] = false;
}
break;
case 'getDrawList':
$sql = "USP_B_ITEM_DRAW_S10";
$params = Array(
"ITEM_CD" => $_REQUEST['ITEM_CD'],
);
$rst = $baseObj->DB->exec($sql,$params);
$rows = array();
if( $rst ){
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
};
$retval['code'] = true;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
}else{
$retval['code'] = false;
}
break;
case 'getDefHst':
$sql = "USP_P_REG_PROD_DEF_HST_S10";
$params = Array(
"ITEM_CD" => $_REQUEST['ITEM_CD'],
"OP_CD" => $_REQUEST['OP_CD']
);
$rst = $baseObj->DB->exec($sql,$params);
$rows = array();
if( $rst ){
while( $row = $baseObj->DB->fetch_array($rst) ){
$rows[] = $row;
};
$retval['code'] = true;
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
}else{
$retval['code'] = false;
}
break;
}
}
if( !$_REQUEST['no_echo'] ){
echo json_encode($retval);
}

View File

@ -1,109 +1,16 @@
class SimpleTable {
constructor(fields, getmode, putmode, formData, addData, updateData){
// ajax
this.ajaxUrl = './reg_prod_result.ajax.php';
this.getMode = getmode?getmode:'';
this.putMode = putmode?putmode:'';
// data
constructor(fields){
this.field = fields;
this.formData = formData;
// element
this.ajaxUrl = './reg_prod_result.ajax.php';
this.container = document.querySelector(".detail-contents");
console.log(this.container)
this.table = this.container?.querySelector(".hy-table");
this.addBtn = this.container?.querySelector(".add-btn");
// addCode
this.addCode = ''
// listener init
this.init(addData, updateData); // 리스너 초기화
}
// initEventListener() {
// this.callPutData = (addData, updateData, btn) => {
// this.putData(addData, updateData);
// if (btn === 'isRun') {
// document.querySelector("#isNoRun").disabled = false;
// document.querySelector("#isRun").disabled = true;
// this.addBtn.disabled = true;
// } else if (btn === 'isNoRun') {
// document.querySelector("#isNoRun").disabled = true;
// document.querySelector("#isRun").disabled = false;
// this.addBtn.disabled = true;
// }
// };
// }
getMainList(){
return ajax_json({
url: this.ajaxUrl,
data: {
mode: this.getMode,
...this.formData
},
success:( data ) => {
if( data.code ){
this.tbList.setData(data.data);
if(data.data[data.data.length-1]?.FACLT_OPER_NO){
this.addCode = data.data[data.data.length-1].FACLT_OPER_NO;
}
}else{
console.log(data)
}
},
error: (request, status, error)=>{
kuls_alert(error.message);
},
})
}
putData(){
const postData = {
mode : this.putMode
}
const tableData = this.tbList.getData().filter(row=>row._STATUS_)[0];
postData['reqdata'] = JSON.stringify([{...tableData, ...this.formData, FACLT_OPER_NO : this.addCode}])
console.log(this.addCode)
ajax_json({
url: this.ajaxUrl,
data: postData,
success: (data)=>{
if (data.code) {
kuls_success("저장되었습니다.");
this.getMainList();
}else{
kuls_alert(data.mesg);
}
},
error: (request, status, error)=>{
kuls_alert(error.message);
},
complete: () => {
}
})
};
update(updateData){
if(updateData){
this.tbList.getRowFromPosition(this.tbList.getData().length).update({ FACLT_OPER_NO: this.addCode, ...updateData });
console.log(updateData)
};
};
init(addData, updateData){
if (this.tbList) {
this.tbList.destroy();
}
getMainList(){}
addRow(){}
putData(){}
init(){
const commonFieldData = {
headerSort: false,
vertAlign: "middle",
@ -115,50 +22,48 @@ class SimpleTable {
this.tbList = new Tabulator(this.table, {
layout:'fitColumns',
data:[],
data:[
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
],
columns: this.field,
columnDefaults: commonFieldData,
selectableRows:1,
});
})
this.tbList.on("tableBuilt", () => {
this.getMainList().then(()=>{
if(addData){
this.tbList.addRow({...addData, _STATUS_: 'I'});
};
if(updateData){
this.tbList.getRowFromPosition(this.tbList.getData().length).update({ FACLT_OPER_NO: this.addCode, ...updateData, _STATUS_: 'U' });
console.log(updateData)
};
})
this.getMainList();
})
};
event(addData, updateData, btn){
if(this.eventHandler){
this.addBtn?.removeEventListener('click', this.eventHandler);
};
this.eventHandler = () => {
this.putData(addData, updateData);
if (btn === 'isRun') {
document.querySelector("#isNoRun").disabled = false;
document.querySelector("#isRun").disabled = true;
this.addBtn.disabled = true;
} else if (btn === 'isNoRun') {
document.querySelector("#isNoRun").disabled = true;
document.querySelector("#isRun").disabled = false;
this.addBtn.disabled = true;
}
};
this.addBtn?.addEventListener('click', this.eventHandler);
// 행선택
// 행선택 반영 및 저장
// 행추가 및 저장
}
};
}
class FieldPop {
@ -169,40 +74,12 @@ class FieldPop {
init() {
vnLoad('', './reg_prod_result.php','', (loadHtml) => {
this.modal = kuls_modal(loadHtml);
ajax_json({
url: './reg_prod_result.ajax.php',
data: {
mode: 'checkRunStatus',
...this.bindingData
},
success:( data ) => {
if( data.code ){
console.log(data)
if(data.data.length>0){
const disabledList = [false, false, true, false];
this.vueform(this.bindingData, this.modal, disabledList);
}else{
const disabledList = [false, false, false, true];
this.vueform(this.bindingData, this.modal, disabledList);
}
}else{
console.log(data)
}
},
error: (request, status, error)=>{
kuls_alert(error.message);
},
})
})
this.vueform(this.bindingData, this.modal)
});
}
// checkRunStatus(){
// return
// }
vueform(bindingData, modal, disabledList){
vueform(bindingData, modal){
return createApp({
data() {
return {
@ -212,14 +89,7 @@ class FieldPop {
},
table : {},
checkEvent : '',
callBack : function(){},
isComponent : {
isDefHst : false,
isWorker : false,
isFacility : false,
isFacltBreak : false,
@ -234,65 +104,15 @@ class FieldPop {
isInsp: true,
isFile: false
},
tabs1: [ '작업표준서 조회', '도면 조회' ], //popup 띄우기
tabs2: [
{
id : 'isDefHst',
name : '과거불량이력 조회'
},
{ id : 'isFacltBreak',
name : '설비 고장등록'
},
{ id : 'isRun',
name : '가동'
},
{ id : 'isNoRun',
name : '비가동'
}
],
activeTab : '',
isDisabled : disabledList,
dateTime : '00:00',
getMode : '',
putMode : '',
STOP_CD : varsSTOP_CD,
STOP_CD_val : '',
tableField : {
isDefHst : [
{ field: "DEF_NO", formatter:"rownum", title: "순번", width: 50},
// { field: "OP_CD", title: "", width: '23%'},
{ field: "DEF_NM", title: "불량원인", width: '23%'},
{ field: "DEF_TOT", title: "불량수량", width: '23%'},
{ field: "DEF_PRICE", title: "불량단가", width: '23%'},
],
isWorker : [
{ field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "실적 등록 시간", minWidth: 150, width:'26%'},
{ field: "WO_NO", title: "오더 번호", minWidth: 150, width:'25%'},
{ field: "PRD_QTY", title: "실적 수량", minWidth: 100, width:'20%',
bottomCalc: "sum",
bottomCalcFormatter:"money",
bottomCalcFormatterParams:{ decimal:".", precision:0 }
},
{ field: "", title: "달성 금액", minWidth: 100, width:'20%',
bottomCalc: "sum",
bottomCalcFormatter:"money",
bottomCalcFormatterParams:{ decimal:".", precision:0 }
}
{ field: "", title: "오더 번호", minWidth: 150, width:'25%'},
{ field: "", title: "실적 수량", minWidth: 100, width:'20%'},
{ field: "", title: "달성 금액", minWidth: 100, width:'20%'}
],
isFacility : [
{ field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "설비코드", minWidth: 80, width:'14%'},
@ -309,20 +129,20 @@ class FieldPop {
{ field: "", title: "작업자", minWidth: 100, width:'20%'}
],
isRun : [
{ field:"FACLT_OPER_NO", formatter:"rownum", title: "순번", width: 50},
{ field: "WO_NO", title: "생산 오더", minWidth: 100, width:'18%',},
{ field: "RUNSTOP_GB", title: "구분", minWidth: 80, width:'15%',},
{ field: "STOP_CD", title: "비가동 사유", minWidth: 100, width:'18%',},
{ field: "OPER_ST_TM", title: "시작시간", minWidth: 120, width:'20%',},
{ field: "OPER_ED_TM", title: "종료시간", minWidth: 120, width:'20%',}
{ field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "생산 오더", minWidth: 100, width:'18%',},
{ field: "", title: "구분", minWidth: 80, width:'15%',},
{ field: "", title: "비가동 사유", minWidth: 100, width:'18%',},
{ field: "", title: "시작시간", minWidth: 120, width:'20%',},
{ field: "", title: "종료시간", minWidth: 120, width:'20%',}
],
isNoRun : [
{ field:"FACLT_OPER_NO", formatter:"rownum", title: "순번", width: 50},
{ field: "WO_NO", title: "생산 오더", minWidth: 100, width:'18%',},
{ field: "RUNSTOP_GB", title: "구분", minWidth: 80, width:'15%',},
{ field: "STOP_CD", title: "비가동 사유", minWidth: 100, width:'18%',},
{ field: "OPER_ST_TM", title: "시작시간", minWidth: 120, width:'20%',},
{ field: "OPER_ED_TM", title: "종료시간", minWidth: 120, width:'20%',}
{ field: "", formatter:"rownum", title: "순번", width: 50},
{ field: "", title: "생산 오더", minWidth: 100, width:'18%',},
{ field: "", title: "구분", minWidth: 80, width:'15%',},
{ field: "", title: "비가동 사유", minWidth: 100, width:'18%',},
{ field: "", title: "시작시간", minWidth: 120, width:'20%',},
{ field: "", title: "종료시간", minWidth: 120, width:'20%',}
],
isProd : [
{ field: "", formatter:"rownum", title: "순번", width: 50},
@ -351,13 +171,7 @@ class FieldPop {
{ field: "", title: "1", width: 50},
{ field: "", title: "2", width: 50},
{ field: "", title: "3", width: 50},
{ field: "", title: "4", width: 50},
{ field: "", title: "5", width: 50},
{ field: "", title: "6", width: 50},
{ field: "", title: "7", width: 50},
{ field: "", title: "8", width: 50},
{ field: "", title: "9", width: 50},
{ field: "", title: "10", width: 50},
]
},
],
@ -374,7 +188,6 @@ class FieldPop {
},
mounted() {
this.showComponent('isWorker');
},
computed: {
@ -392,191 +205,37 @@ class FieldPop {
modal.delete();
},
callTable(com, addData=false, updateData=false, btn=false ){
console.log("callTable")
callTable(com){
return this.$nextTick(()=>{
const table = new SimpleTable(this.tableField[com], this.getMode, this.putMode, this.formData, addData, updateData);
this.$nextTick(()=>{
console.log(com)
const table = new SimpleTable(this.tableField[com]);
table.init();
if(this.checkEvent !== com){
table.event(addData, updateData, btn);
this.checkEvent = com;
}
return table;
})
},
// 클릭시 컴포넌트 생성 및 삭제로 페이지 레이아웃 변경
showComponent(com, tab) {
this.activeTab = tab;
let table = '';
showComponent(com) {
Object.keys(this.isComponent).map((key)=>{
this.isComponent[key] = com == key ? true : false;
});
switch(com){
case 'isWorker':
this.getMode = 'getWokerInfo';
this.putMode = '';
this.callTable(com);
break;
case 'isInsp':
this.isTab = {
isInsp: true,
isFile: false
}
this.callTable(com);
break;
case 'isRun':
const stTime = new Date();
this.dateTime = stTime.getHours() + ":"
+ ( stTime.getMinutes()<10 ? '0' + stTime.getMinutes() : stTime.getMinutes() ) + ":"
+ ( stTime.getSeconds()<10 ? '0' + stTime.getSeconds() : stTime.getSeconds() );
this.getMode = 'getRunInfo';
this.putMode = 'putRunInfo';
table = this.callTable(com,{
WO_NO: this.formData.WO_NO,
RUNSTOP_GB: 'R',
OPER_ST_TM : this.dateTime,
},false,'isRun').then(table=>{
const tb = table;
this.callBack = ()=>{
tb.update({
WO_NO: this.formData.WO_NO,
RUNSTOP_GB: 'R',
OPER_ST_TM : this.dateTime,
})
}
})
break;
case 'isNoRun':
const edTime = new Date();
this.dateTime = edTime.getHours() + ":"
+ ( edTime.getMinutes()<10 ? '0' + edTime.getMinutes() : edTime.getMinutes() ) + ":"
+ ( edTime.getSeconds()<10 ? '0' + edTime.getSeconds() : edTime.getSeconds() );
this.getMode = 'getRunInfo';
this.putMode = 'putRunInfo';
this.callTable(com, false, {
STOP_CD: this.STOP_CD_val,
RUNSTOP_GB: 'S',
OPER_ED_TM : this.dateTime,
}, 'isNoRun').then(table=>{
this.callBack = ()=>{
const tb = table;
tb.update({
STOP_CD: this.STOP_CD_val,
RUNSTOP_GB: 'S',
OPER_ED_TM : this.dateTime,
})
};
})
break;
case 'isDefHst':
this.getMode = 'getDefHst';
this.putMode = '';
this.callTable(com,{
ITEM_CD : this.formData.ITEM_CD,
OP_CD : this.formData.OP_CD,
});
break;
default:
this.callTable(com);
break;
}
if(com=='isInsp'){
this.isTab = {
isInsp: true,
isFile: false
}
};
this.callTable(com);
},
getFileUrl(DRAW_NO, SID, FILE_ID, FILE_NM,down){
let urlStr = '/include/getFile.php'+"?gubun=draw&nid="
+ DRAW_NO +
"&sid="+ SID +
"&file_id="+ FILE_ID+
"&name="+FILE_NM
if(down == true){
location.href = urlStr;
}
return urlStr;
},
popDrawSTD(text){
const item_cd = document.getElementById("ITEM_CD").value;
if(text === '작업표준서 조회'){
// const wo_no = document.getElementById("WO_NO").value;
vnLoad("", "./sts_order_pop_util.inc.php", "", (loadHtml) => {
this.modal = kuls_modal(loadHtml);
const draw_std = new Tb_draw_std_class("#sub_table", item_cd);
draw_std.init();
});
}else{
let _this = this;
// let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
ajax_json({
url: './reg_prod_result.ajax.php',
data: { mode : "getDrawList", ITEM_CD : item_cd},
success: (data) => {
console.log(data.data[0]);
const drawData = data.data[0]
// _this.getFileUrl(
// drawData.DRAW_NO,
// drawData.SID,
// drawData.FILE_ID,
// drawData.FILE_NM,
// true
// );
pop_filedown(
_this.getFileUrl(
drawData.DRAW_NO,
drawData.SID,
drawData.FILE_ID,
drawData.FILE_NM,
), drawData.FILE_NM.split(".").pop()
);
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
// window.clearTimeout(talert);
// this.getMainList();
// this.tbList.clearAlert();
// this.setFilter();
},
});
}
},
// 클릭시 탭메뉴 활성화
isChangeTab(com) {
Object.keys(this.isTab).map( (key) => {
Object.keys(this.isTab).map((key)=>{
this.isTab[key] = com == key ? true : false;
});
@ -596,136 +255,4 @@ class FieldPop {
}
}
class Tb_draw_std_class {
constructor(container,item_cd) {
this.ajaxUrl = "./reg_prod_result.ajax.php";
this.container = document.querySelector(container);
this.item_cd = item_cd;
this.table = this.container.querySelector(".hy-table");
this.addBtn = this.container.querySelector(".add-btn") || "";
this.removeBtn = this.container.querySelector(".remove-btn") || "";
console.log(this.container);
}
getMainList(){
let _this = this;
let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
ajax_json({
url: this.ajaxUrl,
data: { mode: "getRoutingList", ITEM_CD :this.item_cd},
success: (data) => {
// console.log(data.data);
this.tbList.setData(data.data);
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
// this.tbList.clearAlert();
// this.setFilter();
},
});
}
downloadIcon = function(cell, formatterParams, onRendered){ //plain text value
if(!cell.getRow().getData().FILE_NM){
// kuls_alert("");
return "<button class='reverse-btn disabled-btn' disabled>다운</button>";
}
return "<button class='reverse-btn'>다운</button>";
};
previewIcon = function(cell, formatterParams, onRendered){ //plain text value
if(!cell.getRow().getData().FILE_NM){
// kuls_alert("");
return "<button class='reverse-btn disabled-btn' diabled>미리보기</button>";
}
// console.log(cell.getRow().getData().FILE_NM);
return "<button class='reverse-btn'>미리보기</button>";
};
init(){
let _this = this;
const fields = [
{ formatter: "rownum", title: "NO", width: 50 },
{ field: "OP_CD", title: "공정코드", width: 100 },
{ field: "OP_NM", title: "공정명", width: 150 },
{ title: "작업 표준서", cssClass:"width-230", columns:[
{ field: "SID", visible:false},
{ field: "FILE_ID", visible:false},
{ field:"FILE_NM", width:100, formatter: this.previewIcon, cellClick:function(e,cell){
pop_filedown(
_this.getFileUrl(
cell.getRow().getData().ITEM_CD,
cell.getRow().getData().ROUT_SQNO,
cell.getRow().getData().FILE_NM,
"",
"rout",
// cell.getRow().getData().FILE_NM,
false
), cell.getRow().getData().FILE_NM.split(".").pop()
);
}
},
{ field:"DOWNLOAD", width:100, formatter: this.downloadIcon,
cellClick:function(e, cell){
_this.getFileUrl(
cell.getRow().getData().ITEM_CD,
cell.getRow().getData().ROUT_SQNO,
cell.getRow().getData().FILE_NM,
"",
"rout",
true
);
// location.href = '/include/getFile.php'+"?gubun=draw&nid="
// + cell.getRow().getData().DRAW_NO
// + "&sid="+cell.getRow().getData().SID
// + "&file_id="+cell.getRow().getData().FILE_ID
}},
// {field:"REGISTER", width:50,editor: _this.fileEditor}
// {field:"REGISTER", width:50,formatter: function(cell,formatterParams){
// if(cell.getRow().getData().FILE_NM){
// return "<button class='reverse-btn disabled-btn' disabled>업로드</button>";
// }
// return _this.uploadButton(cell)}
// },
// {field:"DELETE", width:50,formatter: function(cell,formatterParams){return _this.deleteButton(cell)}}
]
},
];
const commonFieldData = {
headerSort: true,
vertAlign: "middle",
hozAlign: "center",
resizable: "header", //Resize 는 헤더에서만 가능
headerHozAlign: "center", //헤더 정렬
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
};
this.tbList = new Tabulator(this.table, {
layout: "fitColumns",
data: [], //기본 데이터
columns: fields, //컬럼 설정
columnDefaults: commonFieldData,
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
// validationMode: "highlight",
});
/*
* @Overview 테이블 만들어지면 데이터 불러오기
* @Parameter 없음
*/
this.tbList.on("tableBuilt", () => {
this.getMainList();
});
}
}
}

View File

@ -13,26 +13,25 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<!-- form 시작 -->
<form name="frmWorkData" method="post" class="flexcol gap10">
<!-- form button-container -->
<div class="form-button-container flexrow flexbetween gap10">
<!-- <div class="form-button-box flexrow gap06 flex-3">
</div>
<div class="form-button-box flexrow gap06 flex-5">
<button type="button" v-for="(tab, idx) in tabs2" :key="idx" :class="{ on : activeTab === tab }" @click="showComponent(com2[idx], tab)" >{{ tab }}</button>
</div> -->
<div class="form-button-box flexrow gap06 flex-3 min-width-572">
<button type="button" v-for="(tab, idx) in tabs1" :key="idx" :class="{ on : activeTab === tab}" @click="popDrawSTD(`${tab}`)" >{{ tab }}</button>
<div class="form-button-container flexrow flexbetween">
<div class="form-button-box flexrow gap06">
<button class="form-button close-btn" type="button" @click="close">닫기</button>
<button class="form-button point-btn" type="button" @click="showDefect">과거불량이력 조회</button>
<button class="form-button point-btn" type="button" @click="showWrkDocs">작업표준서 조회</button>
<button class="form-button point-btn" type="button" @click="showDraw">도면 조회</button>
</div>
<div class="form-button-box flexrow gap06 flex-5 flexend">
<button type="button" v-for="(tab, idx) in tabs2" :key="idx" :disabled="isDisabled[idx]" :id="tab.id" :class="{ on : activeTab === tab.name }" @click="showComponent(tab.id, tab.name)" >{{ tab.name }}</button>
<div class="form-button-box flexrow gap06">
<button class="form-button point-btn" type="button" @click="showComponent('isFacltBreak')">설비 고장등록</button>
<button class="form-button run-btn" type="button" @click="showComponent('isRun')">가동</button>
<button class="form-button norun-btn" type="button" @click="showComponent('isNoRun')">비가동</button>
</div>
</div>
<!-- form 내용 -->
<div class="form-contents flexrow gap10">
<div class="info-container flex-3 flexcol flexbetween gap10 min-width-572">
<div class="info-container flex-1 flexcol flexbetween gap10">
<div class="form-box flexcol gap10 flexcenter flex-4">
<div class="form-box flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
@ -68,25 +67,23 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1" @click="showComponent('isWorker')">
<label for="EMP_NM">작업자</label>
<input v-model="formData.EMP_NM" :class="{on : isComponent['isWorker']}" type="text" id="EMP_NM" name="EMP_NM"
<div class="input-box flex-1">
<label for="EMP_NO">작업자</label>
<input v-model="formData.EMP_NO" @click="showComponent('isWorker')" type="text" id="EMP_NO" name="EMP_NO"
class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div>
<div class="input-box flex-1">
</div>
</div>
</div>
<div class="form-box flexcol gap10 flexcenter flex-2">
<div class="form-box flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="WO_NO">설비</label>
<input v-model="formData.FACLT_CD" @click="showComponent('isFacility')" :class="{on : isComponent['isFacility']}" type="text" id="WO_NO" name="WO_NO"
<input v-model="formData.FACLT_CD" @click="showComponent('isFacility')" type="text" id="WO_NO" name="WO_NO"
class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div>
<div class="input-box flex-1">
<label for="">비가동시간</label>
@ -100,14 +97,14 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<input type="text" id="WO_NO" name="WO_NO" class="form-control form-control-sm" readonly />
</div>
<div class="input-box flex-1">
<label for="">작업완료시간</label>
<label for="">작업완료</label>
<input type="text" id="" name="" class="form-control form-control-sm" readonly />
</div>
</div>
</div>
<div class="form-box flexcol gap10 flexcenter flex-2">
<div class="form-box flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
@ -123,21 +120,19 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="WO_NO">양품수량</label>
<input @click="showComponent('isProd')" :class="{on : isComponent['isProd']}" type="text" id="WO_NO" name="WO_NO"
<input @click="showComponent('isProd')" type="text" id="WO_NO" name="WO_NO"
class="form-control form-control-sm" readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div>
<div class="input-box flex-1">
<label for="">불량수량</label>
<input @click="showComponent('isDef')" :class="{on : isComponent['isDef']}" type="text" id="" name="" class="form-control form-control-sm"
<input @click="showComponent('isDef')" type="text" id="" name="" class="form-control form-control-sm"
readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div>
</div>
</div>
<div class="form-box flexcol gap10 flexcenter flex-1">
<div class="form-box flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
@ -148,7 +143,6 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
<label for="">검사등록</label>
<input @click="showComponent('isInsp')" type="text" id="" name="" class="form-control form-control-sm"
readonly />
<span><i class="fa-solid fa-arrow-pointer"></i></span>
</div>
</div>
@ -157,41 +151,433 @@ include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
</div>
<div class="detail-container flex-5 flexcol">
<div class="detail-contents height-full flexcol flexbetween gap10" v-if="isComponent['isDefHst']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isDefHst.php' ?>
</div>
<div class="detail-container flex-1 flexcol">
<div class="detail-contents height-full flexcol flexbetween gap10" v-if="isComponent['isWorker']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isWorker.php' ?>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">소속</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">작업자</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height: calc(100% - 80px);">
<div class="height-89">
<div class="hy-table" id="isWorker"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isFacility']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isFacility.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div class="height-89">
<div class="hy-table" id="isFacility"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isFacltBreak']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isFacltBreak.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div class="height-half">
<div class="hy-table" id="isFacility"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">고장등록시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1 flexrow">
<label for="" style="width:80px;">고장신고사유</label>
<textarea id="" name="" class="form-control form-control-sm"></textarea>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isRun']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isRun.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 112px);">
<div class="hy-table" id="isRun"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">가동시작시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isNoRun']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isNoRun.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween">
<div style="height:calc(100% - 148px);">
<div class="hy-table" id="isRun"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexcol gap06">
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">가동시작시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flexrow flexend flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box">
<button type="button" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button>
</div>
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isProd']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isProd.php' ?>
<!-- 헤더 -->
<div class="form-header flexrow form-box">
<div class="flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">이전공정<br>양품수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 120px);">
<div class="height-89">
<div class="hy-table" id="isProd"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isDef']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isDef.php' ?>
<div class="detail-contents flexcol gap10" v-if="isComponent['isDef']"><!-- 테이블 박스 -->
<!-- 헤더 -->
<div class="form-header flexrow form-box">
<div class="flexcol gap10">
<div class="input-container flexrow gap06">
<div class="input-box flex-1">
<label for="" style="width:80px;">작업일</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">시간</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" style="width:80px;">등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="input-container flexrow flexend flex-1">
<div class="input-box flexrow flex-1">
<label for="" style="width:80px;">비가동사유</label>
<div class="round-tab-box" style="width:calc(100% - 100px);">
<button type="button" class="tab-btn left-round">작업종료</button>
<button type="button" class="tab-btn">품목교체</button>
<button type="button" class="tab-btn">설비고장</button>
<button type="button" class="tab-btn right-round">자체결품</button>
</div>
</div>
</div>
</div>
<button type="button" class="add-btn basic-btn">추가</button>
</div>
<!-- 헤더 종료 // -->
<!-- 테이블 박스 -->
<div class="table-box flexcol flexbetween" style="height:calc(100% - 160px);">
<div class="height-89">
<div class="hy-table" id="isDef"></div>
</div>
<div class="table-title">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 테이블 박스 종료 // -->
</div>
<div class="detail-contents flexcol gap10" v-if="isComponent['isInsp']">
<?php include _SVC_PATH_ . '/site/sts_order_prod/popComponent/isInsp.php' ?>
<!-- 테이블 박스 -->
<div class="table-box height-full flexcol flexbetween gap10">
<ul class="flexrow tab-menu gap06">
<li id="first-tab" @click="isChangeTab('isInsp')" :class="{'on':isInspVal}">실적</li>
<li id="second-tab" @click="isChangeTab('isFile')" :class="{'on':isFileVal}">파일</li>
</ul>
<!-- tab container -->
<div v-if="isInspVal" class="table-box flexcol flexbetween" style="height:calc(100% - 43px);">
<div style="height:calc(100% - 112px);">
<div class="hy-table group-table groupby" id="isInsp"></div>
</div>
<!-- 헤더 -->
<div class="form-header form-box">
<div class="input-container flexrow gap06">
<div class="input-box flex-1 flexrow">
<label for="" >등록가능수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
<div class="input-box flex-1 flexrow flexend">
<label for="">수량</label>
<input type="text" id="" name="" class="form-control form-control-sm" />
</div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- 헤더 종료 // -->
</div>
<!-- tab container 종료 // -->
<!-- tab container -->
<div v-if="isFileVal" class="table-box flexcol flexbetween" style="height:calc(100% - 43px);">
<div style="height:calc(100% - 43px);">
<div class="hy-table" id="isInsp"></div>
</div>
<div class="table-title" style="margin-top:10px;">
<div class="button-box flexend">
<div class="add-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/add.php' ?>
선택 확인
</div>
<div class="remove-btn reverse-btn flexrow flexfillcenter gap06">
<?php include _SVC_INC_PATH_ . '/img/delete.php' ?>
선택 취소
</div>
</div>
</div>
</div>
<!-- tab container 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
</div>

View File

@ -1,61 +0,0 @@
<?php
include_once "{$_SERVER['DOCUMENT_ROOT']}/common.inc.php";
?>
<!-- file upload popup <첨부파일 등록> -->
<!-- 작업표준서 조회 팝업 -->
<div id="popup_file_upload">
<div class="awn-popup-confirm awn-partner custom-popup">
<div class="awn-popup-title"><i class="bi bi-card-heading"></i> 작업표준서</div>
<div class="awn-popup-search mb-block btn-ksmain-inject-block">
<!-- <div class="s_exp"> 더블클릭으로 선택/반영 합니다.</div>-->
<div class="s_fld form-inline d-block">
<!-- <label for="sgrp">오더번호: </label>
<select id="sgrp" name="sgrp" class="form-control form-select w100">
</select> -->
<!-- <label for="stxt">오더번호: </label>-->
<!-- <input type="text" class="form-control d-inline w120 align-bottom">-->
<!-- <label for="stxt">공정: </label>-->
<!-- <input type="text" name="stxt" id="stxt" class="form-control d-inline w120 align-bottom">-->
<!-- |
<button type="button" id="ptReset" class="btn btn-danger">
<i class="fa-regular fa-window-restore"></i>
초기화
</button> -->
</div>
</div>
<div class="awn-popup-content" style="padding: 10px 10px;">
<div class="table-box flex-1" id="sub_table">
<!-- 테이블 헤더 (제목, 추가, 삭제, 저장) -->
<div class="table-title">
<p class="tilte"></p>
<!-- 버튼 -->
<!-- <div class="button-box">-->
<!-- <button class="add-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/add.php' ?>
<!-- 추가-->
<!-- </button>-->
<!-- <button class="remove-btn reverse-btn">-->
<!-- --><?php //include _SVC_INC_PATH_ . '/img/delete.php' ?>
<!-- 삭제-->
<!-- </button>-->
<!-- </div>-->
<!-- 버튼 종료 // -->
</div>
<!-- 테이블 헤더 종료 // -->
<!-- 테이블 -->
<div class="hy-table"></div>
<!-- 테이블 종료 // -->
</div>
<!-- 테이블 박스 종료 // -->
</div>
</div>
</div>
<!-- file upload popup <첨부파일 등록> -->
<script src="./reg_prod_result.js"></script>

View File

@ -31,36 +31,30 @@ if( !_notAuth("R") ){/************ 권한체크*/
$retval['code'] = false;
}
break;
// 생산오더별 진행현황
case 'getStsList':
case "getOrderList":
$retval['code'] = true;
// $sql = "USP_B_OPERATION_S10";
// $params = array(
// "OP_NM" => "",
// "USE_FLG" => "Y"
// );
$squl = "USP_P_WO_OPER_RSLT_S40";
// $rst = $baseObj->DB->exec($sql,$params);
$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;
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
// $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,7 +3,6 @@
*/
class Tb_oper_class {
constructor(container){
this.ajaxUrl = "./sts_order_prod.ajax.php";
@ -221,13 +220,13 @@ class Tb_oper_class {
const VueOperStatusCode = createApp({
data(){
return {
ajaxUrl: './sts_order_prod.ajax.php',
ajaxUrl: './sts_oper_prod.ajax.php',
codeList: [],
isHover: {}
}
},
mounted(){
this.getMainList("getStsList", "P_WO_NO");
this.getCodeList();
},
// computed: {
@ -236,116 +235,61 @@ const VueOperStatusCode = createApp({
// }
// },
methods:{
initData(group){
for(let i = 0; i < group.length; i++){
// 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)
finalDataList = []
for(let j=0;j<10;j++){
const operData = group[i][j];
// console.log(operData)
if(operData){
finalDataList.push(
{
공정명: operData.공정 ,
계획수량: operData.계획수량,
실적수량 : operData.실적수량,
투입시간:operData.투입시간,
종료시간 : operData.종료시간,
예상종료시간 : operData.예상종료시간 ,
설비: operData.설비,
작업자: operData.작업자
}
)
}else{
kuls_alert(data.mesg);
finalDataList.push({})
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
}
group[i][0].공정 = finalDataList
this.codeList.push(group[i][0]);
for(let i=0; i<this.codeList.length; i++){
this.isHover[i] = []
}
}
// 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,
OP_SEQ: element?.OP_SEQ,
계획수량: element?.계획수량,
PRD_QTY: element?.PRD_QTY,
ST_TM: element?.ST_TM,
ED_TM: element?.ED_TM,
EMP_NO: element?.WRK_EMP_NO,
예상종료시간: element?.예상종료시간,
FACLT_CD: element?.FACLT_CD,
EMP_NM: element?.EMP_NM
}
});
console.log(group[i][0]);
realTemp.push(group[i][0]);
}
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', 작업자 :'이창희'}
// ];
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;
for(let i=0; i<this.codeList.length; i++){
this.isHover[i] = []
}
const group = Object.values(Object.groupBy(temp, ({생산오더}) => 생산오더))
console.log(group);
this.initData(group);
// 실제 데이터 입력함수
// ajax_json({
@ -362,23 +306,20 @@ const VueOperStatusCode = createApp({
// kuls_alert(err.message);
// }
// })
return this.codeList;
},
openPop(data, idx) {
const process = data['OP_CD'][idx]
const process = data['공정'][idx]
const bindingData = {
WO_NO: data['WO_NO'],
WO_SEQ: data['WO_SEQ'],
WO_NO: data['생산오더'],
// 상태: data[상태],
DRAW_NO: data['DRAW_NO'],
ITEM_CD: data['ITEM_CD'],
OP_SEQ: process['OP_SEQ'],
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'],
DRAW_NO: data['도면번호'],
ITEM_CD: data['품목'],
OP_CD: process['공정명'],
EMP_NO: process['작업자'],
FACLT_CD: process['설비'],
종료시간: process['종료시간'],
실적수량: process['실적수량'],
}
console.log(bindingData)
const pop = new FieldPop(bindingData);
@ -549,7 +490,7 @@ class Tb_order_class {
// 데이터 불러오기
this.tbList.on("tableBuilt", () => {
// this.getMainList();
this.getMainList();
});
// // row 클릭 시에
// this.tbList.on("rowClick", (e, tgt) => {
@ -581,7 +522,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="P_WO_NO">
<input type="text" id="">
<?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="getMainList('getStsList', 'P_WO_NO')">조회</button>
<button class="point-btn" id="filter_btn" @click="getCodeList()">조회</button>
<button class="point-btn disabled-btn" id="put_btn" disabled>저장</button>
</div>
</div>
@ -143,34 +143,33 @@ include_once _SVC_INC_PATH_ . "/header.php";
<tbody>
<template v-for="(code, idx) in codeList">
<tr>
<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.생산오더}}<br>{{code.등록일}}</td>
<td rowspan="5">{{code.품목}}<br>{{code.도면번호}}<br>{{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 rowspan="5">{{code.작업순서}}</td>
<td rowspan="5">{{code.완료}}</td>
<td colspan="2" v-for="index in 10" :key="`process-${index-1}`" @click="openPop(code, index-1)" @mouseenter="isHover[idx][index-1] = true" @mouseleave="isHover[idx][index-1] = false" :class="{'on':isHover[idx][index-1] }">
{{ code.OP_CD[index-1]?.OP_CD }}
<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]}">
{{ process.공정명 }}
</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['OP_CD'][n/2-1]?.PRD_QTY : code['OP_CD'][(n-1)/2]?.PLAN_QTY }}
<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].계획수량 }}
</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['OP_CD'][n/2-1]?.ED_TM : code['OP_CD'][(n-1)/2]?.ST_TM }}
<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].투입시간 }}
</td>
</tr>
<tr>
<td colspan="2" v-for="index in 10" :key="`pre-${index}`" @click="openPop(code, index-1)" @mouseenter="isHover[idx][index-1] = true" @mouseleave="isHover[idx][index-1] = false" :class="{'on':isHover[idx][index-1]}">
{{ code.OP_CD[index-1]?.예상종료시간 }}
<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>
</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['OP_CD'][n/2-1]?.EMP_NM : code['OP_CD'][(n-1)/2]?.FACLT_CD }}
<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].설비 }}
</td>
</tr>