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

@ -1,71 +1,38 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">Data Set TAG 연결 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailDataSetTagList"
:btnActionsFnc="btnActions"
/>
</div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
</div>
<div ref="formParent" style="height: calc((100vh - 520px) /2);">
<component
:is="'Form'"
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailDataSetTagList"
@gridEditingFinish="gridEditingFinish"
/>
</div>
<div ref="formParent" style="height: 100px);" class="w100 h100">
<v-row ref="contents" class="w100">
<v-card class="searchFilter w100">
<v-row align="center" no-gutters>
<v-col :cols="7">
<component
:is="'Datepicker'"
:parentPrgmId="parentPrgmId"
:label="'검색기간'"
:labelCols="2"
/>
</v-col>
<v-col :cols="3">
<component
:is="'selectCodeList'"
:parentPrgmId="parentPrgmId"
:label="'주기'"
dataKey="mdlDataTerm"
:sendParam="{ commGrpCd: 'MDL_DATA_TERM', useFg: '1' }"
:addAll="false"
/>
</v-col>
<v-col :cols="2" class="text-right">
<v-btn
@click="jamoviProcClickEvent('view1')"
:ripple="false"
class="mr-1"
>데이터 분석</v-btn
>
</v-col>
</v-row>
</v-card>
</v-row>
</div>
</div>
<div>
<div class="d-flex justify-space-between align-center" style="min-height: 80px;">
<span class="txt custom-title-4-new">Data Set TAG 연결 정보</span>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
:btnActionsFnc="btnActions" />
</div>
<div ref="gridParent">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" />
</div>
<div ref="formParent" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
@gridEditingFinish="gridEditingFinish" />
</div>
<div ref="formParent" style="min-height: 100px;" class="w100 h100">
<v-row ref="contents" class="w100">
<v-col :cols="6">
<component :is="'Datepicker'" :parentPrgmId="parentPrgmId" :label="'검색기간'" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="4">
<component :is="'selectCodeList'" :parentPrgmId="parentPrgmId" :label="'주기'" dataKey="mdlDataTerm"
:sendParam="{ commGrpCd: 'MDL_DATA_TERM', useFg: '1' }" :addAll="false" :labelCols="12" :textCols="12" :iconShow="true" />
</v-col>
<v-col class="text-right align-self-end">
<a-button @click="jamoviProcClickEvent('view1')" type="primary" :ripple="false" class="mr-1">데이터 분석</a-button>
</v-col>
<!-- <v-card class="searchFilter w100">
<v-row align="center" no-gutters>
</v-row>
</v-card> -->
</v-row>
</div>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
@ -79,315 +46,357 @@ import Utility from '~/plugins/utility';
import Datepicker from '~/components/common/DatepickerTopView';
import selectCodeList from '@/components/common/select/selectCodeList';
export default {
mixins: [mixinGlobal],
components: {
Buttons,
Grid,
Form,
Datepicker,
selectCodeList,
},
props: {
parentPrgmId: {
type: String,
require: true,
},
innerTabGridInfo: {
type: Object,
default: null,
},
},
data() {
return {
loadGrid: false,
gridName: 'rowDataSetTagRelGrid',
detailDataSetTagList: myDataSetTagDetail,
};
},
computed: {
...mapState({
pageData(state) {
return state.pageData[this.parentPrgmId];
},
}),
selectedCommCd() {
return this.pageData[this.gridName].data;
},
myUseFgList() {
return this.pageData.useFgList;
},
selectedComId() {
return this.pageData.rowGridSelectData.comId;
},
selectedDataSetId() {
return this.pageData.rowGridSelectData.dataSetId;
},
},
mixins: [mixinGlobal],
components: {
Buttons,
Grid,
Form,
Datepicker,
selectCodeList,
},
props: {
parentPrgmId: {
type: String,
require: true,
},
innerTabGridInfo: {
type: Object,
default: null,
},
},
data() {
return {
loadGrid: true,
gridName: 'rowDataSetTagRelGrid',
detailDataSetTagList: myDataSetTagDetail,
dataPathMock: {
"rowDataSetTagRelGrid": {
column: [
{ header: 'TAG ID', name: 'id', headerAlign: 'left' },
{ header: 'TAG 명', name: 'name', headerAlign: 'left' },
{ header: '모델 Data 구분', name: 'type', headerAlign: 'left' }
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
};
},
computed: {
...mapState({
pageData(state) {
return state.pageData[this.parentPrgmId];
},
}),
selectedCommCd() {
return this.pageData[this.gridName].data;
},
myUseFgList() {
return this.pageData.useFgList;
},
selectedComId() {
return this.pageData.rowGridSelectData.comId;
},
selectedDataSetId() {
return this.pageData.rowGridSelectData.dataSetId;
},
},
mounted() {
this.init();
},
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',
getCodeList: 'modules/search/getCodeList',
}),
init() {
this.gridInit();
},
gridInit() {
const gridHeight = this.$refs['gridParent'].offsetHeight - 36;
mounted() {
this.init();
},
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',
getCodeList: 'modules/search/getCodeList',
}),
init() {
this.gridInit();
},
gridInit() {
const gridHeight = this.$refs['gridParent'].offsetHeight - 36;
const myOptions = {
// bodyHeight: gridHeight,
// minBodyHeight: gridHeight,
header: {
height: 28,
},
rowHeight: 29,
minRowHeight: 29,
selectionUnit: 'row',
editingEvent: 'click',
// columnOptions: {
// resizable: true,
// minWidth: 100
// }
};
this.setGridOption({
gridKey: this.gridName,
// value: myOptions
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
});
const myOptions = {
// bodyHeight: gridHeight,
// minBodyHeight: gridHeight,
header: {
height: 28,
},
rowHeight: 29,
minRowHeight: 29,
selectionUnit: 'row',
editingEvent: 'click',
// columnOptions: {
// resizable: true,
// minWidth: 100
// }
};
this.setGridOption({
gridKey: this.gridName,
// value: myOptions
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
});
const _this = this;
let useFgSelectList = [];
this.pageData.useFgList.forEach(item => {
const it = { text: item.commCdNm, value: item.commCd };
useFgSelectList.push(it);
});
const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: 'DataSet ID', name: 'dataSetId', hidden: true },
{ header: 'DataSet 명', name: 'dataSetNm', hidden: true },
{ header: 'TAG ID', name: 'tagId', align: 'left', width: 440 },
{ header: 'TAG 명', name: 'tagNm', align: 'left', width: 320 },
{
header: '모델 Data 구분',
name: 'mdlDataTypeCd',
align: 'center',
width: 120,
formatter({ value }) {
var retVal = '';
const _this = this;
let useFgSelectList = [];
this.pageData.useFgList.forEach(item => {
const it = { text: item.commCdNm, value: item.commCd };
useFgSelectList.push(it);
});
const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: 'DataSet ID', name: 'dataSetId', hidden: true },
{ header: 'DataSet 명', name: 'dataSetNm', hidden: true },
{ header: 'TAG ID', name: 'tagId', align: 'left', width: 440 },
{ header: 'TAG 명', name: 'tagNm', align: 'left', width: 320 },
{
header: '모델 Data 구분',
name: 'mdlDataTypeCd',
align: 'center',
width: 120,
formatter({ value }) {
var retVal = '';
for (var i = 0; i < _this.pageData.mdlDataTypeCdList.length; i++) {
if (_this.pageData.mdlDataTypeCdList[i].commCd === value) {
retVal = _this.pageData.mdlDataTypeCdList[i].commCdNm;
}
}
for (var i = 0; i < _this.pageData.mdlDataTypeCdList.length; i++) {
if (_this.pageData.mdlDataTypeCdList[i].commCd === value) {
retVal = _this.pageData.mdlDataTypeCdList[i].commCdNm;
}
}
return retVal;
},
},
{
header: '사용여부',
name: 'useFg',
align: 'center',
width: 100,
formatter({ value }) {
value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value,
);
return newValue[0].commCdNm;
},
// editor: {
// type: "select",
// options: {
// listItems: useFgSelectList
// }
// }
},
{ header: '비고', name: 'rmrk', align: 'center' },
];
return retVal;
},
},
{
header: '사용여부',
name: 'useFg',
align: 'center',
width: 100,
formatter({ value }) {
value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value,
);
return newValue[0].commCdNm;
},
// editor: {
// type: "select",
// options: {
// listItems: useFgSelectList
// }
// }
},
{ header: '비고', name: 'rmrk', align: 'center' },
];
this.setGridColumn({
gridKey: this.gridName,
value: myColumns,
});
this.setGridColumn({
gridKey: this.gridName,
value: myColumns,
});
this.loadGrid = true;
},
async getRowData(data, gridName) {
// if (data.rowStat === 'I') {
// this.detailDataSetTagList[0].disabled = false;
// this.detailDataSetTagList[1].disabled = false;
// } else {
// this.detailDataSetTagList[0].disabled = true;
// this.detailDataSetTagList[1].disabled = true;
// }
this.setGridSelectData({
gridKey: gridName,
gridSelect: true,
rowGridSelectKey: data.rowKey,
rowGridSelectData: Object.assign({}, data),
});
},
async btnActions(action) {
let dataArr = [];
switch (action) {
case 'add':
console.log('add this.pageData : '); // , this.pageData);
const defaultRow = {
dataSetId: this.pageData.dataSetId,
dataSetNm: this.pageData.dataSetNm,
mdlDataTypeCd: 'SUM',
tagId: '',
tagNm: '',
rmrk: null,
useFg: true,
};
this.$refs[this.gridName].addRow(defaultRow);
this.detailDataSetTagList[0].disabled = false;
this.detailDataSetTagList[1].disabled = false;
break;
this.loadGrid = true;
},
async getRowData(data, gridName) {
// if (data.rowStat === 'I') {
// this.detailDataSetTagList[0].disabled = false;
// this.detailDataSetTagList[1].disabled = false;
// } else {
// this.detailDataSetTagList[0].disabled = true;
// this.detailDataSetTagList[1].disabled = true;
// }
this.setGridSelectData({
gridKey: gridName,
gridSelect: true,
rowGridSelectKey: data.rowKey,
rowGridSelectData: Object.assign({}, data),
});
},
async btnActions(action) {
let dataArr = [];
switch (action) {
case 'add':
console.log('add this.pageData : '); // , this.pageData);
const defaultRow = {
dataSetId: this.pageData.dataSetId,
dataSetNm: this.pageData.dataSetNm,
mdlDataTypeCd: 'SUM',
tagId: '',
tagNm: '',
rmrk: null,
useFg: true,
};
this.$refs[this.gridName].addRow(defaultRow);
this.detailDataSetTagList[0].disabled = false;
this.detailDataSetTagList[1].disabled = false;
break;
case 'remove':
this.$refs[this.gridName].removeRow();
this.detailDataSetTagList[0].disabled = true;
this.detailDataSetTagList[1].disabled = true;
break;
case 'remove':
this.$refs[this.gridName].removeRow();
this.detailDataSetTagList[0].disabled = true;
this.detailDataSetTagList[1].disabled = true;
break;
case 'save':
dataArr = this.$refs[this.gridName].save();
// this.loadGrid = false;
const newDataArr = dataArr.map(item => {
const newData = {
...item,
comId: this.selectedComId,
dataSetId: this.selectedDataSetId,
};
newData.reprTagFg = newData.reprTagFg == true ? '1' : '0';
newData.useFg = newData.useFg == true ? '1' : '0';
return newData;
});
if (dataArr.length > 0) {
var validCheck = true;
dataArr.filter(item => {
if (item.rowStat === 'I') {
if (item.tagId == '' || item.distRt == '' || item.ercId == '') {
alert('필수 입력값을 입력해주세요.');
validCheck = false;
}
} else if (item.rowStat === 'U') {
if (item.distRt == '' || item.ercId == '') {
alert('필수 입력값을 입력해주세요.');
validCheck = false;
}
}
});
case 'save':
dataArr = this.$refs[this.gridName].save();
// this.loadGrid = false;
const newDataArr = dataArr.map(item => {
const newData = {
...item,
comId: this.selectedComId,
dataSetId: this.selectedDataSetId,
};
newData.reprTagFg = newData.reprTagFg == true ? '1' : '0';
newData.useFg = newData.useFg == true ? '1' : '0';
return newData;
});
if (dataArr.length > 0) {
var validCheck = true;
dataArr.filter(item => {
if (item.rowStat === 'I') {
if (item.tagId == '' || item.distRt == '' || item.ercId == '') {
alert('필수 입력값을 입력해주세요.');
validCheck = false;
}
} else if (item.rowStat === 'U') {
if (item.distRt == '' || item.ercId == '') {
alert('필수 입력값을 입력해주세요.');
validCheck = false;
}
}
});
if (validCheck) {
const sendParam = {
datas: {
dsMdlDataSetTagRel: newDataArr,
},
params: {},
};
await this.postUpdateApi({
apiKey: 'saveMdlDataSetTagRel',
sendParam: sendParam,
});
// this.loadGrid = true;
this.setPageData({ isFind: true });
}
} else {
alert('저장할 내용이 없습니다.');
}
break;
if (validCheck) {
const sendParam = {
datas: {
dsMdlDataSetTagRel: newDataArr,
},
params: {},
};
await this.postUpdateApi({
apiKey: 'saveMdlDataSetTagRel',
sendParam: sendParam,
});
// this.loadGrid = true;
this.setPageData({ isFind: true });
}
} else {
alert('저장할 내용이 없습니다.');
}
break;
default:
break;
}
},
gridEditingFinish(data, bindingData) {
this.$refs[this.gridName].editingFinish(data);
},
emits: ['jamoviClickEvent'],
search() {},
jamoviProcClickEvent() {
let data = {
comId: this.selectedComId,
dataSetId: this.selectedDataSetId,
};
console.log('data : ', data);
this.$emit('jamoviClickEvent', 'view1', data);
},
},
default:
break;
}
},
gridEditingFinish(data, bindingData) {
this.$refs[this.gridName].editingFinish(data);
},
emits: ['jamoviClickEvent'],
search() { },
jamoviProcClickEvent() {
let data = {
comId: this.selectedComId,
dataSetId: this.selectedDataSetId,
};
console.log('data : ', data);
this.$emit('jamoviClickEvent', 'view1', data);
},
},
};
const myDataSetTagDetail = [
{
type: 'EvtObjPop',
labelContent: 'TAG',
modalTitle: 'TAG 리스트',
valueNm: 'tagId',
valueNm2: 'tagNm',
disabled: true,
cols: 6,
class: 'py-2',
required: true,
},
{
type: 'InputText',
label: 'TAG 명',
valueNm: 'tagNm',
disabled: false,
cols: 5,
class: 'py-2',
required: true,
},
{
type: 'SelectBox',
label: '모델 Data 구분',
valueNm: 'mdlDataTypeCd',
disabled: false,
cols: 6,
class: 'py-2',
list: 'mdlDataTypeCdList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
},
{
type: 'CheckBox',
label: '사용여부',
valueNm: 'useFg',
disabled: false,
cols: 5,
class: 'py-2',
value: { '1': true, '0': false },
required: true,
},
{
type: 'TextArea',
label: '비고',
valueNm: 'rmrk',
disabled: false,
cols: 12,
textCols: 9,
rows: 2,
class: 'py-2',
required: false,
},
{
type: 'EvtObjPop',
labelContent: 'TAG',
modalTitle: 'TAG 리스트',
valueNm: 'tagId',
valueNm2: 'tagNm',
disabled: true,
cols: 6,
class: 'py-1 mt-2',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'InputText',
label: 'TAG 명',
valueNm: 'tagNm',
disabled: false,
cols: 6,
class: 'py-2 mt-2',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
label: '모델 Data 구분',
valueNm: 'mdlDataTypeCd',
disabled: false,
cols: 6,
class: 'py-2 mt-2',
list: 'mdlDataTypeCdList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
textCols: 12,
iconShow: true,
},
{
type: 'CheckBox',
label: '사용여부',
valueNm: 'useFg',
disabled: false,
cols: 5,
class: 'py-2 mt-2',
value: { '1': true, '0': false },
required: true,
textCols: 12,
iconShow: true,
// class: "d-flex align-end"
},
{
type: 'TextArea',
label: '비고',
valueNm: 'rmrk',
disabled: false,
cols: 12,
textCols: 12,
rows: 2,
class: 'py-2 mt-2',
required: false,
},
];
const dataPathDataExample = [
{
id: 'INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV',
name: 'INCHEON 고온 냉동기 101호기 - 호로1',
type: '합계'
},
{
id: 'INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV',
name: 'INCHEON 고온 냉동기 101호기 - 호로1',
type: '합계'
},
{
id: 'INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV',
name: 'INCHEON 고온 냉동기 101호기 - 호로1',
type: '합계'
},
];
</script>

View File

@ -4,7 +4,7 @@
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">공정 추가 정보</span>
<span class="txt custom-title-4-new">공정 추가 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
@ -20,6 +20,7 @@
:editorGrid="true"
:innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -53,10 +54,22 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowDetailGrid',
rowKey: null,
edtingFinishFlag: 'Y',
dataPathMock: {
"rowDetailGrid": {
column: [
{ header: '추가 정보', name: 'readObjId', align: 'left' },
{ header: 'Data 구분', name: 'readObjNm', align: 'left' },
{ header: '추가 정보 값', name: 'readObjKind', align: 'left' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
};
},
computed: {
@ -431,4 +444,22 @@ export default {
},
},
};
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
}
]
</script>

View File

@ -4,7 +4,7 @@
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">공정 입출력 정보</span>
<span class="txt custom-title-4-new">공정 입출력 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
@ -19,6 +19,7 @@
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
:dataPath="dataPathMock"
/>
</div>
<div>
@ -59,11 +60,24 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowEccIaoGrid',
inputList_emMapDiv: [],
inputList_cmInOut: [],
detailList: myDetail,
dataPathMock: {
"rowEccIaoGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
};
},
computed: {
@ -374,38 +388,49 @@ const myDetail = [
label: '대상 유형',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
list: 'emMapDivList',
valueNm: 'objKind',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
disabled: true,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'ReadPlcPop',
label: '대상 항목',
valueNm: 'objId',
disabled: true,
disabled: false,
cols: 6,
class: 'py-2',
class: 'pt-2 pb-0 mb-0 pl-4',
required: true,
bindNm: 'objNm',
labelCols: 12,
textCols: 12,
iconShow: true,
noText: true,
iconShow: true,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2 pr-4',
disabled: false,
},
{
type: 'InputText',
valueNm: 'objNm',
readonly: true,
disabled: true,
cols: 5,
class: 'py-2',
cols: 6,
class: 'pl-4',
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'EvtObjPop',
@ -417,53 +442,66 @@ const myDetail = [
disabled: true,
required: true,
cols: 6,
class: 'py-2 d-none',
labelCols: 4,
textCols: 7,
class: 'd-none pr-4',
disableContent: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'InputText',
cols: 5,
class: 'py-2 d-none',
cols: 6,
class: 'd-none pt-0 pl-4',
valueNm: 'objNm',
readonly: true,
disabled: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'SelectBox',
label: '에너지원',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
list: 'ercNmList',
valueNm: 'ercId',
itemText: 'text',
itemValue: 'value',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'SelectBox',
label: '투입생산유형',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4',
list: 'cmInoutList',
valueNm: 'inProdKind',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'CheckBox',
cols: 6,
class: 'py-2',
class: 'py-2 pr-4',
label: '계산 여부',
valueNm: 'calcFg',
disabled: false,
value: { '1': true, '0': false },
required: true,
disabledFg: 'objKind',
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'InputText',
@ -471,8 +509,19 @@ const myDetail = [
valueNm: 'distRt',
readonly: false,
cols: 6,
class: 'py-2',
class: 'py-2 pl-4',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
];
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
},
]
</script>

View File

@ -1,75 +1,33 @@
<template>
<div>
<v-row>
<v-col :cols="6" class="py-2">
<InputText
ref="effcIdxId"
:parentPrgmId="parentPrgmId"
label="효율지표 ID"
valueNm="effcIdxId"
:required="false"
:readonly="true"
/>
<v-col :cols="6" class="py-2 pr-4">
<InputText ref="effcIdxId" :parentPrgmId="parentPrgmId" label="효율지표 ID" valueNm="effcIdxId"
:required="false" :readonly="true" :textCols="12" :labelCols="12" />
</v-col>
<v-col :cols="6"> </v-col>
<v-col :cols="6" class="py-2">
<InputText
ref="effcIdxNm"
:parentPrgmId="parentPrgmId"
label="효율지표 명"
valueNm="effcIdxNm"
:readonly="true"
:required="false"
/>
<v-col :cols="6" class="py-2 pl-4">
<InputText ref="effcIdxNm" :parentPrgmId="parentPrgmId" label="효율지표 명" valueNm="effcIdxNm"
:readonly="true" :required="false" :textCols="12" :labelCols="12" />
</v-col>
<v-col :cols="6"> </v-col>
<v-col :cols="6" class="py-2">
<component
:is="'SelectBox'"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'지표종류'"
:textCols="7"
:required="false"
:readonly="true"
@update:propsValue="selectValue01 = $event"
/>
<v-col :cols="6" class="py-2 pr-4">
<component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01" :label="'지표종류'"
:textCols="12" :labelCols="12" :required="false" :readonly="true"
@update:propsValue="selectValue01 = $event" />
</v-col>
</v-row>
<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="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
<component
v-show="false"
ref="EgrpPysclQtyPop"
:is="'EgrpPysclQtyPop'"
:parentPrgmId="parentPrgmId"
:item="EgrpPysclQtyPopItem"
:labelContent="'물리량'"
/>
<component
v-show="false"
ref="GdIdxPop"
:is="'GdIdxPop'"
:parentPrgmId="parentPrgmId"
:item="GdIdxPopItem"
:labelContent="'가이드지표'"
/>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
<component v-show="false" ref="EgrpPysclQtyPop" :is="'EgrpPysclQtyPop'" :parentPrgmId="parentPrgmId"
:item="EgrpPysclQtyPopItem" :labelContent="'물리량'" />
<component v-show="false" ref="GdIdxPop" :is="'GdIdxPop'" :parentPrgmId="parentPrgmId" :item="GdIdxPopItem"
:labelContent="'가이드지표'" />
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div style="height:calc(100% - 76px)">
<div ref="gridParent" style="height: calc(35vh);">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="parentPrgmId" @getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo"
:dataPath="sampleDataPath" />
</div>
</div>
</div>
@ -109,8 +67,58 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'effcInfoGrid',
sampleDataPath: {
"effcInfoGrid": {
data:
[
{
"eqpmKindId": "펌프",
"eqpmGrpId": "냉각수 시스템",
"totMethNm": "평균값"
},
{
"eqpmKindId": "모터",
"eqpmGrpId": "공기압 시스템",
"totMethNm": "최대값"
},
{
"eqpmKindId": "밸브",
"eqpmGrpId": "스팀 공급",
"totMethNm": "합계"
},
{
"eqpmKindId": "센서",
"eqpmGrpId": "온도 제어",
"totMethNm": "최소값"
},
{
"eqpmKindId": "컴프레서",
"eqpmGrpId": "에어 시스템",
"totMethNm": "중앙값"
}
]
,
column: [
{
header: '대상설비종류',
name: 'eqpmKindId',
},
{
header: '대상설비그룹',
name: 'eqpmGrpId',
},
{ header: '집계방법', name: 'totMethNm', align: 'center' },
]
}
},
itemList: [],
tagTpList: [],
// detailList: myDetail,
@ -355,7 +363,7 @@ export default {
await this.setSelectValueList01();
await this.gridInit();
},
search() {},
search() { },
async setSelectValueList01() {
this.selectValueList01 = [
{

View File

@ -4,7 +4,7 @@
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">설비 추가 정보</span>
<span class="txt custom-title-4-new">설비 추가 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
@ -20,6 +20,7 @@
:editorGrid="true"
:innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</div>
@ -51,10 +52,24 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowDetailGrid',
rowKey: null,
edtingFinishFlag: 'Y',
dataPathMock: {
'rowDetailGrid' : {
column: [
{ header: '추가 정보', name: 'id', headerAlign: 'left' },
{ header: 'Data 구분', name: 'lable', headerAlign: 'left' },
{ header: '추가 정보 값', name: 'type', headerAlign: 'left' },
// { header: '비고', name: 'note', headerAlign: 'left' }
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
};
},
computed: {
@ -393,4 +408,11 @@ export default {
},
},
};
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: '-'
});
</script>

View File

@ -1,34 +1,16 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">설비 상수 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
<div class="d-flex justify-space-between align-center" style="height: 80px;">
<span class="txt custom-title-4-new">설비 상수 정보</span>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div>
<div ref="gridParent" style="height: calc(100vh - 800px);">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
<div ref="gridParent" style="min-height: calc(100vh - 800px);">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" />
</div>
<div style="height: calc(100vh - 900px);">
<component
:is="'Form'"
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
<div style="min-height: calc(100vh - 900px);" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</div>
</div>
</template>
@ -59,12 +41,28 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowEqpmConstGrid',
detailList: myEqpmConstDetail,
inputList_emMapDiv: [],
inputList_cmInOut: [],
dataPathMock: {
'rowEqpmConstGrid': {
column: [
{ header: '대상항목', 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: {}
}
},
};
},
computed: {
@ -101,7 +99,7 @@ export default {
this.detailList[2].eqpmKindId = val;
}
},
selectedEqpmGrpId(val){
selectedEqpmGrpId(val) {
// if(!val){
// this.detailList[2].eqpmGrpId = '';
// }else{
@ -332,7 +330,7 @@ export default {
gridEditingFinish(data, bindingData) {
this.$refs[this.gridName].editingFinish(data);
},
search() {},
search() { },
},
};
@ -360,20 +358,16 @@ const myEqpmConstDetail = [
label: '대상 유형',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
list: 'emMapDivList2',
valueNm: 'objKind',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
disabled: true,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
disabled: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'EgrpPysclQtyPop',
@ -390,19 +384,32 @@ const myEqpmConstDetail = [
required: true,
openMode: 'CONST',
cols: 6,
class: 'py-2',
eqpmGrpDisableFlag:true,
// eqpmGrpId:''
class: 'py-3 pl-4',
eqpmGrpDisableFlag: true,
// eqpmGrpId:'',
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-3',
disabled: true,
},
{
type: 'InputText',
valueNm: 'pysclQtyNm',
disabled: true,
readonly: true,
cols: 5,
class: 'py-2',
cols: 6,
class: 'py-3 pt-1 pl-4',
align: 'right',
// class: 'py-2 d-none',
labelCols: 12,
textCols: 12,
iconShow: true,
},
{
type: 'InputText',
@ -410,12 +417,24 @@ const myEqpmConstDetail = [
valueNm: 'pysclQtyVal',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
align: 'right',
inputType: 'number',
min: 0,
max: 100,
required: true,
labelCols: 12,
textCols: 12,
iconShow: true,
},
];
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>

View File

@ -4,24 +4,25 @@
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">설비 입출력 정보</span>
<span class="txt custom-title-4-new">설비 입출력 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
</div>
<div ref="gridParent" style="height: calc(100vh - 800px);">
<div ref="gridParent" style="min-height: calc(100vh - 800px);" >
<!-- :is="loadGrid ? 'Grid' : null" -->
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
:dataPath="dataPathMock"
/>
</div>
<div style="height: calc(100vh - 900px);">
<div style="min-height: calc(100vh - 900px);" class="mt-4">
<component
:is="'Form'"
:parentPrgmId="parentPrgmId"
@ -59,12 +60,28 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowEqpmIaoGrid',
detailList: myEqpmIaoDetail,
inputList_emMapDiv: [],
inputList_cmInOut: [],
dataPathMock: {
'rowEqpmIaoGrid' : {
column: [
{ header: '대상항목', 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: {}
}
},
};
},
computed: {
@ -155,7 +172,7 @@ export default {
},
},
mounted() {
this.init();
// this.init();
},
methods: {
...mapMutations({
@ -421,22 +438,18 @@ const myEqpmIaoDetail = [
{
type: 'SelectBox',
label: '대상 유형',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
list: 'emMapDivList',
// list: 'ercNmList',
valueNm: 'objKind',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
disabled: false,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
disabled: true,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'ReadPlcPop',
@ -444,63 +457,88 @@ const myEqpmIaoDetail = [
valueNm: 'objId',
disabled: true,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
required: true,
bindNm: 'objNm',
textCols: 12,
labelCols: 12,
iconShow: true,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-3',
disabled: true,
textCols: 12,
labelCols: 12,
},
{
type: 'InputText',
valueNm: 'objNm',
readonly: true,
disabled: true,
cols: 5,
class: 'py-2',
cols: 6,
class: 'py-3 pl-4 pt-1',
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'EvtObjPop',
labelContent: '대상 항목',
labelContent: '대상 항목 111',
valueNm: 'objId',
valueNm2: 'objNm',
bindNm: 'objNm',
disabled: true,
required: true,
cols: 6,
class: 'py-2 d-none',
labelCols: 4,
textCols: 7,
class: 'py-3 d-none',
disableContent: true,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'InputText',
cols: 5,
class: 'py-2 d-none',
class: 'py-3 d-none',
valueNm: 'objNm',
readonly: true,
disabled: true,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'SelectBox',
label: '에너지원',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
list: 'ercNmList',
valueNm: 'ercId',
itemText: 'text',
itemValue: 'value',
required: false,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'SelectBox',
label: '투입생산유형',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
list: 'cmInoutList',
valueNm: 'inProdKind',
itemText: 'commCdNm',
itemValue: 'commCd',
required: false,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'InputText',
@ -508,12 +546,15 @@ const myEqpmIaoDetail = [
valueNm: 'distRt',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
align: 'right',
inputType: 'number',
min: 0,
max: 100,
required: false,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'CheckBox',
@ -521,9 +562,12 @@ const myEqpmIaoDetail = [
valueNm: 'calcFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
value: { '1': true, '0': false },
required: false,
textCols: 12,
labelCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -541,19 +585,42 @@ const myEqpmIaoDetail = [
required: false,
openMode: 'TAG',
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
eqpmGrpDisableFlag: true,
// eqpmGrpId: '',
textCols: 12,
labelCols: 12,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-2',
disabled: true,
textCols: 12,
labelCols: 12,
},
{
type: 'InputText',
valueNm: 'pysclQtyNm',
disabled: true,
readonly: true,
cols: 5,
class: 'py-2',
cols: 6,
class: 'py-3 pt-0 pr-4',
align: 'right',
// class: 'py-2 d-none',
textCols: 12,
labelCols: 12,
iconShow: true
},
];
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>

View File

@ -4,12 +4,13 @@
<v-col :cols="12">
<v-card class="searchFilter">
<v-row>
<v-col :cols="8">
<v-col :cols="8" style="padding:0px">
<!-- 조회기간 -->
<DatePicker :parentPrgmId="parentPrgmId" label="조회기간" />
</v-col>
<v-col cols="4" class="d-flex justify-end align-center">
<Buttons
style="margin-top: 25px;"
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
@ -22,8 +23,10 @@
<v-row class="search-box" align="center" no-gutters style="height: 44px;">
<v-col :cols="4">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
<v-icon
small
:class="['mr-1','icon-blue']"
>$icoBulletPoint</v-icon
>
월별 요금 정보
</label>
@ -51,8 +54,13 @@
<v-row class="search-box" align="center" no-gutters style="height: 44px;">
<v-col :cols="4">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
<!-- <v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
> -->
<v-icon
small
:class="['mr-1','icon-blue']"
>$icoBulletPoint</v-icon
>
월별 요금 정보
</label>
@ -189,7 +197,7 @@ export default {
bodyHeight: gridHeight,
minBodyHeight: gridHeight,
header: {
height: 28,
height: 38,
},
rowHeight: 29,
minRowHeight: 29,
@ -263,6 +271,63 @@ export default {
value: myColumns,
});
const res = [
{
"comId": "COM001",
"ercId": "ERC001",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 120.5,
"peakPow": 450,
"baseChrg": 30000,
"notiChrg": 32500,
"rmrk": "Standard summer rate",
"blocId": "BLOC001",
"regUserNo": "USER001",
"regDttm": "2025-07-01T09:00:00",
"procUserNo": "USER002",
"procDttm": "2025-07-15T14:30:00"
},
{
"comId": "COM002",
"ercId": "ERC002",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 98.75,
"peakPow": 300,
"baseChrg": 25000,
"notiChrg": 27000,
"rmrk": "Reduced rate for solar",
"blocId": "BLOC002",
"regUserNo": "USER003",
"regDttm": "2025-07-02T10:15:00",
"procUserNo": "USER004",
"procDttm": "2025-07-16T11:45:00"
},
{
"comId": "COM003",
"ercId": "ERC003",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 110.0,
"peakPow": 400,
"baseChrg": 28000,
"notiChrg": 29500,
"rmrk": "Geothermal adjustment",
"blocId": "BLOC003",
"regUserNo": "USER005",
"regDttm": "2025-07-03T08:45:00",
"procUserNo": "USER006",
"procDttm": "2025-07-17T13:20:00"
}
]
this.setGridData({
gridKey: this.gridName,
value: res,
});
this.loadGrid = true;
},
async btnActions(action) {

View File

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

View File

@ -1,25 +1,25 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
class="d-flex justify-space-between"
>
<span class="txt">검침개소 추가 정보</span>
<v-card-title class="px-0 pt-0 custom-title-4">검침개소 추가 정보</v-card-title>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
</div>
<div ref="gridParent" style="height: calc(100vh - 520px);">
<div ref="gridParent">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
:editorGrid="true"
:innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData"
:dataPath="addInfoTabData"
/>
</div>
</div>
@ -53,10 +53,65 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowDetailGrid',
rowKey: null,
edtingFinishFlag: 'Y',
addInfoTabData: {
"rowDetailGrid": {
data: [
{
readPlcNm: '서울 본사',
plcKind: '전기',
useFg: '1',
},
],
column: [
// { header: '회사 ID', name: 'comId', hidden: true },
{
header: '검침개소명',
name: 'readPlcNm',
align: 'left',
minWidth: 400,
},
{
header: '개소 종류',
name: 'plcKind',
minWidth: 100,
align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.plcKindList.filter(
// item => item.commCd == value,
// );
// if (newValue.length > 0) {
// retVal = newValue[0].commCdNm;
// }
// return retVal;
// },
},
{
header: '사용 여부',
name: 'useFg',
minWidth: 100,
align: 'center',
// formatter({ value }) {
// value = value === true ? '1' : '0';
// const newValue = _this.pageData.useFgList.filter(
// item => item.commCd == value,
// );
// return newValue[0].commCdNm;
// },
},
]
}
}
};
},
computed: {
@ -123,88 +178,88 @@ export default {
value: myOptions,
});
const _this = this;
let useFgSelectList = [];
this.pageData.useFgList.forEach(item => {
const it = { text: item.commCdNm, value: item.commCd };
useFgSelectList.push(it);
});
let addInfoList = [];
this.pageData.addInfoList.forEach(item => {
const it = { text: item.addInfoNm, value: item.addInfoId };
addInfoList.push(it);
});
let addInfoDataKindList = [];
this.pageData.addInfoDataKindList.forEach(item => {
const it = { text: item.commCdNm, value: item.commCd };
addInfoDataKindList.push(it);
});
// const _this = this;
// let useFgSelectList = [];
// this.pageData.useFgList.forEach(item => {
// const it = { text: item.commCdNm, value: item.commCd };
// useFgSelectList.push(it);
// });
// let addInfoList = [];
// this.pageData.addInfoList.forEach(item => {
// const it = { text: item.addInfoNm, value: item.addInfoId };
// addInfoList.push(it);
// });
// let addInfoDataKindList = [];
// this.pageData.addInfoDataKindList.forEach(item => {
// const it = { text: item.commCdNm, value: item.commCd };
// addInfoDataKindList.push(it);
// });
const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '검침개소 번호', name: 'readPlcId', hidden: true },
{
header: '추가 정보',
name: 'addInfoId',
align: 'left',
formatter({ value }) {
let retVal = '';
const newValue = addInfoList.filter(item => item.value == value);
if (newValue.length > 0) {
retVal = newValue[0].text;
}
return retVal;
},
},
{
header: 'Data 구분',
name: 'addInfoDataKind',
align: 'center',
formatter({ value }) {
let retVal = '';
const newValue = addInfoDataKindList.filter(
item => item.value == value,
);
if (newValue.length > 0) {
retVal = newValue[0].text;
}
return retVal;
},
// editor: {
// type: "select",
// options: {
// listItems: addInfoDataKindList
// }
// }
},
{
header: '숫자 값',
name: 'addInfoNumVal',
align: 'right',
editor: 'text',
hidden: true,
},
{
header: '문자 값',
name: 'addInfoTxtVal',
align: 'left',
editor: 'text',
hidden: true,
},
{
header: '추가 정보 값',
name: 'addInfoVal',
align: 'center',
renderer: {
type: NewCustomRenderer,
},
editor: {
type: NewCustomEditor,
},
formatter(data) {
return data.row.addInfoDataKind;
},
},
// const myColumns = [
// { header: '회사 ID', name: 'comId', hidden: true },
// { header: '검침개소 번호', name: 'readPlcId', hidden: true },
// {
// header: '추가 정보',
// name: 'addInfoId',
// align: 'left',
// formatter({ value }) {
// let retVal = '';
// const newValue = addInfoList.filter(item => item.value == value);
// if (newValue.length > 0) {
// retVal = newValue[0].text;
// }
// return retVal;
// },
// },
// {
// header: 'Data 구분',
// name: 'addInfoDataKind',
// align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = addInfoDataKindList.filter(
// item => item.value == value,
// );
// if (newValue.length > 0) {
// retVal = newValue[0].text;
// }
// return retVal;
// },
// // editor: {
// // type: "select",
// // options: {
// // listItems: addInfoDataKindList
// // }
// // }
// },
// {
// header: '숫자 값',
// name: 'addInfoNumVal',
// align: 'right',
// editor: 'text',
// hidden: true,
// },
// {
// header: '문자 값',
// name: 'addInfoTxtVal',
// align: 'left',
// editor: 'text',
// hidden: true,
// },
// {
// header: '추가 정보 값',
// name: 'addInfoVal',
// align: 'center',
// renderer: {
// type: NewCustomRenderer,
// },
// editor: {
// type: NewCustomEditor,
// },
// formatter(data) {
// return data.row.addInfoDataKind;
// },
// },
//{ header: "추가 정보 값", name: "addInfoVal", align: "center" , editor: "text",
// formatter({ value, row , column}) {
// console.log("addInfoVal row : ", row);
@ -235,16 +290,16 @@ export default {
}
}
},*/
{ header: '등록 사용자', name: 'regUserNo', hidden: true },
{ header: '등록 일자', name: 'regDttm', hidden: true },
{ header: '수정 사용자', name: 'procUserNo', hidden: true },
{ header: '수정 일자', name: 'procDttm', hidden: true },
];
// { header: '등록 사용자', name: 'regUserNo', hidden: true },
// { header: '등록 일자', name: 'regDttm', hidden: true },
// { header: '수정 사용자', name: 'procUserNo', hidden: true },
// { header: '수정 일자', name: 'procDttm', hidden: true },
// ];
this.setGridColumn({
gridKey: this.gridName,
value: myColumns,
});
// this.setGridColumn({
// gridKey: this.gridName,
// value: myColumns,
// });
this.loadGrid = true;
},

View File

@ -1,36 +1,18 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">가상 검침 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailReadPlcImgList"
:btnActionsFnc="btnActions"
/>
<div class="d-flex justify-space-between">
<v-card-title class="px-0 pt-0 custom-title-4">가상 검침 정보</v-card-title>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailReadPlcImgList"
:btnActionsFnc="btnActions" />
</div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :dataPath="imgInfoTabData" />
</div>
<div ref="formParent" style="height: calc((100vh - 520px) /2);">
<component
:is="'Form'"
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailReadPlcImgList"
@gridEditingFinish="gridEditingFinish"
/>
<div ref="formParent">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
:detailList="detailReadPlcImgList" @gridEditingFinish="gridEditingFinish" />
</div>
</div>
</template>
@ -62,9 +44,26 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowReadPlcImgGrid',
detailReadPlcImgList: myReadPlcImgDetail,
imgInfoTabData: {
"rowReadPlcImgGrid": {
data:
[
{ "objReadPlcId": "1001", "objReadPlcNm": "서울역", "distRt": 12 },
{ "objReadPlcId": "1002", "objReadPlcNm": "강남역", "distRt": 8 },
{ "objReadPlcId": "1003", "objReadPlcNm": "잠실역", "distRt": 15 },
]
,
column: [
{ header: '대상 검침개소 번호', name: 'objReadPlcId', align: 'center' },
{ header: '대상 검침개소명', name: 'objReadPlcNm', align: 'left' },
{ header: '분배율(1~100)', name: 'distRt', align: 'right' },
]
}
}
};
},
computed: {
@ -223,7 +222,7 @@ export default {
gridEditingFinish(data, bindingData) {
this.$refs[this.gridName].editingFinish(data);
},
search() {},
search() { },
},
};
@ -235,15 +234,11 @@ const myReadPlcImgDetail = [
valueNm: 'objReadPlcId',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pr-4 pb-2',
required: true,
},
{
type: 'InputText',
valueNm: 'objReadPlcNm',
readonly: true,
cols: 5,
class: 'py-2',
iconShow:true
},
{
type: 'InputNumber',
@ -251,11 +246,25 @@ const myReadPlcImgDetail = [
valueNm: 'distRt',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
labelCols: 12,
textCols: 12,
inputType: 'number',
min: 1,
max: 100,
required: true,
iconShow:true
},
{
type: 'InputText',
valueNm: 'objReadPlcNm',
readonly: true,
cols: 6,
textCols: 12,
class: 'pt-1 py-3 pr-4',
},
{
showValue: false
},
{
type: 'SelectBox',
@ -263,11 +272,14 @@ const myReadPlcImgDetail = [
valueNm: 'ddctKind',
disabled: false,
cols: 6,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3 pr-4',
list: 'ddctKindList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
iconShow: true
},
];
</script>

View File

@ -1,35 +1,17 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">검침개소 TAG 연결 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailReadPlcTagList"
:btnActionsFnc="btnActions"
/>
<div class="d-flex justify-space-between" >
<v-card-title class="px-0 pt-0 custom-title-4">검침개소 TAG 연결 정보</v-card-title>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailReadPlcTagList"
:btnActionsFnc="btnActions" />
</div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :dataPath="tagRelTabData" />
</div>
<div ref="formParent" style="height: calc((100vh - 520px) /2);">
<component
:is="'Form'"
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailReadPlcTagList"
@gridEditingFinish="gridEditingFinish"
/>
<div ref="formParent" >
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
:detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" />
</div>
</div>
</template>
@ -64,6 +46,78 @@ export default {
loadGrid: false,
gridName: 'rowReadPlcTagRelGrid',
detailReadPlcTagList: myReadPlcTagDetail,
tagRelTabData: {
"rowReadPlcTagRelGrid": {
data:
[
{
"tagNm": "TAG_001",
"ercId": "전기",
"distRt": 10,
"reprTagFg": "1",
"useFg": "Y",
"rmrk": "기본 설정",
"tagId": "TAG_001"
},
{
"tagNm": "TAG_002",
"ercId": "가스",
"distRt": 15,
"reprTagFg": "0",
"useFg": "Y",
"rmrk": "",
"tagId": "TAG_002"
},
{
"tagNm": "TAG_003",
"ercId": "수도",
"distRt": 8,
"reprTagFg": "0",
"useFg": "N",
"rmrk": "테스트용",
"tagId": "TAG_003"
},
]
,
column: [
{ header: 'TAG 명', name: 'tagNm', align: 'left' },
{
header: '에너지원',
name: 'ercId',
align: 'center',
width: 100,
},
{
header: '분배율(1~100)',
name: 'distRt',
align: 'right',
width: 100,
},
{
header: '대표 TAG 여부',
name: 'reprTagFg',
align: 'center',
width: 100,
formatter({ value }) {
return value == '1' ? '예' : '아니오';
},
},
{
header: '사용여부',
name: 'useFg',
align: 'center',
width: 100,
},
{ header: '비고', name: 'rmrk', align: 'left', width: 100 },
{ header: 'TAG ID', name: 'tagId', align: 'center', hidden: true },
]
}
}
};
},
computed: {
@ -328,7 +382,7 @@ export default {
gridEditingFinish(data, bindingData) {
this.$refs[this.gridName].editingFinish(data);
},
search() {},
search() { },
},
};
@ -341,60 +395,81 @@ const myReadPlcTagDetail = [
valueNm2: 'tagNm',
disabled: true,
cols: 6,
class: 'py-2',
required: true,
},
{
type: 'InputText',
valueNm: 'tagNm',
readonly: true,
cols: 5,
class: 'py-2',
class: 'pr-4 pb-2 py-3',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
label: '에너지원',
valueNm: 'ercId',
disabled: false,
cols: 6,
class: 'py-2',
class: 'pl-4 py-3',
list: 'ercNmList',
itemText: 'text',
itemValue: 'value',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'CheckBox',
label: '대표 TAG 여부',
valueNm: 'reprTagFg',
disabled: false,
type: 'InputText',
valueNm: 'tagNm',
readonly: true,
cols: 6,
class: 'py-2',
value: { '1': true, '0': false },
textCols: 12,
class: 'pt-1 py-3 pr-4',
required: true,
},
{
showValue: false,
},
{
type: 'InputNumber',
label: '분배율(1~100)',
valueNm: 'distRt',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
inputType: 'number',
min: 1,
max: 100,
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'CheckBox',
label: '대표 TAG 여부',
valueNm: 'reprTagFg',
disabled: false,
cols: 6,
class: 'py-3 pl-4',
value: { '1': true, '0': false },
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'CheckBox',
label: '사용여부',
valueNm: 'useFg',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pr-4',
value: { '1': true, '0': false },
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
@ -402,8 +477,11 @@ const myReadPlcTagDetail = [
valueNm: 'rmrk',
disabled: false,
cols: 6,
class: 'py-2',
class: 'py-3 pl-4',
inputType: 'string',
labelCols: 12,
textCols: 12,
iconShow: true
},
];
</script>

View File

@ -1,28 +1,32 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt">TAG 추가 정보</span>
<v-card class="pb-5">
<v-card-title class="d-flex justify-space-between align-end">
<span class="tit ft-size_20 ft-weight_600">TAG 추가 정보</span>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:btnActionsFnc="btnActions"
/>
</div>
<div ref="gridParent" style="height: calc(100vh - 520px);">
<Grid
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
:editorGrid="true"
:innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData"
/>
</div>
</div>
</v-card-title>
<v-card-actions>
<div
ref="gridParent"
class="w100"
style="height: calc(100vh - 520px);"
>
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
:editorGrid="true"
:innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</v-card-actions>
</v-card>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
@ -47,10 +51,22 @@ export default {
},
data() {
return {
loadGrid: false,
loadGrid: true,
gridName: 'rowDetailGrid',
rowKey: null,
edtingFinishFlag: 'Y',
dataPathMock: {
"rowDetailGrid": {
column: [
{header: '추가 정보',name: 'addInfoId'},
{header: 'Data 구분',name: 'addInfoDataKind',align: 'center'},
{header: '추가 정보 값',name: 'addInfoVal',align: 'center', renderer: {type: NewCustomRenderer},editor: {type: NewCustomEditor},formatter(data) {return data.row.addInfoDataKind;},}
],
data: dataPathDataExample,
option: {
}
}
},
};
},
computed: {
@ -102,10 +118,10 @@ export default {
bodyHeight: gridHeight,
minBodyHeight: gridHeight,
header: {
height: 28,
height: 38,
},
rowHeight: 29,
minRowHeight: 29,
rowHeight: 22,
minRowHeight: 22,
selectionUnit: 'row',
editingEvent: 'click',
};
@ -428,4 +444,37 @@ export default {
search() {},
},
};
const dataPathDataExample =
[
{
addInfoId:"경보 여부",
addInfoDataKind:"FG",
addInfoVal:"1"
},
{
addInfoId:"예상 피크전력 여부",
addInfoDataKind:"FG",
addInfoVal:"0"
},
{
addInfoId:"피크전력 여부",
addInfoDataKind:"FG",
addInfoVal:"1"
},
{
addInfoId:"TAG 채널",
addInfoDataKind:"숫자",
addInfoVal:"채널"
},
{
addInfoId:"PLC IP",
addInfoDataKind:"문자",
addInfoVal:"채널"
},
{
addInfoId:"PLC 포트",
addInfoDataKind:"숫자",
addInfoVal:"채널"
},
]
</script>