Compare commits

..

1 Commits

Author SHA1 Message Date
708b648080 updatecode 2025-07-29 11:20:59 +09:00
30 changed files with 2423 additions and 2159 deletions

View File

@ -1259,11 +1259,19 @@ a {
opacity: 0; opacity: 0;
} }
.v-list-item__content {
background-color: currentColor;
}
.v-list-item__title { .v-list-item__title {
color: map-deep-get($config, color: map-deep-get($config,
#{$theme}, #{$theme},
"tui-datepicker-calendar-color" "tui-datepicker-calendar-color"
); );
@if $theme ==light {
color: #fff !important;
}
} }
} }
} }

View File

@ -92,11 +92,8 @@
background: map-deep-get($config, #{$theme}, "basic-button-background"); background: map-deep-get($config, #{$theme}, "basic-button-background");
} }
.searchFilter{ .search-button {
.search-button { color: map-deep-get($config, #{$theme}, "search-btn-color");
height: 40px;
color: map-deep-get($config, #{$theme}, "search-btn-color");
}
} }
.v-dialog { .v-dialog {

View File

@ -98,17 +98,6 @@
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.grid-title {
font-weight: 600;
font-size: 16px;
line-height: 24px;
letter-spacing: 0;
color: map-deep-get($config,
#{$theme},
"tui-grid-title-color"
);
}
.tui-grid { .tui-grid {
&-table { &-table {
border: 1px solid; border: 1px solid;

View File

@ -1,6 +1,4 @@
.v-select__custom { .v-select__custom {
padding: 0.125rem;
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot { &.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none; box-shadow: none;
} }
@ -44,10 +42,6 @@
legend { legend {
width: 0; width: 0;
} }
.v-select-list {
padding: 0 1rem;
}
} }
.v-input__custom { .v-input__custom {

View File

@ -102,7 +102,6 @@ $config: (
v-calendar-day-color: #fff, v-calendar-day-color: #fff,
v-calendar-day-in-not-month-color: rgba(255, 255, 255, 0.05), v-calendar-day-in-not-month-color: rgba(255, 255, 255, 0.05),
v-calendar-is-today-background-color: #2d4571, v-calendar-is-today-background-color: #2d4571,
tui-grid-title-color: #FFFFFFD9,
tui-grid-header-backgroundColor: #2a2b2d, tui-grid-header-backgroundColor: #2a2b2d,
tui-grid-header-color: #FFFFFFD9, tui-grid-header-color: #FFFFFFD9,
tui-grid-border-horziontal-color: #212224, tui-grid-border-horziontal-color: #212224,
@ -239,7 +238,6 @@ $config: (
v-calendar-day-color: #111, v-calendar-day-color: #111,
v-calendar-day-in-not-month-color: #f8f8f8, v-calendar-day-in-not-month-color: #f8f8f8,
v-calendar-is-today-background-color: #e3eaf3, v-calendar-is-today-background-color: #e3eaf3,
tui-grid-title-color: #000000E0,
tui-grid-header-backgroundColor: #fafafa, //#e0e0e0, tui-grid-header-backgroundColor: #fafafa, //#e0e0e0,
tui-grid-header-color: rgba(0, 0, 0, 0.88), tui-grid-header-color: rgba(0, 0, 0, 0.88),
tui-grid-border-horziontal-color: #e0e0e0, tui-grid-border-horziontal-color: #e0e0e0,

View File

@ -45,7 +45,7 @@ export default {
size: { size: {
type: String, type: String,
require: false, require: false,
default: "middle", // small, middle, large default: "default", // small, middle, large
} }
}, },
data() { data() {

View File

@ -1,5 +1,5 @@
// Gauge chart options // Gauge chart options
export default function getGaugeChartOption({ title, min = 0, max = 160, unit = '%', isDarkMode = false, backgroundRadius = 97 }) { export default function getGaugeChartOption({ title, value, min = 0, max = 160, unit = '%', isDarkMode = false, backgroundRadius = 97 }) {
const colorRanges = isDarkMode const colorRanges = isDarkMode
? [ ? [
[0.375, '#49AA19'], // Dark Green [0.375, '#49AA19'], // Dark Green

View File

@ -2,7 +2,7 @@
export default function getLineChartOption({ export default function getLineChartOption({
xAxisData = [], xAxisData = [],
seriesData = [], seriesData = [],
// legendData = [], legendData = [],
isDarkMode = false, isDarkMode = false,
}) { }) {
@ -31,7 +31,7 @@ export default function getLineChartOption({
}, },
legend: { legend: {
// data: legendData, data: legendData,
icon: 'circle', icon: 'circle',
top: '0%', top: '0%',
right: '5%', right: '5%',

View File

@ -71,12 +71,14 @@
</div> </div>
</div> </div>
<v-card-actions class="px-6 py-4 d-flex align-center justify-end"> <v-card-actions class="px-6 py-4 d-flex align-center justify-end">
<!-- <v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" <v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</v-btn> -->
<!-- <v-btn v-if="item.closeBtnFg || false" :ripple="false" @click="deleteBtnAction($event)">삭제</v-btn> -->
<a-button :ripple="false" @click="setUpdate($event)" class="mr-2">확인</a-button>
<a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)"
class="mr-2">닫기</a-button> class="mr-2">닫기</a-button>
<a-button v-if="item.closeBtnFg || false" :ripple="false" type="danger" ghost danger <a-button v-if="item.closeBtnFg || false" :ripple="false" icon="delete" type="danger" ghost danger
@click="deleteBtnAction($event)" class="mr-2">삭제</a-button> @click="deleteBtnAction($event)">삭제</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)" >확인</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -296,46 +298,46 @@ export default {
}, },
async setSelectValueList01() { async setSelectValueList01() {
// form으로 popup 사용할 때 인자로 eqpmKindId, eqpmGrpId 보내줘야한다. // form으로 popup 사용할 때 인자로 eqpmKindId, eqpmGrpId 보내줘야한다.
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList', // apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists', // resKey: 'eqpmGrpCodeLists',
sendParam: { // sendParam: {
eqpmKindId: // eqpmKindId:
this.item.eqpmKindId != undefined // this.item.eqpmKindId != undefined
? this.item.eqpmKindId // ? this.item.eqpmKindId
: this.searchParam.eqpmKindId, // : this.searchParam.eqpmKindId,
}, // },
// form을 통해 popup을 사용할 경우 -> this.item.eqpmKindId 사용 // // form을 통해 popup을 사용할 경우 -> this.item.eqpmKindId 사용
// 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다. // // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다.
}); // });
if (res.length > 0) { // if (res.length > 0) {
this.selectValueList01 = await res.map(obj => { // this.selectValueList01 = await res.map(obj => {
return { // return {
text: obj.eqpmGrpNm, // text: obj.eqpmGrpNm,
value: obj.eqpmGrpId, // value: obj.eqpmGrpId,
}; // };
}); // });
// form을 통해 popup을 사용할 경우 -> this.item.eqpmGrpId 사용 // // form을 통해 popup을 사용할 경우 -> this.item.eqpmGrpId 사용
// 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택 // // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택
// console.log('this.item.eqpmGrpId : ', this.item.eqpmGrpId); // // console.log('this.item.eqpmGrpId : ', this.item.eqpmGrpId);
// console.log('this.searchParam.eqpmGrpId : ', this.searchParam.eqpmGrpId); // // console.log('this.searchParam.eqpmGrpId : ', this.searchParam.eqpmGrpId);
this.selectValue01 = // this.selectValue01 =
this.item.eqpmGrpId != undefined // this.item.eqpmGrpId != undefined
? this.item.eqpmGrpId // ? this.item.eqpmGrpId
: this.searchParam.eqpmGrpId != undefined // : this.searchParam.eqpmGrpId != undefined
? this.searchParam.eqpmGrpId // ? this.searchParam.eqpmGrpId
: this.selectValueList01[0].value; // : this.selectValueList01[0].value;
} else { // } else {
this.selectValueList01 = []; // this.selectValueList01 = [];
this.selectValue01 = null; // this.selectValue01 = null;
} // }
// this.selectValueList01 = [ this.selectValueList01 = [
// { label: '냉동기고온', value: '냉동기고온' }, { label: '냉동기고온', value: '냉동기고온' },
// { label: '냉동기저온', value: '냉동기저온' }, { label: '냉동기저온', value: '냉동기저온' },
// { label: '공조기', value: '공조기' }, { label: '공조기', value: '공조기' },
// { label: '보일러', value: '보일러' } { label: '보일러', value: '보일러' }
// ]; ];
}, },
search() { search() {
this.getGridData(); this.getGridData();
@ -386,35 +388,44 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
res = await this.postApiReturn({ // res = await this.postApiReturn({
apiKey: 'selectEgrpPysclQtyPop', // apiKey: 'selectEgrpPysclQtyPop',
resKey: 'egrpPysclQtyData', // resKey: 'egrpPysclQtyData',
sendParam: { // sendParam: {
searchWord: this.searchWord, // searchWord: this.searchWord,
eqpmGrpId: this.selectValue01, // eqpmGrpId: this.selectValue01,
openMode: this.item.openMode, // openMode: this.item.openMode,
}, // },
}); // });
let newRes = []; // let newRes = [];
let tempTagList = this.pyscPopVal.split('/*wq2a/'); // let tempTagList = this.pyscPopVal.split('/*wq2a/');
let tagList = tempTagList.filter(item => item != ''); // let tagList = tempTagList.filter(item => item != '');
if (tagList.length > 0) { // if (tagList.length > 0) {
newRes = res.filter(item => { // newRes = res.filter(item => {
return !tagList.includes(item.pysclQtyId); // return !tagList.includes(item.pysclQtyId);
}); // });
res = newRes; // res = newRes;
} // }
// //이미 선택된 값들 제거(배열)
// if (this.item.dataList) {
// if (this.item.dataList.length > 0) {
// newRes = res.filter(item => {
// return !this.item.dataList.includes(item.pysclQtyId);
// });
// res = newRes;
// }
// }
res = [
{
'pysclQtyId': 'PYSCL00001',
'pysclQtyCd': 'AMP_1A',
'pysclQtyNm': '회로1 전류A',
'pysclQtyTpNm': 'TAG'
//이미 선택된 값들 제거(배열)
if (this.item.dataList) {
if (this.item.dataList.length > 0) {
newRes = res.filter(item => {
return !this.item.dataList.includes(item.pysclQtyId);
});
res = newRes;
} }
} ]
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,

View File

@ -2,8 +2,12 @@
<v-row class="search-box" align="center"> <v-row class="search-box" align="center">
<v-col :cols="option.labelCols" class="py-0"> <v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon v-if="item.iconShow" small <v-icon
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon> v-if="item.iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ option.labelContent }} {{ option.labelContent }}
</label> </label>
</v-col> </v-col>
@ -26,9 +30,9 @@
<div class="pa-6 pt-0"> <div class="pa-6 pt-0">
<v-row align="center"> <v-row align="center">
<v-col :cols="5"> <v-col :cols="5">
<component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12" <component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12" :iconShow="true"
:iconShow="true" :propsValue="selectValue01" :itemList="selectValueList01" :propsValue="selectValue01" :itemList="selectValueList01" :label="'설비그룹'"
:label="'설비그룹'" @update:propsValue="selectValue01 = $event" :readonly="item.openMode == undefined @update:propsValue="selectValue01 = $event" :readonly="item.openMode == undefined
? openMode ? openMode
: item.openMode == 'ALL' : item.openMode == 'ALL'
? false ? false
@ -43,14 +47,14 @@
물리량명 물리량명
</label> </label>
</v-col> </v-col>
<v-col :cols="9"> <v-text-field append-icon="" class="v-input__custom" outlined <v-col :cols="9"> <v-text-field append-icon="" class="v-input__custom"
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template outlined :hide-details="true" v-model="searchWord"
v-slot:append> @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon> <v-icon>$icoSearch</v-icon>
</template></v-text-field></v-col> </template></v-text-field></v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-col cols="3" class="text-right"> <v-col cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()" <a-button icon="search" type="primary" @click="search()"
@ -72,9 +76,9 @@
</div> </div>
</div> </div>
<v-card-actions class="px-6 py-4 d-flex align-center justify-end"> <v-card-actions class="px-6 py-4 d-flex align-center justify-end">
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button> <a-button :ripple="false" @click="setUpdate($event)" class="mr-2">확인</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button> <a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)"
class="mr-2">닫기</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -270,30 +274,36 @@ export default {
this.gridInit(); this.gridInit();
}, },
async setSelectValueList01() { async setSelectValueList01() {
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList', // apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists', // resKey: 'eqpmGrpCodeLists',
sendParam: { eqpmKindId: this.searchParam.eqpmKindId }, // sendParam: { eqpmKindId: this.searchParam.eqpmKindId },
// 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다. // // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다.
}); // });
if (res.length > 0) { // if (res.length > 0) {
this.selectValueList01 = await res.map(obj => { // this.selectValueList01 = await res.map(obj => {
return { // return {
text: obj.eqpmGrpNm, // text: obj.eqpmGrpNm,
value: obj.eqpmGrpId, // value: obj.eqpmGrpId,
}; // };
}); // });
// 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택 // // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택
this.selectValue01 = // this.selectValue01 =
this.searchParam.eqpmGrpId != undefined // this.searchParam.eqpmGrpId != undefined
? this.searchParam.eqpmGrpId // ? this.searchParam.eqpmGrpId
: this.selectValueList01[0].value; // : this.selectValueList01[0].value;
// this.selectValue01 = this.selectValueList01[0].value; // // this.selectValue01 = this.selectValueList01[0].value;
} else { // } else {
this.selectValueList01 = []; // this.selectValueList01 = [];
this.selectValue01 = null; // this.selectValue01 = null;
} // }
this.selectValueList01 = [
{ label: '냉동기고온', value: '냉동기고온' },
{ label: '냉동기저온', value: '냉동기저온' },
{ label: '공조기', value: '공조기' },
{ label: '보일러', value: '보일러' }
];
}, },
search() { search() {
this.getGridData(); this.getGridData();
@ -331,26 +341,34 @@ export default {
}, },
async getGridData() { async getGridData() {
this.loadGrid = false; this.loadGrid = false;
// let res = [];
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmBaseInfoPop', // apiKey: 'selectEqpmBaseInfoPop',
resKey: 'epqmBaseInfoData', // resKey: 'epqmBaseInfoData',
sendParam: { // sendParam: {
eqpmGrpId: this.selectValue01, // eqpmGrpId: this.selectValue01,
searchWord: this.searchWord, // searchWord: this.searchWord,
// openMode : this.item.openMode == undefined ? this.openMode : this.item.openMode // // openMode : this.item.openMode == undefined ? this.openMode : this.item.openMode
}, // },
}); // });
// grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 시작 // // grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 시작
let newRes = []; // let newRes = [];
if (this.bindingGridEqpmIdList.length > 0) { // if (this.bindingGridEqpmIdList.length > 0) {
newRes = res.filter(item => { // newRes = res.filter(item => {
return !this.bindingGridEqpmIdList.includes(item.eqpmId); // return !this.bindingGridEqpmIdList.includes(item.eqpmId);
}); // });
res = newRes; // res = newRes;
} // }
// grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 끝 // grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 끝
const res = [
{
'eqpmId': 'PYSCL00001',
'eqpmNm': 'AMP_1A',
}
]
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.gridName, gridKey: this.gridName,
@ -423,9 +441,9 @@ export default {
// this.dialog = false; // this.dialog = false;
// return; // return;
// } // }
if (this.myBindingData.length <= 0) { // if (this.myBindingData.length <= 0) {
return alert('설비상세 리스트를 먼저 선택해주세요.'); // return alert('설비상세 리스트를 먼저 선택해주세요.');
} // }
this.dialog = !val; this.dialog = !val;
}, },
}, },

View File

@ -36,7 +36,7 @@
계산설명 계산설명
</label> </label>
</v-col> </v-col>
<v-col :cols="11" class="pr-8 py-0" > <v-col :cols="10" class="mr-4 py-0" >
<v-text-field append-icon="" class="v-input__custom" outlined <v-text-field append-icon="" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template v-slot:append> :hide-details="true" v-model="searchWord" @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
@ -45,7 +45,7 @@
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
<v-col cols="1" class="py-0" style="display: flex; justify-content: flex-end;"> <v-col cols="1" class="py-0">
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button> <a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
<!-- <v-btn :ripple="false" @click="initSearch()"> <!-- <v-btn :ripple="false" @click="initSearch()">
초기화 초기화
@ -63,8 +63,10 @@
</div> </div>
</div> </div>
<v-card-actions class="pa-5 d-flex align-center justify-end"> <v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button> <!-- <v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<a-button :ripple="false" type="primary" @click="setUpdate($event)" >확인</a-button> <v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</v-btn> -->
<a-button :ripple="false" @click="setUpdate($event)" class="mr-2">확인</a-button>
<a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)">닫기</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -304,22 +306,38 @@ export default {
}, },
async getGridData() { async getGridData() {
this.loadGrid = false; this.loadGrid = false;
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmCalcPop', // apiKey: 'selectEqpmCalcPop',
resKey: 'eqpmCalcPopData', // resKey: 'eqpmCalcPopData',
sendParam: { // sendParam: {
calcDescLike: this.searchWord, // calcDescLike: this.searchWord,
openMode: this.item.openMode != undefined ? this.item.openMode : this.openMode // openMode: this.item.openMode != undefined ? this.item.openMode : this.openMode
}, // },
}); // });
if (this.myBindingData['calcProc'] != '' || this.myBindingData['calcProc'] != null || this.myBindingData['calcProc'] != undefined) { // if (this.myBindingData['calcProc'] != '' || this.myBindingData['calcProc'] != null || this.myBindingData['calcProc'] != undefined) {
let newRes = []; // let newRes = [];
newRes = res.filter(item => { // newRes = res.filter(item => {
return item.calcProc != this.myBindingData['calcProc'] // return item.calcProc != this.myBindingData['calcProc']
}); // });
res = newRes; // res = newRes;
} // }
const res = [
{
'calcProc': 'AVG_CNT2',
'argCnt': '2',
'calcDesc': '두개 변수에 대한 평균'
},
{ 'calcProc': 'PROC001', argCnt: 2, 'calcDesc': '덧셈 연산' },
{ 'calcProc': 'PROC002', argCnt: 1, 'calcDesc': '제곱 연산' },
{ 'calcProc': 'PROC003', argCnt: 2, 'calcDesc': '곱셈 연산' },
{ 'calcProc': 'PROC004', argCnt: 1, 'calcDesc': '루트 연산' },
{ 'calcProc': 'PROC005', argCnt: 3, 'calcDesc': '최대값 계산' },
{ 'calcProc': 'PROC006', argCnt: 3, 'calcDesc': '최소값 계산' },
]
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,

View File

@ -20,10 +20,10 @@
outlined outlined
:multiple="multiple" :multiple="multiple"
:hide-details="true" :hide-details="true"
append-icon=""
:class="['v-select__custom', customClass]" :class="['v-select__custom', customClass]"
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
append-icon=""
><template v-slot:append> ><template v-slot:append>
<v-icon>$icoChevronDown</v-icon> <v-icon>$icoChevronDown</v-icon>
</template></v-select> </template></v-select>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="pb-5 h100"> <div class="pb-5 h100">
<div class="d-flex align-center justify-space-between"> <div class="d-flex align-center justify-space-between">
<span class="grid-title">공통그룹코드</span> <span class="text-h6">공통그룹코드</span>
<div> <div>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -126,7 +126,7 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value, item => item.commCd == value,

View File

@ -7,7 +7,7 @@
</div> </div>
<div ref="gridParent"> <div ref="gridParent">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId" <Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" /> @getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" />
</div> </div>
<div ref="formParent" class="mt-4"> <div ref="formParent" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"

View File

@ -271,6 +271,63 @@ export default {
value: myColumns, value: myColumns,
}); });
const res = [
{
"comId": "COM001",
"ercId": "ERC001",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 120.5,
"peakPow": 450,
"baseChrg": 30000,
"notiChrg": 32500,
"rmrk": "Standard summer rate",
"blocId": "BLOC001",
"regUserNo": "USER001",
"regDttm": "2025-07-01T09:00:00",
"procUserNo": "USER002",
"procDttm": "2025-07-15T14:30:00"
},
{
"comId": "COM002",
"ercId": "ERC002",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 98.75,
"peakPow": 300,
"baseChrg": 25000,
"notiChrg": 27000,
"rmrk": "Reduced rate for solar",
"blocId": "BLOC002",
"regUserNo": "USER003",
"regDttm": "2025-07-02T10:15:00",
"procUserNo": "USER004",
"procDttm": "2025-07-16T11:45:00"
},
{
"comId": "COM003",
"ercId": "ERC003",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 110.0,
"peakPow": 400,
"baseChrg": 28000,
"notiChrg": 29500,
"rmrk": "Geothermal adjustment",
"blocId": "BLOC003",
"regUserNo": "USER005",
"regDttm": "2025-07-03T08:45:00",
"procUserNo": "USER006",
"procDttm": "2025-07-17T13:20:00"
}
]
this.setGridData({
gridKey: this.gridName,
value: res,
});
this.loadGrid = true; this.loadGrid = true;
}, },
async btnActions(action) { async btnActions(action) {

View File

@ -20,8 +20,6 @@
:editorGrid="true" :editorGrid="true"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData" @getRowsData="getRowData"
:selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -55,23 +53,10 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowDetailGrid', gridName: 'rowDetailGrid',
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
dataPathMock: {
"rowDetailGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
}; };
}, },
computed: { computed: {
@ -461,25 +446,4 @@ export default {
search() {}, search() {},
}, },
}; };
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
grpCd: 'GRP02',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
grpCd: 'GRP01',
}
];
</script> </script>

View File

@ -67,7 +67,6 @@
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -132,22 +131,8 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
detailList: myDetail, detailList: myDetail,
dataPathMock : {
rowGrid: {
column: [
{ header: '추가 정보 그룹', name: 'addGrpId', align: 'left' },
{ header: '추가 정보 ID', name: 'addInfoId', align: 'left' },
{ header: '추가 정보 명', name: 'addInfoNm', align: 'left' },
{ header: 'Data 형식', name: 'addInfoDataKind', align: 'center' },
{ header: '사용여부', name: 'useFg', align: 'center' },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {},
},
},
}; };
}, },
computed: { computed: {
@ -518,43 +503,4 @@ const myDetail = [
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
]; ];
const dataMockExample = [
{
addGrpId: 'GRP001',
addInfoId: 'INFO001',
addInfoNm: '온도 센서',
addInfoDataKind: 'DATA01',
useFg: true,
},
{
addGrpId: 'GRP002',
addInfoId: 'INFO002',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA02',
useFg: false,
},
{
addGrpId: 'GRP003',
addInfoId: 'INFO003',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA03',
useFg: false,
},
{
addGrpId: 'GRP004',
addInfoId: 'INFO004',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA04',
useFg: false,
},
{
addGrpId: 'GRP005',
addInfoId: 'INFO005',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA05',
useFg: false,
},
];
</script> </script>

View File

@ -4,28 +4,24 @@
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="2.5"> <v-col :cols="2">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="배치ID" label="배치ID"
valueNm="batchId" valueNm="batchId"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="배치명" label="배치명"
valueNm="batchNm" valueNm="batchNm"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -33,21 +29,19 @@
:dataKey="'execRsltCd'" :dataKey="'execRsltCd'"
:sendParam="{ commGrpCd: 'CO_BATCH_EXEC_RSLT', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_BATCH_EXEC_RSLT', useFg: '1' }"
:addAll="true" :addAll="true"
:iconShow="true"
customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2">
<component <component
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'조회기간'" :label="'조회기간'"
:customClass="'input-large'"
/> />
</v-col> </v-col>
<v-col :cols="2" class="text-right d-flex align-end justify-end ga-1" style="gap: 4px"> <v-spacer></v-spacer>
<BtnSearch size="large" /> <v-col :cols="4" class="text-right">
<BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" size="large" /> <BtnSearch />
<BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" />
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -63,11 +57,10 @@
<div ref="gridParent" class="px-5 h100"> <div ref="gridParent" class="px-5 h100">
<component <component
:ref="gridName" :ref="gridName"
:is=" 'Grid' " :is="loadGrid ? 'Grid' : null"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:gridName="gridName" :gridName="gridName"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -140,56 +133,10 @@ export default {
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
loadGrid: true, loadGrid: false,
gridName: 'rowGrid', gridName: 'rowGrid',
// rowGridOrigin: [], // rowGridOrigin: [],
detailList: myDetail, detailList: myDetail,
dataPathMock : {
'rowGrid': {
column: [
{ header: 'No.', name: 'batchLogSeq', align: 'center', width: 100 },
{ header: '배치ID', name: 'batchId', align: 'center', width: 100 },
{ header: '배치명', name: 'batchNm', align: 'left', width: 150 },
{ header: '실행 일자', name: 'execDt', align: 'center', width: 80 },
{
header: '실행 결과',
name: 'execRsltCd',
align: 'center',
width: 80,
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.execRsltCdList.filter(
// item => item.commCd == value,
// );
// if (newValue.length > 0) {
// retVal = newValue[0].commCdNm;
// }
// return retVal;
// },
}, // "1": 프로그램, "2": 팝업
{ header: '실행 로그', name: 'execLogCont', minWidth: 150 },
{
header: '배치 시작 일시',
name: 'batchStrtDttm',
align: 'center',
width: 160,
},
{
header: '배치 종료 일시',
name: 'batchEndDttm',
align: 'center',
width: 160,
},
{ header: '등록자NO', name: 'regUserNo', width: 120 },
{ header: '등록일시', name: 'regDttm', align: 'center', width: 160 },
{ header: '수정자NO', name: 'procUserNo', width: 120 },
{ header: '수정일시', name: 'procDttm', align: 'center', width: 160 },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {},
},
},
}; };
}, },
computed: { computed: {
@ -248,14 +195,6 @@ export default {
init() { init() {
// this.layoutInit(); // this.layoutInit();
this.gridInit(); this.gridInit();
// _this.pageData = {
// execRsltCdList: [
// { commCd: '1', commCdNm: '성공' },
// { commCd: '2', commCdNm: '실패' },
// ],
// };
}, },
// layoutInit() { // layoutInit() {
// const searchFilterHeight = this.$refs.searchFilter.offsetHeight; // const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
@ -368,13 +307,10 @@ export default {
} }
}); });
}, },
// async getRowData(data) { async getRowData(data) {
async getRowData() {
console.log("something")
this.setPageData({ this.setPageData({
// rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectKey: 1, rowGridSelectData: data,
rowGridSelectData: fakeRowData,
}); });
}, },
compareData(type, newDt) { compareData(type, newDt) {
@ -481,86 +417,16 @@ const defaultData = {
}, },
}; };
const dataMockExample = [
{
batchLogSeq: 1,
batchId: 'BATCH001',
batchNm: '일일 데이터 백업',
execDt: '2025-07-15',
execRsltCd: '1', // sẽ được formatter thành "성공" hoặc tương tự
execLogCont: '백업 완료. 오류 없음.',
batchStrtDttm: '2025-07-15 01:00:00',
batchEndDttm: '2025-07-15 01:30:00',
regUserNo: 'admin01',
regDttm: '2025-07-15 01:00:00',
procUserNo: 'admin02',
procDttm: '2025-07-15 01:35:00',
},
{
batchLogSeq: 2,
batchId: 'BATCH002',
batchNm: '월간 리포트 생성',
execDt: '2025-07-01',
execRsltCd: '2',
execLogCont: '리포트 생성 중 오류 발생: 파일 접근 실패.',
batchStrtDttm: '2025-07-01 03:00:00',
batchEndDttm: '2025-07-01 03:10:00',
regUserNo: 'reportUser',
regDttm: '2025-07-01 03:00:00',
procUserNo: 'admin03',
procDttm: '2025-07-01 03:15:00',
},
{
batchLogSeq: 3,
batchId: 'BATCH003',
batchNm: '사용자 통계 갱신',
execDt: '2025-07-14',
execRsltCd: '1',
execLogCont: '통계 갱신 완료.',
batchStrtDttm: '2025-07-14 23:00:00',
batchEndDttm: '2025-07-14 23:20:00',
regUserNo: 'statUser',
regDttm: '2025-07-14 23:00:00',
procUserNo: 'admin01',
procDttm: '2025-07-14 23:25:00',
},
];
const fakeRowData = {
rowKey: 1,
batchLogSeq: 1,
batchId: 'BATCH001',
batchNm: '일일 데이터 백업',
execDt: '2025-07-15',
execRsltCd: '1',
execLogCont: JSON.stringify({
session: {
userNo: 'admin01',
userNm: '관리자',
comId: 'SKCC',
locale: 'ko_KR',
},
batch: {
comId: 'SKCC',
totStdDt: '20230110',
},
}),
batchStrtDttm: '2025-07-15 01:00:00',
batchEndDttm: '2025-07-15 01:30:00',
regUserNo: 'admin01',
regDttm: '2025-07-15 01:00:00',
procUserNo: 'admin02',
procDttm: '2025-07-15 01:35:00',
};
const myDetail = [ const myDetail = [
{ {
type: 'TextArea', type: 'TextArea',
valueNm: 'execLogCont', valueNm: 'execLogCont',
readonly: true, readonly: true,
cols: 12, cols: 12,
class: 'py-2 transparent', class: 'py-2',
}, },
]; ];
</script> </script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1,65 +1,33 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<PageTitle text="공통코드" />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="4">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'시스템구분'" :label="'시스템구분'"
dataKey="sysDivCd" dataKey="sysDivCd"
:labelCols="12"
:textCols="12"
:sendParam="{ commGrpCd: 'CO_SYSDIV', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_SYSDIV', useFg: '1' }"
:addAll="true" :addAll="true"
customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="4">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'사용여부'" :label="'사용여부'"
:labelCols="12"
:textCols="12"
:dataKey="'useFg'" :dataKey="'useFg'"
customClass="select-large"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="4" class="text-right">
<InputText <BtnSearch @click="search" />
:parentPrgmId="myPrgmId"
label="그룹코드"
valueNm="commGrpCd"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="그룹코드명"
valueNm="commGrpCdNm"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="12" class="text-right">
<BtnSearch style="margin-top:20px" @click="search" />
</v-col> </v-col>
</v-row> </v-row>
<!-- <v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="4"> <v-col :cols="4">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -80,7 +48,7 @@
:textCols="8" :textCols="8"
/> />
</v-col> </v-col>
</v-row> --> </v-row>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
@ -117,7 +85,7 @@
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title>공통그룹코드 상세</v-card-title> <v-card-title>공통그룹코드 상세</v-card-title>
<div class="px-5" style="height:calc(100% - 70px)"> <div class="px-5" style="height:calc(100% - 70px)">
<v-tabs v-model="tab" > <v-tabs v-model="tab" :hide-slider="true">
<v-tab <v-tab
v-for="item in items" v-for="item in items"
:key="item.id" :key="item.id"
@ -164,7 +132,6 @@ import Form from '~/components/common/form/Form';
import CommCdTab from '@/components/pages/comm/CommCdTab'; import CommCdTab from '@/components/pages/comm/CommCdTab';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -191,7 +158,6 @@ export default {
Form, Form,
CommCdTab, CommCdTab,
Grid, Grid,
PageTitle
}, },
data() { data() {
return { return {
@ -263,9 +229,6 @@ export default {
const myOptions = { const myOptions = {
scrollX: false, scrollX: false,
header: {
height: 38,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -278,7 +241,7 @@ export default {
{ {
header: '시스템구분', header: '시스템구분',
name: 'sysDivCd', name: 'sysDivCd',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
let commCdNm = ''; let commCdNm = '';
if (sysCdList.length > 0) { if (sysCdList.length > 0) {
@ -315,7 +278,7 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value, item => item.commCd == value,
@ -591,10 +554,7 @@ const myDetail = [
valueNm: 'commGrpCd', valueNm: 'commGrpCd',
disabled: true, disabled: true,
cols: 6, cols: 6,
labelCols: 12, class: 'py-2',
textCols: 12,
iconShow: true,
class: 'py-2 pr-2',
required: true, required: true,
}, },
{ {
@ -603,10 +563,7 @@ const myDetail = [
valueNm: 'commGrpNm', valueNm: 'commGrpNm',
disabled: false, disabled: false,
cols: 6, cols: 6,
labelCols: 12, class: 'py-2',
textCols: 12,
iconShow: true,
class: 'py-2 pl-2',
required: true, required: true,
}, },
{ {
@ -615,10 +572,7 @@ const myDetail = [
valueNm: 'sysDivCd', valueNm: 'sysDivCd',
disabled: false, disabled: false,
cols: 6, cols: 6,
labelCols: 12, class: 'py-2',
textCols: 12,
iconShow: true,
class: 'py-2 pr-2 mt-3',
list: 'sysDivCdList', list: 'sysDivCdList',
itemText: 'commCdNm', itemText: 'commCdNm',
itemValue: 'commCd', itemValue: 'commCd',
@ -630,10 +584,7 @@ const myDetail = [
valueNm: 'useFg', valueNm: 'useFg',
disabled: false, disabled: false,
cols: 6, cols: 6,
labelCols: 12, class: 'py-2',
textCols: 12,
iconShow: true,
class: 'py-2 pl-2 mt-10',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: true, required: true,
}, },
@ -643,10 +594,7 @@ const myDetail = [
valueNm: 'rmrk', valueNm: 'rmrk',
disabled: false, disabled: false,
cols: 6, cols: 6,
labelCols: 12, class: 'py-2',
textCols: 12,
iconShow: true,
class: 'py-2 pr-2 mt-3',
}, },
]; ];
</script> </script>

File diff suppressed because it is too large Load Diff

View File

@ -16,8 +16,8 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="pt-2"> <v-row ref="contents">
<v-col :cols="5" style="height:100%" class="pr-2"> <v-col :cols="5" style="height:100%">
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title>
@ -32,7 +32,7 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" style="height:100%" class="pl-2"> <v-col :cols="7" style="height:100%">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세 <v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세
</v-card-title> </v-card-title>

View File

@ -12,7 +12,6 @@
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -23,7 +22,6 @@
dataKey="searchErcKind" dataKey="searchErcKind"
:sendParam="{ commGrpCd: 'EM_ERCKIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_ERCKIND', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -36,9 +34,13 @@
:addAll="true" :addAll="true"
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -47,11 +49,8 @@
dataKey="searchChrgKind" dataKey="searchChrgKind"
:sendParam="{ commGrpCd: 'EM_ENGCHAGKIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_ENGCHAGKIND', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -60,7 +59,6 @@
dataKey="useFg" dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -71,14 +69,8 @@
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:searchOption="true" :searchOption="true"
:customClass="'input-large'"
/> />
</v-col> </v-col>
<v-col :cols="3">
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch :size="'default'" @click="search" />
</v-col>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
@ -331,9 +323,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 38,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -343,12 +332,12 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ header: '에너지원ID', name: 'ercId', width: 120, align: 'left' }, { header: '에너지원ID', name: 'ercId', width: 120, align: 'center' },
{ header: '에너지원명', name: 'ercNm', align: 'left' }, { header: '에너지원명', name: 'ercNm', align: 'left' },
{ {
header: '에너지원 유형', header: '에너지원 유형',
name: 'ercKind', name: 'ercKind',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.ercKindList.filter( const newValue = _this.pageData.ercKindList.filter(
@ -461,7 +450,7 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
width: 95, width: 95,
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
@ -490,24 +479,74 @@ export default {
this.loadGrid = true; this.loadGrid = true;
}, },
async getRowGridData() { async getRowGridData() {
let res = []; let res = [
{
"comId": "COM001",
"ercId": "ERC001",
"ercNm": "LNG 가스",
"ercKind": "GAS",
"readObjId": "READ001",
"readPlcId": "PLC001",
"chrgKind": "FIXED",
"unitPrce": 120.5,
"prceFg": "1",
"peakPow": 500,
"elecContId": "EC001",
"elecContNm": "계약A",
"blocId": "BLOC001",
"useFg": true
},
{
"comId": "COM002",
"ercId": "ERC002",
"ercNm": "태양광",
"ercKind": "ELEC",
"readObjId": "READ002",
"readPlcId": "PLC002",
"chrgKind": "VARIABLE",
"unitPrce": 95.0,
"prceFg": "0",
"peakPow": 300,
"elecContId": "EC002",
"elecContNm": "계약B",
"blocId": "BLOC002",
"useFg": false
},
{
"comId": "COM003",
"ercId": "ERC003",
"ercNm": "지열",
"ercKind": "HEAT",
"readObjId": "READ003",
"readPlcId": "PLC003",
"chrgKind": "FIXED",
"unitPrce": 110.0,
"prceFg": "1",
"peakPow": 450,
"elecContId": "EC003",
"elecContNm": "계약C",
"blocId": "BLOC003",
"useFg": true
}
]
;
if (this.pageData.blocMstrList.length > 0) { // if (this.pageData.blocMstrList.length > 0) {
res = await this.postApiReturn({ // res = await this.postApiReturn({
apiKey: 'selectErcInfo', // apiKey: 'selectErcInfo',
resKey: 'ercInfoData', // resKey: 'ercInfoData',
sendParam: { // sendParam: {
blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId, // blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId,
ercKind: this.pageData.searchErcKind, // ercKind: this.pageData.searchErcKind,
readObjId: this.pageData.searchReadObj, // readObjId: this.pageData.searchReadObj,
chrgKind: this.pageData.searchChrgKind, // chrgKind: this.pageData.searchChrgKind,
useFg: this.pageData.useFg, // useFg: this.pageData.useFg,
ercNmLike: this.pageData.ercNm, // ercNmLike: this.pageData.ercNm,
}, // },
}); // });
} else { // } else {
this.setPageData({ isFind: false }); // this.setPageData({ isFind: false });
} // }
const newRes = res.map(item => { const newRes = res.map(item => {
const newObj = { const newObj = {
...item, ...item,
@ -759,8 +798,133 @@ const defaultData = {
/* data 세팅 */ /* data 세팅 */
// 로컬 gridName 값과 동일한 이름으로 세팅 // 로컬 gridName 값과 동일한 이름으로 세팅
rowGrid: { rowGrid: {
data: [], data: [
column: [], // myColumns, {
"comId": "COM001",
"ercId": "ERC001",
"ercNm": "LNG 가스",
"ercKind": "GAS",
"readObjId": "READ001",
"readPlcId": "PLC001",
"chrgKind": "FIXED",
"unitPrce": 120.5,
"prceFg": "1",
"peakPow": 500,
"elecContId": "EC001",
"elecContNm": "계약A",
"blocId": "BLOC001",
"useFg": true
},
{
"comId": "COM002",
"ercId": "ERC002",
"ercNm": "태양광",
"ercKind": "ELEC",
"readObjId": "READ002",
"readPlcId": "PLC002",
"chrgKind": "VARIABLE",
"unitPrce": 95.0,
"prceFg": "0",
"peakPow": 300,
"elecContId": "EC002",
"elecContNm": "계약B",
"blocId": "BLOC002",
"useFg": false
},
{
"comId": "COM003",
"ercId": "ERC003",
"ercNm": "지열",
"ercKind": "HEAT",
"readObjId": "READ003",
"readPlcId": "PLC003",
"chrgKind": "FIXED",
"unitPrce": 110.0,
"prceFg": "1",
"peakPow": 450,
"elecContId": "EC003",
"elecContNm": "계약C",
"blocId": "BLOC003",
"useFg": true
}
],
column: [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '에너지원ID', name: 'ercId', width: 120, align: 'center' },
{ header: '에너지원명', name: 'ercNm', align: 'left' },
{
header: '에너지원 유형',
name: 'ercKind',
align: 'center',
},
{
header: '검침대상',
name: 'readObjId',
align: 'left',
},
{
header: '검침 개소 ID',
name: 'readPlcId',
width: 80,
align: 'center',
hidden: true,
},
{
header: '고지 유형',
name: 'chrgKind',
width: 80,
align: 'center',
hidden: true,
},
{
header: '기본단가',
name: 'unitPrce',
width: 100,
align: 'right',
hidden: true,
},
{
header: '단가 사용여부',
name: 'prceFg',
width: 100,
align: 'center',
hidden: true,
},
{
header: '피크 전력',
name: 'peakPow',
width: 100,
align: 'right',
hidden: true,
},
{
header: '전력 계약',
name: 'elecContId',
width: 100,
align: 'center',
hidden: true,
},
{
header: '전력 계약',
name: 'elecContNm',
width: 100,
align: 'center',
hidden: true,
},
{
header: '사업장',
name: 'blocId',
width: 100,
align: 'center',
hidden: true,
},
{
header: '사용 여부',
name: 'useFg',
width: 95,
align: 'center',
}
], // myColumns,
option: {}, // myOptions option: {}, // myOptions
defaultRow: { defaultRow: {
comId: '', comId: '',

View File

@ -29,10 +29,10 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="mt-3"> <v-row ref="contents">
<v-col :cols="5" class="h100 pr-2"> <v-col :cols="5" class="h100">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="d-flex align-center justify-space-between pa-5"> <v-card-title class="d-flex align-center justify-space-between pa-4">
물리량 리스트 물리량 리스트
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
@ -44,12 +44,12 @@
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
:preventFocusChangeEventFlag="true" :preventFocusChangeEventFlag="true"
:preventFocusChangeEventTargetGridList="editingGridList" /> :preventFocusChangeEventTargetGridList="editingGridList" :dataPath="dataPathExample" />
</div> </div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100 pl-2"> <v-col :cols="7" class="h100">
<v-card class="pb-5 px-4"> <v-card class="pb-5 px-4">
<v-card-title class="px-0">물리량 상세</v-card-title> <v-card-title class="px-0">물리량 상세</v-card-title>
<v-row no-gutters> <v-row no-gutters>
@ -136,7 +136,7 @@
<v-col :cols="12" style="height:100%"> <v-col :cols="12" style="height:100%">
<div ref="gridParent2" style="height:100%"> <div ref="gridParent2" style="height:100%">
<component :ref="gridName2" :is="loadGrid2 ? 'Grid' : null" :gridName="gridName2" <component :ref="gridName2" :is="loadGrid2 ? 'Grid' : null" :gridName="gridName2"
:parentPrgmId="myPrgmId" @getRowsData="getRowData2" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData2" :dataPath="dataPathExample2" />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -223,7 +223,7 @@ export default {
formatterSelectList01: [], formatterSelectList01: [],
formatterSelectList02: [], formatterSelectList02: [],
loadGrid: false, loadGrid: true,
dataPathExample: { dataPathExample: {
"rowGrid": { "rowGrid": {
data: [ data: [
@ -279,7 +279,59 @@ export default {
} }
}, },
loadGrid2: false, dataPathExample2: {
"rowGrid2": {
data:
[
{
"argSeq": "1",
"argPysclQtyId": "001",
"eqpmGrpId": "EQPM-GRP-A",
"pysclQtyCd": "TEMP001"
},
{
"argSeq": "2",
"argPysclQtyId": "002",
"eqpmGrpId": "EQPM-GRP-B",
"pysclQtyCd": "PRESS001"
},
{
"argSeq": "3",
"argPysclQtyId": "003",
"eqpmGrpId": "EQPM-GRP-C",
"pysclQtyCd": "FLOW001"
},
{
"argSeq": "4",
"argPysclQtyId": "004",
"eqpmGrpId": "EQPM-GRP-D",
"pysclQtyCd": "HUMID001"
},
{
"argSeq": "5",
"argPysclQtyId": "005",
"eqpmGrpId": "EQPM-GRP-E",
"pysclQtyCd": "VOLT001"
}
]
,
column: [
{ header: '순번', name: 'argSeq', editor: 'text' },
{ header: '물리량 ID', name: 'argPysclQtyId' },
{
header: '설비그룹',
name: 'eqpmGrpId',
},
{ header: '물리량 코드', name: 'pysclQtyCd' },
],
}
},
loadGrid2: true,
detailList: myDetail, detailList: myDetail,
readOnlyValueList: [ readOnlyValueList: [
@ -949,10 +1001,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
@ -1018,10 +1066,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({

View File

@ -37,11 +37,11 @@
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div class="h100 px-4" style="height:calc(100% - 70px)"> <div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" style="height: 30%"> <div ref="gridParent" >
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
<div class="d-flex py-4" > <div class="d-flex py-4">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList" <component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" /> @gridEditingFinish="gridEditingFinish" />
</div> </div>
@ -112,7 +112,7 @@ export default {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
initedFlag: false, initedFlag: false,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: false, loadGrid: true,
detailList: myDetail, detailList: myDetail,
selectValue01: null, selectValue01: null,
selectValueList01: [], selectValueList01: [],
@ -125,102 +125,102 @@ export default {
// pysclQtyId3 : null, // pysclQtyId3 : null,
// pysclQtyId4 : null // pysclQtyId4 : null
// } // }
// dataPathExample: { dataPathExample: {
// "rowGrid": { "rowGrid": {
// data: [ data: [
// { {
// gdIdxId: 'GD001', gdIdxId: 'GD001',
// gdIdxNm: '온도 가이드', gdIdxNm: '온도 가이드',
// eqpmGrpId: 'EQ001', eqpmGrpId: 'EQ001',
// upTotMeth: 'AVG', upTotMeth: 'AVG',
// careStndVal: 50, careStndVal: 50,
// warnStndVal: 70, warnStndVal: 70,
// alrmMsg: '온도가 기준치를 초과했습니다.', alrmMsg: '온도가 기준치를 초과했습니다.',
// }, },
// { {
// gdIdxId: 'GD002', gdIdxId: 'GD002',
// gdIdxNm: '습도 가이드', gdIdxNm: '습도 가이드',
// eqpmGrpId: 'EQ002', eqpmGrpId: 'EQ002',
// upTotMeth: 'MAX', upTotMeth: 'MAX',
// careStndVal: 30, careStndVal: 30,
// warnStndVal: 60, warnStndVal: 60,
// alrmMsg: '습도가 기준치를 초과했습니다.', alrmMsg: '습도가 기준치를 초과했습니다.',
// }, },
// { {
// gdIdxId: 'GD003', gdIdxId: 'GD003',
// gdIdxNm: '압력 가이드', gdIdxNm: '압력 가이드',
// eqpmGrpId: 'EQ003', eqpmGrpId: 'EQ003',
// upTotMeth: 'SUM', upTotMeth: 'SUM',
// careStndVal: 100, careStndVal: 100,
// warnStndVal: 150, warnStndVal: 150,
// alrmMsg: '압력이 기준치를 초과했습니다.', alrmMsg: '압력이 기준치를 초과했습니다.',
// } }
// ], ],
// column: [ column: [
// { {
// header: '가이드', header: '가이드',
// name: 'gdIdxId', name: 'gdIdxId',
// width: 100, width: 100,
// align: 'center', align: 'center',
// }, },
// { {
// header: '가이드명', header: '가이드명',
// name: 'gdIdxNm', name: 'gdIdxNm',
// width: 210, width: 210,
// align: 'left', align: 'left',
// }, },
// { {
// header: '설비그룹ID', header: '설비그룹ID',
// name: 'eqpmGrpId', name: 'eqpmGrpId',
// width: 100, width: 100,
// align: 'center', align: 'center',
// // formatter({ value }) { // formatter({ value }) {
// // let retVal = ''; // let retVal = '';
// // const newValue = _this.pageData.eqpmGrpList.filter(item => item.value == value); // const newValue = _this.pageData.eqpmGrpList.filter(item => item.value == value);
// // if (newValue.length > 0) { // if (newValue.length > 0) {
// // retVal = newValue[0].text; // retVal = newValue[0].text;
// // } // }
// // return retVal; // return retVal;
// // }, // },
// }, },
// { {
// header: '상위집계방법', header: '상위집계방법',
// name: 'upTotMeth', name: 'upTotMeth',
// width: 100, width: 100,
// align: 'center', align: 'center',
// // formatter({ value }) { // formatter({ value }) {
// // let retVal = ''; // let retVal = '';
// // const newValue = _this.pageData.upTotMethList.filter(item => item.commCd == value); // const newValue = _this.pageData.upTotMethList.filter(item => item.commCd == value);
// // if (newValue.length > 0) { // if (newValue.length > 0) {
// // retVal = newValue[0].commCdNm; // retVal = newValue[0].commCdNm;
// // } // }
// // return retVal; // return retVal;
// // }, // },
// }, },
// { {
// header: '주의기준', header: '주의기준',
// name: 'careStndVal', name: 'careStndVal',
// width: 100, width: 100,
// align: 'right', align: 'right',
// }, },
// { {
// header: '경고기준', header: '경고기준',
// name: 'warnStndVal', name: 'warnStndVal',
// width: 100, width: 100,
// align: 'right', align: 'right',
// }, },
// { {
// header: '알람메세지', header: '알람메세지',
// name: 'alrmMsg', name: 'alrmMsg',
// minWidth: 860, minWidth: 860,
// align: 'left', align: 'left',
// } }
// ] ]
// } }
// } }
}; };
}, },
computed: { computed: {
@ -352,46 +352,60 @@ export default {
}); });
}, },
async getEqpmKind() { async getEqpmKind() {
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmKindCodeList', // apiKey: 'selectEqpmKindCodeList',
resKey: 'eqpmKindCodeLists', // resKey: 'eqpmKindCodeLists',
sendParam: {}, // sendParam: {},
}); // });
if (res.length > 0) { // if (res.length > 0) {
this.selectValueList01 = await res.map(item => { // this.selectValueList01 = await res.map(item => {
return { // return {
text: item.eqpmKindNm, // text: item.eqpmKindNm,
value: item.eqpmKindId, // value: item.eqpmKindId,
}; // };
}); // });
this.selectValue01 = this.selectValueList01[0].value; // this.selectValue01 = this.selectValueList01[0].value;
} else { // } else {
this.selectValueList01 = []; // this.selectValueList01 = [];
this.selectValue01 = null; // this.selectValue01 = null;
} // }
this.selectValueList01 = [
{ label: 'Etcher', value: 'EQK001' },
{ label: 'Deposition', value: 'EQK002' },
{ label: 'Inspection', value: 'EQK003' },
];
this.selectValue01 = 'EQK001';
this.setPageData({ this.setPageData({
eqpmKindList: this.selectValueList01, eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01, eqpmKindId: this.selectValue01,
}); });
}, },
async getEqpmGrp() { async getEqpmGrp() {
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList', // apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists', // resKey: 'eqpmGrpCodeLists',
sendParam: { eqpmKindId: this.selectValue01 }, // sendParam: { eqpmKindId: this.selectValue01 },
}); // });
if (res.length > 0) { // if (res.length > 0) {
this.selectValueList02 = await res.map(item => { // this.selectValueList02 = await res.map(item => {
return { // return {
text: item.eqpmGrpNm, // text: item.eqpmGrpNm,
value: item.eqpmGrpId, // value: item.eqpmGrpId,
}; // };
}); // });
this.selectValue02 = this.selectValueList02[0].value; // this.selectValue02 = this.selectValueList02[0].value;
} else { // } else {
this.selectValueList02 = []; // this.selectValueList02 = [];
this.selectValue02 = null; // this.selectValue02 = null;
} // }
this.selectValueList02 = [
{ label: '냉동기고온', value: '냉동기고온' },
{ label: '냉동기저온', value: '냉동기저온' },
{ label: '공조기', value: '공조기' },
{ label: '보일러', value: '보일러' }
];
this.setPageData({ this.setPageData({
eqpmGrpList: this.selectValueList02, eqpmGrpList: this.selectValueList02,
@ -405,10 +419,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -626,100 +636,100 @@ export default {
async getRowGridData() { async getRowGridData() {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
// const newRes = [ const newRes = [
// { {
// comId: 'COM001', comId: 'COM001',
// gdIdxId: 'GD001', gdIdxId: 'GD001',
// gdIdxNm: '온도 가이드', gdIdxNm: '온도 가이드',
// eqpmGrpId: 'EQ001', eqpmGrpId: 'EQ001',
// upTotMeth: 'AVG', upTotMeth: 'AVG',
// sortSeq: 1, sortSeq: 1,
// pysclQtyId1: 'TEMP', pysclQtyId1: 'TEMP',
// pysclQtyId2: null, pysclQtyId2: null,
// pysclQtyId3: null, pysclQtyId3: null,
// pysclQtyId4: null, pysclQtyId4: null,
// ctgr1: '환경', ctgr1: '환경',
// ctgr2: '내부', ctgr2: '내부',
// careStndVal: 50, careStndVal: 50,
// warnStndVal: 70, warnStndVal: 70,
// gdMeth: '자동', gdMeth: '자동',
// useFg: '1', useFg: '1',
// alrmMsg: '온도가 기준치를 초과했습니다.', alrmMsg: '온도가 기준치를 초과했습니다.',
// calcProc: 'PROC001', calcProc: 'PROC001',
// calcDesc: '평균 계산', calcDesc: '평균 계산',
// calcMeth: '(A+B)/2', calcMeth: '(A+B)/2',
// unit: 'C', unit: 'C',
// argCnt: 2, argCnt: 2,
// rowStat: null,
// },
// {
// comId: 'COM002',
// gdIdxId: 'GD002',
// gdIdxNm: '습도 가이드',
// eqpmGrpId: 'EQ002',
// upTotMeth: 'MAX',
// sortSeq: 2,
// pysclQtyId1: 'HUMID',
// pysclQtyId2: null,
// pysclQtyId3: null,
// pysclQtyId4: null,
// ctgr1: '환경',
// ctgr2: '외부',
// careStndVal: 30,
// warnStndVal: 60,
// gdMeth: '수동',
// useFg: '0',
// alrmMsg: '습도가 기준치를 초과했습니다.',
// calcProc: 'PROC002',
// calcDesc: '최대값 계산',
// calcMeth: 'MAX(A,B)',
// unit: '%',
// argCnt: 2,
// rowStat: null,
// },
// ];
res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxDataList',
resKey: 'eqpmGdIdxDataList',
sendParam: {
eqpmGrpId: this.selectValue02,
gdIdxNmLike: this.pageData.gdIdxNm,
},
});
const newRes = res.map(item => {
const newObj = {
...item,
rowStat: null, rowStat: null,
}; },
return newObj; {
}); comId: 'COM002',
gdIdxId: 'GD002',
gdIdxNm: '습도 가이드',
eqpmGrpId: 'EQ002',
upTotMeth: 'MAX',
sortSeq: 2,
pysclQtyId1: 'HUMID',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '외부',
careStndVal: 30,
warnStndVal: 60,
gdMeth: '수동',
useFg: '0',
alrmMsg: '습도가 기준치를 초과했습니다.',
calcProc: 'PROC002',
calcDesc: '최대값 계산',
calcMeth: 'MAX(A,B)',
unit: '%',
argCnt: 2,
rowStat: null,
},
];
// res = await this.postApiReturn({
// apiKey: 'selectEqpmGdIdxDataList',
// resKey: 'eqpmGdIdxDataList',
// sendParam: {
// eqpmGrpId: this.selectValue02,
// gdIdxNmLike: this.pageData.gdIdxNm,
// },
// });
// const newRes = res.map(item => {
// const newObj = {
// ...item,
// rowStat: null,
// };
// return newObj;
// });
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,
}); });
//this.loadGrid = true; //this.loadGrid = true;
this.$nextTick(() => { // this.$nextTick(() => {
if (newRes.length > 0) { // if (newRes.length > 0) {
try { // try {
this.$refs[this.gridName].focus({ // this.$refs[this.gridName].focus({
//rowKey: 0, // //rowKey: 0,
rowKey: // rowKey:
this.pageData.rowGridSelectKey == '' || // this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null // this.pageData.rowGridSelectKey == null
? 0 // ? 0
: this.pageData.rowGridSelectKey == // : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1 // this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey // ? this.pageData.rowGridSelectKey
: 0, // : 0,
columnName: 'gdIdxId', // columnName: 'gdIdxId',
setScroll: true, // setScroll: true,
}); // });
} catch (error) { } // } catch (error) { }
} else { // } else {
this.detailDataInit(); // this.detailDataInit();
} // }
}); // });
this.loadGrid = true; this.loadGrid = true;
}, },
async getRowData(data) { async getRowData(data) {

View File

@ -29,7 +29,7 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="mt-3"> <v-row ref="contents" class="mt-4">
<v-col :cols="12" style="height: 100%"> <v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> --> <!-- <v-card class="py-5"> -->
<v-card style="height: 60%"> <v-card style="height: 60%">
@ -115,8 +115,8 @@
</v-card> </v-card>
<v-row style="height: 40%" class="mt-3"> <v-row style="height: 40%" class="mt-4">
<v-col :cols="6" style="height: 100%" class="pr-2"> <v-col :cols="6" style="height: 100%">
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title>
@ -126,12 +126,12 @@
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
/> :dataPath="dataPathExample" />
</div> </div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="6" style="height: 100%" class="pl-2"> <v-col :cols="6" style="height: 100%">
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">설비가이드 기준 정보</v-card-title> <v-card-title class="pa-0 custom-title-4">설비가이드 기준 정보</v-card-title>
@ -201,7 +201,7 @@ export default {
readonlyFg: true, readonlyFg: true,
initedFlag: false, initedFlag: false,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: false, loadGrid: true,
detailList: myDetail, detailList: myDetail,
selectValue01: null, selectValue01: null,
selectValueList01: [], selectValueList01: [],
@ -209,62 +209,62 @@ export default {
selectValueList02: [], selectValueList02: [],
selectValue03: null, selectValue03: null,
selectValueList03: [], selectValueList03: [],
// dataPathExample: { dataPathExample: {
// "rowGrid": { "rowGrid": {
// data: [ data: [
// { {
// eqpmId: 'EQ001', eqpmId: 'EQ001',
// originEqpmId: 'ORIG001', originEqpmId: 'ORIG001',
// eqpmNm: '냉각기 A', eqpmNm: '냉각기 A',
// careStndVal: 75, careStndVal: 75,
// warnStndVal: 90, warnStndVal: 90,
// }, },
// { {
// eqpmId: 'EQ002', eqpmId: 'EQ002',
// originEqpmId: 'ORIG002', originEqpmId: 'ORIG002',
// eqpmNm: '펌프 B', eqpmNm: '펌프 B',
// careStndVal: 60, careStndVal: 60,
// warnStndVal: 80, warnStndVal: 80,
// }, },
// { {
// eqpmId: 'EQ003', eqpmId: 'EQ003',
// originEqpmId: 'ORIG003', originEqpmId: 'ORIG003',
// eqpmNm: '모터 C', eqpmNm: '모터 C',
// careStndVal: 50, careStndVal: 50,
// warnStndVal: 70, warnStndVal: 70,
// }, },
// { {
// eqpmId: 'EQ004', eqpmId: 'EQ004',
// originEqpmId: 'ORIG004', originEqpmId: 'ORIG004',
// eqpmNm: '밸브 D', eqpmNm: '밸브 D',
// careStndVal: 65, careStndVal: 65,
// warnStndVal: 85, warnStndVal: 85,
// }, },
// { {
// eqpmId: 'EQ005', eqpmId: 'EQ005',
// originEqpmId: 'ORIG005', originEqpmId: 'ORIG005',
// eqpmNm: '컨트롤러 E', eqpmNm: '컨트롤러 E',
// careStndVal: 55, careStndVal: 55,
// warnStndVal: 75, warnStndVal: 75,
// }, },
// ], ],
// column: [ column: [
// { header: '설비', name: 'eqpmId', align: 'left' }, { header: '설비', name: 'eqpmId', align: 'left' },
// { {
// header: 'origin설비', header: 'origin설비',
// name: 'originEqpmId', name: 'originEqpmId',
// align: 'center', align: 'center',
// hidden: true, hidden: true,
// }, },
// { header: '설비명', name: 'eqpmNm', align: 'left' }, { header: '설비명', name: 'eqpmNm', align: 'left' },
// { header: '주의기준', name: 'careStndVal', align: 'right' }, { header: '주의기준', name: 'careStndVal', align: 'right' },
// { header: '심각기준', name: 'warnStndVal', align: 'right' }, { header: '심각기준', name: 'warnStndVal', align: 'right' },
// ] ]
// } }
// } }
}; };
}, },
computed: { computed: {
@ -408,10 +408,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -515,69 +511,69 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
if (this.selectValue01 && this.selectValue02 && this.selectValue03) { // if (this.selectValue01 && this.selectValue02 && this.selectValue03) {
res = await this.postApiReturn({ // res = await this.postApiReturn({
apiKey: 'selectEqpmGdDetl', // apiKey: 'selectEqpmGdDetl',
resKey: 'eqpmGdDetlData', // resKey: 'eqpmGdDetlData',
sendParam: { // sendParam: {
gdIdxId: this.selectValue03, // gdIdxId: this.selectValue03,
}, // },
}); // });
} // }
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작 // // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작
let eqpmIdList = res.map(item => { // let eqpmIdList = res.map(item => {
return item.eqpmId; // return item.eqpmId;
}); // });
this.setPageData({ nowGridEqpmIdList: eqpmIdList }); // this.setPageData({ nowGridEqpmIdList: eqpmIdList });
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝 // // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝
const newRes = res.map(item => { // const newRes = res.map(item => {
const newObj = { // const newObj = {
...item, // ...item,
rowStat: null, // rowStat: null,
}; // };
return newObj; // return newObj;
}); // });
// const newRes = [ const newRes = [
// { {
// eqpmId: 'EQ001', eqpmId: 'EQ001',
// originEqpmId: 'ORIG001', originEqpmId: 'ORIG001',
// eqpmNm: '냉각기 A', eqpmNm: '냉각기 A',
// careStndVal: 75, careStndVal: 75,
// warnStndVal: 90, warnStndVal: 90,
// }, },
// { {
// eqpmId: 'EQ002', eqpmId: 'EQ002',
// originEqpmId: 'ORIG002', originEqpmId: 'ORIG002',
// eqpmNm: '펌프 B', eqpmNm: '펌프 B',
// careStndVal: 60, careStndVal: 60,
// warnStndVal: 80, warnStndVal: 80,
// }, },
// { {
// eqpmId: 'EQ003', eqpmId: 'EQ003',
// originEqpmId: 'ORIG003', originEqpmId: 'ORIG003',
// eqpmNm: '모터 C', eqpmNm: '모터 C',
// careStndVal: 50, careStndVal: 50,
// warnStndVal: 70, warnStndVal: 70,
// }, },
// { {
// eqpmId: 'EQ004', eqpmId: 'EQ004',
// originEqpmId: 'ORIG004', originEqpmId: 'ORIG004',
// eqpmNm: '밸브 D', eqpmNm: '밸브 D',
// careStndVal: 65, careStndVal: 65,
// warnStndVal: 85, warnStndVal: 85,
// }, },
// { {
// eqpmId: 'EQ005', eqpmId: 'EQ005',
// originEqpmId: 'ORIG005', originEqpmId: 'ORIG005',
// eqpmNm: '컨트롤러 E', eqpmNm: '컨트롤러 E',
// careStndVal: 55, careStndVal: 55,
// warnStndVal: 75, warnStndVal: 75,
// }, },
// ] ]
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,

View File

@ -28,7 +28,7 @@
customClass="select-large" customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="검침대상명" label="검침대상명"
@ -69,7 +69,6 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -81,7 +80,7 @@
>검침대상 상세 >검침대상 상세
</v-card-title> </v-card-title>
<div class="px-5" style="height:calc(100% - 76px)"> <div class="px-5" style="height:calc(100% - 76px)">
<v-tabs v-model="tab" > <v-tabs v-model="tab">
<v-tab <v-tab
v-for="item in items" v-for="item in items"
:key="item.id" :key="item.id"
@ -188,26 +187,8 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
tab: null, tab: null,
dataPathMock: {
"rowGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
{ header: 'TJ 환산계수', name: 'tjCvrtCoef', align: 'right' },
{ header: 'TOE 환산계수', name: 'toeCvrtCoef', align: 'right' },
{ header: 'CO2 환산계수', name: 'co2CvrtCoef', align: 'right' },
{ header: '단위', name: 'unitCd', align: 'left' },
{ header: '사용 여부', name: 'useFg', align: 'center' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
items: [ items: [
{ {
name: '검침 대상 정보', name: '검침 대상 정보',
@ -724,8 +705,8 @@ const defaultData = {
}, },
buttonAuth: { buttonAuth: {
add: true, add: true,
save: true,
remove: true, remove: true,
save: true,
excel: false, excel: false,
}, },
}, },
@ -873,40 +854,7 @@ const myDetail = [
required: true, required: true,
}, },
]; ];
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
tjCvrtCoef: 1.25,
toeCvrtCoef: 0.85,
co2CvrtCoef: 2.1,
unitCd: 'kWh',
useFg: '1',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
grpCd: 'GRP02',
tjCvrtCoef: 1.10,
toeCvrtCoef: 0.90,
co2CvrtCoef: 1.8,
unitCd: 'MJ',
useFg: '0',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
grpCd: 'GRP01',
tjCvrtCoef: 1.30,
toeCvrtCoef: 0.95,
co2CvrtCoef: 2.3,
unitCd: 'GJ',
useFg: '1',
}
];
</script> </script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -44,7 +44,7 @@
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo" @getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :dataPath="dataPathMock"
:selectedRowDataWatchFlag="true" /> :selectedRowDataWatchFlag="true" />
</div> </div>
</div> </div>

View File

@ -195,51 +195,68 @@ export default {
}); });
}, },
async getEqpmKind() { async getEqpmKind() {
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEqpmKindCodeList', // apiKey: "selectEqpmKindCodeList",
resKey: 'eqpmKindCodeLists', // resKey: "eqpmKindCodeLists",
sendParam: {}, // sendParam: {},
}); // });
if (res.length > 0) { let res = [
this.selectValueList01 = await res.map(item => { {
return { eqpmKindId: "냉동기저온",
text: item.eqpmKindNm, eqpmKindNm: "냉동기저온",
value: item.eqpmKindId, },
}; {
}); eqpmKindId: "냉동기고온",
this.selectValue01 = this.selectValueList01[0].value; eqpmKindNm: "냉동기고온",
} else { },
this.selectValueList01 = []; ];
this.selectValue01 = null;
} if (res.length > 0) {
this.setPageData({ this.selectValueList01 = await res.map((item) => {
eqpmKindList: this.selectValueList01, return {
eqpmKindId: this.selectValue01, // text: item.eqpmKindNm,
}); label: item.eqpmKindNm,
}, value: item.eqpmKindId,
};
});
this.selectValue01 = this.selectValueList01[0].value;
} else {
this.selectValueList01 = [];
this.selectValue01 = null;
}
this.setPageData({
eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01,
});
},
gridInit() {}, gridInit() {},
getRowGridData() {}, getRowGridData() {},
async getData() { async getData() {
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectEnrgEffcTotSumm', // apiKey: "selectEnrgEffcTotSumm",
resKey: 'totSummData', // resKey: "totSummData",
sendParam: { // sendParam: {
fromDt: this.pageData.fromDt, // fromDt: this.pageData.fromDt,
eqpmKindId: this.selectValue01, // eqpmKindId: this.selectValue01,
}, // },
}); // });
let res = ["aaa", "bbb"];
await this.getChartData(res);
await this.getChartData(res); // this.selectData = res.filter((item, i) => {
// return (
// res.findIndex((item2, j) => {
// return item.eqpmGrpId === item2.eqpmGrpId;
// }) === i
// );
// });
this.selectData = res.filter((item, i) => { this.selectData = [
return ( { eqpmGrpId: "G001", eqpmGrpNm: "Group A", otherProp: "..." },
res.findIndex((item2, j) => { { eqpmGrpId: "G002", eqpmGrpNm: "Group B", otherProp: "..." },
return item.eqpmGrpId === item2.eqpmGrpId; ];
}) === i },
);
});
},
barClick(event, chartName) { barClick(event, chartName) {
var data = {}; var data = {};
if (chartName == "card") { if (chartName == "card") {
@ -274,40 +291,52 @@ export default {
}); });
}, },
async getChartData(data) { async getChartData(data) {
var chartDataObj = {}; var chartDataObj = {};
this.objList = {}; this.objList = {};
// let res = await this.postApiReturn({ // let res = await this.postApiReturn({
// apiKey : 'selectEnrgEffcTotSumm', // apiKey : 'selectEnrgEffcTotSumm',
// resKey : 'totSummData', // resKey : 'totSummData',
// sendParam:{ // sendParam:{
// fromDt : this.pageData.fromDt, // fromDt : this.pageData.fromDt,
// eqpmKindId : this.pageData.eqpmKindId, // eqpmKindId : this.pageData.eqpmKindId,
// } // }
// }); // });
data.map(item => { // data.map((item) => {
if (chartDataObj[item.eqpmGrpId] != null) { // if (chartDataObj[item.eqpmGrpId] != null) {
chartDataObj[item.eqpmGrpId].push(item); // chartDataObj[item.eqpmGrpId].push(item);
} else { // } else {
chartDataObj[item.eqpmGrpId] = [item]; // chartDataObj[item.eqpmGrpId] = [item];
} // }
}); // });
// chartDataObj.keys()[0] chartDataObj = {
var i = 0; group1: [
for (var x of Object.keys(chartDataObj)) { { fabNm: "Fab A", okCnt: 120, ngCnt: 30 },
this.loadChartList.push(false); { fabNm: "Fab B", okCnt: 150, ngCnt: 20 },
i++; { fabNm: "Fab C", okCnt: 100, ngCnt: 50 },
this.objList['chart_0' + i] = chartDataObj[x]; ],
this.chartNameList.push('chart_0' + i); group2: [
this.setPageData({ { fabNm: "Fab D", okCnt: 180, ngCnt: 10 },
[this.chartNameList[i - 1]]: Utility.defaultChartOption(true), { fabNm: "Fab E", okCnt: 160, ngCnt: 25 },
}); { fabNm: "Fab F", okCnt: 140, ngCnt: 35 },
],
};
this.setChartData(chartDataObj[x], i); // chartDataObj.keys()[0]
} var i = 0;
// this.setChartData(chartDataObj[Object.keys(chartDataObj)[0]]); for (var x of Object.keys(chartDataObj)) {
}, this.loadChartList.push(false);
i++;
this.objList["chart_0" + i] = chartDataObj[x];
this.chartNameList.push("chart_0" + i);
this.setPageData({
[this.chartNameList[i - 1]]: Utility.defaultChartOption(true),
});
this.setChartData(chartDataObj[x], i);
}
// this.setChartData(chartDataObj[Object.keys(chartDataObj)[0]]);
},
async setChartData(data, number) { async setChartData(data, number) {
this.loadChartList[number - 1] = false; this.loadChartList[number - 1] = false;
let xAxisData = []; let xAxisData = [];

View File

@ -266,8 +266,8 @@ export default {
}, },
created() { }, created() { },
async mounted() { async mounted() {
// console.log('----DEBUG---'); console.log('----DEBUG---');
// await this.initTest(); await this.initTest();
// End Debug Test--- // End Debug Test---
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;

File diff suppressed because it is too large Load Diff