Merge pull request 'dev-manhph1-fixbug-18-19-21-28' (#18) from dev-manhph1-fixbug-18-19-21-28 into dev

Reviewed-on: #18
This commit is contained in:
dev
2025-07-30 11:24:55 +09:00
9 changed files with 108 additions and 109 deletions

View File

@ -1,5 +1,5 @@
.v-select__custom { .v-select__custom {
padding: 0.125rem; padding: 0;
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot { &.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none; box-shadow: none;
@ -78,6 +78,16 @@
border-color: #d9d9d9; border-color: #d9d9d9;
} }
&.select-large {
.v-input__slot,
.v-input__control {
height: 40px !important;
// border: solid 1px #D9D9D9;
border-radius: 8px !important;
}
}
&.surface-name { &.surface-name {
fieldset { fieldset {
max-width: 345px; max-width: 345px;

View File

@ -2,7 +2,9 @@
<v-row class="search-box" align="center" no-gutters> <v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols"> <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> <v-icon small color="primary"
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon>
{{ label }} {{ label }}
</label> </label>
</v-col> </v-col>
@ -17,14 +19,16 @@
readonly readonly
outlined outlined
> >
<template #append> <template #append >
<v-icon size="20">$icoCalendar</v-icon> <v-icon size="20" v-show="!isRange">$icoCalendar</v-icon>
</template> </template>
<template #append-outer> <template #append-outer>
<div ref="startpicker-container" id="startpicker-container"></div> <div ref="startpicker-container" id="startpicker-container"></div>
</template> </template>
</v-text-field> </v-text-field>
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div> <div v-if="isRange" class="mx-3" :style="{ lineHeight: 0 }">
<img :src="arrowIcon" alt="">
</div>
<v-text-field <v-text-field
v-show="isRange" v-show="isRange"
id="endpicker" id="endpicker"
@ -129,6 +133,12 @@ export default {
this.defaultRange === 'no limite' this.defaultRange === 'no limite'
); );
}, },
arrowIcon() {
if(this.isDarkMode){
return require('@/assets/images/arrow_datepicker_dm.png');
}
return require('@/assets/images/arrow_datepicker.png');
}
}, },
watch: { watch: {
myCmCycle() { myCmCycle() {

View File

@ -1,5 +1,5 @@
<template> <template>
<v-row class="search-box" align="center"> <v-row class="search-box no-gutters" align="center">
<v-col :cols="option.labelCols" class="py-0"> <v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon v-if="item.iconShow" small <v-icon v-if="item.iconShow" small
@ -8,13 +8,11 @@
</label> </label>
</v-col> </v-col>
<v-col :cols="option.textCols" class="py-0"> <v-col :cols="option.textCols" class="py-0">
<v-text-field readonly append-icon="" class="v-input__custom" outlined :hide-details="true" <v-text-field readonly append-icon="" :class="['v-select__custom', customClass]" outlined :hide-details="true"
v-model="searchWord" @keyup.enter="typeEnterKey" @click="dialogOpenCloseEvent(dialog)" v-model="selectValue" @keyup.enter="typeEnterKey" @click="dialogOpenCloseEvent(dialog)"
:required="item.required || false"><template v-slot:append> :required="item.required || false"><template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon> <v-icon>$icoSearch</v-icon>
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
@ -43,8 +41,6 @@
class="search-button">조회</a-button> class="search-button">조회</a-button>
</v-row> </v-row>
</v-col> </v-col>
</v-row> </v-row>
<!-- <div :style="'height: calc(65vh)'"> --> <!-- <div :style="'height: calc(65vh)'"> -->
<div :style="'height: 600px'" class="px-5"> <div :style="'height: 600px'" class="px-5">

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="d-flex justify-space-between align-end"> <v-card-title class="d-flex justify-space-between align-end">
<span class="tit ft-size_20 ft-weight_600">TAG 추가 정보</span> <span style="color:#000000A6" class="tit custom-title-4-new">TAG 추가 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<PageTitle/> <CommonPageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<PageTitle /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -480,18 +480,17 @@ const myDetail = [
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
}, },
{ {
type: 'CheckBox', type: 'CheckBox',
label: '사용 여부', label: '사용 여부',
valueNm: 'useFg', valueNm: 'useFg',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2 pr-4 pt-5', class: 'py-2 pr-4 pt-4',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: true, required: true,
iconShow: true, iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'SelectBox', type: 'SelectBox',

View File

@ -1,63 +1,26 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<PageTitle text="측정 위치 데이터 조회" /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="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">
<component
label="검침개소"
:is="'PastRsltDataReadPop'"
:parentPrgmId="myPrgmId"
/>
</v-col> -->
<!-- <v-col :cols="2">
<component
:is="'SelectTagNmList'"
ref="SelectTagNmList"
:parentPrgmId="myPrgmId"
/>
</v-col> -->
<v-col :cols="3"> <v-col :cols="3">
<!-- <component <component :is="'SelectBlocMstr'" ref="SelectBlocMstr" :parentPrgmId="myPrgmId"
:is="'PastRsltDataReadTagPop'" :textCols="12" customClass="select-large" />
:parentPrgmId="myPrgmId"
:label="'TAG'"
/> -->
<component
:is="'EvtObjPop'"
:parentPrgmId="myPrgmId"
:item="evtObjPopItem"
customClass="select-large"
/>
</v-col> </v-col>
<v-col :cols="4"> <v-col :cols="3">
<component <component :is="'EvtObjPop'" :parentPrgmId="myPrgmId" :item="evtObjPopItem"
:is="'Datepicker'" customClass="select-large" />
:parentPrgmId="myPrgmId" </v-col>
:label="'조회기간'" <v-col :cols="3">
:textCols="12" <!-- 대상일 -->
/> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'조회기간'" :textCols="12" />
</v-col> </v-col>
<v-col :cols="3" class="d-flex align-end justify-end text-right"> <v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnExcelDownload <BtnExcelDownload class="mr-1" :parentPrgmId="myPrgmId" :gridName="gridName" type="primary"
class="mr-1" size="large" />
:parentPrgmId="myPrgmId"
:gridName="gridName"
type="primary"
size="large"
/>
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -68,12 +31,12 @@
<v-col :cols="12" style="height: 100%" class="h100"> <v-col :cols="12" style="height: 100%" class="h100">
<v-card class="px-5 py-5 h100"> <v-card class="px-5 py-5 h100">
<div ref="gridParent" class="h100 px-5" style="height: 100%"> <div ref="gridParent" class="h100 px-5" style="height: 100%">
<component <component ref="myGrid" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
ref="myGrid" :parentPrgmId="myPrgmId" />
:is="loadGrid ? 'Grid' : null" </div>
:gridName="gridName" <div class="d-flex align-center justify-space-between">
:parentPrgmId="myPrgmId" <pagination id="pagination" :total-count="totalCount" :page-num="page" :limit="limit"
/> @loadData="changeGrid" />
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
@ -97,7 +60,7 @@ import BtnExcelDownload from '~/components/common/button/BtnExcelDownload';
import DateUtility from '~/plugins/dateUtility'; import DateUtility from '~/plugins/dateUtility';
// import Search from "~/components/common/search"; // import Search from "~/components/common/search";
import EvtObjPop from '~/components/common/modal/EvtObjPop'; import EvtObjPop from '~/components/common/modal/EvtObjPop';
import PageTitle from "~/components/common/PageTitle"; import pagination from '~/components/Pagination';
let myTitle; let myTitle;
// const myPrgmId = "PRG0052"; // const myPrgmId = "PRG0052";
@ -130,7 +93,7 @@ export default {
PastRsltDataReadPop, PastRsltDataReadPop,
PastRsltDataReadTagPop, PastRsltDataReadTagPop,
EvtObjPop, EvtObjPop,
PageTitle, pagination,
}, },
data() { data() {
return { return {
@ -146,12 +109,16 @@ export default {
valueNm2: 'tagNm', valueNm2: 'tagNm',
iconShow: true, iconShow: true,
disabled: false, disabled: false,
labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2', class: 'py-2',
required: false, required: false,
formFg: false, formFg: false,
}, },
itemsPerPage: 10,
itemsPerPageArray: [10, 20, 30],
limit: 20,
page: 1,
totalCount: 0,
}; };
}, },
computed: { computed: {
@ -164,9 +131,6 @@ export default {
chkTagId() { chkTagId() {
return this.pageData.tagList === undefined ? null : this.pageData.tagId; return this.pageData.tagList === undefined ? null : this.pageData.tagId;
}, },
// chkTagList() {
// return this.pageData.tagList;
// },
chkTagNm() { chkTagNm() {
return this.pageData.tagData.tagNm; return this.pageData.tagData.tagNm;
}, },
@ -176,18 +140,16 @@ export default {
}, },
watch: { watch: {
chkIsFind(val) { chkIsFind(val) {
if (val) this.search(); if (val) {
this.page = 1;
this.search();
}
}, },
chkTagId(val) { chkTagId(val) {
if (this.initFlag && val != null) { if (this.initFlag && val != null) {
this.search(); this.search();
} }
}, },
// chkTagList() {
// if(this.initFlag){
// this.search();
// }
// },
chkTagNm() { chkTagNm() {
if (this.initFlag) { if (this.initFlag) {
this.search(); this.search();
@ -207,7 +169,7 @@ export default {
defaultData: defaultData, defaultData: defaultData,
}); });
}, },
created() {}, created() { },
async mounted() { async mounted() {
await this.setFromDt(); await this.setFromDt();
await this.init(); await this.init();
@ -330,6 +292,7 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
let res2 = [];
let yearQuarterData = []; let yearQuarterData = [];
yearQuarterData = this.yearQuarterMaker([ yearQuarterData = this.yearQuarterMaker([
this.pageData.fromDt, this.pageData.fromDt,
@ -381,8 +344,18 @@ export default {
apiKey: 'selectTagRawDataByQuarter', apiKey: 'selectTagRawDataByQuarter',
resKey: 'pastRsltReadData', resKey: 'pastRsltReadData',
sendParam: sendParams, sendParam: sendParams,
limit: this.limit,
page: this.page,
offset: (this.page - 1) * this.limit, // MariaDB Query에서 직접 계산이 안됨
}); });
res2 = await this.postApiReturn({
apiKey: 'selectTagRawDataByQuarterPageTotal',
resKey: 'pastRslPageTotal',
sendParam: sendParams
});
this.totalCount = res2[0].totalcount;
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: res, value: res,
@ -393,6 +366,9 @@ export default {
fromDt: this.pageData.fromDt, fromDt: this.pageData.fromDt,
toDt: this.pageData.toDt, toDt: this.pageData.toDt,
yearQuarterList: yearQuarterData['yearQuarterList'], yearQuarterList: yearQuarterData['yearQuarterList'],
limit: this.limit,
page: this.page,
offset: (this.page - 1) * this.limit, // MariaDB Query에서 직접 계산이 안됨
}; };
sendParams['tagId'] = this.pageData.tagId; sendParams['tagId'] = this.pageData.tagId;
// //
@ -410,6 +386,13 @@ export default {
sendParam: sendParams, sendParam: sendParams,
}); });
res2 = await this.postApiReturn({
apiKey: 'selectTagRawDataByQuarterPageTotal',
resKey: 'pastRslPageTotal',
sendParam: sendParams
});
this.totalCount = res2[0].totalcount;
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: res, value: res,
@ -487,6 +470,12 @@ export default {
finalResult['yearQuarterList'] = result; finalResult['yearQuarterList'] = result;
return finalResult; return finalResult;
}, },
changeGrid: async function (pageNum, limit) {
this.page = pageNum;
this.limit = limit;
this.search();
},
}, },
}; };

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<PageTitle/> <CommonPageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -58,7 +58,7 @@
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" /> @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" />
</div> </div>
</v-card-actions> </v-card-actions>
<!-- <div class="d-flex align-center justify-space-between"> <div class="d-flex align-center justify-space-between">
<pagination <pagination
id="pagination" id="pagination"
:total-count="totalCount" :total-count="totalCount"
@ -66,7 +66,7 @@
:limit="limit" :limit="limit"
@loadData="changeGrid" @loadData="changeGrid"
/> />
</div> --> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100">
@ -107,7 +107,6 @@ import TagAddInfoTab from '@/components/pages/ems/TagInfo/TagAddInfoTab';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import pagination from '~/components/Pagination'; import pagination from '~/components/Pagination';
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
// const myPrgmId = "PRG0051"; // const myPrgmId = "PRG0051";
@ -140,13 +139,12 @@ export default {
TagAddInfoTab, TagAddInfoTab,
Grid, Grid,
pagination, pagination,
PageTitle
}, },
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
tab: null, tab: null,
items: [ items: [
{ name: 'TAG 정보', id: 'tagBaseInfoTab', disabledFlag: false }, { name: 'TAG 정보', id: 'tagBaseInfoTab', disabledFlag: false },
@ -275,16 +273,12 @@ export default {
this.gridInit(); this.gridInit();
}, },
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 180; const gridHeight = this.$refs.gridParent.offsetHeight - 16;
const myOptions = { const myOptions = {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
pageOptions: {
useClient: true,
perPage: 10,
},
scrollX: true, scrollX: true,
header: { header: {
height: 38, height: 38,
@ -536,7 +530,7 @@ export default {
columnName: 'tagId', columnName: 'tagId',
setScroll: true, setScroll: true,
}); });
} catch (error) { } } catch (error) {}
// this.$refs[this.gridName].focus({ // this.$refs[this.gridName].focus({
// rowKey: 0, // rowKey: 0,
// columnName: "tagId", // columnName: "tagId",
@ -773,7 +767,7 @@ export default {
gridEditingFinish(data) { gridEditingFinish(data) {
this.$refs[this.gridName].editingFinish(data); this.$refs[this.gridName].editingFinish(data);
}, },
changeGrid: async function (pageNum, limit) { changeGrid: async function(pageNum, limit) {
this.page = pageNum; this.page = pageNum;
this.limit = limit; this.limit = limit;

View File

@ -669,7 +669,8 @@ const INIT_URL_STATE = {
// prgmId : PRG0052 과거 검침 데이터 조회 // prgmId : PRG0052 과거 검침 데이터 조회
selectTagRawDataByQuarter: selectTagRawDataByQuarter:
'ems/base/PastRsltDataReadCtr/selectTagRawDataByQuarter', 'ems/base/PastRsltDataReadCtr/selectTagRawDataByQuarter',
selectTagRawDataByQuarterPageTotal:
'ems/base/PastRsltDataReadCtr/selectTagRawDataByQuarterPageTotal',
// prgmId : PRG4107 개인화 대시보드 // prgmId : PRG4107 개인화 대시보드
selectIndvWidgetList: 'ems/base/DashboardHfemsCtr/selectIndvWidgetList', selectIndvWidgetList: 'ems/base/DashboardHfemsCtr/selectIndvWidgetList',
selectEnergyUseReadHourAddup: selectEnergyUseReadHourAddup: