update theme header

This commit is contained in:
Nguyen Van Luan/(Nguyen Van Luan)/현장대리인/SK
2025-07-25 12:30:27 +09:00
19 changed files with 607 additions and 1599 deletions

View File

@ -3,13 +3,14 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row algin="center" no-gutters>
<v-row algin="end" no-gutters>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="역할ID"
valueNm="roleId"
:searchOption="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="3">
@ -18,17 +19,19 @@
label="역할명"
valueNm="roleNm"
:searchOption="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="6" class="text-right">
<!-- <v-btn @click="test = !test">WWW</v-btn> -->
<BtnSearch />
<BtnSearch size="large" />
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-row ref="contents" style="height: 100vh;">
<v-col cols="12" lg="2" class="h100">
<v-card>
<v-card-title>

View File

@ -339,7 +339,7 @@ export default {
// 사용자 리스트 그리드 세팅
gridInit() {
this.gridInitTest(); return
// this.gridInitTest(); return
const gridHeight = this.$refs.gridParent.offsetHeight - 90;

View File

@ -1,242 +1,224 @@
<template>
<div class="l-layout">
<!-- 리스트 페이지 시작 -->
<div v-if="pageActionFlag == 'list'" class="h100">
<v-row align="center" no-gutters>
<v-col :cols="12">
<v-card>
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0">공지사항</v-card-title>
<div v-if="pageActionFlag == 'list'" class="h1001">
<v-card class="" >
<div class="pa-5">
<v-row align="center" no-gutters >
<v-col :cols="12" class="d-flex align-center justify-space-between">
<v-card-title class="pa-0 custom-title-4">공지사항</v-card-title>
<div class="d-flex align-center">
<!-- <v-btn @click="listPageButtonGroupClickEvent('view')" :ripple="false" class="mr-1">상세보기</v-btn> -->
<a-button type="primary" size="large" @click="listPageButtonGroupClickEvent('write')" :ripple="false"
icon="edit" class="mr-1">작성</a-button>
<!-- <v-btn @click="listPageButtonGroupClickEvent('delete')" :ripple="false">삭제</v-btn> -->
</div>
</div>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-col :cols="12">
<v-card class="pa-5">
<div ref="gridParent" class="h100 px-50">
<component :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
ref="noticeMngGrid" @getRowsData="getRowData" :dataPath="dataPathMock" />
</div>
<!-- <div class="h100 W100 px-50" style="min-height:calc(100% - 70px)">
</div> -->
</v-card>
</v-col>
</v-row>
</v-col>
<v-col :cols="12" ref="contents" class="mt-5">
<div ref="gridParent" class="h100 px-50">
<component :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
ref="noticeMngGrid" @getRowsData="getRowData" :dataPath="dataPathMock" />
</div>
</v-col>
</v-row>
</div>
</v-card>
</div>
<!-- 리스트 페이지 -->
<!-- 상세보기 페이지 시작 -->
<div v-if="pageActionFlag == 'view'" class="h100">
<div v-if="pageActionFlag == 'view'" class="h1001">
<v-card>
<v-row class="pa-5">
<v-col :cols="12" class="d-flex align-center justify-space-between ">
<v-card-title class="pa-0 custom-title-4">공지사항</v-card-title>
<div class="d-flex align-center">
<a-button @click="viewPageButtonGroupClickEvent('list')" type="primary" :ripple="false" class="mr-1" icon="unordered-list" >목록</a-button>
<a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false" class="mr-1" icon="send-outlined" >
<v-icon
small
:class="['mr-2']"
>$icoSend</v-icon>
<a-button @click="viewPageButtonGroupClickEvent('list')" type="primary" :ripple="false" class="mr-1"
icon="unordered-list">목록</a-button>
<a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false" class="mr-1"
icon="send-outlined">
<v-icon small :class="['mr-2']">$icoSend</v-icon>
답글
</a-button>
<a-button @click="viewPageButtonGroupClickEvent('update')" type="primary" :ripple="false" class="mr-1" icon="edit">수정</a-button>
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete" >삭제</a-button>
<a-button @click="viewPageButtonGroupClickEvent('update')" type="primary" :ripple="false" class="mr-1"
icon="edit">수정</a-button>
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button>
</div>
</v-col>
<v-col :cols="12" class="custom-title-4-new">
제목
</v-col>
<v-col :cols="12">
<v-text-field v-model="viewActionData.title" class="v-input__custom" hide-details
:readonly="true">
<p class="custom-title-3 mb-2"> 제목 </p>
<v-text-field v-model="viewActionData.title" class="v-input__custom" hide-details :readonly="true">
</v-text-field>
</v-col>
</v-row>
<v-row style="height:calc(100% - 218px);">
<v-col :cols="12" style="height: 100%;">
<v-card class="pa-5" style="overflow-y:auto;">
<viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit"
:initialValue="viewActionData.content" theme="white"
:class="isDarkMode ? 'theme--white' : 'theme--black'" />
</v-card>
<v-col :cols="12" style="min-height:calc(90vh - 218px);" class="pa-5">
<viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit"
:initialValue="viewActionData.content" theme="white"
:class="isDarkMode ? 'theme--white' : 'theme--black'" />
</v-col>
</v-row>
<v-row>
<v-col :cols="12">
<v-card class="pa-5">
<v-row align="center" no-gutters>
<v-col cols="1">
<v-card-subtitle class="pa-0">파일목록</v-card-subtitle>
</v-col>
<v-col :cols="11">
<v-row v-for="fileData in viewActionData.fileData" :key="fileData.apndFileId">
<a @click.prevent="downloadFile(fileData)">
<div class="search-box-label">
{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}
</div>
</a>
</v-row>
</v-col>
</v-row>
</v-card>
<v-col :cols="6">
<p class="custom-title-3 mb-2">파일목록</p>
<div v-for="fileData in viewActionData.fileData"
:key="fileData.apndFileId"
class="file-item">
<a @click.prevent="downloadFile(fileData)">
<div class="d-flex justify-space-between search-box-label">
<v-icon>mdi-paperclip</v-icon>
<span class="file-item-name">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span>
</div>
</a>
</div>
</v-col>
</v-row>
</v-card>
</div>
<!-- 상세보기 페이지 -->
<!-- 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'write'" class="h100">
<v-row align="center" no-gutters>
<v-col :cols="12">
<v-card>
<v-card-title>공지사항</v-card-title>
<v-row class="pa-5">
<v-col :cols="12" class="custom-title-4-new">
제목
</v-col>
<v-col :cols="12">
<v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined>
</v-text-field>
</v-col>
<v-col :cols="12" style="min-height: calc(90vh - 270px);">
<editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" />
</v-col>
<v-col :cols="12" class="custom-title-4-new mt-2">
<div v-if="pageActionFlag == 'write'" class="h1001">
<v-card>
<div class="pa-5">
<v-row class="pa-50">
<v-col :cols="12" class="">
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
</v-col>
<v-col :cols="12" class="custom-title-4-new mt-4">
<p class="custom-title-3 mb-2">제목</p>
<v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined>
</v-text-field>
</v-col>
<v-col :cols="12" style="min-height: calc(90vh - 270px);">
<editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" />
</v-col>
<v-col :cols="12" class="mt-2">
<p class="custom-title-3 mb-2">
파일첨부
</v-col>
<v-col :cols="6">
<!-- background-color="#47535c" -->
<v-file-input multiple show-size v-model="writeActionData.fileData" hide-details="true"
clear-icon="delete" chips label="업로드" flat hide-input outlined>
<!-- append-icon="cancel" -->
</v-file-input>
</v-col>
<v-col :cols="12" class="text-right">
<a-button @click="writePageButtonGroupClickEvent('cancel')" :ripple="false" class="mr-2">취소</a-button>
<a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false" type="primary">등록</a-button>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
</p>
</v-col>
<v-col :cols="6">
<div class="" v-if="writeActionData.fileData">
<div
v-for="(fileData, index) in writeActionData.fileData"
:key="fileData.apndFileId"
class="file-item d-flex justify-space-between">
<div class="file-item-detail">
<v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span>
</div>
<a-icon type="delete" class="v-icon pointer" @click="writeActionData.fileData.splice(index, 1)" />
</div>
</div>
<a-button class="mt-2" icon="upload" @click="$refs.writeInputFile.$refs.input.click()" >
업로드
</a-button>
<v-file-input
ref="writeInputFile"
v-model="writeActionData.fileData"
multiple
outlined
hide-input
class="d-none"
prepend-icon="mdi-tray-arrow-up"
></v-file-input>
</v-col>
<v-col :cols="12" class="text-right">
<a-button @click="writePageButtonGroupClickEvent('cancel')" :ripple="false" class="mr-2">취소</a-button>
<a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false" type="primary">등록</a-button>
</v-col>
</v-row>
</div>
</v-card>
</div>
<!-- 작성 페이지 -->
<!-- 답글 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'reply'" class="h1001">
<v-card class="pa-5">
<v-row>
<v-col :cols="12" class="card-title-color">
<v-card-title class="pa-0 custom-title-4">공지사항</v-card-title>
<v-row align="center" class="mt-0">
<v-col :cols="12" class="">
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
</v-col>
</v-row>
<v-row align="center" class="mt-5" >
<v-col :cols="12">
<p class="custom-title-4-new">제목</p>
<v-text-field v-model="replyActionData.title" class="v-input__custom" placeholder="제목" outlined hide-details>
<p class="custom-title-3 mb-2">제목</p>
<v-text-field v-model="replyActionData.title" class="v-input__custom" placeholder="제목" outlined
hide-details>
</v-text-field>
</v-col>
<v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-4" >
<v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-2">
<editor ref="tuiReplyEditor" height="100%" initialEditType="wysiwyg" />
</v-col>
<v-col :cols="12" class="custom-title-4-new mt-4" >
파일첨부
</v-col>
<v-col :cols="12" >
<v-file-input
multiple
show-size
v-model="replyActionData.fileData"
hide-details="true">
<v-col :cols="6" class="mt-4">
<p class="custom-title-3 mb-2">
파일첨부
</p>
<div class="" v-if="replyActionData.fileData">
<div
v-for="(fileData, index) in replyActionData.fileData"
:key="fileData.apndFileId"
class="file-item d-flex justify-space-between">
<div class="file-item-detail">
<v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span>
</div>
<a-icon type="delete" class="v-icon pointer" @click="replyActionData.fileData.splice(index, 1)" />
</div>
</div>
<a-button class="mt-3" icon="upload" @click="$refs.replyInputFile.$refs.input.click()" >
업로드
</a-button>
<v-file-input ref="replyInputFile" multiple show-size v-model="replyActionData.fileData" hide-details="true" class="d-none">
</v-file-input>
</v-col>
<v-col :cols="12" class="text-right">
<a-button @click="replyPageButtonGroupClickEvent('cancel')" :ripple="false">취소</a-button>
<a-button @click="replyPageButtonGroupClickEvent('reply')" :ripple="false" type="primary" >등록</a-button>
<a-button @click="replyPageButtonGroupClickEvent('reply')" :ripple="false" type="primary">등록</a-button>
</v-col>
</v-row>
</v-card>
</div>
<!-- 답글 작성 페이지 -->
<!-- 수정 페이지 시작 -->
<div v-if="pageActionFlag == 'update'" class="h100">
<v-row align="center" no-gutters>
<v-col :cols="12">
<v-card>
<v-card-title>공지사항</v-card-title>
</v-card>
</v-col>
</v-row>
<v-row>
<v-col :cols="12">
<v-card min-height="60" class="pa-5">
<v-text-field v-model="updateActionData.title" class="v-input__custom" placeholder="제목" hide-details>
</v-text-field>
</v-card>
</v-col>
</v-row>
<v-row style="height:calc(100% - 342px)">
<v-col :cols="12">
<editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg"
:initialValue="updateActionData.content" />
</v-col>
</v-row>
<v-row>
<v-col :cols="12">
<v-card class="pa-5">
<v-row align="center" no-gutters>
<v-col cols="1">
<v-card-subtitle class="pa-0">파일첨부</v-card-subtitle>
</v-col>
<v-col :cols="4">
<v-file-input multiple background-color="#47535c" show-size v-model="updateActionData.fileData"
hide-details="true">
<div v-if="pageActionFlag == 'update'" class="h1001">
<v-card>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="12">
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
</v-col>
<v-col :cols="12" class="mt-4">
<p class="custom-title-3 mb-2">제목</p>
<v-text-field v-model="updateActionData.title" class="v-input__custom" placeholder="" hide-details outlined>
</v-text-field>
</v-col>
<v-col :cols="12" style="height: calc(90vh - 270px);" class="mt-4" >
<editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg"
:initialValue="updateActionData.content" />
</v-col>
<v-col :cols="6">
<p class="pa-0 mb-2 custom-title-4-new-1">파일첨부</p>
<div class="" v-if="updateActionData.fileData">
<div
v-for="(fileData, index) in updateActionData.fileData"
:key="fileData.apndFileId"
class="file-item d-flex justify-space-between">
<div class="file-item-detail">
<v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span>
</div>
<a-icon type="delete" class="v-icon pointer" @click="updateActionData.fileData.splice(index, 1)" />
</div>
</div>
<a-button class="mt-2" icon="upload" @click="$refs.updateInputFile.$refs.input.click()" >
업로드
</a-button>
<v-file-input ref="updateInputFile" multiple show-size v-model="updateActionData.fileData"
hide-details="true" class="d-none">
</v-file-input>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row>
<v-col :cols="12">
<v-card class="pa-5">
<v-row align="center">
<v-col :cols="1">
<v-card-subtitle class="pa-0">파일목록</v-card-subtitle>
</v-col>
<v-col :cols="11">
<v-row v-for="fileData in updateActionData.currentFileList" :key="fileData.apndFileId">
<a @click.prevent="downloadFile(fileData)">
<v-col :cols="12">
<div class="search-box-label">
{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}
</div>
</v-col>
</a>
<v-icon class="pl-5" @click="addFileToDeleteFileList(fileData)">
mdi-close
</v-icon>
</v-row>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row>
<v-col :cols="12" class="text-right">
<v-btn @click="updatePageButtonGroupClickEvent('update')" :ripple="false">등록</v-btn>
<v-btn @click="updatePageButtonGroupClickEvent('cancel')" :ripple="false">취소</v-btn>
</v-col>
</v-row>
</v-col>
<v-col :cols="12" class="text-right">
<a-button @click="updatePageButtonGroupClickEvent('cancel')" >취소</a-button>
<a-button @click="updatePageButtonGroupClickEvent('update')" type="primary" >등록</a-button>
</v-col>
</v-row>
</div>
</v-card>
</div>
<!-- 수정 페이지 -->
</div>
@ -363,6 +345,9 @@ export default {
chkOpenTabList: 'chkOpenTabList',
getDomain: 'modules/list/getDomain',
}),
onTest(){
console.log(this.writeActionData.fileData);
},
async init() {
this.initData();
await this.gridInit();
@ -1069,7 +1054,18 @@ const dataPathDataExample = getPathDataExample({
</script>
<style lang="scss" scoped>
.pointer,
.tui-grid-table tr {
cursor: pointer;
}
.file-item {
width: auto;
margin: 2px 0;
padding: 4px;
background-color: #0000000A;
.file-item-name{
color: #1677FF;
}
}
</style>

View File

@ -6,7 +6,7 @@
<v-row align="end" no-gutters>
<v-col :cols="3">
<InputText :labelCols="12" :textCols="12" :parentPrgmId="myPrgmId" label="지표명"
valueNm="searchEffcIdxNm" :searchOption="true" :customClass="'input-large fixed-width'"
valueNm="searchEffcIdxNm" :searchOption="true" :customClass="'input-large surface-name'"
:iconShow="true" />
</v-col>
<v-col :cols="9" class="text-right">
@ -27,7 +27,7 @@
<div ref="gridParent" id="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :preventFocusChangeEventFlag="false"
:dataPath="dataPathExample" />
/>
</div>
</div>
</v-card>
@ -212,66 +212,65 @@ export default {
disabledFlag: false,
},
],
loadGrid: true,
dataPathExample: {
"effcIdxGrid": {
data: [
{
"effcIdxId": "E001",
"effcIdxNm": "에너지 소비 효율",
"effcKind": "환경"
},
{
"effcIdxId": "E002",
"effcIdxNm": "작업 시간 대비 생산량",
"effcKind": "생산성"
},
{
"effcIdxId": "E003",
"effcIdxNm": "장비 가동률",
"effcKind": "운영"
},
{
"effcIdxId": "E004",
"effcIdxNm": "불량률",
"effcKind": "품질"
},
{
"effcIdxId": "E005",
"effcIdxNm": "재고 회전율",
"effcKind": "물류"
}
]
,
column: [
{
header: '효율지표 ID',
name: 'effcIdxId',
align: 'center',
// hidden:true
},
{
header: '효율지표명',
name: 'effcIdxNm',
align: 'left',
minWidth: 150,
// hidden:true
},
loadGrid: false,
// "effcIdxGrid": {
// data: [
// {
// "effcIdxId": "E001",
// "effcIdxNm": "에너지 소비 효율",
// "effcKind": "환경"
// },
// {
// "effcIdxId": "E002",
// "effcIdxNm": "작업 시간 대비 생산량",
// "effcKind": "생산성"
// },
// {
// "effcIdxId": "E003",
// "effcIdxNm": "장비 가동률",
// "effcKind": "운영"
// },
// {
// "effcIdxId": "E004",
// "effcIdxNm": "불량률",
// "effcKind": "품질"
// },
// {
// "effcIdxId": "E005",
// "effcIdxNm": "재고 회전율",
// "effcKind": "물류"
// }
// ]
// ,
// column: [
// {
// header: '효율지표 ID',
// name: 'effcIdxId',
// align: 'center',
// // hidden:true
// },
// {
// header: '효율지표명',
// name: 'effcIdxNm',
// align: 'left',
// minWidth: 150,
// // hidden:true
// },
{
header: '효율지표종류',
name: 'effcKind',
align: 'left',
// hidden: true,
},
// { header: '등록 사용자', name: 'regUserNo', hidden: true },
// { header: '등록 일자', name: 'regDttm', hidden: true },
// { header: '수정 사용자', name: 'procUserNo', hidden: true },
// { header: '수정 일자', name: 'procDttm', hidden: true },
],
// {
// header: '효율지표종류',
// name: 'effcKind',
// align: 'left',
// // hidden: true,
// },
// // { header: '등록 사용자', name: 'regUserNo', hidden: true },
// // { header: '등록 일자', name: 'regDttm', hidden: true },
// // { header: '수정 사용자', name: 'procUserNo', hidden: true },
// // { header: '수정 일자', name: 'procDttm', hidden: true },
// ],
}
},
// }
// },
initFlag: false,
selectValueList01: [],
selectValueList02: [],
@ -904,6 +903,10 @@ export default {
columnOptions: {
resizable: true,
},
header: {
height: 37,
},
rowHeight: 'auto',
};
this.setGridOption({
gridKey: this.gridName,
@ -1439,6 +1442,6 @@ const defaultData = {
</script>
<style lang="scss" scoped>
.v-input__custom.surface-name fieldset {
width: 345px;
max-width: 345px;
}
</style>

View File

@ -66,9 +66,14 @@
</div>
<div class="px-4" style="height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" :columnClickEventFlag="true" @columnClick="columnClick"
:dataPath="dataPathExample" />
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
:columnClickEventFlag="true"
@columnClick="columnClick"
/>
</div>
</div>
</v-card>
@ -141,442 +146,8 @@ export default {
selectValueList05: [],
selectValueList06: [],
initedFlag: false,
loadGrid: true,
loadGrid: false,
gridName: 'rowGrid',
dataPathExample: {
"rowGrid": {
data: [
{
"no": 1,
"fabNm": "B02",
"eqpmGrpNm": "ETCH Group",
"eqpmId": "EQ028",
"eqpmNm": "DEP D78",
"gdIdxId": "GD004",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 34,
"warnStndVal": 56,
"totVal": 30,
"okFg": "주의",
"gdMeth": "Adjust pad pressure",
"ngCnt": 0
},
{
"no": 2,
"fabNm": "C01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ003",
"eqpmNm": "PHOTO P34",
"gdIdxId": "GD028",
"gdIdxNm": "Exposure Time Guide",
"careStndVal": 40,
"warnStndVal": 53,
"totVal": 48,
"okFg": "주의",
"gdMeth": "Tune RF power",
"ngCnt": 7
},
{
"no": 3,
"fabNm": "C01",
"eqpmGrpNm": "CMP Group",
"eqpmId": "EQ012",
"eqpmNm": "CMP C56",
"gdIdxId": "GD016",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 31,
"warnStndVal": 34,
"totVal": 44,
"okFg": "양호",
"gdMeth": "Change exposure time",
"ngCnt": 6
},
{
"no": 4,
"fabNm": "D01",
"eqpmGrpNm": "ETCH Group",
"eqpmId": "EQ016",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD004",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 33,
"warnStndVal": 40,
"totVal": 56,
"okFg": "주의",
"gdMeth": "Modify gas flow",
"ngCnt": 2
},
{
"no": 5,
"fabNm": "C01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ004",
"eqpmNm": "CMP C56",
"gdIdxId": "GD008",
"gdIdxNm": "Deposition Rate Guide",
"careStndVal": 33,
"warnStndVal": 44,
"totVal": 20,
"okFg": "주의",
"gdMeth": "Adjust pad pressure",
"ngCnt": 7
},
{
"no": 6,
"fabNm": "B01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ019",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD014",
"gdIdxNm": "Polish Rate Guide",
"careStndVal": 34,
"warnStndVal": 38,
"totVal": 46,
"okFg": "양호",
"gdMeth": "Modify gas flow",
"ngCnt": 1
},
{
"no": 7,
"fabNm": "D01",
"eqpmGrpNm": "ETCH Group",
"eqpmId": "EQ024",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD008",
"gdIdxNm": "Exposure Time Guide",
"careStndVal": 37,
"warnStndVal": 51,
"totVal": 24,
"okFg": "경고",
"gdMeth": "Modify gas flow",
"ngCnt": 10
},
{
"no": 8,
"fabNm": "D01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ014",
"eqpmNm": "DEP D78",
"gdIdxId": "GD023",
"gdIdxNm": "Deposition Rate Guide",
"careStndVal": 22,
"warnStndVal": 49,
"totVal": 43,
"okFg": "주의",
"gdMeth": "Change exposure time",
"ngCnt": 6
},
{
"no": 9,
"fabNm": "C01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ001",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD022",
"gdIdxNm": "Polish Rate Guide",
"careStndVal": 20,
"warnStndVal": 24,
"totVal": 51,
"okFg": "경고",
"gdMeth": "Modify gas flow",
"ngCnt": 9
},
{
"no": 10,
"fabNm": "D01",
"eqpmGrpNm": "CMP Group",
"eqpmId": "EQ027",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD002",
"gdIdxNm": "Deposition Rate Guide",
"careStndVal": 27,
"warnStndVal": 46,
"totVal": 60,
"okFg": "양호",
"gdMeth": "Modify gas flow",
"ngCnt": 4
},
{
"no": 11,
"fabNm": "C01",
"eqpmGrpNm": "PHOTO Group",
"eqpmId": "EQ004",
"eqpmNm": "CMP C56",
"gdIdxId": "GD025",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 30,
"warnStndVal": 58,
"totVal": 28,
"okFg": "경고",
"gdMeth": "Modify gas flow",
"ngCnt": 3
},
{
"no": 12,
"fabNm": "D01",
"eqpmGrpNm": "ETCH Group",
"eqpmId": "EQ022",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD024",
"gdIdxNm": "Polish Rate Guide",
"careStndVal": 27,
"warnStndVal": 42,
"totVal": 62,
"okFg": "양호",
"gdMeth": "Adjust pad pressure",
"ngCnt": 0
},
{
"no": 13,
"fabNm": "C01",
"eqpmGrpNm": "ETCH Group",
"eqpmId": "EQ018",
"eqpmNm": "PHOTO P34",
"gdIdxId": "GD013",
"gdIdxNm": "Exposure Time Guide",
"careStndVal": 32,
"warnStndVal": 35,
"totVal": 62,
"okFg": "양호",
"gdMeth": "Change exposure time",
"ngCnt": 5
},
{
"no": 14,
"fabNm": "D01",
"eqpmGrpNm": "CMP Group",
"eqpmId": "EQ017",
"eqpmNm": "DEP D78",
"gdIdxId": "GD005",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 36,
"warnStndVal": 47,
"totVal": 39,
"okFg": "경고",
"gdMeth": "Tune RF power",
"ngCnt": 10
},
{
"no": 15,
"fabNm": "D01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ025",
"eqpmNm": "DEP D78",
"gdIdxId": "GD028",
"gdIdxNm": "Deposition Rate Guide",
"careStndVal": 36,
"warnStndVal": 59,
"totVal": 63,
"okFg": "양호",
"gdMeth": "Adjust pad pressure",
"ngCnt": 1
},
{
"no": 16,
"fabNm": "B02",
"eqpmGrpNm": "PHOTO Group",
"eqpmId": "EQ026",
"eqpmNm": "PHOTO P34",
"gdIdxId": "GD008",
"gdIdxNm": "Exposure Time Guide",
"careStndVal": 24,
"warnStndVal": 59,
"totVal": 20,
"okFg": "양호",
"gdMeth": "Change exposure time",
"ngCnt": 1
},
{
"no": 17,
"fabNm": "B01",
"eqpmGrpNm": "DEP Group",
"eqpmId": "EQ023",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD021",
"gdIdxNm": "Polish Rate Guide",
"careStndVal": 26,
"warnStndVal": 51,
"totVal": 31,
"okFg": "주의",
"gdMeth": "Modify gas flow",
"ngCnt": 2
},
{
"no": 18,
"fabNm": "B02",
"eqpmGrpNm": "PHOTO Group",
"eqpmId": "EQ012",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD023",
"gdIdxNm": "Polish Rate Guide",
"careStndVal": 34,
"warnStndVal": 45,
"totVal": 64,
"okFg": "경고",
"gdMeth": "Change exposure time",
"ngCnt": 1
},
{
"no": 19,
"fabNm": "B01",
"eqpmGrpNm": "PHOTO Group",
"eqpmId": "EQ018",
"eqpmNm": "ETCH E12",
"gdIdxId": "GD002",
"gdIdxNm": "Etch Depth Guide",
"careStndVal": 30,
"warnStndVal": 31,
"totVal": 51,
"okFg": "주의",
"gdMeth": "Tune RF power",
"ngCnt": 2
},
{
"no": 20,
"fabNm": "C01",
"eqpmGrpNm": "CMP Group",
"eqpmId": "EQ018",
"eqpmNm": "CMP C56",
"gdIdxId": "GD021",
"gdIdxNm": "Exposure Time Guide",
"careStndVal": 30,
"warnStndVal": 51,
"totVal": 45,
"okFg": "양호",
"gdMeth": "Change exposure time",
"ngCnt": 7
},
{
"no": 21,
"fabNm": "B01",
"eqpmGrpNm": "CMP Group",
"eqpmId": "EQ021",
"eqpmNm": "CMP C56",
"gdIdxId": "GD001",
"gdIdxNm": "Deposition Rate Guide",
"careStndVal": 23,
"warnStndVal": 42,
"totVal": 40,
"okFg": "주의",
"gdMeth": "Tune RF power",
"ngCnt": 5
}
]
,
column: [
{
header: 'No.',
name: 'no',
align: 'right',
width: 30,
},
{
header: 'FAB',
name: 'fabNm',
align: 'left',
width: 80,
},
{
header: '설비그룹',
name: 'eqpmGrpNm',
width: 130,
},
{
header: '설비id',
name: 'eqpmId',
hidden: true,
},
{
header: '설비명',
name: 'eqpmNm',
width: 130,
},
{
header: '가이드명',
name: 'gdIdxId',
hidden: true,
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.gdIdxIdList.filter(
// item => item.value == value,
// );
// if (newValue.length > 0) {
// retVal = newValue[0].text;
// }
// //빈값일때 전체방지
// if (value == '' || value == null) {
// retVal = '';
// }
// return retVal;
// },
},
{
header: '가이드명',
name: 'gdIdxNm',
width: 200,
},
{
header: '주의',
name: 'careStndVal',
align: 'right',
width: 80,
},
{
header: '경고',
name: 'warnStndVal',
align: 'right',
width: 80,
},
{
header: '가이드값',
name: 'totVal',
align: 'right',
width: 120,
},
{
header: '평가',
name: 'okFg',
align: 'center',
width: 80,
},
{
header: '절감가이드 방법',
name: 'gdMeth',
},
{
header: 'NG발생건수',
name: 'ngCnt',
align: 'right',
width: 100,
},
],
option: {
// pageOptions: {
// useClient: true,
// perPage: 10,
// },
// scrollX: false,
scrollY: true
}
// pageOptions: {
// useClient: true,
// perPage: 10,
// },
// scrollX: false,
// scrollY: false
},
// pageOptions: {
// useClient: true,
// perPage: 10,
// },
// scrollX: true,
// scrollY: false
},
popDialog: false,
eqpmFlag: false,
eqpmKindFlag: false,
@ -667,7 +238,7 @@ export default {
});
this.selectValue04 = { eqpmId: [] };
await this.getEqpmGrp();
// await this.getEqpm(this.selectValueList03);
await this.getEqpm(this.selectValueList03);
}
},
async selectValue03(val) {
@ -789,7 +360,7 @@ export default {
} else {
this.setFromDt();
}
// await this.gridInit();
await this.gridInit();
},
async search() {
await this.getRowGridData();
@ -806,75 +377,69 @@ export default {
// this.pageData.toDt = Utility.setAftertDate(this.pageData, this.pageData.fromDt, "YYYYMMDD");
},
async getEqpmKind() {
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmKindCodeList',
// resKey: 'eqpmKindCodeLists',
// sendParam: {},
// });
// if (res.length > 0) {
// this.selectValueList01 = await res.map(item => {
// return {
// text: item.eqpmKindNm,
// value: item.eqpmKindId,
// };
// });
// this.selectValueList01.unshift({
// text: '전체',
// value: null,
// });
// if (
// this.routeData.eqpmKindId == null ||
// this.routeData.eqpmKindId == ''
// ) {
// this.selectValue01 = this.selectValueList01[0].value;
// } else if (
// this.routeData.eqpmKindId != null ||
// this.routeData.eqpmKindId != ''
// ) {
// this.selectValue01 = this.routeData.eqpmKindId;
// }
// } else {
// this.selectValueList01 = [];
// this.selectValue01 = null;
// }
let res = await this.postApiReturn({
apiKey: 'selectEqpmKindCodeList',
resKey: 'eqpmKindCodeLists',
sendParam: {},
});
if (res.length > 0) {
this.selectValueList01 = await res.map(item => {
return {
text: item.eqpmKindNm,
value: item.eqpmKindId,
};
});
this.selectValueList01.unshift({
text: '전체',
value: null,
});
if (
this.routeData.eqpmKindId == null ||
this.routeData.eqpmKindId == ''
) {
this.selectValue01 = this.selectValueList01[0].value;
} else if (
this.routeData.eqpmKindId != null ||
this.routeData.eqpmKindId != ''
) {
this.selectValue01 = this.routeData.eqpmKindId;
}
} else {
this.selectValueList01 = [];
this.selectValue01 = null;
}
this.setPageData({
eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01,
});
},
async getFab() {
// let res = await this.postApiReturn({
// apiKey: 'selectFabCodeList',
// resKey: 'fabCodeLists',
// sendParam: {},
// });
this.selectValueList02 = [
{ text: '온도 센서', value: 'ECC001' },
{ text: '압력 센서', value: 'ECC002' },
{ text: '유량 센서', value: 'ECC003' },
{ text: '습도 센서', value: 'ECC004' },
{ text: '전압 센서', value: 'ECC005' }
];
// if (res.length > 0) {
// // this.selectValueList02 = await res.map(item => {
// // return {
// // text: item.eccNm,
// // value: item.eccId,
// // };
// // });
// this.selectValueList02.unshift({
// text: '전체',
// value: null,
// });
// if (this.routeData.fabId != null && this.routeData.fabId != '') {
// this.selectValue02 = this.routeData.fabId;
// } else if (this.routeData.fabId == null || this.routeData.fabId == '') {
// this.selectValue02 = this.selectValueList02[0].value;
// }
// } else {
// this.selectValueList02 = [];
// this.selectValue02 = null;
// }
let res = await this.postApiReturn({
apiKey: 'selectFabCodeList',
resKey: 'fabCodeLists',
sendParam: {},
});
if (res.length > 0) {
this.selectValueList02 = await res.map(item => {
return {
text: item.eccNm,
value: item.eccId,
};
});
this.selectValueList02.unshift({
text: '전체',
value: null,
});
if (this.routeData.fabId != null && this.routeData.fabId != '') {
this.selectValue02 = this.routeData.fabId;
} else if (this.routeData.fabId == null || this.routeData.fabId == '') {
this.selectValue02 = this.selectValueList02[0].value;
}
} else {
this.selectValueList02 = [];
this.selectValue02 = null;
}
this.setPageData({
fabIdList: this.selectValueList02,
fabId: this.selectValue02,
@ -923,30 +488,30 @@ export default {
},
async getEqpm(data) { },
async getGdIdx() {
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmGdIdxCodeList',
// resKey: 'eqpmGdIdxCodeLists',
// sendParam: {
// eqpmGrpId: this.selectValue03,
// },
// });
let res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxCodeList',
resKey: 'eqpmGdIdxCodeLists',
sendParam: {
eqpmGrpId: this.selectValue03,
},
});
// if (res.length > 0) {
// this.selectValueList05 = await res.map(item => {
// return {
// text: item.gdIdxNm,
// value: item.gdIdxId,
// };
// });
// this.selectValueList05.unshift({
// text: '전체',
// value: null,
// });
// this.selectValue05 = this.selectValueList05[0].value;
// } else {
// this.selectValueList05 = [];
// this.selectValue05 = null;
// }
if (res.length > 0) {
this.selectValueList05 = await res.map(item => {
return {
text: item.gdIdxNm,
value: item.gdIdxId,
};
});
this.selectValueList05.unshift({
text: '전체',
value: null,
});
this.selectValue05 = this.selectValueList05[0].value;
} else {
this.selectValueList05 = [];
this.selectValue05 = null;
}
this.setPageData({
gdIdxIdList: this.selectValueList05,
@ -987,6 +552,10 @@ export default {
resizable: true,
},
rowHeaders: ['rowNum'],
header: {
height: 37,
},
rowHeight: 'auto',
// pageOptions: {
@ -1130,27 +699,27 @@ export default {
if (e.columnName == 'ngCnt' && e.targetType == 'cell') {
// if(e.columnName == 'ngCnt' && data.ngCnt > 0){
this.$refs['EnrgEffcEqpmDetailPop'].popCheck = true;
// this.setPageData({
// rowGridSelectKey: e.rowKey,
// rowGridSelectData: {
// ...data,
// fromDt: this.pageData.fromDt,
// toDt: this.pageData.toDt,
// },
// });
this.setPageData({
rowGridSelectKey: e.rowKey,
rowGridSelectData: {
...data,
fromDt: this.pageData.fromDt,
toDt: this.pageData.toDt,
},
});
}
if (e.columnName == 'gdIdxNm' && e.targetType == 'cell') {
// if(e.columnName == 'ngCnt' && data.ngCnt > 0){
this.$refs['EnrgEffcGdIdxDetPop'].popCheck = true;
// this.setPageData({
// rowGridSelectKey: e.rowKey,
// rowGridSelectData: {
// ...data,
// fromDt: this.pageData.fromDt,
// toDt: this.pageData.toDt,
// },
// });
this.setPageData({
rowGridSelectKey: e.rowKey,
rowGridSelectData: {
...data,
fromDt: this.pageData.fromDt,
toDt: this.pageData.toDt,
},
});
}
},
},

View File

@ -147,6 +147,26 @@ export default {
// }
await this.loginChk();
},
// async loginChk() {
// const DOMAIN = '';
// const apiUrl = 'loginChk';
// const params = {
// local: 'ko',
// comId: this.userComId, // 요청 comId는 클라우드 서비스시는 입력 값으로 처리 되어야 할수 있음.
// userId: this.userId,
// userPswd: this.userPw,
// };
// const res = await this.$axios.post(DOMAIN + apiUrl, { params: params });
// const femsSessionCookie = 3434;
// const FEMS_SESSION = femsSessionCookie;
// $cookie.set('FEMS_SESSION', FEMS_SESSION);
// this.setUserInfo(res.data.dataset.userInfo);
// // alert("임시로 로그인 처리 되었습니다. dashboard 페이지로 이동합니다.");
// // console.log('res.data.dataset.userInfo: ', res.data.dataset.userInfo);
// // return;
// this.$router.push({ path: this.myHome.root });
// },
async loginChk() {
const DOMAIN = '';
const apiUrl = 'loginChk';
@ -156,15 +176,25 @@ export default {
userId: this.userId,
userPswd: this.userPw,
};
console.log('asdasd' + JSON.stringify( DOMAIN) + params)
const res = await this.$axios.post(DOMAIN + apiUrl, { params: params });
const femsSessionCookie = 3434;
if (res.data.retnCd === -9001) {
alert(res.data.retnMsg);
return {};
} else {
const femsSessionCookie = res.data.dataset.FEMS_SESSION;
const FEMS_SESSION = femsSessionCookie;
$cookie.set('FEMS_SESSION', FEMS_SESSION);
this.setUserInfo(res.data.dataset.userInfo);
console.log('FEMS_SESSION', FEMS_SESSION);
console.log('$cookie.get', $cookie.get('FEMS_SESSION'));
console.log('userInfo', JSON.stringify(res.data.dataset.userInfo));
// alert("임시로 로그인 처리 되었습니다. dashboard 페이지로 이동합니다.");
this.$router.push({ path: this.myHome.root });
}
},
},
};