init dev-push code ui base design

This commit is contained in:
leonard
2025-07-22 09:58:38 +07:00
parent ffdf5ccb66
commit eedbf94d56
214 changed files with 42170 additions and 28040 deletions

View File

@ -3,7 +3,7 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row >
<v-col :cols="3">
<component
:is="'SelectAddGrp'"
@ -12,6 +12,8 @@
dataKey="searchAddGrp"
:sendParam="{ useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -20,6 +22,8 @@
label="추가 정보명"
valueNm="addInfoNm"
:searchOption="true"
:iconShow="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="3">
@ -30,10 +34,12 @@
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -58,6 +64,7 @@
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -130,10 +137,24 @@ export default {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
tab: null,
detailList: myDetail,
initedFlag: false,
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: {
@ -330,7 +351,8 @@ export default {
this.search();
},
async search() {
this.loadGrid = false;
//process
this.loadGrid = true;
await this.getRowGridData();
await this.setPageData({
isFind: false,
@ -510,7 +532,10 @@ const myDetail = [
valueNm: 'addGrpId',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
list: 'addGrpList',
itemText: 'addGrpNm',
itemValue: 'addGrpId',
@ -522,7 +547,10 @@ const myDetail = [
valueNm: 'addInfoId',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
required: true,
},
{
@ -531,7 +559,10 @@ const myDetail = [
valueNm: 'addInfoNm',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
required: true,
},
{
@ -540,7 +571,10 @@ const myDetail = [
valueNm: 'addInfoDataKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
list: 'addInfoDataKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
@ -552,7 +586,10 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
value: { '1': true, '0': false },
required: true,
},
@ -562,7 +599,10 @@ const myDetail = [
valueNm: 'regUserNo',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
placeholder: '시스템 자동입력',
},
{
@ -571,7 +611,10 @@ const myDetail = [
valueNm: 'regDttm',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
placeholder: '시스템 자동입력',
},
{
@ -580,7 +623,10 @@ const myDetail = [
valueNm: 'procUserNo',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
placeholder: '시스템 자동입력',
},
{
@ -589,11 +635,50 @@ const myDetail = [
valueNm: 'procDttm',
disabled: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
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>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -714,6 +714,3 @@ function numberFormatter({ value }) {
return Utility.setFormatIntDecimal(Number(value), 2);
}
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -511,6 +511,3 @@ const defaultData = {
selectedCommCdData: null,
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

File diff suppressed because it is too large Load Diff

View File

@ -3,227 +3,142 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="6">
<InputText
:labelCols="2"
:parentPrgmId="myPrgmId"
label="지표명"
valueNm="searchEffcIdxNm"
:searchOption="true"
/>
<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'"
:iconShow="true" />
</v-col>
<v-col :cols="6" class="text-right">
<BtnSearch @click="search" />
<v-col :cols="9" class="text-right">
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-col :cols="3" style="height:100%">
<v-col :cols="5" style="height:100%">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4"
>효율지표 리스트</v-card-title
>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div class="px-4" style="height:calc(100% - 76px)">
<div ref="gridParent" id="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
:preventFocusChangeEventFlag="false"
/>
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :preventFocusChangeEventFlag="false"
:dataPath="dataPathExample" />
</div>
</div>
</v-card>
</v-col>
<v-col :cols="9" style="height:100%">
<v-col :cols="7" style="height:100%">
<v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;"
>효율지표 상세
<v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세
</v-card-title>
<div class="px-5" style="height:calc(100% - 76px)">
<div class="px-4" style="height:calc(100% - 76px)">
<v-tabs v-model="tab">
<v-tab
v-for="item in items"
:key="item.id"
:disabled="
(item.id == 'EffcIdxAddInfoTab'
? isInfoTabDisabled
: false) || item.disabledFlag
"
>
<v-tab v-for="item in items" :key="item.id" :disabled="(item.id == 'EffcIdxAddInfoTab'
? isInfoTabDisabled
: false) || item.disabledFlag
">
{{ item.name }}
</v-tab>
</v-tabs>
<v-tabs-items
v-model="tab"
style="height: calc(100% - 65px);"
class="py-6"
>
<v-tabs-items v-model="tab" class="py-6">
<v-tab-item v-for="(item, idx) in items" :key="item.id">
<v-row v-if="item.id == 'EffcIdxInfoTab'">
<v-col :cols="6" class="py-2">
<InputText
ref="effcIdxId"
:parentPrgmId="myPrgmId"
label="효율지표 ID"
valueNm="effcIdxId"
:required="true"
:readonly="true"
placeholder="시스템 자동입력"
/>
<v-row v-if="item.id == 'EffcIdxInfoTab'" class="form-row no-gutters">
<v-col :cols="6" class="py-3 pr-4">
<InputText ref="effcIdxId" :parentPrgmId="myPrgmId" label="효율지표 ID"
valueNm="effcIdxId" :required="true" :readonly="true" placeholder="시스템 자동입력"
:iconShow="true" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
ref="effcIdxNm"
:parentPrgmId="myPrgmId"
label="효율지표 명"
valueNm="effcIdxNm"
:required="true"
/>
<v-col :cols="6" class="py-3 pl-4">
<InputText ref="effcIdxNm" :parentPrgmId="myPrgmId" label="효율지표 명"
valueNm="effcIdxNm" :required="true" :iconShow="true" />
</v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'적용최소범위'"
:required="true"
:textCols="7"
@update:propsValue="selectValue01 = $event"
/>
<v-col :cols="6" class="py-3 pr-4">
<component :is="'SelectBox'" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'적용최소범위'" :required="true"
:textCols="12" :labelCols="12"
@update:propsValue="selectValue01 = $event" />
</v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'상위집계방법'"
:required="true"
:textCols="7"
@update:propsValue="selectValue02 = $event"
/>
<v-col :cols="6" class="py-3 pl-4">
<component :is="'SelectBox'" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'상위집계방법'" :required="true"
:textCols="12" :labelCols="12"
@update:propsValue="selectValue02 = $event" />
</v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
:propsValue="selectValue03"
:itemList="selectValueList03"
:label="'효율지표종류'"
:required="true"
:textCols="7"
@update:propsValue="selectValue03 = $event"
/>
<v-col :cols="6" class="py-3 pr-4">
<component :is="'SelectBox'" :propsValue="selectValue03"
:itemList="selectValueList03" :label="'효율지표종류'" :required="true"
:textCols="12" :labelCols="12"
@update:propsValue="selectValue03 = $event" />
</v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
:propsValue="selectValue04"
:itemList="selectValueList04"
:label="'단위'"
:textCols="7"
:required="true"
@update:propsValue="selectValue04 = $event"
/>
<v-col :cols="6" class="py-3 pl-4">
<component :is="'SelectBox'" :propsValue="selectValue04"
:itemList="selectValueList04" :label="'단위'" :textCols="12" :labelCols="12"
:required="true" @update:propsValue="selectValue04 = $event" />
</v-col>
<v-col :cols="6" class="py-2">
<CheckBox
:parentPrgmId="myPrgmId"
label="사용여부"
valueNm="useFg"
:required="true"
/>
<v-col :cols="6" class="py-3 pr-4">
<CheckBox :parentPrgmId="myPrgmId" label="사용여부" valueNm="useFg"
:required="true" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
ref="sortSeq"
:parentPrgmId="myPrgmId"
label="정렬순번"
valueNm="sortSeq"
:required="true"
/>
<v-col :cols="6" class="py-3 pl-4">
<InputText ref="sortSeq" :parentPrgmId="myPrgmId" label="정렬순번" valueNm="sortSeq"
:required="true" />
</v-col>
<v-col v-if="!checkCalc" :cols="6" class="py-2">
<component
ref="EqpmCalcPop"
:is="'EqpmCalcPop'"
:parentPrgmId="myPrgmId"
:item="calcItem"
:labelContent="'계산코드'"
:openMode="'E'"
:modalTitle="'계산코드'"
/>
<v-col v-if="!checkCalc" :cols="6" class="py-3 pr-4">
<component ref="EqpmCalcPop" :is="'EqpmCalcPop'" :parentPrgmId="myPrgmId"
:item="calcItem" :labelContent="'계산코드'" :openMode="'E'" :modalTitle="'계산코드'"
:textCols="12" :labelCols="12" />
</v-col>
<v-col v-if="!checkCalc" :cols="12" class="py-2">
<component
:is="'TextArea'"
ref="calcDesc"
:parentPrgmId="myPrgmId"
:item="calcDescItem"
/>
<v-col :cols="6" class="py-3">
</v-col>
<v-col v-if="!checkCalc" :cols="2" class="py-2">
<v-col v-if="!checkCalc" :cols="6" class="py-3 pr-4">
<component :is="'TextArea'" ref="calcDesc" :parentPrgmId="myPrgmId"
:item="calcDescItem" :textCols="12" :labelCols="12" />
</v-col>
<v-col :cols="6" class="py-3">
</v-col>
<v-col v-if="!checkCalc" :cols="12" class="py-3">
<label for="" class="search-box-label">
<v-icon x-small :color="'#fb8200'" class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
계산 Agument
</label>
</v-col>
<v-col v-if="!checkCalc" :cols="6" class="py-2">
<v-col v-if="!checkCalc" :cols="6" class="py-3 pr-4">
<div>
<component
:is="'SelectBox'"
:propsValue="selectValue05"
:itemList="selectValueList05"
:label="'효율지표ID1'"
:iconShow="false"
:disabled="checkCalc"
@update:propsValue="selectValue05 = $event"
/>
</div>
<div>
<component
:is="'SelectBox'"
ref="effcIdxId2"
:propsValue="selectValue06"
:itemList="selectValueList06"
:label="'효율지표ID2'"
:iconShow="false"
:disabled="effcIdxId2Disabled"
@update:propsValue="selectValue06 = $event"
/>
</div>
<div>
<component
:is="'SelectBox'"
ref="effcIdxId3"
:propsValue="selectValue07"
:itemList="selectValueList07"
:label="'효율지표ID3'"
:iconShow="false"
:disabled="effcIdxId3Disabled"
@update:propsValue="selectValue07 = $event"
/>
<component :is="'SelectBox'" :propsValue="selectValue05"
:itemList="selectValueList05" :label="'효율지표ID1'" :iconShow="false"
:disabled="checkCalc" @update:propsValue="selectValue05 = $event"
:textCols="12" :labelCols="12" />
</div>
</v-col>
<v-col v-if="!checkCalc" :cols="6" class="py-3 pl-4">
<div>
<component :is="'SelectBox'" ref="effcIdxId2" :propsValue="selectValue06"
:itemList="selectValueList06" :label="'효율지표ID2'" :iconShow="false"
:disabled="effcIdxId2Disabled"
@update:propsValue="selectValue06 = $event" :textCols="12"
:labelCols="12" />
</div>
</v-col>
<v-col v-if="!checkCalc" :cols="6" class="py-3 pr-4">
<div>
<component :is="'SelectBox'" ref="effcIdxId3" :propsValue="selectValue07"
:itemList="selectValueList07" :label="'효율지표ID3'" :iconShow="false"
:disabled="effcIdxId3Disabled"
@update:propsValue="selectValue07 = $event" :textCols="12"
:labelCols="12" />
</div>
</v-col>
</v-row>
<EffcIdxAddInfoTab
v-if="item.id == 'EffcIdxAddInfoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<EffcIdxAddInfoTab v-if="item.id == 'EffcIdxAddInfoTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
</v-tab-item>
</v-tabs-items>
</div>
@ -235,7 +150,7 @@
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import mixinGlobal from '@/mixin/global.js';
import { resize } from '@/mixin/resize.js';
import { resize } from '@/mixin/resize.js';
import BtnSearch from '~/components/common/button/BtnSearch';
import Buttons from '~/components/common/button/Buttons';
import SelectBlocMstr from '@/components/common/select/SelectBlocMstr';
@ -246,7 +161,7 @@ import EffcIdxAddInfoTab from '@/components/pages/ems/EffcIdxInfo/EffcIdxAddInfo
import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility';
import SelectBox from '@/components/common/select/SelectBox';
import CheckBox from '~/components/common/CheckBox';
import CheckBox from '~/components/common/checkbox/CheckBox';
import EqpmCalcPop from '~/components/common/modal/EqpmCalcPop';
import TextArea from '@/components/common/form/TextArea';
@ -254,7 +169,7 @@ let myTitle;
// const myPrgmId = "PRG0012";
let myPrgmId;
export default {
mixins: [mixinGlobal,resize],
mixins: [mixinGlobal, resize],
async asyncData(context) {
const myState = context.store.state;
// context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
@ -297,7 +212,66 @@ export default {
disabledFlag: false,
},
],
loadGrid: 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
},
{
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: [],
@ -327,10 +301,11 @@ export default {
required: true,
label: '계산설명',
cols: 12,
textCols: 12,
},
effcIdxId2Disabled: true,
effcIdxId3Disabled: true,
checkCalc: true,
checkCalc: false,
thisArgCnt: '',
isInfoTabDisabled: false,
effcKindInitData: null,
@ -711,7 +686,7 @@ export default {
//
},
mounted() {},
mounted() { },
beforeDestroy() {
this.chkOpenTabList({ key: 'destroy', prgmId: myPrgmId });
},
@ -1088,10 +1063,10 @@ export default {
value: newRes,
});
this.loadGrid = true;
this.loadGrid = true;
this.$nextTick(() => {
let rowGridData = {};
if(this.pageData.rowGridSelectData != null){
if (this.pageData.rowGridSelectData != null) {
// grid Row에서 pk값으로 설정 -> effcIdxId
let lastGridRowPk = this.pageData.rowGridSelectData.effcIdxId;
let gridData = this.$refs[this.gridName].getData();
@ -1105,14 +1080,14 @@ export default {
//rowKey: 0,
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
this.pageData.rowGridSelectKey == null
? 0
// : this.pageData.rowGridSelectKey ==
// this.$refs[this.gridName].getData().length - 1
// ? this.pageData.rowGridSelectKey
: rowGridData != undefined
? rowGridData.rowKey
: 0,
? rowGridData.rowKey
: 0,
setScroll: true,
});
} catch (error) {
@ -1266,36 +1241,36 @@ export default {
item.calcProc,
'계산코드를 선택해주세요',
item.effcKind == 'CALC' &&
(item.calcProc == '' || item.calcProc == null),
(item.calcProc == '' || item.calcProc == null),
) ||
validationCheck(
item.calcDesc,
'계산설명을 입력해주세요',
item.effcKind == 'CALC' &&
(item.calcDesc == '' || item.calcDesc == null),
(item.calcDesc == '' || item.calcDesc == null),
) ||
validationCheck(
item.effcIdxId1,
'효율지표ID1을 선택해주세요',
item.effcKind == 'CALC' &&
(item.effcIdxId1 == '' || item.effcIdxId1 == null),
(item.effcIdxId1 == '' || item.effcIdxId1 == null),
) ||
validationCheck(
item.effcIdxId2,
'효율지표ID2를 입력해주세요',
item.effcKind == 'CALC' &&
item.argCnt > 1 &&
item.effcIdxId1 != null &&
item.effcIdxId1 != null &&
(item.effcIdxId2 == '' || item.effcIdxId2 == null),
item.argCnt > 1 &&
item.effcIdxId1 != null &&
item.effcIdxId1 != null &&
(item.effcIdxId2 == '' || item.effcIdxId2 == null),
) ||
validationCheck(
item.effcIdxId3,
'효율지표ID3을 입력해주세요',
item.effcKind == 'CALC' &&
item.argCnt > 2 &&
item.effcIdxId2 != null &&
(item.effcIdxId3 == '' || item.effcIdxId3 == null),
item.argCnt > 2 &&
item.effcIdxId2 != null &&
(item.effcIdxId3 == '' || item.effcIdxId3 == null),
)
// item.effcKind == 'CALC' ? (item.calcProc == '' || item.calcProc == null) ? true : false : false
// item.effcKind == 'CALC' ? (item.calcDesc == '' || item.calcDesc == null ? true : false) : false ||
@ -1462,6 +1437,8 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>
<style lang="scss" scoped>
.v-input__custom.surface-name fieldset {
width: 345px;
}
</style>

View File

@ -677,6 +677,3 @@ const defaultData = {
// };
// };
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,8 +3,8 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="3">
<v-row align="end" no-gutters>
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -12,9 +12,11 @@
dataKey="searchLocKind"
:sendParam="{ commGrpCd: 'EM_LOC_KIND', useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -22,10 +24,12 @@
dataKey="searchEccKind"
:sendParam="{ commGrpCd: 'EM_ECC_KIND', useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
<!-- 사업장 -->
<!-- <v-col :cols="3">
사업장
<div style="visibility:hidden">
<component
:is="'SelectBlocMstr'"
@ -33,13 +37,8 @@
:parentPrgmId="myPrgmId"
/>
</div>
</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> -->
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -47,18 +46,23 @@
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="6">
<v-col :cols="2.5">
<InputText
:parentPrgmId="myPrgmId"
label="공정명"
valueNm="eccNm"
:labelCols="2"
:textCols="9"
:labelCols="12"
:textCols="12"
:searchOption="true"
:iconShow="true"
customClass="input-large"
/>
</v-col>
<BtnSearch @click="search" size="large" />
</v-row>
</v-card>
</v-col>
@ -75,16 +79,17 @@
:btnActionsFnc="btnActions"
/>
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100">
<div class="px-5" style="min-height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100 pb-2">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -191,13 +196,15 @@ export default {
gridName: 'rowGrid',
loadGrid: false,
tab: null,
selectedRowKey: null,
// rowSelectionStatus: {},
dataPathMock : { },
items: [
{ name: '공정 정보', id: 'eccBaseInfoTab', disabledFlag: false },
{ name: '공정 추가 정보', id: 'eccAddInfoTab', disabledFlag: false },
{ name: '공정 연결 정보', id: 'eccIaoTab', disabledFlag: false },
],
detailList: myDetail,
loadGrid: false,
};
},
computed: {
@ -313,11 +320,23 @@ export default {
},
mounted() {
this.init();
this.$nextTick(() => {
// const checkbox = document.getElementById('headerCheckbox');
// if (checkbox) {
// checkbox.addEventListener('change', this.handleHeaderCheckboxChange);
// }
});
},
beforeDestroy() {
this.chkOpenTabList({ key: 'destroy', prgmId: myPrgmId });
},
methods: {
handleHeaderCheckboxChange(event) {
const checked = event.target.checked;
this.dataPathMock.rowGrid.data.forEach(row => {
row.selected = checked;
});},
...mapMutations({
setPageData: 'setPageData',
}),
@ -332,7 +351,41 @@ export default {
blocId: this.userInfo.blocId,
});
},
gridInitTest() {
const rowGrid = {
column: [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '공정 정보', name: 'eccNm', align: 'left' },
{ header: '현재 상태', name: 'status', align: 'center' },
{ header: '공정 유형', name: 'eccKind', align: 'left' },
{ header: '사용 여부', name: 'useFg', align: 'center' },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {
...gridOptions,
},
}
this.dataPathMock = {rowGrid};
this.$nextTick(() => {
this.loadGrid = true;
});
},
gridInit() {
// Test
this.gridInitTest(); return;
// End test
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const gridWidth = this.$refs.gridParent.offsetWidth;
@ -545,6 +598,16 @@ export default {
});
},
async getRowData(data) {
//Progess and fake radio
// const rowKey = data.rowKey;
// this.selectedRowKey = rowKey;
// Object.keys(this.rowSelectionStatus).forEach(key => {
// this.$set(this.rowSelectionStatus, key, false);
// });
// this.$set(this.rowSelectionStatus, rowKey, true);
this.setEccAddInfo(data);
this.setEccIao(data);
this.setGridSelectData({
@ -560,6 +623,9 @@ export default {
rowGridSelectKey: data.rowKey,
rowGridSelectData: Object.assign({}, data),
});
//fake radio need recheck
// this.$refs[this.gridName]?.repaint?.();
},
async setEccAddInfo(data) {
this.setPageData({
@ -862,9 +928,12 @@ const myDetail = [
valueNm: 'eccId',
readonly: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
required: false,
placeholder: '시스템 자동입력',
iconShow: true
},
{
type: 'InputText',
@ -872,34 +941,23 @@ const myDetail = [
valueNm: 'eccNm',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pl-4',
required: true,
iconShow: true
},
//CustomeInput fakedata and not using in real code
// {
// type: "ReadPlcPop",
// label: "상위 검침개소",
// valueNm: "upEccId",
// disabled: false,
// cols: 6,
// class: "py-2",
// required: true
// },
// {
// type: "InputText",
// valueNm: "upEccNm",
// label: "상위 검침개소명",
// readonly: true,
// cols: 6,
// class: "py-2"
// },
// {
// type: "InputText",
// label: "상위 공정 코드",
// valueNm: "upEccId",
// disabled: false,
// cols: 6,
// class: "py-2",
// required: true
// type: 'CustomInput',
// labelContent: '상위 공정',
// cols: 6,
// valueNm: 'eccNm',
// labelCols: 12,
// textCols: 12,
// class: 'py-2',
// required: true,
// iconShow: true
// },
{
type: 'FtnPlcFormPop',
@ -909,29 +967,42 @@ const myDetail = [
disabled: false,
required: true,
cols: 6,
class: 'py-2',
labelCols: 4,
textCols: 7,
labelCols: 12,
textCols: 12,
class: 'pb-0 mb-0 pr-4',
disableContent: true,
},
{
type: 'InputText',
valueNm: 'upEccNm',
readonly: true,
cols: 5,
class: 'py-2',
},
{
type: 'SelectBox',
label: '위치 유형',
valueNm: 'locKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 mb-0 pb-0 pl-4',
list: 'locKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
iconShow: true,
},
{
type: 'InputText',
valueNm: 'upEccNm',
readonly: true,
cols: 6,
class: 'py-2 pr-4',
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2 pl-4',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'SelectBox',
@ -939,11 +1010,14 @@ const myDetail = [
valueNm: 'eccKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
list: 'eccKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
addNull: true,
iconShow: true
},
{
type: 'InputText',
@ -951,8 +1025,11 @@ const myDetail = [
valueNm: 'sortSeq',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pl-4',
inputType: 'number',
iconShow: true
// onkeydown : "if(this.value > 100) this.value = 100;if(this.value < 0) this.value = 0;if(this.value == '') this.value = 0;"
},
{
@ -961,10 +1038,13 @@ const myDetail = [
valueNm: 'blocId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
list: 'blocIdList',
itemText: 'blocNm',
itemValue: 'blocId',
iconShow: true
},
{
type: 'CheckBox',
@ -972,8 +1052,11 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pl-4',
value: { '1': true, '0': false },
iconShow: true,
required: true,
},
{
@ -982,11 +1065,147 @@ const myDetail = [
valueNm: 'eccFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
iconShow: true,
value: { '1': true, '0': false },
},
];
const dataMockExample = [
{
eccId: 'ECC000001',
eccNm: 'EGP_HVAC_LT_CH001',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000002',
eccNm: 'B01',
status: '대기',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000005',
eccNm: 'B01-1',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-1-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000006',
eccNm: 'B01-2',
status: '점검중',
eccKind: '공정',
useFg: '0',
_children: [
{
eccId: 'ECC0000013',
eccNm: 'B01-2-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000014',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000015',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000007',
eccNm: 'B01-3',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-3-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-3-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-3-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
],
},
{
eccId: 'ECC000003',
eccNm: 'B02',
status: '운영중',
eccKind: '공정',
useFg: '1',
},
{
eccId: 'ECC000004',
eccNm: 'B03',
status: '점검중',
eccKind: '공정',
useFg: '0',
},
],
},
];
const gridOptions = {
treeColumnOptions: {
name: 'eccNm', // Showing tree table
useIcon: false, // Not using icon
indentWidth: 10,// spacing when showing children
},
header: {
height: 40,
},
rowHeight: 35,
showCheckbox: false,
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -876,6 +876,3 @@ const defaultData = {
],
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,139 +3,74 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="3">
<v-row align="end" no-gutters>
<v-col :cols="2.5">
<!-- 사업장 -->
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
/>
<component :is="'SelectBlocMstr'" ref="SelectBlocMstr" :parentPrgmId="myPrgmId"
:labelCols="12" :textCols="12" :iconShow="true" :customClass="'select-large'" />
</v-col>
<!-- <v-col :cols="3">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
:label="'개소 종류'"
dataKey="searchPlcKind"
:sendParam="{ commGrpCd: 'CM_CHKKIND', useFg: '1'}"
:addAll="true"
/>
</v-col> -->
<v-col :cols="3">
<component
:is="'SelectReadObj'"
:parentPrgmId="myPrgmId"
:label="'검침대상'"
dataKey="searchReadObj"
:sendParam="{ useFg: '1' }"
/>
<v-col :cols="2.5">
<component :is="'SelectReadObj'" :parentPrgmId="myPrgmId" :label="'검침대상'"
dataKey="searchReadObj" :sendParam="{ useFg: '1' }" :labelCols="12" :textCols="12"
:iconShow="true" :customClass="'select-large'" />
</v-col>
<v-col :cols="6" class="text-right">
<BtnSearch @click="search" />
<v-col :cols="2.5">
<component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'사용여부'" dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :labelCols="12"
:textCols="12" :customClass="'select-large'" :iconShow="true" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
:label="'사용여부'"
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
/>
</v-col>
<v-col :cols="6">
<InputText
:parentPrgmId="myPrgmId"
label="검침개소명"
valueNm="readPlcNm"
:labelCols="2"
:textCols="6"
:searchOption="true"
/>
<v-col :cols="2.5">
<InputText :parentPrgmId="myPrgmId" label="검침개소명" valueNm="readPlcNm" :labelCols="12"
:textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" />
</v-col>
<BtnSearch @click="search" size="large" />
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-row ref="contents" class="mt-4">
<v-col :cols="5" class="h100">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4"
>검침개소 정보</v-card-title
>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
<div class="d-flex align-center justify-space-between pa-4 pb-6">
<v-card-title class="pa-0 custom-title-4">검침개소 정보</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" />
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div class="px-4">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
/>
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
:dataPath="dataPathExample" />
</div>
</div>
</v-card>
</v-col>
<v-col :cols="7" class="h100">
<v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;"
>검침개소 상세
<v-card-title class="custom-title-4 pb-1 pa-4">검침개소 상세
</v-card-title>
<div class="px-5" style="height:calc(100% - 76px)">
<div class="px-4">
<v-tabs v-model="tab">
<v-tab
v-for="item in items"
:key="item.id"
:disabled="
(item.id == 'readPlcImgInfoTab' ? isImgTabDisabled : false) ||
item.disabledFlag
"
>
<v-tab v-for="item in items" :key="item.id" :disabled="(item.id == 'readPlcImgInfoTab' ? isImgTabDisabled : false) ||
item.disabledFlag
">
{{ item.name }}
</v-tab>
</v-tabs>
<v-tabs-items
v-model="tab"
style="height: calc(100% - 65px);"
class="py-6"
>
<v-tabs-items v-model="tab" style="height: calc(100% - 65px);" class="pt-6 py-2">
<v-tab-item v-for="(item, idx) in items" :key="item.id">
<component
v-if="item.id == 'readPlcBaseInfoTab'"
:is="'Form'"
:parentPrgmId="myPrgmId"
:detailList="detailList"
:bindingData="gridName"
@gridEditingFinish="gridEditingFinish"
/>
<ReadPlcAddInfoTab
v-if="item.id == 'readPlcAddInfoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<ReadPlcImgInfoTab
v-if="item.id == 'readPlcImgInfoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<ReadPlcTagRelTab
v-if="item.id == 'readPlcTagRelTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<component v-if="item.id == 'readPlcBaseInfoTab'" :is="'Form'" :parentPrgmId="myPrgmId"
:detailList="detailList" :bindingData="gridName"
@gridEditingFinish="gridEditingFinish" />
<ReadPlcAddInfoTab v-if="item.id == 'readPlcAddInfoTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
<ReadPlcImgInfoTab v-if="item.id == 'readPlcImgInfoTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
<ReadPlcTagRelTab v-if="item.id == 'readPlcTagRelTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
</v-tab-item>
</v-tabs-items>
</div>
@ -199,7 +134,7 @@ export default {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
tab: null,
isImgTabDisabled: false,
items: [
@ -222,6 +157,47 @@ export default {
],
detailList: myDetail,
defaultUseFg: 1,
dataPathExample: {
"rowGrid": {
data: sampleData,
column: [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{
header: '검침개소명',
name: 'readPlcNm',
align: 'left',
minWidth: 400,
},
{
header: '개소 종류',
name: 'plcKind',
minWidth: 100,
align: 'center',
},
{
header: '사용 여부',
name: 'useFg',
minWidth: 100,
align: 'center',
},
],
option: myOptions,
}
}
// loadTree: false
};
},
@ -336,18 +312,18 @@ export default {
},
async initData() {
let ercList = [];
const res = await this.postApiReturn({
apiKey: 'selectErcInfo',
resKey: 'ercInfoData',
sendParam: {
blocId: this.userInfo.blocId,
},
});
res.forEach(item => {
const it = { text: item.ercNm, value: item.ercId };
ercList.push(it);
});
this.setPageData({ ercNmList: ercList });
// const res = await this.postApiReturn({
// apiKey: 'selectErcInfo',
// resKey: 'ercInfoData',
// sendParam: {
// blocId: this.userInfo.blocId,
// },
// });
// res.forEach(item => {
// const it = { text: item.ercNm, value: item.ercId };
// ercList.push(it);
// });
// this.setPageData({ ercNmList: ercList });
},
gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
@ -358,7 +334,9 @@ export default {
resizable: true,
},
treeColumnOptions: {
name: 'readPlcNm',
name: 'eccNm',       // Showing tree table
useIcon: false,      // Not using icon
indentWidth: 10,
},
};
this.setGridOption({
@ -530,12 +508,12 @@ export default {
this.$refs[this.gridName].focus({
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
this.pageData.rowGridSelectKey == null
? 0
: this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
columnName: 'readPlcNm',
setScroll: true,
});
@ -976,6 +954,63 @@ const defaultData = {
},
};
const sampleData = [
{
readPlcNm: '서울 본사',
plcKind: '본사',
useFg: '사용',
_children: [
{
readPlcNm: '서울 본사 - 1층',
plcKind: '층',
useFg: '사용',
},
{
readPlcNm: '서울 본사 - 2층',
plcKind: '층',
useFg: '미사용',
},
],
},
{
readPlcNm: '부산 지사',
plcKind: '지사',
useFg: '사용',
_children: [
{
readPlcNm: '부산 지사 - A동',
plcKind: '건물',
useFg: '사용',
_children: [
{
readPlcNm: '부산 지사 - A동 1층',
plcKind: '층',
useFg: '사용',
},
],
},
],
},
{
readPlcNm: '대전 창고',
plcKind: '창고',
useFg: '미사용',
},
];
const myOptions = {
columnOptions: {
resizable: true,
},
treeColumnOptions: {
name: 'readPlcNm',       // Showing tree table
useIcon: false,      // Not using icon
indentWidth: 10,
},
}
const myDetail = [
{
type: 'InputText',
@ -983,34 +1018,36 @@ const myDetail = [
valueNm: 'readPlcId',
readonly: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pr-4',
required: false,
placeholder: '시스템 자동입력',
iconShow: true,
},
{
type: 'InputText',
label: '검침개소명',
valueNm: 'readPlcNm',
disabled: false,
labelCols: 12,
textCols: 12,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
required: true,
iconShow: true,
},
{
type: 'ReadPlcPop',
label: '상위 검침개소',
valueNm: 'upReadPlcId',
disabled: false,
labelCols: 12,
textCols: 12,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4 pb-2',
required: true,
},
{
type: 'InputText',
valueNm: 'upReadPlcNm',
readonly: true,
cols: 5,
class: 'py-2',
iconShow: true,
},
{
type: 'SelectBox',
@ -1018,23 +1055,42 @@ const myDetail = [
valueNm: 'plcKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pl-4',
list: 'plcKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
iconShow: true,
},
{
type: 'InputText',
valueNm: 'plcKind',
valueNm: 'upReadPlcNm',
readonly: true,
cols: 6,
textCols: 12,
class: 'pt-1 py-3 pr-4',
},
{
showValue: false,
},
{
type: 'SelectBox',
label: '검침대상',
valueNm: 'readObjId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pr-4',
list: 'readObjList',
itemText: 'readObjNm',
itemValue: 'readObjId',
required: true,
iconShow: true,
},
{
type: 'CheckBox',
@ -1042,9 +1098,12 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pl-4',
value: { '1': true, '0': false },
required: true,
iconShow: true,
},
// {
// type: "SelectBox",
@ -1059,6 +1118,3 @@ const myDetail = [
// },
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -9,6 +9,8 @@
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:textCols="12"
:labelCols="12"
:parentPrgmId="myPrgmId"
/>
</v-col>
@ -30,6 +32,8 @@
dataKey="searchReadObj"
:sendParam="{ useFg: '1' }"
:addAll="true"
:textCols="12"
:labelCols="12"
/>
</v-col>
<v-col :cols="3" class="text-right">
@ -62,8 +66,8 @@
:parentPrgmId="myPrgmId"
label="에너지원명"
valueNm="ercNm"
:textCols="7"
:labelCols="4"
:textCols="12"
:labelCols="12"
:searchOption="true"
/>
</v-col>
@ -475,24 +479,74 @@ export default {
this.loadGrid = true;
},
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) {
res = await this.postApiReturn({
apiKey: 'selectErcInfo',
resKey: 'ercInfoData',
sendParam: {
blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId,
ercKind: this.pageData.searchErcKind,
readObjId: this.pageData.searchReadObj,
chrgKind: this.pageData.searchChrgKind,
useFg: this.pageData.useFg,
ercNmLike: this.pageData.ercNm,
},
});
} else {
this.setPageData({ isFind: false });
}
// if (this.pageData.blocMstrList.length > 0) {
// res = await this.postApiReturn({
// apiKey: 'selectErcInfo',
// resKey: 'ercInfoData',
// sendParam: {
// blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId,
// ercKind: this.pageData.searchErcKind,
// readObjId: this.pageData.searchReadObj,
// chrgKind: this.pageData.searchChrgKind,
// useFg: this.pageData.useFg,
// ercNmLike: this.pageData.ercNm,
// },
// });
// } else {
// this.setPageData({ isFind: false });
// }
const newRes = res.map(item => {
const newObj = {
...item,
@ -744,8 +798,133 @@ const defaultData = {
/* data 세팅 */
// 로컬 gridName 값과 동일한 이름으로 세팅
rowGrid: {
data: [],
column: [], // myColumns,
data: [
{
"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
defaultRow: {
comId: '',
@ -816,7 +995,10 @@ const myDetail = [
valueNm: 'ercId',
readonly: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
required: false,
placeholder: '시스템 자동입력',
},
@ -826,7 +1008,10 @@ const myDetail = [
valueNm: 'ercNm',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
required: true,
},
{
@ -835,7 +1020,10 @@ const myDetail = [
valueNm: 'ercKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
list: 'ercKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
@ -847,7 +1035,10 @@ const myDetail = [
valueNm: 'readObjId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
list: 'readObjList',
itemText: 'readObjNm',
itemValue: 'readObjId',
@ -859,7 +1050,10 @@ const myDetail = [
valueNm: 'chrgKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
list: 'chrgKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
@ -871,7 +1065,10 @@ const myDetail = [
valueNm: 'unitPrce',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
},
{
type: 'InputText',
@ -879,7 +1076,11 @@ const myDetail = [
valueNm: 'peakPow',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-4',
},
{
type: 'SelectBox',
@ -887,7 +1088,10 @@ const myDetail = [
valueNm: 'blocId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
list: 'blocMstrList',
itemText: 'blocNm',
itemValue: 'blocId',
@ -899,14 +1103,12 @@ const myDetail = [
valueNm: 'elecContId',
disabled: false,
cols: 6,
class: 'py-2',
},
{
type: 'InputText',
valueNm: 'elecContNm',
readonly: true,
cols: 5,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
// class: 'py-2',
class: 'pb-0 mb-0 pr-4',
disableContent: true,
},
{
type: 'ReadPlcPop',
@ -914,14 +1116,26 @@ const myDetail = [
valueNm: 'readPlcId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-4',
},
{
type: 'InputText',
valueNm: 'elecContNm',
readonly: true,
cols: 6,
iconShow: true,
class: 'py-2 pr-4',
},
{
type: 'InputText',
valueNm: 'readPlcNm',
readonly: true,
cols: 5,
class: 'py-2',
cols: 6,
iconShow: true,
class: 'py-2 pl-4',
},
{
type: 'CheckBox',
@ -929,7 +1143,8 @@ const myDetail = [
valueNm: 'prceFg',
disabled: false,
cols: 6,
class: 'py-2',
iconShow: true,
class: 'py-2 pr-4',
value: { '1': true, '0': false },
},
{
@ -938,12 +1153,10 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
iconShow: true,
class: 'py-2 pl-4',
value: { '1': true, '0': false },
required: true,
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -829,6 +829,3 @@ const defaultData = {
],
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1086,6 +1086,3 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -814,6 +814,3 @@ function numberFormatter({ value }) {
return Utility.setFormatIntDecimal(value, 2);
}
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,272 +3,148 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox1"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비종류'"
@update:propsValue="selectValue01 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'"
@update:propsValue="selectValue01 = $event" labelCols="12" :textCols="12"
:customClass="'select-large fixed-width'" :iconShow="true" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox2"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'설비그룹'"
@update:propsValue="selectValue02 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'설비그룹'"
@update:propsValue="selectValue02 = $event" labelCols="12" :textCols="12"
:customClass="'select-large fixed-width'" :iconShow="true" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox3"
:propsValue="selectValue03"
:itemList="selectValueList03"
:label="'물리량타입'"
@update:propsValue="selectValue03 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03"
:itemList="selectValueList03" :label="'물리량타입'"
@update:propsValue="selectValue03 = $event" labelCols="12" :textCols="12"
:customClass="'select-large fixed-width'" :iconShow="true" />
</v-col>
<v-col :cols="3" class="text-right">
<v-btn :ripple="false" @click="search()">조회</v-btn>
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-col :cols="4" class="h100">
<v-card class="pb-5 px-2">
<v-card-title class="d-flex align-center justify-space-between pa-5">
<span class="tit ft-size_20 ft-weight_600">물리량 리스트</span>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
<v-col :cols="5" class="h100">
<v-card class="pb-5">
<v-card-title class="d-flex align-center justify-space-between pa-4">
물리량 리스트
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" />
</v-card-title>
<div class="px-5" style="height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
:preventFocusChangeEventFlag="true"
:preventFocusChangeEventTargetGridList="editingGridList"
/>
:preventFocusChangeEventTargetGridList="editingGridList" :dataPath="dataPathExample" />
</div>
</div>
</v-card>
</v-col>
<v-col :cols="8" class="h100">
<v-col :cols="7" class="h100">
<v-card class="pb-5 px-4">
<v-card-title>물리량 상세</v-card-title>
<v-card-title class="px-0">물리량 상세</v-card-title>
<v-row no-gutters>
<v-col :cols="6" class="py-2">
<InputText
:parentPrgmId="myPrgmId"
label="물리량 ID"
valueNm="pysclQtyId"
:labelCols="4"
:textCols="7"
:required="requiredValueList[0]"
:disabled="disabledValueList[0]"
:readonly="readOnlyValueList[0]"
placeholder="시스템 자동입력"
/>
<v-col :cols="12" class="py-3">
<InputText :parentPrgmId="myPrgmId" label="물리량 ID" valueNm="pysclQtyId" :labelCols="12"
:textCols="12" :required="requiredValueList[0]" :disabled="disabledValueList[0]"
:readonly="readOnlyValueList[0]" placeholder="시스템 자동입력" />
</v-col>
</v-row>
<v-row no-gutters>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
ref="SelectBox4"
:propsValue="formEqpmGrpId"
:itemList="formSelectValueList01"
:label="'설비그룹'"
:required="requiredValueList[1]"
:disabled="disabledValueList[1]"
:readonly="readOnlyValueList[1]"
@update:propsValue="formEqpmGrpId = $event"
:labelCols="4"
:textCols="7"
/>
<v-col :cols="6" class="py-3 pr-4">
<component :is="'SelectBox'" ref="SelectBox4" :propsValue="formEqpmGrpId"
:itemList="formSelectValueList01" :label="'설비그룹'" :required="requiredValueList[1]"
:disabled="disabledValueList[1]" :readonly="readOnlyValueList[1]"
@update:propsValue="formEqpmGrpId = $event" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputTextReg
:parentPrgmId="myPrgmId"
label="물리량코드"
valueNm="pysclQtyCd"
:labelCols="4"
:textCols="7"
:required="requiredValueList[2]"
:disabled="disabledValueList[2]"
:readonly="readOnlyValueList[2]"
/>
<v-col :cols="6" class="py-3 pl-4">
<InputTextReg :parentPrgmId="myPrgmId" label="물리량코드" valueNm="pysclQtyCd" :labelCols="12"
:textCols="12" :required="requiredValueList[2]" :disabled="disabledValueList[2]"
:readonly="readOnlyValueList[2]" />
</v-col>
</v-row>
<v-row no-gutters>
<v-col :cols="6" class="py-2">
<InputText
:parentPrgmId="myPrgmId"
label="물리량명"
valueNm="pysclQtyNm"
:labelCols="4"
:textCols="7"
:required="requiredValueList[3]"
:disabled="disabledValueList[3]"
:readonly="readOnlyValueList[3]"
/>
<v-col :cols="12" class="py-3">
<InputText :parentPrgmId="myPrgmId" label="물리량명" valueNm="pysclQtyNm" :labelCols="12"
:textCols="12" :required="requiredValueList[3]" :disabled="disabledValueList[3]"
:readonly="readOnlyValueList[3]" />
</v-col>
</v-row>
<v-row no-gutters>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
ref="SelectBox5"
:propsValue="formPysclQtyTp"
:itemList="formSelectValueList02"
:label="'물리량타입'"
@update:propsValue="formPysclQtyTp = $event"
:required="requiredValueList[4]"
:disabled="disabledValueList[4]"
:readonly="readOnlyValueList[4]"
:labelCols="4"
:textCols="7"
/>
<v-col :cols="6" class="py-3 pr-4">
<component :is="'SelectBox'" ref="SelectBox5" :propsValue="formPysclQtyTp"
:itemList="formSelectValueList02" :label="'물리량타입'"
@update:propsValue="formPysclQtyTp = $event" :required="requiredValueList[4]"
:disabled="disabledValueList[4]" :readonly="readOnlyValueList[4]" :labelCols="12"
:textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
ref="SelectBox6"
:propsValue="formUpTotMeth"
:itemList="formSelectValueList04"
:label="'상위집계방법'"
@update:propsValue="formUpTotMeth = $event"
:required="requiredValueList[5]"
:disabled="disabledValueList[5]"
:readonly="readOnlyValueList[5]"
:labelCols="4"
:textCols="7"
/>
<v-col :cols="6" class="py-3 pl-4">
<component :is="'SelectBox'" ref="SelectBox6" :propsValue="formUpTotMeth"
:itemList="formSelectValueList04" :label="'상위집계방법'"
@update:propsValue="formUpTotMeth = $event" :required="requiredValueList[5]"
:disabled="disabledValueList[5]" :readonly="readOnlyValueList[5]" :labelCols="12"
:textCols="12" />
</v-col>
</v-row>
<v-row no-gutters>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
ref="SelectBox7"
:propsValue="formUnit"
:itemList="formSelectValueList03"
:label="'단위'"
@update:propsValue="formUnit = $event"
:required="requiredValueList[6]"
:disabled="disabledValueList[6]"
:readonly="readOnlyValueList[6]"
:labelCols="4"
:textCols="7"
/>
<v-col :cols="6" class="py-3 pr-4">
<component :is="'SelectBox'" ref="SelectBox7" :propsValue="formUnit"
:itemList="formSelectValueList03" :label="'단위'" @update:propsValue="formUnit = $event"
:required="requiredValueList[6]" :disabled="disabledValueList[6]"
:readonly="readOnlyValueList[6]" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-3 pl-4" v-show="argContentShowFlag">
<component :is="'EqpmCalcPop'" :parentPrgmId="myPrgmId" ref="EqpmCalcPop" :openMode="'P'"
:modalTitle="'계산코드'" :labelContent="'계산코드'" :item="calcItem" :labelCols="12"
:textCols="12" />
</v-col>
</v-row>
<v-row no-gutters v-show="argContentShowFlag">
<v-col :cols="6" class="py-2">
<component
:is="'EqpmCalcPop'"
:parentPrgmId="myPrgmId"
ref="EqpmCalcPop"
:openMode="'P'"
:modalTitle="'계산코드'"
:labelContent="'계산코드'"
:item="calcItem"
:labelCols="4"
:textCols="7"
/>
<v-col :cols="6" class="py-3">
<component :is="'TextArea'" :parentPrgmId="myPrgmId" ref="TextArea" :item="calcDescItem" />
</v-col>
</v-row>
<v-row no-gutters v-show="argContentShowFlag">
<v-col :cols="12" class="py-2">
<component
:is="'TextArea'"
:parentPrgmId="myPrgmId"
ref="TextArea"
:item="calcDescItem"
/>
</v-col>
</v-row>
<v-row no-gutters v-show="argContentShowFlag">
<v-col :cols="2" class="py-2">
<label for="">
<v-icon
x-small
:color="requiredValueList[7] ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon small
:class="['mr-1', requiredValueList[7] ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
계산Argument
</label>
</v-col>
<v-col :cols="2" class="py-2">
<InputText
:parentPrgmId="myPrgmId"
label="ARG갯수"
valueNm="argCnt"
:labelCols="8"
:textCols="4"
:iconShow="false"
:required="requiredValueList[7]"
:disabled="disabledValueList[7]"
:readonly="readOnlyValueList[7]"
/>
<v-col :cols="4" class="py-2">
<InputText :parentPrgmId="myPrgmId" label="ARG갯수" valueNm="argCnt" :labelCols="12"
:textCols="12" :iconShow="true" :required="requiredValueList[7]"
:disabled="disabledValueList[7]" :readonly="readOnlyValueList[7]" />
</v-col>
<v-col :cols="4"> </v-col>
<v-col :cols="4" class="py-2" align="right">
<v-btn
:ripple="false"
@click="btnAction('add')"
:disabled="disabledValueList[7]"
>추가</v-btn
>
<v-btn :ripple="false" @click="btnAction('add')" :disabled="disabledValueList[7]">추가</v-btn>
<!-- <v-btn :ripple="false" @click="btnAction('edit')">수정</v-btn> -->
<v-btn
:ripple="false"
@click="btnAction('remove')"
:disabled="disabledValueList[7]"
>삭제</v-btn
>
<v-btn :ripple="false" @click="btnAction('remove')"
:disabled="disabledValueList[7]">삭제</v-btn>
</v-col>
</v-row>
<v-row style="height:calc(30% - 76px)" v-show="argContentShowFlag">
<v-col :cols="2"> </v-col>
<v-col :cols="10" style="height:100%">
<div ref="gridParent2" style="height:100%">
<component
:ref="gridName2"
:is="loadGrid2 ? 'Grid' : null"
:gridName="gridName2"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData2"
/>
<component :ref="gridName2" :is="loadGrid2 ? 'Grid' : null" :gridName="gridName2"
:parentPrgmId="myPrgmId" @getRowsData="getRowData2" :dataPath="dataPathExample2" />
</div>
</v-col>
</v-row>
<component
v-show="false"
:is="'EgrpPysclQtyPop'"
:parentPrgmId="myPrgmId"
ref="EgrpPysclQtyPop"
:item="EgrpPysclQtyPopItem"
@dialogOpenCloseEvent="egrpPysclQtyPopOpenCloseEvent"
/>
<component v-show="false" :is="'EgrpPysclQtyPop'" :parentPrgmId="myPrgmId" ref="EgrpPysclQtyPop"
:item="EgrpPysclQtyPopItem" @dialogOpenCloseEvent="egrpPysclQtyPopOpenCloseEvent" />
</v-card>
</v-col>
</v-row>
@ -350,8 +226,115 @@ export default {
formatterSelectList01: [],
formatterSelectList02: [],
loadGrid: false,
loadGrid2: false,
loadGrid: true,
dataPathExample: {
"rowGrid": {
data: [
{
"pysclQtyId": "001",
"pysclQtyCd": "TEMP001",
"pysclQtyNm": "온도",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "002",
"pysclQtyCd": "PRESS001",
"pysclQtyNm": "압력",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "003",
"pysclQtyCd": "FLOW001",
"pysclQtyNm": "유량",
"pysclQtyTp": "정수"
},
{
"pysclQtyId": "004",
"pysclQtyCd": "HUMID001",
"pysclQtyNm": "습도",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "005",
"pysclQtyCd": "VOLT001",
"pysclQtyNm": "전압",
"pysclQtyTp": "실수"
}
]
,
column: [
{
header: '물리량 ID',
name: 'pysclQtyId',
width: 100,
align: 'center',
},
{ header: '물리량코드', name: 'pysclQtyCd', minWidth: 255 },
{ header: '물리량명', name: 'pysclQtyNm', width: 150 },
{
header: '물리량타입',
name: 'pysclQtyTp',
width: 80,
},
],
}
},
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,
readOnlyValueList: [
@ -401,7 +384,8 @@ export default {
required: false,
label: '계산설명',
cols: 12,
textCols: 10,
textCols: 12,
padding: false,
},
argContentShowFlag: true,
@ -715,7 +699,7 @@ export default {
defaultData: defaultData,
});
},
created() {},
created() { },
mounted() {
this.init();
},
@ -1045,7 +1029,7 @@ export default {
header: '물리량타입',
name: 'pysclQtyTp',
width: 80,
formatter: function(data) {
formatter: function (data) {
var resultValue = '';
var pysclQtyTp = data.row.pysclQtyTp;
@ -1100,7 +1084,7 @@ export default {
{
header: '설비그룹',
name: 'eqpmGrpId',
formatter: function(data) {
formatter: function (data) {
var resultValue = '';
var pysclQtyId = '';
var eqpmGrpId = '';
@ -1184,12 +1168,12 @@ export default {
//rowKey: 0,
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
this.pageData.rowGridSelectKey == null
? 0
: this.pageData.rowGridSelectKey ==
this.$refs['rowGrid'].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
this.$refs['rowGrid'].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
columnName: 'pysclQtyId',
setScroll: true,
});
@ -1529,7 +1513,7 @@ export default {
}
// 2. 삭제가 먼저 되도록 정렬
dataArr.sort(function(data1, data2) {
dataArr.sort(function (data1, data2) {
if (data1.rowStat > data2.rowStat) {
return 1;
} else if (data1.rowStat < data2.rowStat) {
@ -1683,6 +1667,3 @@ const defaultData = {
const myDetail = [];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,19 +3,20 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="5">
<InputText
:parentPrgmId="myPrgmId"
label="설비종류명"
valueNm="eqpmKindNm"
:searchOption="true"
:textCols="9"
:labelCols="3"
:textCols="12"
:labelCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="7" class="text-right">
<BtnSearch @click="search" />
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -41,6 +42,7 @@
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
:preventFocusChangeEventFlag="false"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -116,6 +118,21 @@ export default {
detailList: myDetail,
selectValueList01: [],
selectValue01: null,
dataPathMock: {
'eqpmKindGrid': {
column: [
{ header: '설비종류ID', name: 'eqpmKindId', headerAlign: 'center' },
{ header: '설비종류명', name: 'eqpmKindNm', headerAlign: 'left' },
{ header: '등록자NO', name: 'regUserNo', hidden: true},
{ header: '등록일시', name: 'regDttm', hidden: true },
{ header: '수정자NO', name: 'procUserNo', hidden: true },
{ header: '수정일시', name: 'procDttm', hidden: true}
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
};
},
computed: {
@ -372,73 +389,83 @@ const myDetail = [
label: '설비종류 ID',
valueNm: 'eqpmKindId',
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
iconShow: true,
required: false,
readonly: true,
placeholder: '시스템 자동입력',
labelCols: 12,
textCols: 12,
},
{
cols: 6,
},
{
type: 'InputText',
type: 'InputTextReg',
label: '설비종류명',
valueNm: 'eqpmKindNm',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4',
iconShow: true,
required: true,
},
{
cols: 6,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '등록자NO',
valueNm: 'regUserNo',
disabled: true,
iconShow: true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
placeholder: '시스템 자동입력',
},
{
cols: 6,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '등록일시',
valueNm: 'regDttm',
iconShow: true,
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
placeholder: '시스템 자동입력',
},
{
cols: 6,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '수정자NO',
valueNm: 'procUserNo',
disabled: true,
iconShow: true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
placeholder: '시스템 자동입력',
},
{
cols: 6,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '수정일시',
valueNm: 'procDttm',
disabled: true,
iconShow: true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
placeholder: '시스템 자동입력',
labelCols: 12,
textCols: 12,
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
eqpmKindId: 'EKIND0005',
eqpmKindNm: 'VCB',
regUserNo: '사용',
regDttm: 'EQP_HVAC_LT_CH001',
procUserNo: '사용',
procDttm: 'EQP_HVAC_LT_CH001',
});
</script>

View File

@ -3,7 +3,7 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'selectCodeList'"
@ -12,6 +12,7 @@
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -22,6 +23,7 @@
:itemList="selectValueList01"
:label="'설비종류'"
@update:propsValue="selectValue01 = $event"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -30,12 +32,13 @@
label="설비 그룹 명"
valueNm="eqpmGrpNm"
:searchOption="true"
:textCols="8"
:labelCols="4"
:textCols="12"
:labelCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -60,7 +63,8 @@
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -131,11 +135,29 @@ export default {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
tab: null,
detailList: myDetail,
selectValueList01: [],
selectValue01: null,
dataPathMock: {
'rowGrid': {
column: [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '설비 그룹 ID', name: 'eqpmGrpId'},
{ header: '설비 그룹 명', name: 'eqpmGrpNm'},
{ header: '설비종류', name: 'eqpmKindId'},
{ header: '사용여부', name: 'useFg'},
{ header: '등록자NO', name: 'regUserNo', hidden: true},
{ header: '등록일시', name: 'regDttm', hidden: true },
{ header: '수정자NO', name: 'procUserNo', hidden: true },
{ header: '수정일시', name: 'procDttm', hidden: true}
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
options:{}
}
},
};
},
computed: {
@ -302,7 +324,7 @@ export default {
this.getRowGridData();
},
async search() {
this.loadGrid = false;
this.loadGrid = true;
// if (this.loadFlag == false) {
// return;
// }
@ -482,18 +504,24 @@ const myDetail = [
valueNm: 'eqpmGrpId',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
required: false,
iconShow: true,
labelCols: 12,
textCols: 12,
placeholder: '시스템 자동입력',
},
{
type: 'InputText',
type: 'InputTextReg',
label: '설비 그룹 명',
valueNm: 'eqpmGrpNm',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4',
required: true,
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'CheckBox',
@ -501,9 +529,12 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
value: { '1': true, '0': false },
required: true,
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'SelectBox',
@ -511,11 +542,14 @@ const myDetail = [
valueNm: 'eqpmKindId',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
list: 'eqpmKindIdList',
itemText: 'eqpmKindNm',
itemValue: 'eqpmKindId',
required: true,
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -523,8 +557,11 @@ const myDetail = [
valueNm: 'regUserNo',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -532,8 +569,11 @@ const myDetail = [
valueNm: 'regDttm',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -541,8 +581,11 @@ const myDetail = [
valueNm: 'procUserNo',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -550,11 +593,25 @@ const myDetail = [
valueNm: 'procDttm',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
comId: 'EKIND0005',
eqpmGrpId: 'EQG000010',
eqpmGrpNm:'냉수파이프고온',
eqpmKindId:'냉동파이프',
useFg:'1',
regUserNo: '사용',
regDttm: 'EQP_HVAC_LT_CH001',
procUserNo: '사용',
procDttm: 'EQP_HVAC_LT_CH001',
});
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,50 +3,32 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="3">
<v-row align="end" no-gutters>
<v-col :cols="2.5">
<!-- 사업장 -->
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
/>
<component :is="'SelectBlocMstr'" ref="SelectBlocMstr" :parentPrgmId="myPrgmId"
:labelCols="12"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
:label="'설비 유형'"
dataKey="searchEqpmKind"
:sendParam="{ commGrpCd: 'CM_EQKIND', useFg: '1' }"
:addAll="true"
/>
<v-col :cols="2.5">
<component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'설비 유형'" dataKey="searchEqpmKind"
:sendParam="{ commGrpCd: 'CM_EQKIND', useFg: '1' }" :addAll="true"
customClass="select-large" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectEqpmGrp'"
:parentPrgmId="myPrgmId"
:label="'설비 그룹'"
dataKey="searchEqpmGrp"
:sendParam="{ useFg: '1', test: 'dfadfadf' }"
:addAll="true"
/>
<v-col :cols="2.5">
<component :is="'SelectEqpmGrp'" :parentPrgmId="myPrgmId" :label="'설비 그룹'" dataKey="searchEqpmGrp"
:sendParam="{ useFg: '1', test: 'dfadfadf' }" :addAll="true" :labelCols="12" :textCols="12"
customClass="select-large"
/>
</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="6">
<InputText
:parentPrgmId="myPrgmId"
label="설비명"
valueNm="eqpmNm"
:labelCols="2"
:textCols="10"
:searchOption="true"
/>
<v-col :cols="2.5">
<InputText :parentPrgmId="myPrgmId" label="설비명" valueNm="eqpmNm" :searchOption="true" :labelCols="12"
:textCols="12"
customClass="input-large" />
</v-col>
<BtnSearch @click="search" size="large" />
</v-row>
</v-card>
</v-col>
@ -56,72 +38,36 @@
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4">설비 정보</v-card-title>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" />
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div class="px-5" style="min-height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
:preventFocusChangeEventFlag="false"
/>
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :preventFocusChangeEventFlag="false" :dataPath="dataPathMock" />
</div>
</div>
</v-card>
</v-col>
<v-col :cols="7" class="h100">
<v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;"
>설비 상세</v-card-title
>
<div class="px-5" style="height:calc(100% - 76px)">
<v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title>
<div class="px-5" style="min-height:calc(100% - 76px)">
<v-tabs v-model="tab">
<v-tab
v-for="item in items"
:key="item.id"
:disabled="item.disabledFlag"
>
<v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag">
{{ item.name }}
</v-tab>
</v-tabs>
<v-tabs-items
v-model="tab"
style="height: calc(100% - 65px);"
class="py-6"
>
<v-tabs-items v-model="tab" style="min-height: calc(100% - 65px);" class="py-6">
<v-tab-item v-for="(item, idx) in items" :key="item.id">
<component
v-if="item.id == 'eqpmBaseInfoTab'"
:is="'Form'"
:parentPrgmId="myPrgmId"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
<EqpmAddInfoTab
v-if="item.id == 'eqpmAddInfoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<EqpmIaoTab
v-if="item.id == 'eqpmIaoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<EqpmConstTab
v-if="item.id == 'eqpmConstTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
<component v-if="item.id == 'eqpmBaseInfoTab'" :is="'Form'" :parentPrgmId="myPrgmId"
:detailList="detailList" @gridEditingFinish="gridEditingFinish" />
<EqpmAddInfoTab v-if="item.id == 'eqpmAddInfoTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
<EqpmIaoTab v-if="item.id == 'eqpmIaoTab'" :parentPrgmId="myPrgmId" :innerTabGridInfo="{ tab, idx }" />
<EqpmConstTab v-if="item.id == 'eqpmConstTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
</v-tab-item>
</v-tabs-items>
</div>
@ -194,6 +140,24 @@ export default {
],
detailList: myDetail,
lastInsertEqpmId: null,
dataPathMock: {
'rowGrid': {
column: [
{ header: '설비 ID', name: 'id', headerAlign: 'left' },
{ header: '설비 명', name: 'lable', headerAlign: 'left' },
{ header: '설비 유형', name: 'type', headerAlign: 'left' },
{ header: '설비 그룹ㅅ', name: 'note', headerAlign: 'left' },
{ header: '사용 여부', name: 'field1', headerAlign: 'left' },
// { header: '분배율', name: 'field2', headerAlign: 'left' }
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {
// rowHeaders: ['checkbox']
},
}
},
};
},
computed: {
@ -495,14 +459,14 @@ export default {
this.$refs[this.gridName].focus({
rowKey:
this.pageData.rowGridSelectKey != '' ||
this.pageData.rowGridSelectKey != null
this.pageData.rowGridSelectKey != null
? this.pageData.rowGridSelectKey
: this.$refs[this.gridName]
.getData()
.findIndex(item => item.eqpmId == this.lastInsertEqpmId) ==
-1
? 0
: this.$refs[this.gridName]
.getData()
.findIndex(item => item.eqpmId == this.lastInsertEqpmId) ==
-1
? 0
: this.$refs[this.gridName]
.getData()
.findIndex(item => item.eqpmId == this.lastInsertEqpmId),
columnName: 'eqpmId',
@ -943,11 +907,11 @@ const myDetail = [
// readonly: true,
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
required: true,
iconShow: true,
labelCols: 4,
textCols: 7,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -955,8 +919,11 @@ const myDetail = [
valueNm: 'eqpmNm',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'SelectBox',
@ -964,11 +931,14 @@ const myDetail = [
valueNm: 'eqpmKind',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
list: 'eqpmKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'SelectBox',
@ -976,11 +946,14 @@ const myDetail = [
valueNm: 'eqpmGrpId',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
list: 'eqpmGrpList',
itemText: 'eqpmGrpNm',
itemValue: 'eqpmGrpId',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'FtnPlcFormPop',
@ -990,18 +963,12 @@ const myDetail = [
disabled: false,
required: false,
cols: 6,
class: 'py-2',
labelCols: 4,
textCols: 7,
disableContent: true,
eccFgYn: 'Y',
},
{
type: 'InputText',
valueNm: 'eccNm',
readonly: true,
cols: 5,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-3 pr-4',
},
{
type: 'CheckBox',
@ -1009,12 +976,31 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
value: { '1': true, '0': false },
required: true,
iconShow: true,
// class: 'd-flex align-end pb-3'
},
{
type: 'InputText',
valueNm: 'eccNm',
readonly: true,
cols: 6,
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'pt-0 py-3 pr-4'
},
];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
id: 'INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV',
lable: 'INCHEON 고온 냉동기 101호기 - 호로1',
type: '사용', note: '-',
field1: '1111',
field2: '2222',
});
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,89 +3,61 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox1"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비종류'"
@update:propsValue="selectValue01 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'" :iconShow="true"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox2"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'설비그룹'"
@update:propsValue="selectValue02 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'설비그룹'" :iconShow="true"
@update:propsValue="selectValue02 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" />
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="가이드명"
:textCols="8"
valueNm="gdIdxNm"
:searchOption="true"
/>
<InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm"
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'"/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<a-button icon="search" type="primary" @click="search()" class="search-button" size="large">조회</a-button>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> -->
<v-col :cols="12" style="height: 40%">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4"
>가이드 리스트</v-card-title
>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
<v-row ref="contents" class="mt-4">
<!-- <v-card class="py-5"> -->
<v-col :cols="12">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">가이드 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" />
</div>
<div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" >
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div>
<div class="h100 px-5" style="height:calc(100% - 70px)">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
</div>
<div class="d-flex py-4">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</div>
</v-card>
</v-col>
<v-col :cols="12" style="height: 60%">
<v-card class="pb-5">
<v-row
:cols="12"
class="d-flex align-center justify-space-between pa-3"
>
<component
:is="'Form'"
:parentPrgmId="myPrgmId"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
</v-row>
</v-card>
</v-col>
<!-- </v-card> -->
</div>
</v-card>
</v-col>
<!-- <v-col :cols="12" style="height: 60%">
<v-card class="pb-5">
<v-row :cols="12" class="d-flex align-center justify-space-between pa-3">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</v-row>
</v-card>
</v-col> -->
<!-- </v-card> -->
</v-row>
</div>
</template>
@ -140,7 +112,7 @@ export default {
myPrgmId: myPrgmId,
initedFlag: false,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
detailList: myDetail,
selectValue01: null,
selectValueList01: [],
@ -153,6 +125,102 @@ export default {
// pysclQtyId3 : null,
// pysclQtyId4 : null
// }
dataPathExample: {
"rowGrid": {
data: [
{
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
careStndVal: 50,
warnStndVal: 70,
alrmMsg: '온도가 기준치를 초과했습니다.',
},
{
gdIdxId: 'GD002',
gdIdxNm: '습도 가이드',
eqpmGrpId: 'EQ002',
upTotMeth: 'MAX',
careStndVal: 30,
warnStndVal: 60,
alrmMsg: '습도가 기준치를 초과했습니다.',
},
{
gdIdxId: 'GD003',
gdIdxNm: '압력 가이드',
eqpmGrpId: 'EQ003',
upTotMeth: 'SUM',
careStndVal: 100,
warnStndVal: 150,
alrmMsg: '압력이 기준치를 초과했습니다.',
}
],
column: [
{
header: '가이드',
name: 'gdIdxId',
width: 100,
align: 'center',
},
{
header: '가이드명',
name: 'gdIdxNm',
width: 210,
align: 'left',
},
{
header: '설비그룹ID',
name: 'eqpmGrpId',
width: 100,
align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.eqpmGrpList.filter(item => item.value == value);
// if (newValue.length > 0) {
// retVal = newValue[0].text;
// }
// return retVal;
// },
},
{
header: '상위집계방법',
name: 'upTotMeth',
width: 100,
align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.upTotMethList.filter(item => item.commCd == value);
// if (newValue.length > 0) {
// retVal = newValue[0].commCdNm;
// }
// return retVal;
// },
},
{
header: '주의기준',
name: 'careStndVal',
width: 100,
align: 'right',
},
{
header: '경고기준',
name: 'warnStndVal',
width: 100,
align: 'right',
},
{
header: '알람메세지',
name: 'alrmMsg',
minWidth: 860,
align: 'left',
}
]
}
}
};
},
computed: {
@ -284,46 +352,61 @@ export default {
});
},
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.selectValue01 = this.selectValueList01[0].value;
} 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.selectValue01 = this.selectValueList01[0].value;
// } else {
// this.selectValueList01 = [];
// this.selectValue01 = null;
// }
this.selectValueList01 = [
{ label: 'Etcher', value: 'EQK001' },
{ label: 'Deposition', value: 'EQK002' },
{ label: 'Inspection', value: 'EQK003' },
];
this.selectValue01 = 'EQK001';
this.setPageData({
eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01,
});
},
async getEqpmGrp() {
let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists',
sendParam: { eqpmKindId: this.selectValue01 },
});
if (res.length > 0) {
this.selectValueList02 = await res.map(item => {
return {
text: item.eqpmGrpNm,
value: item.eqpmGrpId,
};
});
this.selectValue02 = this.selectValueList02[0].value;
} else {
this.selectValueList02 = [];
this.selectValue02 = null;
}
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmGrpCodeList',
// resKey: 'eqpmGrpCodeLists',
// sendParam: { eqpmKindId: this.selectValue01 },
// });
// if (res.length > 0) {
// this.selectValueList02 = await res.map(item => {
// return {
// text: item.eqpmGrpNm,
// value: item.eqpmGrpId,
// };
// });
// this.selectValue02 = this.selectValueList02[0].value;
// } else {
// this.selectValueList02 = [];
// this.selectValue02 = null;
// }
this.selectValueList02 = [
{ label: '냉동기고온', value: '냉동기고온' },
{ label: '냉동기저온', value: '냉동기저온' },
{ label: '공조기', value: '공조기' },
{ label: '보일러', value: '보일러' }
];
this.setPageData({
eqpmGrpList: this.selectValueList02,
eqpmGrpId: this.selectValue02,
@ -553,48 +636,100 @@ export default {
async getRowGridData() {
this.loadGrid = false;
let res = [];
res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxDataList',
resKey: 'eqpmGdIdxDataList',
sendParam: {
eqpmGrpId: this.selectValue02,
gdIdxNmLike: this.pageData.gdIdxNm,
},
});
const newRes = res.map(item => {
const newObj = {
...item,
const newRes = [
{
comId: 'COM001',
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
sortSeq: 1,
pysclQtyId1: 'TEMP',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '내부',
careStndVal: 50,
warnStndVal: 70,
gdMeth: '자동',
useFg: '1',
alrmMsg: '온도가 기준치를 초과했습니다.',
calcProc: 'PROC001',
calcDesc: '평균 계산',
calcMeth: '(A+B)/2',
unit: 'C',
argCnt: 2,
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({
gridKey: this.gridName,
value: newRes,
});
//this.loadGrid = true;
this.$nextTick(() => {
if (newRes.length > 0) {
try {
this.$refs[this.gridName].focus({
//rowKey: 0,
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
? 0
: this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
columnName: 'gdIdxId',
setScroll: true,
});
} catch (error) {}
} else {
this.detailDataInit();
}
});
// this.$nextTick(() => {
// if (newRes.length > 0) {
// try {
// this.$refs[this.gridName].focus({
// //rowKey: 0,
// rowKey:
// this.pageData.rowGridSelectKey == '' ||
// this.pageData.rowGridSelectKey == null
// ? 0
// : this.pageData.rowGridSelectKey ==
// this.$refs[this.gridName].getData().length - 1
// ? this.pageData.rowGridSelectKey
// : 0,
// columnName: 'gdIdxId',
// setScroll: true,
// });
// } catch (error) { }
// } else {
// this.detailDataInit();
// }
// });
this.loadGrid = true;
},
async getRowData(data) {
@ -1035,7 +1170,60 @@ const defaultData = {
/* data 세팅 */
// 로컬 gridName 값과 동일한 이름으로 세팅
rowGrid: {
data: [],
// data: [],
data: [
{
comId: 'COM001',
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
sortSeq: 1,
pysclQtyId1: 'TEMP',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '내부',
careStndVal: 50,
warnStndVal: 70,
gdMeth: '자동',
useFg: '1',
alrmMsg: '온도가 기준치를 초과했습니다.',
calcProc: 'PROC001',
calcDesc: '평균 계산',
calcMeth: '(A+B)/2',
unit: 'C',
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,
},
],
column: [], // myColumns,
option: {}, // myOptions
defaultRow: {
@ -1078,30 +1266,34 @@ const myDetail = [
label: '가이드',
valueNm: 'gdIdxId',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: false,
readonly: true,
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '가이드 명',
valueNm: 'gdIdxNm',
disabled: false,
cols: 6,
labelCols: 2,
textCols: 9,
class: 'py-2',
cols: 9,
labelCols: 12,
textCols: 12,
class: 'py-3 pl-3',
required: true,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 3,
class: 'py-2',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
// {
// // 공백 처리
// type: 'Label',
// cols: 3,
// class: 'py-2',
// // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
// disabled: false,
// },
// {
// type: 'CheckBox',
// label: '설비기준적용',
@ -1118,12 +1310,15 @@ const myDetail = [
valueNm: 'eqpmGrpId',
disabled: false,
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
list: 'eqpmGrpList',
itemText: 'text',
itemValue: 'value',
required: true,
readonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
@ -1131,11 +1326,14 @@ const myDetail = [
valueNm: 'upTotMeth',
disabled: false,
cols: 3,
class: 'py-2',
class: 'pa-3',
list: 'upTotMethList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
@ -1143,19 +1341,25 @@ const myDetail = [
valueNm: 'unit',
disabled: false,
cols: 3,
class: 'py-2',
class: 'pa-3',
list: 'unitList',
itemText: 'commCdNm',
itemValue: 'commCd',
// required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '정렬순번',
valueNm: 'sortSeq',
cols: 3,
class: 'py-2',
class: 'pa-3 pr-2',
// required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
// {
// // 공백 처리
@ -1191,17 +1395,20 @@ const myDetail = [
valueNm: 'calcProc', // textField 바인딩을 위해 필요
valueNm2: 'argCnt',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: true,
openMode: 'G',
disabled: false,
modalTitle: '계산코드',
labelCols: 12,
textCols: 12,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 9,
class: 'py-2',
class: 'py-3',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
@ -1210,9 +1417,10 @@ const myDetail = [
label: '계산설명',
valueNm: 'calcDesc',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
iconShow: true
// required: true,
},
{
@ -1227,7 +1435,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId1','pysclQtyNm1'], // page의 grid 컬럼
// popupBindingList: ['pysclQtyId','pysclQtyNm'], // popup의 grid 컬럼
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: true,
openMode: 'ALL',
disabled: false,
@ -1235,6 +1443,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1248,7 +1459,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId2','pysclQtyNm2'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'pa-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1256,6 +1467,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1269,7 +1483,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId3','pysclQtyNm3'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'pa-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1277,6 +1491,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1290,7 +1507,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId4','pysclQtyNm4'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'py-3 pl-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1298,6 +1515,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
@ -1305,34 +1525,46 @@ const myDetail = [
label: '카테고리1',
valueNm: 'ctgr1',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '카테고리2',
valueNm: 'ctgr2',
cols: 3,
class: 'py-2',
class: 'pa-3',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '주의기준값',
valueNm: 'careStndVal',
cols: 3,
class: 'py-2',
class: 'pa-3',
required: true,
inputType: 'number',
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '경고기준값',
valueNm: 'warnStndVal',
cols: 3,
class: 'py-2',
class: 'py-3 pl-3',
required: true,
inputType: 'number',
labelCols: 12,
textCols: 12,
iconShow: true
},
// {
// // 공백 처리
@ -1355,23 +1587,28 @@ const myDetail = [
label: '가이드방법',
valueNm: 'gdMeth',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
required: true,
iconShow: true
},
{
type: 'InputText',
label: '알람메세지',
valueNm: 'alrmMsg',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
required: true,
iconShow: true
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
<style lang="scss" scoped>
.searchFilter {
border-radius: 6px;
box-shadow: none;
}
</style>

View File

@ -3,241 +3,130 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox1"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비종류'"
@update:propsValue="selectValue01 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'"
@update:propsValue="selectValue01 = $event" :customClass="'select-large'"
:labelCols="12" :iconShow="true" :textCols="12" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox2"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'설비그룹'"
@update:propsValue="selectValue02 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'설비그룹'"
@update:propsValue="selectValue02 = $event" :customClass="'select-large'"
:labelCols="12" :iconShow="true" :textCols="12" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox3"
:propsValue="selectValue03"
:itemList="selectValueList03"
:label="'가이드지표'"
@update:propsValue="selectValue03 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03"
:itemList="selectValueList03" :label="'가이드지표'"
@update:propsValue="selectValue03 = $event" :customClass="'select-large'"
:labelCols="12" :iconShow="true" :textCols="12" />
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-row ref="contents" class="mt-4">
<v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> -->
<v-row style="height: 50%">
<v-col :cols="12" style="height: 100%">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4"
>가이드 정보</v-card-title
>
</div>
<v-row
:cols="12"
class="d-flex align-center justify-space-between pa-3"
>
<!-- 가이드 설비그룹 라인 시작 -->
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'가이드 ID'"
:valueNm="'gdIdxId'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="0"
:textCols="4"
:valueNm="'gdIdxNm'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'설비그룹'"
:valueNm="'eqpmGrpNm'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3"> </v-col>
<!-- 가이드 설비그룹 라인 -->
<!-- 물리량 라인 시작 -->
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'물리량1'"
:valueNm="'pysclQtyCdNm1'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'물리량2'"
:valueNm="'pysclQtyCdNm2'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'물리량3'"
:valueNm="'pysclQtyCdNm3'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'물리량4'"
:valueNm="'pysclQtyCdNm4'"
:readonly="readonlyFg"
/>
</v-col>
<!-- 물리량 라인 -->
<!-- 카테고리 라인 시작 -->
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'카테고리1'"
:valueNm="'ctgr1'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'카테고리2'"
:valueNm="'ctgr2'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'주의기준값'"
:valueNm="'careStndVal'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'경고기준값'"
:valueNm="'warnStndVal'"
:readonly="readonlyFg"
/>
</v-col>
<!-- 카테고리 기준값 라인 -->
<!-- 알람메세지 라인 시작 -->
<v-col :cols="12">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="1"
:textCols="11"
:label="'알람메세지'"
:valueNm="'alrmMsg'"
:readonly="readonlyFg"
/>
</v-col>
<!-- 알람메세지 라인 -->
<!-- 계산코드 라인 시작 -->
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="4"
:textCols="8"
:label="'계산코드'"
:valueNm="'calcProc'"
:readonly="readonlyFg"
/>
</v-col>
<v-col :cols="3"> </v-col>
<v-col :cols="3"> </v-col>
<v-col :cols="3"> </v-col>
<!-- 계산코드 라인 -->
<!-- 계산설명 라인 시작 -->
<v-col :cols="12">
<InputText
:parentPrgmId="myPrgmId"
:labelCols="1"
:textCols="11"
:label="'계산설명'"
:valueNm="'calcDesc'"
:readonly="readonlyFg"
/>
</v-col>
<!-- 계산설명 라인 -->
</v-row>
</v-card>
</v-col>
</v-row>
<v-card style="height: 60%">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">가이드 정보</v-card-title>
</div>
<div class="d-flex align-end justify-space-between px-4 py-2">
<v-row :cols="12" class="align-end">
<!-- 가이드 설비그룹 라인 시작 -->
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'가이드 ID'"
:valueNm="'gdIdxId'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="''"
:valueNm="'gdIdxNm'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'설비그룹'"
:valueNm="'eqpmGrpNm'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3"> </v-col>
<!-- 가이드 설비그룹 라인 -->
<!-- 물리량 라인 시작 -->
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'물리량1'"
:valueNm="'pysclQtyCdNm1'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'물리량2'"
:valueNm="'pysclQtyCdNm2'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'물리량3'"
:valueNm="'pysclQtyCdNm3'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'물리량4'"
:valueNm="'pysclQtyCdNm4'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<!-- 물리량 라인 -->
<!-- 카테고리 라인 시작 -->
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'카테고리1'"
:valueNm="'ctgr1'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'카테고리2'"
:valueNm="'ctgr2'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'주의기준값'"
:valueNm="'careStndVal'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'경고기준값'"
:valueNm="'warnStndVal'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<!-- 카테고리 기준값 라인 -->
<!-- 알람메세지 라인 시작 -->
<v-col :cols="12" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'알람메세지'"
:valueNm="'alrmMsg'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<!-- 알람메세지 라인 -->
<!-- 계산코드 라인 시작 -->
<v-col :cols="3" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'계산코드'"
:valueNm="'calcProc'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<v-col :cols="3"> </v-col>
<v-col :cols="3"> </v-col>
<v-col :cols="3"> </v-col>
<!-- 계산코드 라인 -->
<!-- 계산설명 라인 시작 -->
<v-col :cols="12" class="pa-2">
<InputText :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" :label="'계산설명'"
:valueNm="'calcDesc'" :readonly="readonlyFg" :iconShow="true" />
</v-col>
<!-- 계산설명 라인 -->
</v-row>
</div>
<v-row style="height: 50%">
</v-card>
<v-row style="height: 40%" class="mt-4">
<v-col :cols="6" style="height: 100%">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4 "
>설비상세 리스트</v-card-title
>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
<v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div>
<div class="h100 px-5" style="height:calc(100% - 70px)">
<div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData"
:dataPath="dataPathExample" />
</div>
</div>
</v-card>
@ -245,24 +134,18 @@
<v-col :cols="6" style="height: 100%">
<v-card class="pb-5">
<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>
</div>
<v-row
:cols="12"
class="d-flex align-center justify-space-between pa-3"
>
<div class="d-flex align-center justify-space-between pa-4">
<v-row :cols="12">
<!-- 가이드 설비그룹 라인 시작 -->
<v-col :cols="12">
<component
:is="'Form'"
:parentPrgmId="myPrgmId"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
</v-col>
</v-row>
<v-col :cols="12">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</v-col>
</v-row>
</div>
</v-card>
</v-col>
</v-row>
@ -318,7 +201,7 @@ export default {
readonlyFg: true,
initedFlag: false,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
detailList: myDetail,
selectValue01: null,
selectValueList01: [],
@ -326,6 +209,62 @@ export default {
selectValueList02: [],
selectValue03: null,
selectValueList03: [],
dataPathExample: {
"rowGrid": {
data: [
{
eqpmId: 'EQ001',
originEqpmId: 'ORIG001',
eqpmNm: '냉각기 A',
careStndVal: 75,
warnStndVal: 90,
},
{
eqpmId: 'EQ002',
originEqpmId: 'ORIG002',
eqpmNm: '펌프 B',
careStndVal: 60,
warnStndVal: 80,
},
{
eqpmId: 'EQ003',
originEqpmId: 'ORIG003',
eqpmNm: '모터 C',
careStndVal: 50,
warnStndVal: 70,
},
{
eqpmId: 'EQ004',
originEqpmId: 'ORIG004',
eqpmNm: '밸브 D',
careStndVal: 65,
warnStndVal: 85,
},
{
eqpmId: 'EQ005',
originEqpmId: 'ORIG005',
eqpmNm: '컨트롤러 E',
careStndVal: 55,
warnStndVal: 75,
},
],
column: [
{ header: '설비', name: 'eqpmId', align: 'left' },
{
header: 'origin설비',
name: 'originEqpmId',
align: 'center',
hidden: true,
},
{ header: '설비명', name: 'eqpmNm', align: 'left' },
{ header: '주의기준', name: 'careStndVal', align: 'right' },
{ header: '심각기준', name: 'warnStndVal', align: 'right' },
]
}
}
};
},
computed: {
@ -572,29 +511,69 @@ export default {
this.loadGrid = false;
let res = [];
if (this.selectValue01 && this.selectValue02 && this.selectValue03) {
res = await this.postApiReturn({
apiKey: 'selectEqpmGdDetl',
resKey: 'eqpmGdDetlData',
sendParam: {
gdIdxId: this.selectValue03,
},
});
}
// if (this.selectValue01 && this.selectValue02 && this.selectValue03) {
// res = await this.postApiReturn({
// apiKey: 'selectEqpmGdDetl',
// resKey: 'eqpmGdDetlData',
// sendParam: {
// gdIdxId: this.selectValue03,
// },
// });
// }
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작
let eqpmIdList = res.map(item => {
return item.eqpmId;
});
this.setPageData({ nowGridEqpmIdList: eqpmIdList });
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝
const newRes = res.map(item => {
const newObj = {
...item,
rowStat: null,
};
return newObj;
});
// // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작
// let eqpmIdList = res.map(item => {
// return item.eqpmId;
// });
// this.setPageData({ nowGridEqpmIdList: eqpmIdList });
// // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝
// const newRes = res.map(item => {
// const newObj = {
// ...item,
// rowStat: null,
// };
// return newObj;
// });
const newRes = [
{
eqpmId: 'EQ001',
originEqpmId: 'ORIG001',
eqpmNm: '냉각기 A',
careStndVal: 75,
warnStndVal: 90,
},
{
eqpmId: 'EQ002',
originEqpmId: 'ORIG002',
eqpmNm: '펌프 B',
careStndVal: 60,
warnStndVal: 80,
},
{
eqpmId: 'EQ003',
originEqpmId: 'ORIG003',
eqpmNm: '모터 C',
careStndVal: 50,
warnStndVal: 70,
},
{
eqpmId: 'EQ004',
originEqpmId: 'ORIG004',
eqpmNm: '밸브 D',
careStndVal: 65,
warnStndVal: 85,
},
{
eqpmId: 'EQ005',
originEqpmId: 'ORIG005',
eqpmNm: '컨트롤러 E',
careStndVal: 55,
warnStndVal: 75,
},
]
this.setGridData({
gridKey: this.gridName,
value: newRes,
@ -607,16 +586,16 @@ export default {
//rowKey: 0,
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
this.pageData.rowGridSelectKey == null
? 0
: this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
columnNmae: 'eqpmId',
setScroll: true,
});
} catch (error) {}
} catch (error) { }
} else {
this.detailDataInit();
}
@ -820,19 +799,25 @@ const myDetail = [
valueNm: 'eqpmId',
valueNm2: 'eqpmNm',
cols: 6,
class: 'py-2',
class: 'py-2 pb-3 pr-2',
required: true,
openMode: 'GRP',
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
// label: '검침 대상 명',
label: '검침 대상 명',
valueNm: 'eqpmNm',
readonly: true,
// disabled: true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-2',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
@ -840,15 +825,18 @@ const myDetail = [
valueNm: 'careStndVal',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-3',
inputType: 'number',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
class: 'py-3',
disabled: false,
},
{
@ -857,27 +845,27 @@ const myDetail = [
valueNm: 'warnStndVal',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-3',
inputType: 'number',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
class: 'py-3',
disabled: false,
},
{
// 공백 처리
type: 'Label',
cols: 12,
class: 'py-2',
class: 'py-3',
label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -540,6 +540,3 @@ function numberFormatter({ value }) {
return Utility.setFormatIntDecimal(value, 2);
}
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -5,13 +5,13 @@
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="4">
<component :is="'SelectSysDiv'" :parentPrgmId="myPrgmId" />
<component :is="'SelectSysDiv'" :labelCols="12" :textCols="12" :parentPrgmId="myPrgmId" iconShow="true" :customClass="'select-large'" />
</v-col>
<v-col :cols="4">
<component :is="'SelectUseFg'" :parentPrgmId="myPrgmId" />
<component :is="'SelectUseFg'" :parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" iconShow="true" :customClass="'select-large'" />
</v-col>
<v-col :cols="4" class="text-right">
<BtnSearch @click="search" />
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -21,15 +21,17 @@
<v-col :cols="5" class="h100">
<v-card class="pb-5 h100">
<v-card-title>메뉴 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridNameTree" :detailList="detailList"
:btnActionsFnc="btnActions" />
<div class="px-5 h100">
<div ref="treeGridParent" class="w100 h100">
<component
<!-- <component
ref="myGrid"
:is="loadTree ? 'Grid' : null"
:gridName="gridNameTree"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
/> -->
</div>
</div>
</v-card>
@ -38,7 +40,7 @@
<v-card class="py-5 h100">
<v-card-title class="d-flex justify-between">
<span class="tit ft-size_20 ft-weight_600">메뉴 상세</span>
<div>
<!-- <div>
<v-btn
class="v-btn-radius__20 v-btn-bg__white-blue mr-1"
@click="addRow"
@ -63,7 +65,7 @@
:parentPrgmId="myPrgmId"
:gridName="gridNameTree"
/>
</div>
</div> -->
</v-card-title>
<v-card-actions>
<v-row>
@ -545,7 +547,7 @@ export default {
const defaultData = {
/* 검색옵션 */
comId: this.comId,
comId: '',
sysDivCd: '',
sysDivCdList: [],
useFg: '',
@ -586,6 +588,3 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -0,0 +1,15 @@
<template>
<div>
<h2>Test</h2>
<ColumnChart/>
</div>
</template>
<script>
import ColumnChart from '~/components/common/ColumnChart';
export default{
components:{
ColumnChart
}
}
</script>

View File

@ -1,14 +1,18 @@
<template>
<div class="l-layout">
<PageTitle text="측정 위치 데이터 조회" />
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="2">
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
:textCols="12"
customClass="select-large"
/>
</v-col>
<!-- <v-col :cols="2">
@ -35,6 +39,7 @@
:is="'EvtObjPop'"
:parentPrgmId="myPrgmId"
:item="evtObjPopItem"
customClass="select-large"
/>
</v-col>
<v-col :cols="4">
@ -42,18 +47,18 @@
:is="'Datepicker'"
:parentPrgmId="myPrgmId"
:label="'조회기간'"
:labelCols="2"
:textCols="12"
/>
</v-col>
<v-col :cols="3" class="text-right">
<!-- 조회버튼 -->
<BtnSearch @click="search" />
<BtnExcelDownload
style="vertical-align: middle;"
class="d-inline-flex"
<v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnExcelDownload
class="mr-1"
:parentPrgmId="myPrgmId"
:gridName="gridName"
type="primary"
size="large"
/>
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -68,8 +73,10 @@
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
:dataPath="dataPathMock"
/>
</div>
</v-card>
</v-col>
</v-row>
@ -92,6 +99,7 @@ import BtnExcelDownload from '~/components/common/button/BtnExcelDownload';
import DateUtility from '~/plugins/dateUtility';
// import Search from "~/components/common/search";
import EvtObjPop from '~/components/common/modal/EvtObjPop';
import PageTitle from "~/components/common/PageTitle";
let myTitle;
// const myPrgmId = "PRG0052";
@ -124,6 +132,7 @@ export default {
PastRsltDataReadPop,
PastRsltDataReadTagPop,
EvtObjPop,
PageTitle,
},
data() {
return {
@ -137,13 +146,61 @@ export default {
modalTitle: 'TAG 리스트',
valueNm: 'tagId',
valueNm2: 'tagNm',
iconShow: true,
disabled: false,
labelCols: 2,
textCols: 9,
labelCols: 12,
textCols: 12,
class: 'py-2',
required: false,
formFg: false,
},
dataPathMock: {
"rowGrid": {
column: [
{
header: 'TAG ID',
name: 'tagId',
minWidth: 500,
},
{
header: 'TAG명',
name: 'tagNm',
},
{
header: '대상일시',
name: 'readDttm',
align:"center",
width: 200,
},
{
header: '값',
name: 'readVal',
width: 100,
align:"center"
},
{
header: '취득일시',
name: 'regDttm',
width: 200,
align:"center"
},
{
header: '적재일시',
name: 'procDttm',
width: 200,
align:"center"
},
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {
pageOptions: {
useClient: true,
perPage: 10,
},
}
}
},
};
},
computed: {
@ -265,6 +322,7 @@ export default {
gridKey: this.gridName,
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
});
let myColumns = [
{
header: 'TAG ID',
@ -511,7 +569,13 @@ const defaultData = {
},
},
};
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
"tagId": "ICHEON.ELEC.EQID101.VCB_111A_ACC_WH_PV",
"tagNm": "ICHEON VCB_111A 적산 전력",
"readDttm": "2023-01-10 00:00:00",
"readVal": "581.27",
"regDttm": "2023-01-09 15:03:08",
"procDttm": "2023-01-10 00:03:09",
});
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -3,7 +3,7 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row no-gutters>
<v-col :cols="3">
<component
:is="'selectCodeList'"
@ -12,6 +12,8 @@
dataKey="readObjKind"
:addAll="true"
:sendParam="{ commGrpCd: 'CM_MTTTP', useFg: '1' }"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -22,18 +24,22 @@
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
:iconShow="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="검침대상명"
valueNm="readObjNm"
:searchOption="true"
:iconShow="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
@ -43,7 +49,7 @@
<v-col :cols="5" class="h100">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4"
<v-card-title class="pa-0 custom-title-4-new"
>검침 대상 정보</v-card-title
>
<Buttons
@ -63,6 +69,7 @@
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -70,11 +77,11 @@
</v-col>
<v-col :cols="7" class="h100">
<v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;"
<v-card-title class="custom-title-4-new" style="min-height:76px;"
>검침대상 상세
</v-card-title>
<div class="px-5" style="height:calc(100% - 76px)">
<v-tabs v-model="tab">
<v-tabs v-model="tab" >
<v-tab
v-for="item in items"
:key="item.id"
@ -181,8 +188,26 @@ export default {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
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: [
{
name: '검침 대상 정보',
@ -641,10 +666,22 @@ const defaultData = {
readObjKind: '',
readObjKindList: [],
readObjKindDetail: '',
readObjKindDetailList: [],
readObjKindDetailList: [
{ commCd: 'K01', commCdNm: '건물' },
       { commCd: 'K02', commCdNm: '공장' },
        { commCd: 'K03', commCdNm: '학교' },
],
readObjGrp: '',
readObjGrpList: [],
unitCdList: [],
readObjGrpList: [
{ commCd: 'G01', commCdNm: '그룹 A' },
        { commCd: 'G02', commCdNm: '그룹 B' },
        { commCd: 'G03', commCdNm: '그룹 C' },
],
unitCdList: [
{ commCd: 'U01', commCdNm: 'kWh' },
        { commCd: 'U02', commCdNm: 'MJ' },
        { commCd: 'U03', commCdNm: 'TOE' },
],
useFg: '1',
useFgList: [],
commGrpCd: '',
@ -687,8 +724,8 @@ const defaultData = {
},
buttonAuth: {
add: true,
remove: true,
save: true,
remove: true,
excel: false,
},
},
@ -722,7 +759,10 @@ const myDetail = [
valueNm: 'readObjId',
readonly: true,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-2',
required: false,
placeholder: '시스템 자동입력',
},
@ -732,8 +772,11 @@ const myDetail = [
valueNm: 'readObjNm',
disabled: false,
cols: 6,
labelCols: 12,
textCols: 12,
class: 'py-2',
required: true,
iconShow: true,
},
{
type: 'SelectBox',
@ -741,10 +784,13 @@ const myDetail = [
valueNm: 'readObjKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-2',
list: 'readObjKindDetailList',
itemText: 'commCdNm',
itemValue: 'commCd',
iconShow: true,
required: true,
},
{
@ -753,10 +799,13 @@ const myDetail = [
valueNm: 'grpCd',
disabled: false,
cols: 6,
labelCols: 12,
textCols: 12,
class: 'py-2',
list: 'readObjGrpList',
itemText: 'commCdNm',
itemValue: 'commCd',
iconShow: true,
required: true,
},
{
@ -765,7 +814,10 @@ const myDetail = [
valueNm: 'tjCvrtCoef',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-2',
iconShow: true,
inputType: 'number',
},
{
@ -774,7 +826,10 @@ const myDetail = [
valueNm: 'toeCvrtCoef',
disabled: false,
cols: 6,
labelCols: 12,
textCols: 12,
class: 'py-2',
iconShow: true,
inputType: 'number',
},
{
@ -783,7 +838,10 @@ const myDetail = [
valueNm: 'co2CvrtCoef',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-2',
iconShow: true,
inputType: 'number',
},
{
@ -792,10 +850,13 @@ const myDetail = [
valueNm: 'unitCd',
disabled: false,
cols: 6,
labelCols: 12,
textCols: 12,
class: 'py-2',
list: 'unitCdList',
itemText: 'commCdNm',
itemValue: 'commCd',
iconShow: true,
required: true,
},
{
@ -804,12 +865,48 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-2 pr-2',
value: { '1': true, '0': false },
iconShow: 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>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1,399 +1,445 @@
<template>
<div class="l-layout">
<v-row ref="searchFilter">
<!-- 조회조견 -->
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="3">
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
/>
</v-col>
<v-col :cols="3">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
:label="'검침대상유형'"
dataKey="commCd"
:sendParam="{ commGrpCd: 'CM_MTTTP', useFg: '1' }"
/>
</v-col>
<div class="l-layout">
<!-- <h2 class="title">
<v-icon small color="primary" class="mr-1">mdi-circle</v-icon>
계량 데이터 마감 관리
</h2> -->
<PageTitle text="계량 데이터 마감 관리" />
<v-col :cols="3">
<component
:is="'SelectMttList'"
ref="SelectMttList"
:parentPrgmId="myPrgmId"
:label="'검침대상'"
dataKey="readObjId"
/>
</v-col>
<v-col :cols="3" class="text-right">
<v-btn :ripple="false" @click="search">조회</v-btn>
<BtnExcelDownload
class="mr-1"
:parentPrgmId="myPrgmId"
:gridName="gridName"
/>
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3">
<component
ref="fromPicker"
:is="'Datepicker'"
:parentPrgmId="myPrgmId"
:label="'조회기간'"
/>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<!-- 일일검침정보 목록-->
<v-col :cols="12" class="h100">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="custom-title-4 pa-0"
>일일검침정보</v-card-title
>
<div class="d-flex align-center">
<v-btn
:ripple="false"
@click="saveReadResultCloseMngMM()"
class="mr-1"
>월마감</v-btn
>
<v-btn :ripple="false" @click="saveReadResultCloseMng('N')"
>일마감</v-btn
>
</div>
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div ref="gridParent" class="h100 w100">
<component
:is="loadGrid ? 'Grid' : null"
:ref="gridName"
:parentPrgmId="myPrgmId"
:gridName="gridName"
/>
</div>
</div>
</v-card>
</v-col>
</v-row>
</div>
<v-row ref="searchFilter">
<!-- 조회조견 -->
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="end" no-gutters>
<v-col :cols="2.5">
<component
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
:label="'검침대상유형'"
dataKey="commCd"
:sendParam="{ commGrpCd: 'CM_MTTTP', useFg: '1' }"
customClass="select-large"
/>
</v-col>
<v-col :cols="2.5">
<component
:is="'SelectMttList'"
ref="SelectMttList"
dataKey="readObjId"
:parentPrgmId="myPrgmId"
:label="'검침대상'"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="2.5">
<component
ref="fromPicker"
:is="'Datepicker'"
:parentPrgmId="myPrgmId"
:label="'조회기간'"
/>
</v-col>
<div class="d-flex">
<BtnExcelDownload
class="mr-1"
:parentPrgmId="myPrgmId"
:gridName="gridName"
type="primary"
:size="'large'"
/>
<a-button
type="primary"
class="mr-1"
icon="search"
:ripple="false"
@click="search"
style="height: 40px"
>
조회
</a-button>
</div>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<!-- 일일검침정보 목록-->
<v-col :cols="12" class="h100">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="custom-title-4 pa-0">일일검침정보</v-card-title>
<div class="d-flex align-center">
<a-button
:ripple="false"
@click="saveReadResultCloseMngMM()"
type="primary"
class="mr-1"
>월마감</a-button
>
<a-button
type="primary"
:ripple="false"
@click="saveReadResultCloseMng('N')"
>일마감</a-button
>
</div>
</div>
<div class="px-5" style="min-height: calc(100% - 76px)">
<div ref="gridParent" class="h100 w100">
<component
:is="loadGrid ? 'Grid' : null"
:ref="gridName"
:parentPrgmId="myPrgmId"
:gridName="gridName"
:dataPath="dataPathMock"
/>
</div>
</div>
</v-card>
</v-col>
</v-row>
</div>
</template>
<script>
import mixinGlobal from '@/mixin/global.js';
import { resize } from '@/mixin/resize.js';
import { mapState, mapMutations, mapActions } from 'vuex';
import Search from '~/components/common/search';
import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility';
import SelectBlocMstr from '@/components/common/select/SelectBlocMstr';
import selectCodeList from '@/components/common/select/selectCodeList';
import SelectMttList from '@/components/common/select/SelectMttList';
import Datepicker from '~/components/common/Datepicker';
import BtnExcelDownload from '~/components/common/button/BtnExcelDownload';
import mixinGlobal from "@/mixin/global.js";
import { resize } from "@/mixin/resize.js";
import { mapState, mapMutations, mapActions } from "vuex";
import Search from "~/components/common/search";
import Grid from "~/components/common/Grid";
import Utility from "~/plugins/utility";
import SelectBlocMstr from "@/components/common/select/SelectBlocMstr";
import selectCodeList from "@/components/common/select/selectCodeList";
import SelectMttList from "@/components/common/select/SelectMttList";
import Datepicker from "~/components/common/Datepicker";
import BtnExcelDownload from "~/components/common/button/BtnExcelDownload";
import PageTitle from "~/components/common/PageTitle";
let myTitle;
// const myPrgmId = "PRG0018";
let myPrgmId;
export default {
mixins: [mixinGlobal, resize],
async asyncData(context) {
const myState = context.store.state;
myPrgmId = context.route.query.prgmId;
await context.store.commit('setActiveMenuInfo', myState.menuData[myPrgmId]);
myTitle = await myState.activeMenuInfo.menuNm;
},
meta: {
title: () => {
return myTitle;
},
prgmId: myPrgmId,
closable: true,
},
components: {
SelectBlocMstr,
selectCodeList,
SelectMttList,
BtnExcelDownload,
Datepicker,
Search,
Grid,
},
data() {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
};
},
computed: {
...mapState({
isDarkMode: state => state.isDarkMode,
pageData: state => state.pageData[myPrgmId],
}),
chkIsFind() {
// 조회 플래그
return this.pageData.isFind;
},
chkBlocId() {
// 사업장 코드
return this.pageData.blocId;
},
chkCommCd() {
this.setPageData({ sendMttParam: { mttTp: this.pageData.commCd } });
return this.pageData.commCd;
},
chkReadObjId() {
return this.pageData.readObjId;
},
},
watch: {
chkIsFind(val) {
if (val) this.search();
},
chkBlocId() {
this.setPageData({ isFind: true });
},
chkPlcKind() {
this.setPageData({ isFind: true });
},
chkCommCd() {},
async chkReadObjId(val) {
// console.log("sendMttParam",this.pageData.sendMttParam.mttTp);
// if(this.pageData.sendMttParam.mttTp){
// await this.getRowGridData();
// }
this.setPageData({ isFind: true });
},
},
async beforeCreate() {
myPrgmId = this.$route.query.prgmId;
await this.$store.dispatch('chkOpenTabList', {
key: 'create',
prgmId: myPrgmId,
defaultData: defaultData,
});
},
mounted() {
this.init();
},
created() {},
methods: {
...mapMutations({
setPageData: 'setPageData',
setGridData: 'setGridData',
setGridColumn: 'setGridColumn',
setGridOption: 'setGridOption',
}),
...mapActions({
postApi: 'modules/list/postApi',
postUpdateApi: 'modules/list/postUpdateApi',
postApiReturn: 'modules/list/postApiReturn',
setTree: 'modules/list/setTree',
chkOpenTabList: 'chkOpenTabList',
}),
init() {
this.gridInit();
},
gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
mixins: [mixinGlobal, resize],
async asyncData(context) {
const myState = context.store.state;
myPrgmId = context.route.query.prgmId;
await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
myTitle = await myState.activeMenuInfo.menuNm;
},
meta: {
title: () => {
return myTitle;
},
prgmId: myPrgmId,
closable: true,
},
components: {
SelectBlocMstr,
selectCodeList,
SelectMttList,
BtnExcelDownload,
Datepicker,
Search,
Grid,
PageTitle,
},
data() {
return {
myPrgmId: myPrgmId,
gridName: "rowGrid",
loadGrid: true,
dataPathMock: {
rowGrid: {
column: [
{ header: "태그", name: "id", headerAlign: "left" },
{ header: "배율", name: "lable", headerAlign: "left" },
{ header: "설비비", name: "type", headerAlign: "left" },
{ header: "설비배분비율", name: "note", headerAlign: "left" },
{ header: "금일데이터", name: "note", headerAlign: "left" },
{ header: "최종마감시각", name: "date", headerAlign: "left" },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {},
},
},
};
},
computed: {
...mapState({
isDarkMode: (state) => state.isDarkMode,
pageData: (state) => state.pageData[myPrgmId],
}),
chkIsFind() {
// 조회 플래그
return this.pageData.isFind;
},
chkBlocId() {
// 사업장 코드
return this.pageData.blocId;
},
chkCommCd() {
this.setPageData({ sendMttParam: { mttTp: this.pageData.commCd } });
return this.pageData.commCd;
},
chkReadObjId() {
return this.pageData.readObjId;
},
},
watch: {
chkIsFind(val) {
if (val) this.search();
},
chkBlocId() {
this.setPageData({ isFind: true });
},
chkPlcKind() {
this.setPageData({ isFind: true });
},
chkCommCd() {},
async chkReadObjId(val) {
// console.log("sendMttParam",this.pageData.sendMttParam.mttTp);
// if(this.pageData.sendMttParam.mttTp){
// await this.getRowGridData();
// }
this.setPageData({ isFind: true });
},
},
async beforeCreate() {
myPrgmId = this.$route.query.prgmId;
await this.$store.dispatch("chkOpenTabList", {
key: "create",
prgmId: myPrgmId,
defaultData: defaultData,
});
},
mounted() {
this.init();
},
created() {},
methods: {
...mapMutations({
setPageData: "setPageData",
setGridData: "setGridData",
setGridColumn: "setGridColumn",
setGridOption: "setGridOption",
}),
...mapActions({
postApi: "modules/list/postApi",
postUpdateApi: "modules/list/postUpdateApi",
postApiReturn: "modules/list/postApiReturn",
setTree: "modules/list/setTree",
chkOpenTabList: "chkOpenTabList",
}),
init() {
this.gridInit();
},
gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const myOptions = {
columnOptions: {
resizable: true,
},
};
this.setGridOption({
gridKey: this.gridName,
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
});
this.setGridColumn({
gridKey: this.gridName,
value: myColumns,
});
this.loadGrid = true;
},
async search() {
await this.getRowGridData();
},
async getRowGridData() {
if (
this.pageData.blocMstrList.length > 0 &&
this.pageData.commCdList.length > 0 &&
this.pageData.readObjIdList.length > 0
) {
const res = await this.postApiReturn({
apiKey: 'selectReadResultCloseMng',
resKey: 'cdKindData',
sendParam: {
blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId, // 사업장
mttCd: this.pageData.commCd, // 검침대상유형
mttTp: this.pageData.readObjId, // 검침대상
readDt: this.pageData.fromDt, // 조회기간
},
});
this.setGridData({
gridKey: this.gridName,
value: res.map(item => ({
...item,
mgnf: item.mgnf || 0,
})),
});
}
this.setPageData({ isFind: false });
},
//전월 or 일 마감--------------------------------------------------------------------------------------------
async saveReadResultCloseMng(mnthYn) {
const result = confirm('마감시 기존자료는 삭제됩니다. \n계속하겠습니까?');
if (await result) {
const sendParam = {
datas: {},
params: {
mnthYn: mnthYn,
procIp: '0.0.0.0',
readDt: this.pageData.fromDt,
},
};
await this.postUpdateApi({
apiKey: 'saveReadResultCloseMngSP',
sendParam: sendParam,
});
this.setPageData({ isFind: true });
}
},
async saveReadResultCloseMngMM() {
const result = confirm('마감시 기존자료는 삭제됩니다. \n계속하겠습니까?');
if (await result) {
const sendParam = {
datas: {},
params: {
procIp: '0.0.0.0',
readDt: this.pageData.fromDt,
},
};
await this.postUpdateApi({
apiKey: 'saveReadResultCloseMngSPMM',
sendParam: sendParam,
});
this.setPageData({ isFind: true });
}
},
},
const myOptions = {
columnOptions: {
resizable: true,
},
};
this.setGridOption({
gridKey: this.gridName,
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
});
this.setGridColumn({
gridKey: this.gridName,
value: myColumns,
});
this.loadGrid = true;
},
async search() {
await this.getRowGridData();
},
async getRowGridData() {
if (
this.pageData.blocMstrList.length > 0 &&
this.pageData.commCdList.length > 0 &&
this.pageData.readObjIdList.length > 0
) {
const res = await this.postApiReturn({
apiKey: "selectReadResultCloseMng",
resKey: "cdKindData",
sendParam: {
blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId, // 사업장
mttCd: this.pageData.commCd, // 검침대상유형
mttTp: this.pageData.readObjId, // 검침대상
readDt: this.pageData.fromDt, // 조회기간
},
});
this.setGridData({
gridKey: this.gridName,
value: res.map((item) => ({
...item,
mgnf: item.mgnf || 0,
})),
});
}
this.setPageData({ isFind: false });
},
//전월 or 일 마감--------------------------------------------------------------------------------------------
async saveReadResultCloseMng(mnthYn) {
const result = confirm("마감시 기존자료는 삭제됩니다. \n계속하겠습니까?");
if (await result) {
const sendParam = {
datas: {},
params: {
mnthYn: mnthYn,
procIp: "0.0.0.0",
readDt: this.pageData.fromDt,
},
};
await this.postUpdateApi({
apiKey: "saveReadResultCloseMngSP",
sendParam: sendParam,
});
this.setPageData({ isFind: true });
}
},
async saveReadResultCloseMngMM() {
const result = confirm("마감시 기존자료는 삭제됩니다. \n계속하겠습니까?");
if (await result) {
const sendParam = {
datas: {},
params: {
procIp: "0.0.0.0",
readDt: this.pageData.fromDt,
},
};
await this.postUpdateApi({
apiKey: "saveReadResultCloseMngSPMM",
sendParam: sendParam,
});
this.setPageData({ isFind: true });
}
},
},
};
const defaultData = {
/* 검색옵션 */
mttTp: '',
mttTpList: [],
sendMttParam: {},
readPlc: '',
readObjId: '',
readObjIdList: [],
commCd: '',
commCdList: [],
cmCycle: 'CYC_HOUR',
blocId: '',
blocMstrList: [],
/* 검색옵션 */
mttTp: "",
mttTpList: [],
sendMttParam: {},
readPlc: "",
readObjId: "",
readObjIdList: [],
commCd: "",
commCdList: [],
cmCycle: "CYC_HOUR",
blocId: "",
blocMstrList: [],
fromDt: Utility.setFormatDate(new Date(), 'YYYYMMDD'),
fromDt: Utility.setFormatDate(new Date(), "YYYYMMDD"),
isFind: false,
isFind: false,
/* data 세팅 - sms 목록 */
rowGrid: {
data: [],
column: [],
option: {},
},
/* data 세팅 - sms 목록 */
rowGrid: {
data: [],
column: [],
option: {},
},
defaultRange: {
CYC_HOUR: 0,
},
defaultRange: {
CYC_HOUR: 0,
},
xlsFileInfo: {
// 출력하려는 grid 와 같은 이름으로 세팅
rowGrid: {
// 엑셀변환시 데이타 가공이 추가로 필요하게 된다면 여기에 가공된 rowData 를 넣어야 할듯
fileName: null, // 갑이 없으면 해당 페이지 메뉴명
sheetName: null, // 갑이 없으면 'Sheet1'
},
},
xlsFileInfo: {
// 출력하려는 grid 와 같은 이름으로 세팅
rowGrid: {
// 엑셀변환시 데이타 가공이 추가로 필요하게 된다면 여기에 가공된 rowData 를 넣어야 할듯
fileName: null, // 갑이 없으면 해당 페이지 메뉴명
sheetName: null, // 갑이 없으면 'Sheet1'
},
},
};
const myColumns = [
{
header: '태그',
name: 'readPlcNm',
width: 300,
},
{
header: '배율',
name: 'distRt',
align: 'right',
formatter({ value }) {
if (value === null) {
return '';
} else {
return value;
}
},
},
{
header: '설비비',
name: 'eccNm',
formatter({ value }) {
if (value === null) {
return '';
} else {
return value;
}
},
},
{
header: '설비배분비율',
name: 'eccDistRt',
align: 'right',
formatter({ value }) {
if (value === null) {
return '';
} else {
return value;
}
},
},
{
header: '금일데이터',
name: 'totVal',
align: 'right',
excelType: 'number',
excelFormatter: '2',
formatter({ value }) {
return Utility.setFormatIntDecimal(value, 2);
},
},
{
header: '최종마감시각',
name: 'procDttm',
align: 'center',
formatter({ value }) {
if (value === null) {
return '';
} else {
return value;
}
},
},
{
header: "태그",
name: "readPlcNm",
width: 300,
},
{
header: "배율",
name: "distRt",
align: "right",
formatter({ value }) {
if (value === null) {
return "";
} else {
return value;
}
},
},
{
header: "설비비",
name: "eccNm",
formatter({ value }) {
if (value === null) {
return "";
} else {
return value;
}
},
},
{
header: "설비배분비율",
name: "eccDistRt",
align: "right",
formatter({ value }) {
if (value === null) {
return "";
} else {
return value;
}
},
},
{
header: "금일데이터",
name: "totVal",
align: "right",
excelType: "number",
excelFormatter: "2",
formatter({ value }) {
return Utility.setFormatIntDecimal(value, 2);
},
},
{
header: "최종마감시각",
name: "procDttm",
align: "center",
formatter({ value }) {
if (value === null) {
return "";
} else {
return value;
}
},
},
];
import { getPathDataExample } from "@/const/const";
const dataPathDataExample = getPathDataExample({
id: "INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV",
lable: "INCHEON 고온 냉동기 101호기 - 호로1",
type: "사용",
note: "-",
date: "2023-01-10 20:02:00",
});
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -532,10 +532,6 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>
//
<style scoped lang="scss">
// ::v-deep {
// .tui-grid {

View File

@ -689,6 +689,3 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -661,6 +661,3 @@ function makeDateVal(date, cmCycle) {
return result;
}
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -472,6 +472,3 @@ const defaultData = {
},
};
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1057,6 +1057,3 @@ const myDetail = [
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -10,6 +10,8 @@
:is="'SelectBlocMstr'"
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -20,6 +22,8 @@
dataKey="searchReadDataType"
:sendParam="{ commGrpCd: 'EM_READ_DATA_TYPE', useFg: '1' }"
:addAll="true"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -29,16 +33,15 @@
:label="'측정대상'"
dataKey="searchReadObj"
:sendParam="{ useFg: '1' }"
:labelCols="4"
:textCols="8"
:labelCols="12"
:textCols="12"
:addAll="true"
customClass="select-large"
/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'selectCodeList'"
@ -47,6 +50,8 @@
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
:textCols="12"
customClass="select-large"
/>
</v-col>
<v-col :cols="3">
@ -54,9 +59,10 @@
:parentPrgmId="myPrgmId"
label="TAG ID"
valueNm="tagId"
:labelCols="4"
:textCols="8"
:labelCols="12"
:textCols="12"
:searchOption="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="3">
@ -64,11 +70,15 @@
:parentPrgmId="myPrgmId"
label="TAG명"
valueNm="tagNm"
:labelCols="4"
:textCols="8"
:labelCols="12"
:textCols="12"
:searchOption="true"
customClass="input-large"
/>
</v-col>
<v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnSearch @click="search" size="large" />
</v-col>
</v-row>
</v-card>
</v-col>
@ -99,10 +109,11 @@
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/>
</div>
</v-card-actions>
<div class="d-flex align-center justify-space-between">
<!-- <div class="d-flex align-center justify-space-between">
<pagination
id="pagination"
:total-count="totalCount"
@ -110,7 +121,7 @@
:limit="limit"
@loadData="changeGrid"
/>
</div>
</div> -->
</v-card>
</v-col>
<v-col :cols="7" class="h100">
@ -204,7 +215,7 @@ export default {
return {
myPrgmId: myPrgmId,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
tab: null,
items: [
{ name: 'TAG 정보', id: 'tagBaseInfoTab', disabledFlag: false },
@ -212,11 +223,123 @@ export default {
],
detailList: myDetail,
alrmFg: null,
itemsPerPage: 10,
itemsPerPageArray: [10, 20, 30],
limit: 20,
page: 1,
totalCount: 0,
dataPathMock: {
"rowGrid": {
column: [
{ header: '회사 ID', name: 'comId', hidden: true },
{
header: 'TAG ID',
name: 'tagId',
width: 'auto',
minWidth: 340,
align: 'left',
},
{
header: 'TAG 명',
name: 'tagNm',
width: 'auto',
minWidth: 220,
align: 'left',
},
{
header: '측정 값 유형',
name: 'readDataTypeCd',
width: 90,
align: 'left',
},
{
header: '측정대상',
name: 'readObjId',
width: 100,
align: 'left',
},
{ header: '배율', name: 'mgnf', width: 80, align: 'right' },
{
header: '단위',
name: 'unitCd',
width: 80,
align: 'left',
},
{
header: '최소값',
name: 'rangMin',
width: 100,
align: 'right',
hidden: true,
},
{
header: '최대값',
name: 'rangMax',
width: 100,
align: 'right',
hidden: true,
},
{
header: '경고 상상',
name: 'alrmHihi',
width: 100,
align: 'right',
hidden: true,
},
{
header: '경고 상',
name: 'alrmHi',
width: 100,
align: 'right',
hidden: true,
},
{
header: '경고 하',
name: 'alrmLo',
width: 100,
align: 'right',
hidden: true,
},
{
header: '경고 하하',
name: 'alrmLolo',
width: 100,
align: 'right',
hidden: true,
},
{
header: '사업장',
name: 'blocId',
width: 100,
align: 'center',
hidden: true,
},
{
header: '집계 여부',
name: 'totFg',
width: 80,
align: 'center',
hidden: true,
},
{
header: '사용 여부',
name: 'useFg',
width: 80,
align: 'center',
hidden: true,
},
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {
pageOptions: {
useClient: true,
perPage: 10,
},
scrollX: true
}
}
},
// itemsPerPage: 10,
// itemsPerPageArray: [10, 20, 30],
// limit: 20,
// page: 1,
// totalCount: 0,
};
},
computed: {
@ -971,30 +1094,39 @@ const myDetail = [
label: 'TAG ID',
valueNm: 'tagId',
disabled: false,
iconShow:true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
required: false,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: 'TAG 명',
valueNm: 'tagNm',
disabled: false,
iconShow:true,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4',
required: false,
labelCols: 12,
textCols: 12,
},
{
type: 'SelectBox',
label: '측정 값 유형',
valueNm: 'readDataTypeCd',
disabled: false,
iconShow:true,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
list: 'readDataTypeCdList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
labelCols: 12,
textCols: 12,
},
{
type: 'SelectBox',
@ -1002,11 +1134,14 @@ const myDetail = [
valueNm: 'readObjId',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
list: 'readObjList',
itemText: 'readObjNm',
itemValue: 'readObjId',
required: true,
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1014,8 +1149,11 @@ const myDetail = [
valueNm: 'mgnf',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
required: true,
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'SelectBox',
@ -1023,10 +1161,13 @@ const myDetail = [
valueNm: 'unitCd',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
list: 'unitCdList',
itemText: 'commCdNm',
itemValue: 'commCd',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1034,7 +1175,10 @@ const myDetail = [
valueNm: 'rangMin',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1042,7 +1186,10 @@ const myDetail = [
valueNm: 'rangMax',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1050,7 +1197,10 @@ const myDetail = [
valueNm: 'alrmHihi',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1058,7 +1208,10 @@ const myDetail = [
valueNm: 'alrmHi',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1066,7 +1219,10 @@ const myDetail = [
valueNm: 'alrmLo',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
@ -1074,7 +1230,10 @@ const myDetail = [
valueNm: 'alrmLolo',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'CheckBox',
@ -1082,8 +1241,11 @@ const myDetail = [
valueNm: 'totFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4 pt-5',
value: { '1': true, '0': false },
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'CheckBox',
@ -1091,9 +1253,12 @@ const myDetail = [
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4 pt-5',
value: { '1': true, '0': false },
required: false,
iconShow:true,
labelCols: 12,
textCols: 12,
},
{
type: 'SelectBox',
@ -1120,7 +1285,25 @@ const myDetail = [
class: 'py-2',
},
];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
"comId": "",
"tagId": "INCHEON.ELEC.EQID.VCB_111A_ACCWH_PV",
"tagNm": "ICHEON VCB_111A - 적산 전력",
"readDataTypeCd": "적산",
"readObjId": "적산",
"mgnf": "적산",
"unitCd":"적산",
"rangMin":"1",
"rangMax":"10",
"alrmHihi":"1",
"alrmHi":"10",
"alrmLo":"1",
"alrmLolo":"10",
"blocId":"1",
"totFg":"1",
"useFg":"1",
});
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -80,7 +80,7 @@ const defaultData = {
const myDetail = [];
</script>
<style lang="scss">
<style lang="scss" scoped>
.swiper-wrapper {
box-sizing: inherit !important;
}