Compare commits
1 Commits
dev-luannv
...
bac0b25a96
Author | SHA1 | Date | |
---|---|---|---|
bac0b25a96 |
@ -12,7 +12,8 @@
|
|||||||
|
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
// overflow: auto;
|
overflow: auto;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@ -118,7 +119,7 @@ a {
|
|||||||
.v-main,
|
.v-main,
|
||||||
.v-main__wrap,
|
.v-main__wrap,
|
||||||
.container {
|
.container {
|
||||||
// height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.v-main__wrap>.container {
|
.v-main__wrap>.container {
|
||||||
@ -143,9 +144,7 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
& .router-tab__container {
|
& .router-tab__container {
|
||||||
overflow-y: auto;
|
min-height: calc(100% - 72px);
|
||||||
height: calc(100vh - 105px);
|
|
||||||
max-height: calc(100vh - 105px);
|
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,10 +484,6 @@ a {
|
|||||||
|
|
||||||
.container--fluid {
|
.container--fluid {
|
||||||
background-color: map-deep-get($config, #{$theme}, "container-fluid");
|
background-color: map-deep-get($config, #{$theme}, "container-fluid");
|
||||||
.menu-container {
|
|
||||||
max-height:calc(100vh - 60px);
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.v-icon {
|
.v-icon {
|
||||||
@ -534,6 +529,8 @@ a {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.router-tab {
|
.router-tab {
|
||||||
.router-tab__header {
|
.router-tab__header {
|
||||||
background-color: map-deep-get($config, #{$theme}, "router-header");
|
background-color: map-deep-get($config, #{$theme}, "router-header");
|
||||||
|
@ -92,13 +92,11 @@
|
|||||||
background: map-deep-get($config, #{$theme}, "basic-button-background");
|
background: map-deep-get($config, #{$theme}, "basic-button-background");
|
||||||
}
|
}
|
||||||
|
|
||||||
.searchFilter{
|
.search-button {
|
||||||
.search-button {
|
height: 40px;
|
||||||
height: 40px;
|
color: map-deep-get($config, #{$theme}, "search-btn-color");
|
||||||
color: map-deep-get($config, #{$theme}, "search-btn-color");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.v-dialog {
|
.v-dialog {
|
||||||
.ant-btn-icon-only {
|
.ant-btn-icon-only {
|
||||||
color: map-deep-get(
|
color: map-deep-get(
|
||||||
@ -121,9 +119,6 @@
|
|||||||
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
|
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
|
||||||
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
|
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
|
||||||
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
|
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
|
||||||
&.ant-btn-background-ghost{
|
|
||||||
color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.ant-btn-default {
|
&.ant-btn-default {
|
||||||
@ -138,15 +133,6 @@
|
|||||||
background: map-deep-get($config, #{$theme}, "ant-btn-danger-bg") !important;
|
background: map-deep-get($config, #{$theme}, "ant-btn-danger-bg") !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.expand-btn {
|
|
||||||
.v-icon {
|
|
||||||
color: map-deep-get($config, #{$theme}, "basic-button-color");
|
|
||||||
svg {
|
|
||||||
fill: map-deep-get($config, #{$theme}, "basic-button-color");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,13 +159,4 @@
|
|||||||
height: 16px;
|
height: 16px;
|
||||||
background:none;
|
background:none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.ant-btn {
|
|
||||||
&.expand-btn {
|
|
||||||
.v-icon {
|
|
||||||
span {
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -63,12 +63,6 @@
|
|||||||
line-height: 1.25 !important;
|
line-height: 1.25 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.custom-title-7 {
|
|
||||||
font-size: 0.875rem !important;
|
|
||||||
font-weight: 400 !important;
|
|
||||||
line-height: 22px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-title-8 {
|
.custom-title-8 {
|
||||||
font-size: 0.75rem !important;
|
font-size: 0.75rem !important;
|
||||||
font-weight: 700 !important;
|
font-weight: 700 !important;
|
||||||
@ -82,15 +76,15 @@
|
|||||||
|
|
||||||
.custom-text-2 {
|
.custom-text-2 {
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
|
font-family: SpoqaHanSansNeo;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-style: normal;
|
||||||
line-height: 2.17;
|
line-height: 2.17;
|
||||||
// font-weight: normal;
|
letter-spacing: normal;
|
||||||
// font-stretch: normal;
|
text-align: right;
|
||||||
// font-style: normal;
|
color: #fff;
|
||||||
// letter-spacing: normal;
|
|
||||||
// text-align: right;
|
|
||||||
// color: #fff;
|
|
||||||
// font-family: SpoqaHanSansNeo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-color--white-0 {
|
.text-color--white-0 {
|
||||||
@ -119,14 +113,6 @@
|
|||||||
color: map-deep-get($config, #{$theme}, "h1-title");
|
color: map-deep-get($config, #{$theme}, "h1-title");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.custom-subtitle-tab {
|
|
||||||
font-size: 1.25rem !important;
|
|
||||||
font-weight: 600 !important;
|
|
||||||
line-height: 1.25 !important;
|
|
||||||
color: map-deep-get($config, #{$theme}, "subtitle-tab");
|
|
||||||
}
|
|
||||||
|
|
||||||
.v-dialog {
|
.v-dialog {
|
||||||
.custom-title-4 {
|
.custom-title-4 {
|
||||||
font-size: 16px !important;
|
font-size: 16px !important;
|
||||||
|
@ -171,7 +171,6 @@ $config: (
|
|||||||
ant-btn-default-border-outlined:#424242,
|
ant-btn-default-border-outlined:#424242,
|
||||||
btn-header-select-bg: #1F1F1F,
|
btn-header-select-bg: #1F1F1F,
|
||||||
btn-header-select-color:#FFFFFFD9,
|
btn-header-select-color:#FFFFFFD9,
|
||||||
subtitle-tab: #FFFFFFA6,
|
|
||||||
),
|
),
|
||||||
light: (w-g5: $--color-gray_555,
|
light: (w-g5: $--color-gray_555,
|
||||||
g5-w: $--color-white,
|
g5-w: $--color-white,
|
||||||
@ -307,6 +306,5 @@ $config: (
|
|||||||
ant-btn-default-border-outlined:#D9D9D9,
|
ant-btn-default-border-outlined:#D9D9D9,
|
||||||
btn-header-select-color:#1F1F1F,
|
btn-header-select-color:#1F1F1F,
|
||||||
btn-header-select-bg:#FFFFFF,
|
btn-header-select-bg:#FFFFFF,
|
||||||
subtitle-tab: #000000A6,
|
|
||||||
),
|
),
|
||||||
);
|
);
|
@ -351,25 +351,25 @@ export default {
|
|||||||
tmpChrtOp.color = light_Col;
|
tmpChrtOp.color = light_Col;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// console.log('ops11:',tmpChrtOp)
|
console.log('ops11:',tmpChrtOp)
|
||||||
return tmpChrtOp;
|
return tmpChrtOp;
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
// console.log('wd data:',this.widgetData)
|
console.log('wd data:',this.widgetData)
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onClick(event, instance, ECharts) {
|
onClick(event, instance, ECharts) {
|
||||||
// console.log('onClick : ', event);
|
console.log('onClick : ', event);
|
||||||
this.$emit('click', event);
|
this.$emit('click', event);
|
||||||
},
|
},
|
||||||
onDblClick(event, instance, ECharts) {
|
onDblClick(event, instance, ECharts) {
|
||||||
// console.log('onDblClick : ', event);
|
console.log('onDblClick : ', event);
|
||||||
this.$emit('dblclick', event);
|
this.$emit('dblclick', event);
|
||||||
},
|
},
|
||||||
onRightClick(event, instance, ECharts) {
|
onRightClick(event, instance, ECharts) {
|
||||||
// console.log('onRightClick : ', event);
|
console.log('onRightClick : ', event);
|
||||||
this.$emit('rclick', event);
|
this.$emit('rclick', event);
|
||||||
},
|
},
|
||||||
onLegendSelect(params) {
|
onLegendSelect(params) {
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<img :src="arrowIcon" alt="">
|
<img :src="arrowIcon" alt="">
|
||||||
</div>
|
</div>
|
||||||
<v-text-field
|
<v-text-field
|
||||||
v-show="isRange"
|
v-if="isRange"
|
||||||
id="endpicker"
|
id="endpicker"
|
||||||
ref="endpicker"
|
ref="endpicker"
|
||||||
v-model="toDtValue"
|
v-model="toDtValue"
|
||||||
@ -47,6 +47,9 @@
|
|||||||
</template>
|
</template>
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- test -->
|
||||||
|
<!-- <a-button @click="onOpenDatepicker()">Open</a-button> -->
|
||||||
|
<!-- end test -->
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
|
@ -163,7 +163,7 @@ export default {
|
|||||||
},
|
},
|
||||||
created() {},
|
created() {},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
// console.log('--------------DEBUG----gridData: ', this.gridData);
|
console.log('--------------DEBUG----gridData: ', this.gridData);
|
||||||
if (this.gridName) {
|
if (this.gridName) {
|
||||||
this.gridInstance = this.$refs['tuigrid' + this.gridName];
|
this.gridInstance = this.$refs['tuigrid' + this.gridName];
|
||||||
|
|
||||||
@ -666,8 +666,6 @@ export default {
|
|||||||
store.dimension.offsetLeft = offsetLeft;
|
store.dimension.offsetLeft = offsetLeft;
|
||||||
},
|
},
|
||||||
setHeight(_a,height){
|
setHeight(_a,height){
|
||||||
return; // setting auto height
|
|
||||||
|
|
||||||
// console.log("setHeight");
|
// console.log("setHeight");
|
||||||
var dimension = _a.dimension;
|
var dimension = _a.dimension;
|
||||||
var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth;
|
var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth;
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
<!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
|
<!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
|
||||||
<v-icon>mdi-chevron-right</v-icon>
|
<v-icon>mdi-chevron-right</v-icon>
|
||||||
</v-btn> -->
|
</v-btn> -->
|
||||||
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost icon="right" >
|
<a-button type="default" @click="btnActionsFnc('addLeftToRight')">
|
||||||
|
<RightOutlines/>
|
||||||
</a-button>
|
</a-button>
|
||||||
|
|
||||||
<!--<v-btn
|
<!--<v-btn
|
||||||
@ -15,7 +16,8 @@
|
|||||||
>
|
>
|
||||||
<v-icon>mdi-chevron-left</v-icon>
|
<v-icon>mdi-chevron-left</v-icon>
|
||||||
</v-btn> -->
|
</v-btn> -->
|
||||||
<a-button class="mt-2" @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost icon="left">
|
<a-button class="mt-2" type="default" @click="btnActionsFnc('removeRightToLeft')">
|
||||||
|
<LeftOutlines/>
|
||||||
</a-button>
|
</a-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -45,7 +45,7 @@ export default {
|
|||||||
size: {
|
size: {
|
||||||
type: String,
|
type: String,
|
||||||
require: false,
|
require: false,
|
||||||
default: "default", // small, middle, large
|
default: "middle", // small, middle, large
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -318,7 +318,7 @@ export default {
|
|||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
mounted(){
|
mounted(){
|
||||||
// this.initTest(); return;
|
this.initTest(); return;
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations({
|
...mapMutations({
|
||||||
@ -478,6 +478,10 @@ export default {
|
|||||||
// })
|
// })
|
||||||
},
|
},
|
||||||
async setChart(){
|
async setChart(){
|
||||||
|
// test
|
||||||
|
this.initTestChart(); return;
|
||||||
|
// end test
|
||||||
|
|
||||||
this.loadChart = false;
|
this.loadChart = false;
|
||||||
let xAxisData = [];
|
let xAxisData = [];
|
||||||
let seriesData = [];
|
let seriesData = [];
|
||||||
|
@ -7,15 +7,12 @@
|
|||||||
{{ option.labelContent }}
|
{{ option.labelContent }}
|
||||||
</label>
|
</label>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="option.textCols" class="py-0">
|
<v-col :cols="option.textCols">
|
||||||
<v-text-field readonly append-icon="" class="v-input__custom" outlined :hide-details="true"
|
<v-text-field readonly v-model="selectValue" append-icon="mdi-magnify"
|
||||||
v-model="searchWord" @keyup.enter="typeEnterKey" @click="dialogOpenCloseEvent(dialog)"
|
:class="['v-select__custom', customClass]"
|
||||||
:required="item.required || false"><template v-slot:append>
|
@click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true"
|
||||||
<!-- Custom SVG icon -->
|
:required="item.required || false"></v-text-field>
|
||||||
<v-icon>$icoSearch</v-icon>
|
<!-- :disabled="item.disabled || false" -->
|
||||||
|
|
||||||
|
|
||||||
</template></v-text-field>
|
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-dialog v-model="dialog" scrollable width="1000px">
|
<v-dialog v-model="dialog" scrollable width="1000px">
|
||||||
@ -24,10 +21,10 @@
|
|||||||
<span class="custom-title-4">{{ option.modalTitle }}</span>
|
<span class="custom-title-4">{{ option.modalTitle }}</span>
|
||||||
<v-icon @click="dialogOpenCloseEvent(dialog)">mdi-close</v-icon>
|
<v-icon @click="dialogOpenCloseEvent(dialog)">mdi-close</v-icon>
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<v-row align="end" class="px-5 pb-3" no-gutters>
|
<v-row align="end" class="pa-5" no-gutters>
|
||||||
<v-col :cols="2.5" class="mr-2">
|
<v-col :cols="2.5" class="mr-2">
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col :cols="12" class="py-0">
|
<v-col :cols="2">
|
||||||
<label for="" class="search-box-label">
|
<label for="" class="search-box-label">
|
||||||
<!-- <v-icon small
|
<!-- <v-icon small
|
||||||
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
|
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
|
||||||
@ -35,30 +32,28 @@
|
|||||||
검색
|
검색
|
||||||
</label>
|
</label>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="11" class="py-0 pr-3">
|
<v-col :cols="12">
|
||||||
<v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined
|
<v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined :hide-details="true"
|
||||||
:hide-details="true" v-model="searchWord" @keyup.enter="search"></v-text-field>
|
v-model="searchWord" @keyup.enter="search"></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<a-button icon="search" :ripple="false" type="primary" @click="search()"
|
|
||||||
class="search-button">조회</a-button>
|
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-col>
|
</v-col>
|
||||||
|
<a-button type="primary" :ripple="false" @click="search()">
|
||||||
|
조회
|
||||||
|
</a-button>
|
||||||
</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'">
|
||||||
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
|
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
|
||||||
<div ref="modalGridParent" class="h100 py-3">
|
<div ref="modalGridParent" class="h100 py-3">
|
||||||
<!-- :is="loadGrid && dialog ? 'Grid' : null" -->
|
<!-- :is="loadGrid && dialog ? 'Grid' : null" -->
|
||||||
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
|
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
|
||||||
:dataPath="searchParam.modalData2.evtObjPop" :parentPrgmId="parentPrgmId"
|
:dataPath="searchParam.modalData2.evtObjPop" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
|
||||||
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
|
@dblClick="setUpdate($event)" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<v-card-actions class="pa-5 d-flex align-center justify-end">
|
<v-card-actions class="pa-5 d-flex align-center justify-end">
|
||||||
<a-button type="default" class="mr-2" :ripple="false"
|
<a-button type="default" class="mr-2" :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</a-button>
|
||||||
@click="dialogOpenCloseEvent(dialog)">닫기</a-button>
|
|
||||||
<a-button type="primary" class="mr-2" :ripple="false" @click="setUpdate('init')">초기화</a-button>
|
<a-button type="primary" class="mr-2" :ripple="false" @click="setUpdate('init')">초기화</a-button>
|
||||||
<a-button type="primary" :ripple="false" @click="setUpdate($event)">확인</a-button>
|
<a-button type="primary" :ripple="false" @click="setUpdate($event)">확인</a-button>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-row class="search-box" align="center">
|
<v-row class="search-box" align="center" >
|
||||||
<!-- <v-col v-if="label" cols="2"> -->
|
<!-- <v-col v-if="label" cols="2"> -->
|
||||||
<v-col v-if="item.label" :cols="item.labelCols" class="py-0">
|
<v-col v-if="item.label" :cols="item.labelCols" class="py-0">
|
||||||
<label for="" class="search-box-label">
|
<label for="" class="search-box-label">
|
||||||
@ -37,11 +37,12 @@
|
|||||||
<v-row align="center">
|
<v-row align="center">
|
||||||
<v-col v-if="label" cols="12" class="py-0">
|
<v-col v-if="label" cols="12" class="py-0">
|
||||||
<label for="" class="search-box-label">
|
<label for="" class="search-box-label">
|
||||||
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
|
<v-icon small
|
||||||
|
:class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</label>
|
</label>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="label ? 8 : ''" class="py-0">
|
<v-col :cols="label ? 6 : ''" class="py-0">
|
||||||
<!-- :value="textfield" -->
|
<!-- :value="textfield" -->
|
||||||
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true"
|
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true"
|
||||||
v-model="searchWord" @keyup.enter="typeEnterKey"><template v-slot:append>
|
v-model="searchWord" @keyup.enter="typeEnterKey"><template v-slot:append>
|
||||||
@ -51,10 +52,13 @@
|
|||||||
|
|
||||||
</template></v-text-field>
|
</template></v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<!-- <v-spacer></v-spacer> -->
|
<v-spacer></v-spacer>
|
||||||
<v-col cols="2" class="text-right">
|
<v-col cols="3" class="text-right">
|
||||||
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
|
<v-btn :ripple="false" icon tile @click="btnTreeExpand()">
|
||||||
|
<!-- {{ treeExpand }} -->
|
||||||
|
<v-icon size="30"
|
||||||
|
v-text="treeExpandAll ? 'mdi-chevron-up' : 'mdi-chevron-down'"></v-icon>
|
||||||
|
</v-btn>
|
||||||
<!-- <v-btn color="primary" dark>펼치기</v-btn> -->
|
<!-- <v-btn color="primary" dark>펼치기</v-btn> -->
|
||||||
<!-- <v-btn color="primary" dark>접기</v-btn> -->
|
<!-- <v-btn color="primary" dark>접기</v-btn> -->
|
||||||
<!-- <v-btn :ripple="false">초기화</v-btn> -->
|
<!-- <v-btn :ripple="false">초기화</v-btn> -->
|
||||||
@ -62,10 +66,6 @@
|
|||||||
<v-btn v-if="!searchParam.isMulti" :ripple="false" @click="search()">검색</v-btn> -->
|
<v-btn v-if="!searchParam.isMulti" :ripple="false" @click="search()">검색</v-btn> -->
|
||||||
<!-- as-is 롤 봐도 초기화가 하는 기능을 모르겠음.. -->
|
<!-- as-is 롤 봐도 초기화가 하는 기능을 모르겠음.. -->
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="2" class="text-right"><a-button class="expand-btn" :ripple="false" @click="btnTreeExpand()">
|
|
||||||
<v-icon small>$icoExpandAlt</v-icon>
|
|
||||||
Expand All
|
|
||||||
</a-button></v-col>
|
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<!-- <v-btn color="primary" dark @click="btnTreeExpand()">{{
|
<!-- <v-btn color="primary" dark @click="btnTreeExpand()">{{
|
||||||
@ -78,7 +78,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<div ref="treeGridParent" style="height: 450px">
|
<div ref="treeGridParent" style="height: 500px">
|
||||||
<component :ref="'treeGrid' + parentPrgmId" :is="loadGrid && dialog ? 'Grid' : null"
|
<component :ref="'treeGrid' + parentPrgmId" :is="loadGrid && dialog ? 'Grid' : null"
|
||||||
:gridName="gridNameTree" :dataPath="searchParam.modalData.selectReadObjListTree"
|
:gridName="gridNameTree" :dataPath="searchParam.modalData.selectReadObjListTree"
|
||||||
:parentPrgmId="parentPrgmId" :bindingData="bindingData" @getRowsData="getRowData"
|
:parentPrgmId="parentPrgmId" :bindingData="bindingData" @getRowsData="getRowData"
|
||||||
@ -89,10 +89,10 @@
|
|||||||
:tree-data="ftnPlcListTreeData"
|
:tree-data="ftnPlcListTreeData"
|
||||||
/> -->
|
/> -->
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
<v-divider></v-divider>
|
||||||
<v-card-actions class="px-6 py-4 d-flex align-center justify-end">
|
<v-card-actions class="px-6 py-4 d-flex align-center justify-end">
|
||||||
<a-button :ripple="false" @click="dialog = false" class="mr-2">닫기</a-button>
|
<a-button :ripple="false" @click="setUpdate()" class="mr-2">확인</a-button>
|
||||||
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
|
<a-button :ripple="false" type="primary" @click="dialog = false" class="mr-2">닫기</a-button>
|
||||||
</v-card-actions>
|
</v-card-actions>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-dialog>
|
</v-dialog>
|
||||||
@ -155,7 +155,7 @@ export default {
|
|||||||
|
|
||||||
myModalKey: 'selectReadObjListTree',
|
myModalKey: 'selectReadObjListTree',
|
||||||
gridNameTree: 'treeGrid',
|
gridNameTree: 'treeGrid',
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
|
|
||||||
dialog: false,
|
dialog: false,
|
||||||
treeData: [], // 리턴받은 원본 트리 데이터
|
treeData: [], // 리턴받은 원본 트리 데이터
|
||||||
@ -278,7 +278,7 @@ export default {
|
|||||||
{
|
{
|
||||||
header: '검침개소명',
|
header: '검침개소명',
|
||||||
name: 'readPlcNm',
|
name: 'readPlcNm',
|
||||||
width: 300,
|
width: 370,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
},
|
},
|
||||||
{ header: '검침개소', name: 'name', align: 'center' },
|
{ header: '검침개소', name: 'name', align: 'center' },
|
||||||
@ -289,31 +289,73 @@ export default {
|
|||||||
async getTreeData() {
|
async getTreeData() {
|
||||||
this.loadGrid = false;
|
this.loadGrid = false;
|
||||||
|
|
||||||
const res = await this.postApiReturn({
|
// const res = await this.postApiReturn({
|
||||||
apiKey: 'selectReadPlcBaseInfo',
|
// apiKey: 'selectReadPlcBaseInfo',
|
||||||
resKey: 'readPlcBaseInfoData',
|
// resKey: 'readPlcBaseInfoData',
|
||||||
sendParam: {
|
// sendParam: {
|
||||||
blocId:
|
// blocId:
|
||||||
this.searchParam.blocMstrList.length > 0
|
// this.searchParam.blocMstrList.length > 0
|
||||||
? this.searchParam.blocMstrList[this.searchParam.blocId].blocId
|
// ? this.searchParam.blocMstrList[this.searchParam.blocId].blocId
|
||||||
: this.searchParam.blocId, //"BL0001",
|
// : this.searchParam.blocId, //"BL0001",
|
||||||
// readObjId: this.searchParam.readObj, // "MTT00001" // 전력 코드 고정
|
// // readObjId: this.searchParam.readObj, // "MTT00001" // 전력 코드 고정
|
||||||
readObjId: this.searchParam.searchReadObj, // "MTT00001" // 전력 코드 고정
|
// readObjId: this.searchParam.searchReadObj, // "MTT00001" // 전력 코드 고정
|
||||||
|
|
||||||
useFg: '1',
|
// useFg: '1',
|
||||||
readPlcNmLike: this.searchWord,
|
// readPlcNmLike: this.searchWord,
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
|
const treeData = [
|
||||||
|
{
|
||||||
|
readPlcNm: '서울 본사',
|
||||||
|
name: '본사',
|
||||||
|
_children: [
|
||||||
|
{
|
||||||
|
readPlcNm: '서울 본사 - 1층',
|
||||||
|
name: '1층',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readPlcNm: '서울 본사 - 2층',
|
||||||
|
name: '2층',
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
});
|
{
|
||||||
|
readPlcNm: '부산 지사',
|
||||||
|
name: '지사',
|
||||||
|
_children: [
|
||||||
|
{
|
||||||
|
readPlcNm: '부산 지사 - A동',
|
||||||
|
name: 'A동',
|
||||||
|
_children: [
|
||||||
|
{
|
||||||
|
readPlcNm: '부산 지사 - A동 1층',
|
||||||
|
name: '1층',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readPlcNm: '부산 지사 - A동 2층',
|
||||||
|
name: '2층',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readPlcNm: '부산 지사 - B동',
|
||||||
|
name: 'B동',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readPlcNm: '대전 창고',
|
||||||
|
name: '창고',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
// console.log("treeData", res)
|
|
||||||
|
// // console.log("treeData", res)
|
||||||
let myOptionsTree = {
|
let myOptionsTree = {
|
||||||
treeColumnOptions: {
|
treeColumnOptions: {
|
||||||
name: 'readPlcNm',
|
name: 'readPlcNm',
|
||||||
},
|
},
|
||||||
header: {
|
|
||||||
height: 37,
|
|
||||||
},
|
|
||||||
rowHeight: 'auto',
|
|
||||||
};
|
};
|
||||||
if (this.searchParam.isMulti) {
|
if (this.searchParam.isMulti) {
|
||||||
myOptionsTree['rowHeaders'] = [{ type: 'checkbox' }];
|
myOptionsTree['rowHeaders'] = [{ type: 'checkbox' }];
|
||||||
@ -331,26 +373,26 @@ export default {
|
|||||||
|
|
||||||
// this.treeData = res;
|
// this.treeData = res;
|
||||||
// const ROOT = res[0].plcCd;
|
// const ROOT = res[0].plcCd;
|
||||||
const setTreeData = await this.setTree({
|
// const setTreeData = await this.setTree({
|
||||||
gridKey: this.gridNameTree,
|
// gridKey: this.gridNameTree,
|
||||||
treeKey: 'READ_PLC_ID',
|
// treeKey: 'READ_PLC_ID',
|
||||||
value: res.map(item => ({
|
// value: res.map(item => ({
|
||||||
...item,
|
// ...item,
|
||||||
rowStat: null,
|
// rowStat: null,
|
||||||
readPlcId: item.readPlcId,
|
// readPlcId: item.readPlcId,
|
||||||
readPlcIdNm: item.readPlcId,
|
// readPlcIdNm: item.readPlcId,
|
||||||
upReadPlcId:
|
// upReadPlcId:
|
||||||
item.upReadPlcId == null || item.upReadPlcId == ''
|
// item.upReadPlcId == null || item.upReadPlcId == ''
|
||||||
? ''
|
// ? ''
|
||||||
: item.upReadPlcId,
|
// : item.upReadPlcId,
|
||||||
upReadPlcNm:
|
// upReadPlcNm:
|
||||||
item.upReadPlcNm == null || item.upReadPlcNm == ''
|
// item.upReadPlcNm == null || item.upReadPlcNm == ''
|
||||||
? ''
|
// ? ''
|
||||||
: item.upReadPlcNm,
|
// : item.upReadPlcNm,
|
||||||
blocId: item.blocId,
|
// blocId: item.blocId,
|
||||||
useFg: item.useFg === '1' ? true : false,
|
// useFg: item.useFg === '1' ? true : false,
|
||||||
})),
|
// })),
|
||||||
});
|
// });
|
||||||
// this.treeData = setTreeData;
|
// this.treeData = setTreeData;
|
||||||
|
|
||||||
|
|
||||||
@ -358,7 +400,7 @@ export default {
|
|||||||
modalKey: this.myModalKey,
|
modalKey: this.myModalKey,
|
||||||
gridKey: this.gridNameTree,
|
gridKey: this.gridNameTree,
|
||||||
modalDataKey: this.modalDataKey,
|
modalDataKey: this.modalDataKey,
|
||||||
value: setTreeData.ROOT || [],
|
value: treeData,
|
||||||
});
|
});
|
||||||
this.loadGrid = true;
|
this.loadGrid = true;
|
||||||
|
|
||||||
@ -498,4 +540,22 @@ const selectReadObjListTree = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@each $theme in dark, light {
|
||||||
|
.v-application.#{$theme}-mode {
|
||||||
|
.v-dialog {
|
||||||
|
.v-card {
|
||||||
|
&__title {
|
||||||
|
|
||||||
|
@if $theme ==dark {
|
||||||
|
background-color: #2d3355;
|
||||||
|
|
||||||
|
.v-btn {
|
||||||
|
background-color: #2d3355;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -2,15 +2,22 @@
|
|||||||
<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 v-if="iconShow" small :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
|
<v-icon
|
||||||
|
v-if="iconShow"
|
||||||
|
small
|
||||||
|
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
|
||||||
|
>$icoBulletPoint</v-icon
|
||||||
|
>
|
||||||
{{ label }}
|
{{ label }}
|
||||||
</label>
|
</label>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="label ? textCols : ''">
|
<v-col :cols="label ? textCols : ''">
|
||||||
<v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList"
|
<v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList" label="사업장을 선택하세요"
|
||||||
item-text="blocNm" item-value="idx" append-icon="" outlined
|
item-text="blocNm" item-value="idx" append-icon="" class="v-select__custom" outlined
|
||||||
:hide-details="true" :class="['v-select__custom', customClass]">
|
:hide-details="true" :class="['v-select__custom', customClass]">
|
||||||
<template v-slot:append><v-icon>$icoChevronDown</v-icon></template>
|
<template v-slot:append>
|
||||||
|
<v-icon>$icoChevronDown</v-icon>
|
||||||
|
</template>
|
||||||
</v-select>
|
</v-select>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
@ -85,11 +85,6 @@ export default {
|
|||||||
type: String,
|
type: String,
|
||||||
require: false,
|
require: false,
|
||||||
},
|
},
|
||||||
required: {
|
|
||||||
type: Boolean,
|
|
||||||
require: false,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -11,11 +11,9 @@
|
|||||||
<v-col :cols="label ? textCols : ''">
|
<v-col :cols="label ? textCols : ''">
|
||||||
<v-select v-model="selectValue" :items="searchParam[parentPrgmId][dataKey + 'List']" item-text="commCdNm"
|
<v-select v-model="selectValue" :items="searchParam[parentPrgmId][dataKey + 'List']" item-text="commCdNm"
|
||||||
item-value="commCd" outlined :hide-details="true" append-icon=""
|
item-value="commCd" outlined :hide-details="true" append-icon=""
|
||||||
:class="['v-select__custom', customClass]">
|
:class="['v-select__custom', customClass]"><template v-slot:append>
|
||||||
<template v-slot:append>
|
|
||||||
<v-icon>$icoChevronDown</v-icon>
|
<v-icon>$icoChevronDown</v-icon>
|
||||||
</template>
|
</template></v-select>
|
||||||
</v-select>
|
|
||||||
<!-- @change="updateBlocCode($event)" -->
|
<!-- @change="updateBlocCode($event)" -->
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
<template>
|
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" class="v-icon" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path
|
|
||||||
d="M14.1248 1.71225L10.7462 2.13189C10.6283 2.14617 10.5801 2.28903 10.6623 2.37296L11.6391 3.34975L8.89799 6.09082C8.8714 6.11767 8.85649 6.15392 8.85649 6.19171C8.85649 6.2295 8.8714 6.26575 8.89799 6.2926L9.70335 7.09796C9.7587 7.15332 9.84977 7.15332 9.90513 7.09796L12.648 4.3551L13.6248 5.33189C13.6436 5.35072 13.6674 5.36387 13.6934 5.36981C13.7193 5.37576 13.7465 5.37427 13.7716 5.36551C13.7968 5.35675 13.819 5.34107 13.8356 5.32028C13.8523 5.29949 13.8628 5.27443 13.8658 5.24796L14.2837 1.87117C14.2867 1.84961 14.2846 1.82765 14.2776 1.80702C14.2707 1.78639 14.2591 1.76765 14.2437 1.75226C14.2283 1.73687 14.2096 1.72524 14.1889 1.7183C14.1683 1.71136 14.1463 1.70929 14.1248 1.71225ZM6.2962 8.89439C6.26935 8.8678 6.23309 8.85289 6.19531 8.85289C6.15752 8.85289 6.12127 8.8678 6.09442 8.89439L3.35334 11.6372L2.37656 10.6605C2.35771 10.6416 2.33394 10.6285 2.30797 10.6225C2.282 10.6166 2.25487 10.6181 2.22971 10.6268C2.20455 10.6356 2.18236 10.6513 2.16569 10.6721C2.14903 10.6929 2.13856 10.7179 2.13549 10.7444L1.71584 14.1212C1.70513 14.214 1.78192 14.2908 1.87477 14.2801L5.25335 13.8605C5.3712 13.8462 5.41942 13.7033 5.33727 13.6194L4.36049 12.6426L7.10334 9.89974C7.1587 9.84439 7.1587 9.75332 7.10334 9.69796L6.2962 8.89439Z" />
|
|
||||||
</svg>
|
|
||||||
</template>
|
|
@ -5,7 +5,7 @@
|
|||||||
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
|
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
|
||||||
:btnActionsFnc="btnActions" />
|
:btnActionsFnc="btnActions" />
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" style="min-height: 30vh;">
|
<div ref="gridParent">
|
||||||
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
|
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
|
||||||
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
|
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
|
||||||
</div>
|
</div>
|
||||||
@ -66,7 +66,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowDataSetTagRelGrid',
|
gridName: 'rowDataSetTagRelGrid',
|
||||||
detailDataSetTagList: myDataSetTagDetail,
|
detailDataSetTagList: myDataSetTagDetail,
|
||||||
dataPathMock: {
|
dataPathMock: {
|
||||||
@ -128,6 +128,8 @@ export default {
|
|||||||
const gridHeight = this.$refs['gridParent'].offsetHeight - 36;
|
const gridHeight = this.$refs['gridParent'].offsetHeight - 36;
|
||||||
|
|
||||||
const myOptions = {
|
const myOptions = {
|
||||||
|
// bodyHeight: gridHeight,
|
||||||
|
// minBodyHeight: gridHeight,
|
||||||
header: {
|
header: {
|
||||||
height: 28,
|
height: 28,
|
||||||
},
|
},
|
||||||
@ -135,9 +137,14 @@ export default {
|
|||||||
minRowHeight: 29,
|
minRowHeight: 29,
|
||||||
selectionUnit: 'row',
|
selectionUnit: 'row',
|
||||||
editingEvent: 'click',
|
editingEvent: 'click',
|
||||||
|
// columnOptions: {
|
||||||
|
// resizable: true,
|
||||||
|
// minWidth: 100
|
||||||
|
// }
|
||||||
};
|
};
|
||||||
this.setGridOption({
|
this.setGridOption({
|
||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
|
// value: myOptions
|
||||||
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
|
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -197,11 +204,16 @@ export default {
|
|||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.loadGrid = true;
|
||||||
this.loadGrid = true;
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
async getRowData(data, gridName) {
|
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({
|
this.setGridSelectData({
|
||||||
gridKey: gridName,
|
gridKey: gridName,
|
||||||
gridSelect: true,
|
gridSelect: true,
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
:editorGrid="true"
|
:editorGrid="true"
|
||||||
:innerTabGridInfo="innerTabGridInfo"
|
:innerTabGridInfo="innerTabGridInfo"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -51,7 +52,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowDetailGrid',
|
gridName: 'rowDetailGrid',
|
||||||
rowKey: null,
|
rowKey: null,
|
||||||
edtingFinishFlag: 'Y',
|
edtingFinishFlag: 'Y',
|
||||||
@ -342,9 +343,7 @@ export default {
|
|||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.loadGrid = true;
|
||||||
this.loadGrid = true;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
async btnActions(action) {
|
async btnActions(action) {
|
||||||
let dataArr = [];
|
let dataArr = [];
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" style="min-height: calc(100vh - 800px);">
|
<div ref="gridParent" style="min-height: calc(100vh - 800px);">
|
||||||
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
|
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
|
||||||
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
|
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" />
|
||||||
</div>
|
</div>
|
||||||
<div style="min-height: calc(100vh - 900px);" class="mt-4">
|
<div style="min-height: calc(100vh - 900px);" class="mt-4">
|
||||||
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailList"
|
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailList"
|
||||||
@ -41,7 +41,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowEqpmConstGrid',
|
gridName: 'rowEqpmConstGrid',
|
||||||
detailList: myEqpmConstDetail,
|
detailList: myEqpmConstDetail,
|
||||||
|
|
||||||
@ -232,9 +232,7 @@ export default {
|
|||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.loadGrid = true;
|
||||||
this.loadGrid = true;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
async getRowData(data, gridName) {
|
async getRowData(data, gridName) {
|
||||||
if (data.rowStat === 'I') {
|
if (data.rowStat === 'I') {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
:parentPrgmId="parentPrgmId"
|
:parentPrgmId="parentPrgmId"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
:innerTabGridInfo="innerTabGridInfo"
|
:innerTabGridInfo="innerTabGridInfo"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div style="min-height: calc(100vh - 900px);" class="mt-4">
|
<div style="min-height: calc(100vh - 900px);" class="mt-4">
|
||||||
@ -59,7 +60,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowEqpmIaoGrid',
|
gridName: 'rowEqpmIaoGrid',
|
||||||
detailList: myEqpmIaoDetail,
|
detailList: myEqpmIaoDetail,
|
||||||
|
|
||||||
@ -296,9 +297,7 @@ export default {
|
|||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.loadGrid = true;
|
||||||
this.loadGrid = true;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
async getRowData(data, gridName) {
|
async getRowData(data, gridName) {
|
||||||
if (data.rowStat === 'I') {
|
if (data.rowStat === 'I') {
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
class="d-flex justify-space-between align-center"
|
class="d-flex justify-space-between align-center"
|
||||||
style="height: 80px;"
|
style="height: 80px;"
|
||||||
>
|
>
|
||||||
<span class="txt custom-subtitle-tab">검침 대상 추가 정보</span>
|
<span class="txt">검침 대상 추가 정보</span>
|
||||||
<Buttons
|
<Buttons
|
||||||
:parentPrgmId="parentPrgmId"
|
:parentPrgmId="parentPrgmId"
|
||||||
:bindingData="gridName"
|
:bindingData="gridName"
|
||||||
@ -20,6 +20,8 @@
|
|||||||
:editorGrid="true"
|
:editorGrid="true"
|
||||||
:innerTabGridInfo="innerTabGridInfo"
|
:innerTabGridInfo="innerTabGridInfo"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
|
:selectedRowDataWatchFlag="true"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -53,10 +55,23 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowDetailGrid',
|
gridName: 'rowDetailGrid',
|
||||||
rowKey: null,
|
rowKey: null,
|
||||||
edtingFinishFlag: 'Y',
|
edtingFinishFlag: 'Y',
|
||||||
|
dataPathMock: {
|
||||||
|
"rowDetailGrid": {
|
||||||
|
column: [
|
||||||
|
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
|
||||||
|
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
|
||||||
|
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
|
||||||
|
{ header: '그룹', name: 'grpCd', align: 'left' },
|
||||||
|
],
|
||||||
|
data: dataPathDataExample,
|
||||||
|
defaultRow: dataPathDataExample,
|
||||||
|
option: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -261,7 +276,7 @@ export default {
|
|||||||
{ header: '검침 대상 ID', name: 'readObjId', hidden: true },
|
{ header: '검침 대상 ID', name: 'readObjId', hidden: true },
|
||||||
{
|
{
|
||||||
header: '추가 정보',
|
header: '추가 정보',
|
||||||
name: 'addInfoId',
|
name: 'addInfoId',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
formatter({ value }) {
|
formatter({ value }) {
|
||||||
let retVal = '';
|
let retVal = '';
|
||||||
@ -446,4 +461,25 @@ export default {
|
|||||||
search() {},
|
search() {},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
const dataPathDataExample = [
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ001',
|
||||||
|
readObjNm: '서울 본사',
|
||||||
|
readObjKind: 'TYPE01',
|
||||||
|
grpCd: 'GRP01',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ002',
|
||||||
|
readObjNm: '부산 지사',
|
||||||
|
readObjKind: 'TYPE02',
|
||||||
|
grpCd: 'GRP02',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ003',
|
||||||
|
readObjNm: '대전 공장',
|
||||||
|
readObjKind: 'TYPE03',
|
||||||
|
grpCd: 'GRP01',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,12 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="d-flex justify-space-between">
|
<div
|
||||||
|
class="d-flex justify-space-between"
|
||||||
|
|
||||||
|
>
|
||||||
<v-card-title class="px-0 pt-0 custom-title-4">검침개소 추가 정보</v-card-title>
|
<v-card-title class="px-0 pt-0 custom-title-4">검침개소 추가 정보</v-card-title>
|
||||||
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
|
<Buttons
|
||||||
|
:parentPrgmId="parentPrgmId"
|
||||||
|
:bindingData="gridName"
|
||||||
|
:btnActionsFnc="btnActions"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" style="height: calc(100vh - 520px);">
|
<div ref="gridParent">
|
||||||
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
|
<Grid
|
||||||
:editorGrid="true" :innerTabGridInfo="innerTabGridInfo" @getRowsData="getRowData" />
|
:ref="gridName"
|
||||||
|
:gridName="gridName"
|
||||||
|
:parentPrgmId="parentPrgmId"
|
||||||
|
:editorGrid="true"
|
||||||
|
:innerTabGridInfo="innerTabGridInfo"
|
||||||
|
@getRowsData="getRowData"
|
||||||
|
:dataPath="addInfoTabData"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -39,65 +53,65 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowDetailGrid',
|
gridName: 'rowDetailGrid',
|
||||||
rowKey: null,
|
rowKey: null,
|
||||||
edtingFinishFlag: 'Y',
|
edtingFinishFlag: 'Y',
|
||||||
// addInfoTabData: {
|
addInfoTabData: {
|
||||||
// "rowDetailGrid": {
|
"rowDetailGrid": {
|
||||||
// data: [
|
data: [
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// {
|
{
|
||||||
// readPlcNm: '서울 본사',
|
readPlcNm: '서울 본사',
|
||||||
// plcKind: '전기',
|
plcKind: '전기',
|
||||||
// useFg: '1',
|
useFg: '1',
|
||||||
// },
|
},
|
||||||
|
|
||||||
|
|
||||||
// ],
|
],
|
||||||
// column: [
|
column: [
|
||||||
// // { header: '회사 ID', name: 'comId', hidden: true },
|
// { header: '회사 ID', name: 'comId', hidden: true },
|
||||||
// {
|
{
|
||||||
// header: '검침개소명',
|
header: '검침개소명',
|
||||||
// name: 'readPlcNm',
|
name: 'readPlcNm',
|
||||||
// align: 'left',
|
align: 'left',
|
||||||
// minWidth: 400,
|
minWidth: 400,
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// header: '개소 종류',
|
header: '개소 종류',
|
||||||
// name: 'plcKind',
|
name: 'plcKind',
|
||||||
// minWidth: 100,
|
minWidth: 100,
|
||||||
// align: 'center',
|
align: 'center',
|
||||||
// // formatter({ value }) {
|
// formatter({ value }) {
|
||||||
// // let retVal = '';
|
// let retVal = '';
|
||||||
// // const newValue = _this.pageData.plcKindList.filter(
|
// const newValue = _this.pageData.plcKindList.filter(
|
||||||
// // item => item.commCd == value,
|
// item => item.commCd == value,
|
||||||
// // );
|
// );
|
||||||
// // if (newValue.length > 0) {
|
// if (newValue.length > 0) {
|
||||||
// // retVal = newValue[0].commCdNm;
|
// retVal = newValue[0].commCdNm;
|
||||||
// // }
|
// }
|
||||||
// // return retVal;
|
// return retVal;
|
||||||
// // },
|
// },
|
||||||
// },
|
},
|
||||||
// {
|
{
|
||||||
// header: '사용 여부',
|
header: '사용 여부',
|
||||||
// name: 'useFg',
|
name: 'useFg',
|
||||||
// minWidth: 100,
|
minWidth: 100,
|
||||||
// align: 'center',
|
align: 'center',
|
||||||
// // formatter({ value }) {
|
// formatter({ value }) {
|
||||||
// // value = value === true ? '1' : '0';
|
// value = value === true ? '1' : '0';
|
||||||
// // const newValue = _this.pageData.useFgList.filter(
|
// const newValue = _this.pageData.useFgList.filter(
|
||||||
// // item => item.commCd == value,
|
// item => item.commCd == value,
|
||||||
// // );
|
// );
|
||||||
// // return newValue[0].commCdNm;
|
// return newValue[0].commCdNm;
|
||||||
// // },
|
// },
|
||||||
// },
|
},
|
||||||
// ]
|
]
|
||||||
|
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -152,9 +166,9 @@ export default {
|
|||||||
bodyHeight: gridHeight,
|
bodyHeight: gridHeight,
|
||||||
minBodyHeight: gridHeight,
|
minBodyHeight: gridHeight,
|
||||||
header: {
|
header: {
|
||||||
height: 37,
|
height: 28,
|
||||||
},
|
},
|
||||||
rowHeight: 37,
|
rowHeight: 29,
|
||||||
minRowHeight: 29,
|
minRowHeight: 29,
|
||||||
selectionUnit: 'row',
|
selectionUnit: 'row',
|
||||||
editingEvent: 'click',
|
editingEvent: 'click',
|
||||||
@ -164,129 +178,128 @@ export default {
|
|||||||
value: myOptions,
|
value: myOptions,
|
||||||
});
|
});
|
||||||
|
|
||||||
const _this = this;
|
// const _this = this;
|
||||||
let useFgSelectList = [];
|
// let useFgSelectList = [];
|
||||||
this.pageData.useFgList.forEach(item => {
|
// this.pageData.useFgList.forEach(item => {
|
||||||
const it = { text: item.commCdNm, value: item.commCd };
|
// const it = { text: item.commCdNm, value: item.commCd };
|
||||||
useFgSelectList.push(it);
|
// useFgSelectList.push(it);
|
||||||
});
|
// });
|
||||||
let addInfoList = [];
|
// let addInfoList = [];
|
||||||
this.pageData.addInfoList.forEach(item => {
|
// this.pageData.addInfoList.forEach(item => {
|
||||||
const it = { text: item.addInfoNm, value: item.addInfoId };
|
// const it = { text: item.addInfoNm, value: item.addInfoId };
|
||||||
addInfoList.push(it);
|
// addInfoList.push(it);
|
||||||
});
|
// });
|
||||||
let addInfoDataKindList = [];
|
// let addInfoDataKindList = [];
|
||||||
this.pageData.addInfoDataKindList.forEach(item => {
|
// this.pageData.addInfoDataKindList.forEach(item => {
|
||||||
const it = { text: item.commCdNm, value: item.commCd };
|
// const it = { text: item.commCdNm, value: item.commCd };
|
||||||
addInfoDataKindList.push(it);
|
// addInfoDataKindList.push(it);
|
||||||
});
|
// });
|
||||||
|
|
||||||
const myColumns = [
|
// const myColumns = [
|
||||||
{ header: '회사 ID', name: 'comId', hidden: true },
|
// { header: '회사 ID', name: 'comId', hidden: true },
|
||||||
{ header: '검침개소 번호', name: 'readPlcId', hidden: true },
|
// { header: '검침개소 번호', name: 'readPlcId', hidden: true },
|
||||||
{
|
// {
|
||||||
header: '추가 정보',
|
// header: '추가 정보',
|
||||||
name: 'addInfoId',
|
// name: 'addInfoId',
|
||||||
align: 'left',
|
// align: 'left',
|
||||||
formatter({ value }) {
|
// formatter({ value }) {
|
||||||
let retVal = '';
|
// let retVal = '';
|
||||||
const newValue = addInfoList.filter(item => item.value == value);
|
// const newValue = addInfoList.filter(item => item.value == value);
|
||||||
if (newValue.length > 0) {
|
// if (newValue.length > 0) {
|
||||||
retVal = newValue[0].text;
|
// retVal = newValue[0].text;
|
||||||
}
|
// }
|
||||||
return retVal;
|
// return retVal;
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: 'Data 구분',
|
// header: 'Data 구분',
|
||||||
name: 'addInfoDataKind',
|
// name: 'addInfoDataKind',
|
||||||
align: 'center',
|
// align: 'center',
|
||||||
formatter({ value }) {
|
// formatter({ value }) {
|
||||||
let retVal = '';
|
// let retVal = '';
|
||||||
const newValue = addInfoDataKindList.filter(
|
// const newValue = addInfoDataKindList.filter(
|
||||||
item => item.value == value,
|
// item => item.value == value,
|
||||||
);
|
// );
|
||||||
if (newValue.length > 0) {
|
// if (newValue.length > 0) {
|
||||||
retVal = newValue[0].text;
|
// retVal = newValue[0].text;
|
||||||
}
|
// }
|
||||||
return retVal;
|
// return retVal;
|
||||||
},
|
// },
|
||||||
// editor: {
|
// // editor: {
|
||||||
// type: "select",
|
// // type: "select",
|
||||||
// options: {
|
// // options: {
|
||||||
// listItems: addInfoDataKindList
|
// // listItems: addInfoDataKindList
|
||||||
// }
|
// // }
|
||||||
// }
|
// // }
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: '숫자 값',
|
// header: '숫자 값',
|
||||||
name: 'addInfoNumVal',
|
// name: 'addInfoNumVal',
|
||||||
align: 'right',
|
// align: 'right',
|
||||||
editor: 'text',
|
// editor: 'text',
|
||||||
hidden: true,
|
// hidden: true,
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: '문자 값',
|
// header: '문자 값',
|
||||||
name: 'addInfoTxtVal',
|
// name: 'addInfoTxtVal',
|
||||||
align: 'left',
|
// align: 'left',
|
||||||
editor: 'text',
|
// editor: 'text',
|
||||||
hidden: true,
|
// hidden: true,
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: '추가 정보 값',
|
// header: '추가 정보 값',
|
||||||
name: 'addInfoVal',
|
// name: 'addInfoVal',
|
||||||
align: 'center',
|
// align: 'center',
|
||||||
renderer: {
|
// renderer: {
|
||||||
type: NewCustomRenderer,
|
// type: NewCustomRenderer,
|
||||||
},
|
// },
|
||||||
editor: {
|
// editor: {
|
||||||
type: NewCustomEditor,
|
// type: NewCustomEditor,
|
||||||
},
|
// },
|
||||||
formatter(data) {
|
// formatter(data) {
|
||||||
return data.row.addInfoDataKind;
|
// return data.row.addInfoDataKind;
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
// {
|
//{ header: "추가 정보 값", name: "addInfoVal", align: "center" , editor: "text",
|
||||||
// header: "추가 정보 값", name: "addInfoVal", align: "center", editor: "text",
|
// formatter({ value, row , column}) {
|
||||||
// formatter({ value, row, column }) {
|
// console.log("addInfoVal row : ", row);
|
||||||
// console.log("addInfoVal row : ", row);
|
// console.log("addInfoVal state : ", column);
|
||||||
// console.log("addInfoVal state : ", column);
|
// if(row.addInfoDataKind === "NUM"){
|
||||||
// if (row.addInfoDataKind === "NUM") {
|
// column.align = "right";
|
||||||
// column.align = "right";
|
// }else{
|
||||||
// } else {
|
// column.align = "left";
|
||||||
// column.align = "left";
|
// }
|
||||||
// }
|
// return value;
|
||||||
// return value;
|
// }
|
||||||
// }
|
//},
|
||||||
// },
|
|
||||||
/*{
|
/*{
|
||||||
header: "사용여부",
|
header: "사용여부",
|
||||||
name: "useFg",
|
name: "useFg",
|
||||||
align: "center",
|
align: "center",
|
||||||
formatter({ value }) {
|
formatter({ value }) {
|
||||||
return value == "1" ? "사용" : "사용안함";
|
return value == "1" ? "사용" : "사용안함";
|
||||||
},
|
},
|
||||||
editor: {
|
editor: {
|
||||||
type: "select",
|
type: "select",
|
||||||
options: {
|
options: {
|
||||||
// listItems: useFgSelectList
|
// listItems: useFgSelectList
|
||||||
listItems: [
|
listItems: [
|
||||||
{text:"사용", value:"1"},
|
{text:"사용", value:"1"},
|
||||||
{text:"사용안함", value:"0"},
|
{text:"사용안함", value:"0"},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},*/
|
},*/
|
||||||
{ header: '등록 사용자', name: 'regUserNo', hidden: true },
|
// { header: '등록 사용자', name: 'regUserNo', hidden: true },
|
||||||
{ header: '등록 일자', name: 'regDttm', hidden: true },
|
// { header: '등록 일자', name: 'regDttm', hidden: true },
|
||||||
{ header: '수정 사용자', name: 'procUserNo', hidden: true },
|
// { header: '수정 사용자', name: 'procUserNo', hidden: true },
|
||||||
{ header: '수정 일자', name: 'procDttm', hidden: true },
|
// { header: '수정 일자', name: 'procDttm', hidden: true },
|
||||||
];
|
// ];
|
||||||
|
|
||||||
this.setGridColumn({
|
// this.setGridColumn({
|
||||||
gridKey: this.gridName,
|
// gridKey: this.gridName,
|
||||||
value: myColumns,
|
// value: myColumns,
|
||||||
});
|
// });
|
||||||
|
|
||||||
this.loadGrid = true;
|
this.loadGrid = true;
|
||||||
},
|
},
|
||||||
@ -366,7 +379,7 @@ export default {
|
|||||||
gridEditingFinish2(data, bindingData) {
|
gridEditingFinish2(data, bindingData) {
|
||||||
this.$refs[bindingData].editingFinish(data);
|
this.$refs[bindingData].editingFinish(data);
|
||||||
},
|
},
|
||||||
search() { },
|
search() {},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
|
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
|
||||||
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
|
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
|
||||||
:innerTabGridInfo="innerTabGridInfo" />
|
:innerTabGridInfo="innerTabGridInfo" :dataPath="imgInfoTabData" />
|
||||||
</div>
|
</div>
|
||||||
<div ref="formParent" style="height: calc((100vh - 400px) /2);">
|
<div ref="formParent">
|
||||||
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
|
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
|
||||||
:detailList="detailReadPlcImgList" @gridEditingFinish="gridEditingFinish" />
|
:detailList="detailReadPlcImgList" @gridEditingFinish="gridEditingFinish" />
|
||||||
</div>
|
</div>
|
||||||
@ -44,9 +44,26 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowReadPlcImgGrid',
|
gridName: 'rowReadPlcImgGrid',
|
||||||
detailReadPlcImgList: myReadPlcImgDetail,
|
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: {
|
computed: {
|
||||||
@ -103,11 +120,10 @@ export default {
|
|||||||
header: {
|
header: {
|
||||||
height: 28,
|
height: 28,
|
||||||
},
|
},
|
||||||
// rowHeight: 29,
|
rowHeight: 29,
|
||||||
// minRowHeight: 29,
|
minRowHeight: 29,
|
||||||
selectionUnit: 'row',
|
selectionUnit: 'row',
|
||||||
editingEvent: 'click',
|
editingEvent: 'click',
|
||||||
rowHeight: 'auto',
|
|
||||||
};
|
};
|
||||||
this.setGridOption({
|
this.setGridOption({
|
||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
|
@ -7,9 +7,9 @@
|
|||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
|
<div ref="gridParent" style="height: calc((100vh - 520px) /2);">
|
||||||
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
|
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
|
||||||
:innerTabGridInfo="innerTabGridInfo" />
|
:innerTabGridInfo="innerTabGridInfo" :dataPath="tagRelTabData" />
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3" ref="formParent" style="height: calc((100vh - 400px) /2);">
|
<div ref="formParent" >
|
||||||
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
|
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
|
||||||
:detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" />
|
:detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" />
|
||||||
</div>
|
</div>
|
||||||
@ -46,7 +46,78 @@ export default {
|
|||||||
loadGrid: false,
|
loadGrid: false,
|
||||||
gridName: 'rowReadPlcTagRelGrid',
|
gridName: 'rowReadPlcTagRelGrid',
|
||||||
detailReadPlcTagList: myReadPlcTagDetail,
|
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: {
|
computed: {
|
||||||
|
@ -112,6 +112,13 @@
|
|||||||
}" />
|
}" />
|
||||||
<!-- <router-view :key="$route.fullPath"/> -->
|
<!-- <router-view :key="$route.fullPath"/> -->
|
||||||
</div>
|
</div>
|
||||||
|
<!--
|
||||||
|
v-model="treeValue"
|
||||||
|
return-object
|
||||||
|
@input="treeModel"
|
||||||
|
@update:active="clkTab"
|
||||||
|
|
||||||
|
-->
|
||||||
<AdminMenu :miniVariant="miniVariant" :userNm="this.userInfo.userNm" :comId="this.userInfo.comId" v-if="false" />
|
<AdminMenu :miniVariant="miniVariant" :userNm="this.userInfo.userNm" :comId="this.userInfo.comId" v-if="false" />
|
||||||
|
|
||||||
<component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" />
|
<component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" />
|
||||||
@ -131,8 +138,8 @@
|
|||||||
$depth3rdBulletDark
|
$depth3rdBulletDark
|
||||||
</v-icon>
|
</v-icon>
|
||||||
<span v-if="item.url">{{ item.menuNm }}
|
<span v-if="item.url">{{ item.menuNm }}
|
||||||
<span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
|
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
|
||||||
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span>
|
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="!item.url">{{ item.menuNm }}</span>
|
<span v-else-if="!item.url">{{ item.menuNm }}</span>
|
||||||
<v-icon v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url">
|
<v-icon v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url">
|
||||||
@ -141,6 +148,14 @@
|
|||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
</v-treeview>
|
</v-treeview>
|
||||||
|
<!-- <template #append>
|
||||||
|
<p
|
||||||
|
class="text-caption"
|
||||||
|
:style="{ letterSpacing: '-0.2px !important' }"
|
||||||
|
>
|
||||||
|
© 2022. SK C&C all rights reserved.
|
||||||
|
</p>
|
||||||
|
</template> -->
|
||||||
</v-navigation-drawer>
|
</v-navigation-drawer>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -307,6 +322,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-main>
|
</v-main>
|
||||||
|
<!-- <v-footer
|
||||||
|
:absolute="!fixed"
|
||||||
|
app
|
||||||
|
:class="
|
||||||
|
drawer
|
||||||
|
? miniVariant
|
||||||
|
? 'drawerFooter miniFooter'
|
||||||
|
: 'drawerFooter'
|
||||||
|
: 'full-size'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span>© 2022. SK C&C all rights reserved.</span>
|
||||||
|
</v-footer> -->
|
||||||
</fullscreen>
|
</fullscreen>
|
||||||
</v-app>
|
</v-app>
|
||||||
</template>
|
</template>
|
||||||
@ -392,7 +420,6 @@ export default {
|
|||||||
deep: true,
|
deep: true,
|
||||||
handler(value) {
|
handler(value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
console.log(value)
|
|
||||||
const prgmId = value.prgmId;
|
const prgmId = value.prgmId;
|
||||||
let thisPrgmId = this.$route.query.prgmId;
|
let thisPrgmId = this.$route.query.prgmId;
|
||||||
var tmp = 0;
|
var tmp = 0;
|
||||||
|
809
layouts/default_bak.vue
Normal file
809
layouts/default_bak.vue
Normal file
@ -0,0 +1,809 @@
|
|||||||
|
<template>
|
||||||
|
<v-app :class="`${isDarkMode ? 'dark-mode' : 'light-mode'}`">
|
||||||
|
<!-- <v-app :class="'light-mode'"> -->
|
||||||
|
<fullscreen :fullscreen.sync="fullscreen">
|
||||||
|
<v-navigation-drawer
|
||||||
|
ref="navigationdrawer"
|
||||||
|
:value="drawer"
|
||||||
|
:mini-variant="miniVariant"
|
||||||
|
:clipped="clipped"
|
||||||
|
:absolute="true"
|
||||||
|
mini-variant-width="60"
|
||||||
|
fixed
|
||||||
|
app
|
||||||
|
>
|
||||||
|
<div class="d-flex align-center justify-space-between py-4 px-3">
|
||||||
|
<router-link class="home" :to="myHome.root">
|
||||||
|
<div class="lnb-logo">
|
||||||
|
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
|
||||||
|
<img v-else src="@/assets/images/logo_lm.png" />
|
||||||
|
</div>
|
||||||
|
<!-- <div class="lnb-logo">FEMS</div>-->
|
||||||
|
</router-link>
|
||||||
|
<v-app-bar-nav-icon
|
||||||
|
ref="appbarnavicon"
|
||||||
|
id="appbarnavicon"
|
||||||
|
@click.stop="miniVariant = !miniVariant"
|
||||||
|
@click="updateTreeview"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
color: isDarkMode ? '#fff' : '#111',
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<!-- <router-view :key="$route.fullPath"/> -->
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
v-model="treeValue"
|
||||||
|
return-object
|
||||||
|
@input="treeModel"
|
||||||
|
@update:active="clkTab"
|
||||||
|
|
||||||
|
-->
|
||||||
|
<AdminMenu
|
||||||
|
:miniVariant="miniVariant"
|
||||||
|
:userNm="this.userInfo.userNm"
|
||||||
|
:comId="this.userInfo.comId"
|
||||||
|
/>
|
||||||
|
<component
|
||||||
|
ref="changePswdPop"
|
||||||
|
:is="'ChangePswdPop'"
|
||||||
|
v-show="false"
|
||||||
|
:comId="this.userInfo.comId"
|
||||||
|
/>
|
||||||
|
<v-treeview
|
||||||
|
ref="treeview"
|
||||||
|
:active.sync="activeTree"
|
||||||
|
active-class="v-treeview-node--active"
|
||||||
|
:items="treevieItems"
|
||||||
|
activatable
|
||||||
|
hoverable
|
||||||
|
color="#3896ff"
|
||||||
|
open-on-click
|
||||||
|
@update:open="openNode"
|
||||||
|
>
|
||||||
|
<template slot="label" slot-scope="{ item }">
|
||||||
|
<button
|
||||||
|
:class="{ 'justify-center': miniVariant }"
|
||||||
|
@mouseover="doMouseOver"
|
||||||
|
>
|
||||||
|
<v-icon
|
||||||
|
v-if="item.lvl === 1 && menuIconKeys.includes(item.menuId)"
|
||||||
|
v-text="menuIconById[item.menuId]"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="20"
|
||||||
|
></v-icon>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="
|
||||||
|
item.lvl === 1 && !menuIconKeys.includes(item.menuId)
|
||||||
|
"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="20"
|
||||||
|
>mdi-package-variant-closed</v-icon
|
||||||
|
>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="item.lvl === 2"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="10"
|
||||||
|
>
|
||||||
|
mdi-checkbox-blank
|
||||||
|
</v-icon>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="
|
||||||
|
item.lvl >= 3 && item.childeVo.length === 0 && item.url
|
||||||
|
"
|
||||||
|
:class="miniVariant === false ? 'mr-2' : ''"
|
||||||
|
size="9"
|
||||||
|
>
|
||||||
|
$depth3rdBulletDark
|
||||||
|
</v-icon>
|
||||||
|
<span v-if="item.url"
|
||||||
|
>{{ item.menuNm }}
|
||||||
|
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
|
||||||
|
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
|
||||||
|
</span>
|
||||||
|
<span v-else-if="!item.url">{{ item.menuNm }}</span>
|
||||||
|
<v-icon
|
||||||
|
v-if="item.lvl >= 1 && item.childeVo.length > 0 && !item.url"
|
||||||
|
>
|
||||||
|
mdi-chevron-down
|
||||||
|
</v-icon>
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</v-treeview>
|
||||||
|
<!-- <template #append>
|
||||||
|
<p
|
||||||
|
class="text-caption"
|
||||||
|
:style="{ letterSpacing: '-0.2px !important' }"
|
||||||
|
>
|
||||||
|
© 2022. SK C&C all rights reserved.
|
||||||
|
</p>
|
||||||
|
</template> -->
|
||||||
|
</v-navigation-drawer>
|
||||||
|
<v-main>
|
||||||
|
<v-container fluid>
|
||||||
|
<router-tab
|
||||||
|
ref="routerTab"
|
||||||
|
:tabs="treevieItems"
|
||||||
|
:keep-last-tab="false"
|
||||||
|
:contextmenu="false"
|
||||||
|
>
|
||||||
|
<template slot-scope="{ title, closable, to }">
|
||||||
|
<span>{{ title }}</span>
|
||||||
|
<v-icon
|
||||||
|
size="18"
|
||||||
|
class="ml-2"
|
||||||
|
v-if="closable"
|
||||||
|
@click.stop="onCloseTab(to)"
|
||||||
|
>mdi-close-circle</v-icon
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<template #end>
|
||||||
|
<!--<ThemeSwitch />-->
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template v-slot:activator="{ on, attrs }">
|
||||||
|
<v-btn
|
||||||
|
:ripple="false"
|
||||||
|
tile
|
||||||
|
class="btn-close"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
>
|
||||||
|
<span class="body-2">닫기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
<v-list
|
||||||
|
class="py-2 btn-close-menu-list"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<v-list-item class="px-2">
|
||||||
|
<v-list-item-title @click="delAllTabsData()" class="body-2"
|
||||||
|
>전체 닫기</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item class="px-2">
|
||||||
|
<v-list-item-title
|
||||||
|
@click="deleteSblingsTab()"
|
||||||
|
class="body-2"
|
||||||
|
>나머지 닫기</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template v-slot:activator="{ on, attrs }">
|
||||||
|
<v-btn
|
||||||
|
:ripple="false"
|
||||||
|
tile
|
||||||
|
class="btn-close"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
style="width:100px;"
|
||||||
|
>
|
||||||
|
<span class="body-2">즐겨찾기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
<v-list
|
||||||
|
v-if="myMenuList.length > 0"
|
||||||
|
class="py-2 btn-close-menu-list"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<v-list-item
|
||||||
|
v-for="item in myMenuList"
|
||||||
|
:key="item.menuId"
|
||||||
|
class="px-2"
|
||||||
|
style="cursor:pointer;"
|
||||||
|
>
|
||||||
|
<v-list-item-title
|
||||||
|
@click="moveToMyMenu(item.url, item.menuId, item.prgmId)"
|
||||||
|
class="body-2"
|
||||||
|
>{{ item.menuNm }}</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="removeBookMark()"
|
||||||
|
v-if="bookmarkBtn == 1"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle;"
|
||||||
|
>star</span
|
||||||
|
>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="addBookMark()"
|
||||||
|
v-if="bookmarkBtn == 0"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle;"
|
||||||
|
>star_border</span
|
||||||
|
>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn
|
||||||
|
id="refresh"
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="refreshTab()"
|
||||||
|
>
|
||||||
|
<v-icon>mdi-refresh</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
<v-btn icon tile :ripple="false" @click="setDrawer()">
|
||||||
|
<v-icon>mdi-crop-free</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
<!-- <v-btn icon tile :ripple="false" @click="toggle()">
|
||||||
|
<v-icon v-if="!fullscreen">mdi-arrow-expand-all</v-icon>
|
||||||
|
<v-icon v-else>mdi-arrow-collapse-all</v-icon>
|
||||||
|
</v-btn> -->
|
||||||
|
</template>
|
||||||
|
</router-tab>
|
||||||
|
</v-container>
|
||||||
|
<div v-if="loadingStackCnt > 0" class="loading-container">
|
||||||
|
<div class="loading">
|
||||||
|
<Fade-loader />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</v-main>
|
||||||
|
<!-- <v-footer
|
||||||
|
:absolute="!fixed"
|
||||||
|
app
|
||||||
|
:class="
|
||||||
|
drawer
|
||||||
|
? miniVariant
|
||||||
|
? 'drawerFooter miniFooter'
|
||||||
|
: 'drawerFooter'
|
||||||
|
: 'full-size'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span>© 2022. SK C&C all rights reserved.</span>
|
||||||
|
</v-footer> -->
|
||||||
|
</fullscreen>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState, mapActions, mapMutations } from 'vuex'; // , mapActions
|
||||||
|
import ThemeSwitch from '@/components/common/ThemeSwitch';
|
||||||
|
import AdminMenu from '@/components/common/AdminMenu';
|
||||||
|
import FadeLoader from 'vue-spinner/src/FadeLoader.vue';
|
||||||
|
import ChangePswdPop from '~/components/common/modal/ChangePswdPop';
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
ThemeSwitch,
|
||||||
|
AdminMenu,
|
||||||
|
FadeLoader,
|
||||||
|
ChangePswdPop,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fullscreen: false,
|
||||||
|
activeTree: [],
|
||||||
|
clipped: false,
|
||||||
|
fixed: false,
|
||||||
|
miniVariant: false,
|
||||||
|
// activeTabIdx: "",
|
||||||
|
routerTabInstance: null,
|
||||||
|
// programIdObj: null,
|
||||||
|
myPrgmId: null,
|
||||||
|
treeValue: [],
|
||||||
|
menuIconById: {
|
||||||
|
// MNU0003: 'mdi-chart-line',
|
||||||
|
// MNU0004: 'mdi-alarm-light',
|
||||||
|
// MNU0005: 'mdi-pencil-box-outline',
|
||||||
|
// MNU0006: 'mdi-cog-outline',
|
||||||
|
MNU0002: 'mdi-monitor',
|
||||||
|
MNU0091: 'mdi-chart-box',
|
||||||
|
MNU0102: 'mdi-human-male-board-poll',
|
||||||
|
MNU0103: 'mdi-file-chart-outline',
|
||||||
|
MNU0104: 'mdi-chart-sankey-variant',
|
||||||
|
MNU0106: 'mdi-database-edit-outline',
|
||||||
|
MNU0105: 'mdi-chart-bell-curve',
|
||||||
|
MNU0006: 'mdi-bulletin-board',
|
||||||
|
MNU0007: 'mdi-cog',
|
||||||
|
menu2: 'mdi-monitor',
|
||||||
|
menu3: 'mdi-chart-box',
|
||||||
|
menu4: 'mdi-human-male-board-poll',
|
||||||
|
menu5: 'mdi-file-chart-outline',
|
||||||
|
menu6: 'mdi-chart-sankey-variant',
|
||||||
|
menu7: 'mdi-database-edit-outline',
|
||||||
|
menu8: 'mdi-bulletin-board',
|
||||||
|
},
|
||||||
|
isLoading: false,
|
||||||
|
loadingStackCnt: 0,
|
||||||
|
bookmarkBtn: 0,
|
||||||
|
myMenuList: [],
|
||||||
|
prgmIdList: [],
|
||||||
|
initPageData: {},
|
||||||
|
obj: {},
|
||||||
|
newObj: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
myHome: 'myHome',
|
||||||
|
myHomeTabItems: 'myHomeTabItems',
|
||||||
|
indexRoot: 'indexRoot',
|
||||||
|
treevieItems: 'treevieItems',
|
||||||
|
menuData: 'menuData',
|
||||||
|
menuLink: state => state.modules.menu,
|
||||||
|
activeMenuId: state => state.activeMenuInfo.menuId,
|
||||||
|
isDarkMode: 'isDarkMode',
|
||||||
|
drawer: state => state.drawer,
|
||||||
|
userInfo: state => state.userInfo,
|
||||||
|
pageData: 'pageData',
|
||||||
|
}),
|
||||||
|
activeTabs() {
|
||||||
|
if (this.routerTabInstance) {
|
||||||
|
return this.routerTabInstance.activeTab;
|
||||||
|
} else {
|
||||||
|
return this.myHome.root;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
menuIconKeys() {
|
||||||
|
return Object.keys(this.menuIconById);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
activeTabs: {
|
||||||
|
// 탭 클릭시 좌측 treeview 싱크 맞추가
|
||||||
|
deep: true,
|
||||||
|
handler(value) {
|
||||||
|
if (value) {
|
||||||
|
const prgmId = value.prgmId;
|
||||||
|
let thisPrgmId = this.$route.query.prgmId;
|
||||||
|
var tmp = 0;
|
||||||
|
for (var i = 0; i < this.myMenuList.length; i++) {
|
||||||
|
if (this.myMenuList[i].prgmId == thisPrgmId) {
|
||||||
|
tmp = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.bookmarkBtn = tmp;
|
||||||
|
//if (thisPrgmId && this.myPrgmId && this.myPrgmId != thisPrgmId) {
|
||||||
|
this.myPrgmId = prgmId;
|
||||||
|
this.activeTree.pop(); // 기존 황성화 트리 값 삭제
|
||||||
|
this.activeTree.push(thisPrgmId); // 인덱스가 아닐 경우 새로 넣어줌
|
||||||
|
// this.$set(this.activeTree, 0, prgmId); // treeview activetree 새로 셋팅 <= 위 pop() 과 push() 로 대체
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
activeTree: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {
|
||||||
|
var _this = this;
|
||||||
|
const nv = newVal[0];
|
||||||
|
const ov = oldVal[0];
|
||||||
|
if (nv !== ov) {
|
||||||
|
if (!nv) {
|
||||||
|
// 중복클릭 시 발생 상황 기존 값을 다시 넣어줌
|
||||||
|
this.activeTree.push(ov);
|
||||||
|
} else {
|
||||||
|
this.myPrgmId = nv;
|
||||||
|
if (this.menuData[nv].url) {
|
||||||
|
const menuUrl = this.menuData[nv].url;
|
||||||
|
const menuId = this.menuData[nv].menuId;
|
||||||
|
|
||||||
|
const isCommMenu = menuUrl.indexOf('comm/');
|
||||||
|
const isEmsMenu = menuUrl.indexOf('ems/');
|
||||||
|
const isCmmsMenu = menuUrl.indexOf('cmms/');
|
||||||
|
|
||||||
|
// console.log('activeTree...');
|
||||||
|
|
||||||
|
if (isCommMenu > -1 || isEmsMenu > -1 || isCmmsMenu > -1) {
|
||||||
|
// console.log('activeTree if stmt1');
|
||||||
|
// console.log('this.isLoading : ', this.isLoading);
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt1');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
this.$router.push({
|
||||||
|
path: `${this.menuData[nv].url}?prgmId=${nv}`,
|
||||||
|
});
|
||||||
|
// this.$router.beforeEach((to, from, next) => {
|
||||||
|
// if(_this.isLoading == true){
|
||||||
|
// next(false);
|
||||||
|
// }
|
||||||
|
// if (!to.matched.length) {
|
||||||
|
// next(false);
|
||||||
|
// } else {
|
||||||
|
// next();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
var tmp = 0;
|
||||||
|
for (var i = 0; i < this.myMenuList.length; i++) {
|
||||||
|
if (this.myMenuList[i].menuId == menuId) {
|
||||||
|
tmp = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.bookmarkBtn = tmp;
|
||||||
|
} else {
|
||||||
|
// console.log('activeTree if stmt2');
|
||||||
|
// console.log('this.isLoading : ', this.isLoading);
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt2');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
this.$refs.routerTab.openIframe(
|
||||||
|
encodeURI(
|
||||||
|
`http://localhost:9999${this.menuData[nv].url}?prgmId=${nv}`,
|
||||||
|
),
|
||||||
|
this.menuData[nv].menuNm,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.$axios.get(`${this.menuData[nv].url}?$menuId=${menuId}`);
|
||||||
|
} else alert('지정된 페이지 경로가 없습니다.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
menuData: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {},
|
||||||
|
},
|
||||||
|
pageData: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {
|
||||||
|
localStorage.setItem('pageData', JSON.stringify(this.pageData));
|
||||||
|
//console.log("localPageData", this.pageData);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// menuLink: {
|
||||||
|
// deep: true,
|
||||||
|
// handler() {
|
||||||
|
// let prgmIdList = Object.keys(this.menuData);
|
||||||
|
// let initPageData = {};
|
||||||
|
// prgmIdList.forEach(item => {
|
||||||
|
// let newObj = {
|
||||||
|
// [item] : {}
|
||||||
|
// };
|
||||||
|
// initPageData = Object.assign(initPageData, newObj)
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
created() {},
|
||||||
|
beforeUnmount() {
|
||||||
|
//window.removeEventListener('beforeunload', this.unLoadEvent);
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
//window.addEventListener('beforeunload', this.unLoadEvent);
|
||||||
|
const _this = this;
|
||||||
|
await this.getMenu({});
|
||||||
|
await this.initPageDataFunc();
|
||||||
|
await this.selectMyMenuFunc();
|
||||||
|
|
||||||
|
this.routerTabInstance = this.$refs.routerTab;
|
||||||
|
if (this.$route.fullPath == '/') {
|
||||||
|
this.routerTabInstance.reset();
|
||||||
|
this.$router.replace(this.myHome.root);
|
||||||
|
} else if (this.$route.fullPath != this.myHome.root) {
|
||||||
|
this.$refs.routerTab.items.unshift(this.myHomeTabItems);
|
||||||
|
} else {
|
||||||
|
this.refreshTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
// this.$router.beforeEach((to, from, next) => {
|
||||||
|
// _this.isLoading = true;
|
||||||
|
// // console.log('$router.beforeEach...');
|
||||||
|
// // console.log('_this.isLoading[beforeEach] : ', _this.isLoading);
|
||||||
|
// // console.log('_this.loadingStackCnt : ', _this.loadingStackCnt);
|
||||||
|
// if(_this.loadingStackCnt > 0 && _this.isLoading){
|
||||||
|
// next(false);
|
||||||
|
// // return;
|
||||||
|
// }else if (!to.matched.length){
|
||||||
|
// next(false);
|
||||||
|
// }else{
|
||||||
|
// next();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// this.$router.afterEach((to, from, failure) => {
|
||||||
|
// });
|
||||||
|
|
||||||
|
// 요청 인터셉터
|
||||||
|
this.$axios.interceptors.request.use(
|
||||||
|
function(config) {
|
||||||
|
//alert(1)
|
||||||
|
_this.isLoading = true;
|
||||||
|
if(config.url.search('Page')<0){
|
||||||
|
// _this.loadingStackCnt++;
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
function(error) {
|
||||||
|
// 에라 나면 로딩 끄기
|
||||||
|
//alert(2)
|
||||||
|
_this.isLoading = false;
|
||||||
|
// if(error.url.search('Page')<0){
|
||||||
|
// _this.loadingStackCnt--;
|
||||||
|
// }
|
||||||
|
return Promise.reject(error);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
// 응답 인터셉터
|
||||||
|
this.$axios.interceptors.response.use(
|
||||||
|
function(response) {
|
||||||
|
_this.isLoading = false;
|
||||||
|
if(response.config.url.search('Page')<0){
|
||||||
|
_this.loadingStackCnt--;
|
||||||
|
}
|
||||||
|
//alert(3)
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
function(error) {
|
||||||
|
// 응답 에러 시에도 로딩 끄기
|
||||||
|
//alert(4 )
|
||||||
|
_this.isLoading = false;
|
||||||
|
// if(error.url.search('Page')<0){
|
||||||
|
// _this.loadingStackCnt--;
|
||||||
|
// }
|
||||||
|
return Promise.reject(error);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapMutations({
|
||||||
|
setDrawer: 'setDrawer', // 사이드메뉴 접고 펼치기
|
||||||
|
setPageDataInit: 'setPageDataInit',
|
||||||
|
}),
|
||||||
|
...mapActions({
|
||||||
|
getMenu: 'modules/menu/getMenu', // 트리메뉴 가져오기
|
||||||
|
chkOpenTabList: 'chkOpenTabList', // 트리메뉴 클릭 시 해당 pprgmId push
|
||||||
|
postUpdateApi: 'modules/list/postUpdateApi',
|
||||||
|
postApiReturn: 'modules/list/postApiReturn',
|
||||||
|
}),
|
||||||
|
// // tabActive(id) {},
|
||||||
|
// clkTab(itemArr) {
|
||||||
|
// console.log(itemArr[0]);
|
||||||
|
// if (!itemArr[0].to) return;
|
||||||
|
// this.$router.push({
|
||||||
|
// path: itemArr[0].to
|
||||||
|
// });
|
||||||
|
// },
|
||||||
|
toggle() {
|
||||||
|
this.fullscreen = !this.fullscreen;
|
||||||
|
},
|
||||||
|
refreshTab() {
|
||||||
|
// console.log("현재 탭 새로고침");
|
||||||
|
//this.routerTabInstance.refresh();
|
||||||
|
this.$nuxt.refresh();
|
||||||
|
this.routerTabInstance.refresh();
|
||||||
|
},
|
||||||
|
delAllTabsData() {
|
||||||
|
// console.log("탭 전체 닫기");
|
||||||
|
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
// const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
// if (diffTo != this.myHome.root) {
|
||||||
|
// this.routerTabInstance.items.splice(i, 1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//if(this.$router.currentRoute.fullPath != this.myHome.root){
|
||||||
|
if (this.routerTabInstance.items.length > 0) {
|
||||||
|
this.routerTabInstance.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$router.replace(this.myHome.root);
|
||||||
|
//}
|
||||||
|
},
|
||||||
|
deleteSblingsTab() {
|
||||||
|
// console.log("탭 나머지 닫기");
|
||||||
|
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
// const activeTo = this.routerTabInstance.activeTab.to;
|
||||||
|
// const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
// if (activeTo != diffTo && diffTo != this.myHome.root) {
|
||||||
|
// this.routerTabInstance.items.splice(i, 1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (this.routerTabInstance.items.length > 1) {
|
||||||
|
for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
const activeTo = this.routerTabInstance.activeTab.to;
|
||||||
|
const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
if (activeTo != diffTo && diffTo != this.myHome.root) {
|
||||||
|
this.routerTabInstance.close(diffTo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tabScrollMove(dir) {
|
||||||
|
const scrollTab = this.routerTabInstance.$refs.scroll;
|
||||||
|
const scrollWidth =
|
||||||
|
scrollTab.scrollData.scrollWidth - scrollTab.scrollData.clientWidth;
|
||||||
|
const scrollLeft = scrollTab.scrollData.scrollLeft;
|
||||||
|
|
||||||
|
const xAxis = this.calcScroll(scrollLeft, scrollWidth, dir);
|
||||||
|
scrollTab.scrollTo(xAxis, 0);
|
||||||
|
},
|
||||||
|
updateTreeview() {
|
||||||
|
if (this.miniVariant) {
|
||||||
|
// sidebar 접혀져 있을 때
|
||||||
|
this.$refs.treeview.updateAll();
|
||||||
|
} else {
|
||||||
|
// sidebar 펼쳐져 있을 때
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 열려있는 노드의 key 값 리턴(선택된 값이 아님)
|
||||||
|
openNode(node) {
|
||||||
|
//console.log('onOpen');
|
||||||
|
if (this.miniVariant) {
|
||||||
|
// sidebar 접혀져 있을 때
|
||||||
|
if (event.currentTarget.id !== this.$refs.appbarnavicon.$refs.link.id) {
|
||||||
|
this.$refs.appbarnavicon.click(event);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// sidebar 펼쳐져 있을 때
|
||||||
|
}
|
||||||
|
},
|
||||||
|
doMouseOver: function(event) {
|
||||||
|
//console.log(event);
|
||||||
|
},
|
||||||
|
calcScroll(sl, sw, dir) {
|
||||||
|
const deScrW = 60;
|
||||||
|
let returnSl = 0;
|
||||||
|
switch (dir) {
|
||||||
|
case 'prev':
|
||||||
|
returnSl = sl - deScrW <= 0 ? 0 : sl - deScrW;
|
||||||
|
break;
|
||||||
|
case 'next':
|
||||||
|
returnSl = sl + deScrW >= sw ? sw : sl + deScrW;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return returnSl;
|
||||||
|
},
|
||||||
|
initPageDataFunc() {
|
||||||
|
const _this = this;
|
||||||
|
this.prgmIdList = Object.keys(this.menuData);
|
||||||
|
this.initPageData = {};
|
||||||
|
this.prgmIdList.forEach(item => {
|
||||||
|
_this.obj = {};
|
||||||
|
if (_this.pageData[item]) {
|
||||||
|
_this.obj = _this.pageData[item];
|
||||||
|
}
|
||||||
|
_this.newObj = {};
|
||||||
|
_this.newObj = {
|
||||||
|
[item]: _this.obj,
|
||||||
|
};
|
||||||
|
_this.initPageData = Object.assign(
|
||||||
|
{},
|
||||||
|
_this.initPageData,
|
||||||
|
_this.newObj,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
localStorage.setItem('pageData', JSON.stringify(this.initPageData));
|
||||||
|
this.setPageDataInit(this.initPageData);
|
||||||
|
},
|
||||||
|
onCloseTab(to) {
|
||||||
|
const findIndex = this.$tabs.items.findIndex(v => v.to === to);
|
||||||
|
const { to: next } = this.$tabs.items[findIndex - 1];
|
||||||
|
this.$tabs.close(to, null);
|
||||||
|
if (this.$router.currentRoute.fullPath != next) {
|
||||||
|
this.$router.replace(next);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async addBookMark() {
|
||||||
|
var params = {
|
||||||
|
menuId: this.activeMenuId,
|
||||||
|
};
|
||||||
|
await this.postUpdateApi({
|
||||||
|
apiKey: 'saveBookmark',
|
||||||
|
sendParam: {
|
||||||
|
datas: {
|
||||||
|
bookmarkDt: [params],
|
||||||
|
},
|
||||||
|
params: {},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = await this.postApiReturn({
|
||||||
|
apiKey: 'selectMyMenu',
|
||||||
|
resKey: 'menuData',
|
||||||
|
sendParam: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
this.myMenuList = res;
|
||||||
|
this.bookmarkBtn = 1;
|
||||||
|
},
|
||||||
|
async removeBookMark() {
|
||||||
|
var params = {
|
||||||
|
menuId: this.activeMenuId,
|
||||||
|
};
|
||||||
|
await this.postUpdateApi({
|
||||||
|
apiKey: 'deleteBookmark',
|
||||||
|
sendParam: {
|
||||||
|
datas: {
|
||||||
|
bookmarkDt: [params],
|
||||||
|
},
|
||||||
|
params: {},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = await this.postApiReturn({
|
||||||
|
apiKey: 'selectMyMenu',
|
||||||
|
resKey: 'menuData',
|
||||||
|
sendParam: {},
|
||||||
|
});
|
||||||
|
this.myMenuList = res;
|
||||||
|
this.bookmarkBtn = 0;
|
||||||
|
},
|
||||||
|
moveToMyMenu(url, menuId, prgmId) {
|
||||||
|
// console.log('moveToMyMenu...');
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt3');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
this.$router.push({
|
||||||
|
path: url + '?prgmId=' + prgmId,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async selectMyMenuFunc() {
|
||||||
|
const headers = {
|
||||||
|
headers: {
|
||||||
|
'X-Fems-MenuId': 'MNU0001',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const params = { params: {} };
|
||||||
|
const res = await this.$axios.post(
|
||||||
|
'/comm/base/MenuMngCtr/selectMyMenu',
|
||||||
|
params,
|
||||||
|
headers,
|
||||||
|
);
|
||||||
|
|
||||||
|
this.myMenuList = res.data.dataset.menuData;
|
||||||
|
},
|
||||||
|
// unLoadEvent: function (event) {
|
||||||
|
// //if (this.isLeaveSite) return;
|
||||||
|
// //this.delAllTabsData();
|
||||||
|
// this.$router.push({
|
||||||
|
// path: this.myHome.root
|
||||||
|
// });
|
||||||
|
// console.log("event", event)
|
||||||
|
// event.preventDefault();
|
||||||
|
// event.returnValue = '';
|
||||||
|
|
||||||
|
// },
|
||||||
|
// treeModel(obj) {
|
||||||
|
// console.log(">>> treeModel::obj = ", obj);
|
||||||
|
// this.treeValue[0] = obj;
|
||||||
|
// this.$refs.treeview.updateAll();
|
||||||
|
// // console.log(this.$refs.treeview);
|
||||||
|
// // this.$refs.treeview.activeCache = obj.id;
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.loading {
|
||||||
|
z-index: 99;
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
//box-shadow: rgba(68, 67, 67, 0.9) 0 0 0 9999px;
|
||||||
|
}
|
||||||
|
.v-spinner {
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
</style>
|
928
layouts/default_bk.vue
Normal file
928
layouts/default_bk.vue
Normal file
@ -0,0 +1,928 @@
|
|||||||
|
<template>
|
||||||
|
<v-app :class="`${isDarkMode ? 'dark-mode' : 'light-mode'}`">
|
||||||
|
<!-- <v-app :class="'light-mode'"> -->
|
||||||
|
<fullscreen :fullscreen.sync="fullscreen">
|
||||||
|
<v-navigation-drawer
|
||||||
|
ref="navigationdrawer"
|
||||||
|
:value="drawer"
|
||||||
|
:mini-variant="miniVariant"
|
||||||
|
:clipped="clipped"
|
||||||
|
:absolute="true"
|
||||||
|
mini-variant-width="60"
|
||||||
|
fixed
|
||||||
|
app
|
||||||
|
>
|
||||||
|
<div class="d-flex align-center justify-space-between py-4 px-3">
|
||||||
|
<router-link class="home" :to="myHome.root">
|
||||||
|
<div class="lnb-logo">
|
||||||
|
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
|
||||||
|
<img v-else src="@/assets/images/logo_lm.png" />
|
||||||
|
</div>
|
||||||
|
<!-- <div class="lnb-logo">FEMS</div>-->
|
||||||
|
</router-link>
|
||||||
|
<v-app-bar-nav-icon
|
||||||
|
ref="appbarnavicon"
|
||||||
|
id="appbarnavicon"
|
||||||
|
@click.stop="miniVariant = !miniVariant"
|
||||||
|
@click="updateTreeview"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
color: isDarkMode ? '#fff' : '#111',
|
||||||
|
}"
|
||||||
|
/>
|
||||||
|
<!-- <router-view :key="$route.fullPath"/> -->
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
v-model="treeValue"
|
||||||
|
return-object
|
||||||
|
@input="treeModel"
|
||||||
|
@update:active="clkTab"
|
||||||
|
|
||||||
|
-->
|
||||||
|
<AdminMenu
|
||||||
|
:miniVariant="miniVariant"
|
||||||
|
:userNm="this.userInfo.userNm"
|
||||||
|
:comId="this.userInfo.comId"
|
||||||
|
/>
|
||||||
|
<component
|
||||||
|
ref="changePswdPop"
|
||||||
|
:is="'ChangePswdPop'"
|
||||||
|
v-show="false"
|
||||||
|
:comId="this.userInfo.comId"
|
||||||
|
/>
|
||||||
|
<v-treeview
|
||||||
|
ref="treeview"
|
||||||
|
:active.sync="activeTree"
|
||||||
|
active-class="v-treeview-node--active"
|
||||||
|
:items="treevieItems"
|
||||||
|
activatable
|
||||||
|
hoverable
|
||||||
|
color="#3896ff"
|
||||||
|
open-on-click
|
||||||
|
@update:open="openNode"
|
||||||
|
>
|
||||||
|
<template slot="label" slot-scope="{ item }">
|
||||||
|
<button :class="{ 'justify-center': miniVariant }" @mouseover="doMouseOver">
|
||||||
|
<v-icon
|
||||||
|
v-if="item.lvl === 1 && menuIconKeys.includes(item.menuId)"
|
||||||
|
v-text="menuIconById[item.menuId]"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="20"
|
||||||
|
></v-icon>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="item.lvl === 1 && !menuIconKeys.includes(item.menuId)"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="20"
|
||||||
|
>mdi-package-variant-closed</v-icon
|
||||||
|
>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="item.lvl === 2"
|
||||||
|
:class="{ 'mr-2': !miniVariant }"
|
||||||
|
size="10"
|
||||||
|
>
|
||||||
|
mdi-checkbox-blank
|
||||||
|
</v-icon>
|
||||||
|
<v-icon
|
||||||
|
v-else-if="item.lvl >= 3 && item.childeVo.length === 0 && item.url"
|
||||||
|
:class="miniVariant === false ? 'mr-2' : ''"
|
||||||
|
size="9"
|
||||||
|
>
|
||||||
|
$depth3rdBulletDark
|
||||||
|
</v-icon>
|
||||||
|
<span v-if="item.url"
|
||||||
|
>{{ item.menuNm }}
|
||||||
|
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
|
||||||
|
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
|
||||||
|
</span>
|
||||||
|
<span v-else-if="!item.url">{{ item.menuNm }}</span>
|
||||||
|
<v-icon v-if="item.lvl >= 1 && item.childeVo.length > 0 && !item.url">
|
||||||
|
mdi-chevron-down
|
||||||
|
</v-icon>
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</v-treeview>
|
||||||
|
<!-- <template #append>
|
||||||
|
<p
|
||||||
|
class="text-caption"
|
||||||
|
:style="{ letterSpacing: '-0.2px !important' }"
|
||||||
|
>
|
||||||
|
© 2022. SK C&C all rights reserved.
|
||||||
|
</p>
|
||||||
|
</template> -->
|
||||||
|
</v-navigation-drawer>
|
||||||
|
<v-main>
|
||||||
|
<v-container fluid>
|
||||||
|
<router-tab
|
||||||
|
ref="routerTab"
|
||||||
|
:tabs="treevieItems"
|
||||||
|
:keep-last-tab="false"
|
||||||
|
:contextmenu="false"
|
||||||
|
>
|
||||||
|
<template slot-scope="{ title, closable, to }">
|
||||||
|
<span>{{ title }}</span>
|
||||||
|
<v-icon size="18" class="ml-2" v-if="closable" @click.stop="onCloseTab(to)"
|
||||||
|
>mdi-close-circle</v-icon
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<template #end>
|
||||||
|
<ThemeSwitch style="margin-right: 20px" />
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template v-slot:activator="{ on, attrs }">
|
||||||
|
<!-- <v-btn :ripple="false" tile class="btn-close" v-bind="attrs" v-on="on">
|
||||||
|
<span class="body-2">닫기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon>
|
||||||
|
</v-btn> -->
|
||||||
|
<a-button style="width: 80px; height: 36px" class="btn-close">
|
||||||
|
<span class="body-2">닫기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon></a-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<v-list
|
||||||
|
class="py-2 btn-close-menu-list"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<v-list-item class="px-2">
|
||||||
|
<v-list-item-title @click="delAllTabsData()" class="body-2"
|
||||||
|
>전체 닫기</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
<v-list-item class="px-2">
|
||||||
|
<v-list-item-title @click="deleteSblingsTab()" class="body-2"
|
||||||
|
>나머지 닫기</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
<v-menu offset-y>
|
||||||
|
<template v-slot:activator="{ on, attrs }">
|
||||||
|
<!-- <v-btn
|
||||||
|
:ripple="false"
|
||||||
|
tile
|
||||||
|
class="btn-close"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
style="width: 100px"
|
||||||
|
>
|
||||||
|
<span class="body-2">즐겨찾기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon>
|
||||||
|
</v-btn> -->
|
||||||
|
<a-button style="width: 100px; height: 36px" class="btn-close">
|
||||||
|
<span class="body-2">즐겨찾기</span>
|
||||||
|
<v-icon size="20">mdi-chevron-down</v-icon></a-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
<v-list
|
||||||
|
v-if="myMenuList.length > 0"
|
||||||
|
class="py-2 btn-close-menu-list"
|
||||||
|
:style="{
|
||||||
|
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<v-list-item
|
||||||
|
v-for="item in myMenuList"
|
||||||
|
:key="item.menuId"
|
||||||
|
class="px-2"
|
||||||
|
style="cursor: pointer"
|
||||||
|
>
|
||||||
|
<v-list-item-title
|
||||||
|
@click="moveToMyMenu(item.url, item.menuId, item.prgmId)"
|
||||||
|
class="body-2"
|
||||||
|
>{{ item.menuNm }}</v-list-item-title
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-menu>
|
||||||
|
<!-- <v-btn
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="removeBookMark()"
|
||||||
|
v-if="bookmarkBtn == 1"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle"
|
||||||
|
>star</span
|
||||||
|
>
|
||||||
|
</v-btn> -->
|
||||||
|
|
||||||
|
<a-button
|
||||||
|
id="refresh"
|
||||||
|
:style="{
|
||||||
|
padding: '0',
|
||||||
|
width: '36px',
|
||||||
|
height: '36px',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRadius: '4px', // square corners
|
||||||
|
}"
|
||||||
|
type="text"
|
||||||
|
@click="removeBookMark"
|
||||||
|
v-if="bookmarkBtn == 1"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle"
|
||||||
|
>star</span
|
||||||
|
>
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<!-- <v-btn
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="addBookMark()"
|
||||||
|
v-if="bookmarkBtn == 0"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle"
|
||||||
|
>star_border</span
|
||||||
|
>
|
||||||
|
</v-btn> -->
|
||||||
|
|
||||||
|
<a-button
|
||||||
|
id="refresh"
|
||||||
|
:style="{
|
||||||
|
padding: '0',
|
||||||
|
width: '36px',
|
||||||
|
height: '36px',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRadius: '4px', // square corners
|
||||||
|
}"
|
||||||
|
type="text"
|
||||||
|
@click="addBookMark"
|
||||||
|
v-if="bookmarkBtn == 0"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="material-icons"
|
||||||
|
style="font-size: 17px; vertical-align: middle"
|
||||||
|
>star_border</span
|
||||||
|
>
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<v-btn
|
||||||
|
style="
|
||||||
|
background-color: white;
|
||||||
|
color: #fff;
|
||||||
|
border: 0.2px solid rgb(217, 217, 217);
|
||||||
|
"
|
||||||
|
id="refresh"
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="refreshTab()"
|
||||||
|
>
|
||||||
|
<v-icon style="color: rgba(0, 0, 0, 0.54)">mdi-refresh</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
|
||||||
|
<!-- <a-button
|
||||||
|
id="refresh"
|
||||||
|
:style="{
|
||||||
|
padding: '0',
|
||||||
|
width: '36px',
|
||||||
|
height: '36px',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRadius: '4px', // square corners
|
||||||
|
}"
|
||||||
|
type="text"
|
||||||
|
@click="refreshTab"
|
||||||
|
>
|
||||||
|
<v-icon >mdi-refresh</v-icon>
|
||||||
|
</a-button> -->
|
||||||
|
|
||||||
|
<!-- <a-button id="refresh" type="text" @click="setDrawer" class="icon-button">
|
||||||
|
<i class="mdi mdi-crop-free" style="font-size: 20px"></i>
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<a-button type="text" @click="setDrawer" class="icon-button">
|
||||||
|
<i class="mdi mdi-crop-free" style="font-size: 20px"></i>
|
||||||
|
</a-button> -->
|
||||||
|
|
||||||
|
<!-- <a-button
|
||||||
|
:style="{
|
||||||
|
padding: '0',
|
||||||
|
width: '36px',
|
||||||
|
height: '36px',
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRadius: '4px', // square corners
|
||||||
|
}"
|
||||||
|
type="text"
|
||||||
|
@click="toggle"
|
||||||
|
>
|
||||||
|
<v-icon v-if="!fullscreen">mdi-arrow-expand-all</v-icon>
|
||||||
|
<v-icon v-else>mdi-arrow-collapse-all</v-icon>
|
||||||
|
</a-button> -->
|
||||||
|
|
||||||
|
<v-btn
|
||||||
|
style="
|
||||||
|
background-color: white;
|
||||||
|
color: #fff;
|
||||||
|
border: 0.2px solid rgb(217, 217, 217);
|
||||||
|
"
|
||||||
|
icon
|
||||||
|
tile
|
||||||
|
:ripple="false"
|
||||||
|
@click="toggle()"
|
||||||
|
>
|
||||||
|
<v-icon style="color: rgba(0, 0, 0, 0.54)" v-if="!fullscreen"
|
||||||
|
>mdi-arrow-expand-all</v-icon
|
||||||
|
>
|
||||||
|
<v-icon style="color: rgba(0, 0, 0, 0.54)" v-else
|
||||||
|
>mdi-arrow-collapse-all</v-icon
|
||||||
|
>
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
</router-tab>
|
||||||
|
</v-container>
|
||||||
|
<div v-if="loadingStackCnt > 0" class="loading-container">
|
||||||
|
<div class="loading">
|
||||||
|
<Fade-loader />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</v-main>
|
||||||
|
<!-- <v-footer
|
||||||
|
:absolute="!fixed"
|
||||||
|
app
|
||||||
|
:class="
|
||||||
|
drawer
|
||||||
|
? miniVariant
|
||||||
|
? 'drawerFooter miniFooter'
|
||||||
|
: 'drawerFooter'
|
||||||
|
: 'full-size'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span>© 2022. SK C&C all rights reserved.</span>
|
||||||
|
</v-footer> -->
|
||||||
|
</fullscreen>
|
||||||
|
</v-app>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState, mapActions, mapMutations } from "vuex"; // , mapActions
|
||||||
|
import ThemeSwitch from "@/components/common/ThemeSwitch";
|
||||||
|
import AdminMenu from "@/components/common/AdminMenu";
|
||||||
|
import FadeLoader from "vue-spinner/src/FadeLoader.vue";
|
||||||
|
import ChangePswdPop from "~/components/common/modal/ChangePswdPop";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
ThemeSwitch,
|
||||||
|
AdminMenu,
|
||||||
|
FadeLoader,
|
||||||
|
ChangePswdPop,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
fullscreen: false,
|
||||||
|
activeTree: [],
|
||||||
|
clipped: false,
|
||||||
|
fixed: false,
|
||||||
|
miniVariant: false,
|
||||||
|
// activeTabIdx: "",
|
||||||
|
routerTabInstance: null,
|
||||||
|
// programIdObj: null,
|
||||||
|
myPrgmId: null,
|
||||||
|
treeValue: [],
|
||||||
|
menuIconById: {
|
||||||
|
// MNU0003: 'mdi-chart-line',
|
||||||
|
// MNU0004: 'mdi-alarm-light',
|
||||||
|
// MNU0005: 'mdi-pencil-box-outline',
|
||||||
|
// MNU0006: 'mdi-cog-outline',
|
||||||
|
MNU0002: "mdi-monitor",
|
||||||
|
MNU0091: "mdi-chart-box",
|
||||||
|
MNU0102: "mdi-human-male-board-poll",
|
||||||
|
MNU0103: "mdi-file-chart-outline",
|
||||||
|
MNU0104: "mdi-chart-sankey-variant",
|
||||||
|
MNU0106: "mdi-database-edit-outline",
|
||||||
|
MNU0105: "mdi-chart-bell-curve",
|
||||||
|
MNU0006: "mdi-bulletin-board",
|
||||||
|
MNU0007: "mdi-cog",
|
||||||
|
},
|
||||||
|
isLoading: false,
|
||||||
|
loadingStackCnt: 0,
|
||||||
|
bookmarkBtn: 0,
|
||||||
|
myMenuList: [],
|
||||||
|
prgmIdList: [],
|
||||||
|
initPageData: {},
|
||||||
|
obj: {},
|
||||||
|
newObj: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
myHome: "myHome",
|
||||||
|
myHomeTabItems: "myHomeTabItems",
|
||||||
|
indexRoot: "indexRoot",
|
||||||
|
treevieItems: "treevieItems",
|
||||||
|
menuData: "menuData",
|
||||||
|
menuLink: (state) => state.modules.menu,
|
||||||
|
activeMenuId: (state) => state.activeMenuInfo.menuId,
|
||||||
|
isDarkMode: "isDarkMode",
|
||||||
|
drawer: (state) => state.drawer,
|
||||||
|
userInfo: (state) => state.userInfo,
|
||||||
|
pageData: "pageData",
|
||||||
|
}),
|
||||||
|
activeTabs() {
|
||||||
|
if (this.routerTabInstance) {
|
||||||
|
return this.routerTabInstance.activeTab;
|
||||||
|
} else {
|
||||||
|
return this.myHome.root;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
menuIconKeys() {
|
||||||
|
return Object.keys(this.menuIconById);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
activeTabs: {
|
||||||
|
// 탭 클릭시 좌측 treeview 싱크 맞추가
|
||||||
|
deep: true,
|
||||||
|
handler(value) {
|
||||||
|
if (value) {
|
||||||
|
const prgmId = value.prgmId;
|
||||||
|
let thisPrgmId = this.$route.query.prgmId;
|
||||||
|
var tmp = 0;
|
||||||
|
for (var i = 0; i < this.myMenuList.length; i++) {
|
||||||
|
if (this.myMenuList[i].prgmId == thisPrgmId) {
|
||||||
|
tmp = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.bookmarkBtn = tmp;
|
||||||
|
//if (thisPrgmId && this.myPrgmId && this.myPrgmId != thisPrgmId) {
|
||||||
|
this.myPrgmId = prgmId;
|
||||||
|
this.activeTree.pop(); // 기존 황성화 트리 값 삭제
|
||||||
|
this.activeTree.push(thisPrgmId); // 인덱스가 아닐 경우 새로 넣어줌
|
||||||
|
// this.$set(this.activeTree, 0, prgmId); // treeview activetree 새로 셋팅 <= 위 pop() 과 push() 로 대체
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
activeTree: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {
|
||||||
|
var _this = this;
|
||||||
|
const nv = newVal[0];
|
||||||
|
const ov = oldVal[0];
|
||||||
|
if (nv !== ov) {
|
||||||
|
if (!nv) {
|
||||||
|
// 중복클릭 시 발생 상황 기존 값을 다시 넣어줌
|
||||||
|
this.activeTree.push(ov);
|
||||||
|
} else {
|
||||||
|
this.myPrgmId = nv;
|
||||||
|
console.log("menu:", this.menuData);
|
||||||
|
if (this.menuData[nv].url) {
|
||||||
|
const menuUrl = this.menuData[nv].url;
|
||||||
|
const menuId = this.menuData[nv].menuId;
|
||||||
|
|
||||||
|
const isCommMenu = menuUrl.indexOf("comm/");
|
||||||
|
const isEmsMenu = menuUrl.indexOf("ems/");
|
||||||
|
const isCmmsMenu = menuUrl.indexOf("cmms/");
|
||||||
|
|
||||||
|
// console.log('activeTree...');
|
||||||
|
console.log(isEmsMenu);
|
||||||
|
|
||||||
|
if (isCommMenu > -1 || isEmsMenu > -1 || isCmmsMenu > -1) {
|
||||||
|
// console.log('activeTree if stmt1');
|
||||||
|
// console.log('this.isLoading : ', this.isLoading);
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt1');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// this.$router.push({
|
||||||
|
// path: `${this.menuData[nv].url}?prgmId=${nv}`,
|
||||||
|
// });
|
||||||
|
|
||||||
|
this.$router.replace("/").then(() => {
|
||||||
|
this.$router.push({
|
||||||
|
path: `${this.menuData[nv].url}?prgmId=${nv}`,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// this.$router.beforeEach((to, from, next) => {
|
||||||
|
// if(_this.isLoading == true){
|
||||||
|
// next(false);
|
||||||
|
// }
|
||||||
|
// if (!to.matched.length) {
|
||||||
|
// next(false);
|
||||||
|
// } else {
|
||||||
|
// next();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
var tmp = 0;
|
||||||
|
for (var i = 0; i < this.myMenuList.length; i++) {
|
||||||
|
if (this.myMenuList[i].menuId == menuId) {
|
||||||
|
tmp = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.bookmarkBtn = tmp;
|
||||||
|
} else {
|
||||||
|
// console.log('activeTree if stmt2');
|
||||||
|
// console.log('this.isLoading : ', this.isLoading);
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt2');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
this.$refs.routerTab.openIframe(
|
||||||
|
encodeURI(`http://localhost:9999${this.menuData[nv].url}?prgmId=${nv}`),
|
||||||
|
this.menuData[nv].menuNm
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.$axios.get(`${this.menuData[nv].url}?$menuId=${menuId}`);
|
||||||
|
} else alert("지정된 페이지 경로가 없습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
menuData: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {},
|
||||||
|
},
|
||||||
|
pageData: {
|
||||||
|
deep: true,
|
||||||
|
handler(newVal, oldVal) {
|
||||||
|
localStorage.setItem("pageData", JSON.stringify(this.pageData));
|
||||||
|
//console.log("localPageData", this.pageData);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// menuLink: {
|
||||||
|
// deep: true,
|
||||||
|
// handler() {
|
||||||
|
// let prgmIdList = Object.keys(this.menuData);
|
||||||
|
// let initPageData = {};
|
||||||
|
// prgmIdList.forEach(item => {
|
||||||
|
// let newObj = {
|
||||||
|
// [item] : {}
|
||||||
|
// };
|
||||||
|
// initPageData = Object.assign(initPageData, newObj)
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.$vuetify.theme.isDark = false;
|
||||||
|
this.setThemeChange(false);
|
||||||
|
},
|
||||||
|
beforeUnmount() {
|
||||||
|
//window.removeEventListener('beforeunload', this.unLoadEvent);
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
//window.addEventListener('beforeunload', this.unLoadEvent);
|
||||||
|
const _this = this;
|
||||||
|
await this.getMenu({});
|
||||||
|
await this.initPageDataFunc();
|
||||||
|
await this.selectMyMenuFunc();
|
||||||
|
|
||||||
|
this.routerTabInstance = this.$refs.routerTab;
|
||||||
|
if (this.$route.fullPath == "/") {
|
||||||
|
this.routerTabInstance.reset();
|
||||||
|
this.$router.replace(this.myHome.root);
|
||||||
|
} else if (this.$route.fullPath != this.myHome.root) {
|
||||||
|
this.$refs.routerTab.items.unshift(this.myHomeTabItems);
|
||||||
|
} else {
|
||||||
|
this.refreshTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$router.beforeEach((to, from, next) => {
|
||||||
|
_this.isLoading = true;
|
||||||
|
// console.log('$router.beforeEach...');
|
||||||
|
// console.log('state : ', _this.$store.state)
|
||||||
|
// console.log('activeActionCnt : ', _this.$store.state.activeActionCnt)
|
||||||
|
// console.log('_this.isLoading[beforeEach] : ', _this.isLoading);
|
||||||
|
// console.log('_this.loadingStackCnt : ', _this.loadingStackCnt);
|
||||||
|
// if(_this.loadingStackCnt > 0 && _this.isLoading && _this.$store.state.activeActionCnt > 0){
|
||||||
|
if (_this.loadingStackCnt > 0 && _this.isLoading) {
|
||||||
|
next(false);
|
||||||
|
// return;
|
||||||
|
} else if (!to.matched.length) {
|
||||||
|
next(false);
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$router.afterEach((to, from, failure) => {});
|
||||||
|
|
||||||
|
// 요청 인터셉터
|
||||||
|
this.$axios.interceptors.request.use(
|
||||||
|
function (config) {
|
||||||
|
//alert(1)
|
||||||
|
_this.isLoading = true;
|
||||||
|
if (config.url.search("Page") < 0) {
|
||||||
|
_this.loadingStackCnt++;
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
// 에라 나면 로딩 끄기
|
||||||
|
//alert(2)
|
||||||
|
_this.isLoading = false;
|
||||||
|
// if(error.url.search('Page')<0){
|
||||||
|
// _this.loadingStackCnt--;
|
||||||
|
// }
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 응답 인터셉터
|
||||||
|
this.$axios.interceptors.response.use(
|
||||||
|
function (response) {
|
||||||
|
_this.isLoading = false;
|
||||||
|
if (response.config.url.search("Page") < 0) {
|
||||||
|
_this.loadingStackCnt--;
|
||||||
|
}
|
||||||
|
//alert(3)
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
// 응답 에러 시에도 로딩 끄기
|
||||||
|
//alert(4 )
|
||||||
|
_this.isLoading = false;
|
||||||
|
// if(error.url.search('Page')<0){
|
||||||
|
// _this.loadingStackCnt--;
|
||||||
|
// }
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapMutations({
|
||||||
|
setDrawer: "setDrawer", // 사이드메뉴 접고 펼치기
|
||||||
|
setPageDataInit: "setPageDataInit",
|
||||||
|
setThemeChange: "setThemeChange",
|
||||||
|
}),
|
||||||
|
...mapActions({
|
||||||
|
getMenu: "modules/menu/getMenu", // 트리메뉴 가져오기
|
||||||
|
chkOpenTabList: "chkOpenTabList", // 트리메뉴 클릭 시 해당 pprgmId push
|
||||||
|
postUpdateApi: "modules/list/postUpdateApi",
|
||||||
|
postApiReturn: "modules/list/postApiReturn",
|
||||||
|
}),
|
||||||
|
// // tabActive(id) {},
|
||||||
|
// clkTab(itemArr) {
|
||||||
|
// console.log(itemArr[0]);
|
||||||
|
// if (!itemArr[0].to) return;
|
||||||
|
// this.$router.push({
|
||||||
|
// path: itemArr[0].to
|
||||||
|
// });
|
||||||
|
// },
|
||||||
|
toggle() {
|
||||||
|
this.fullscreen = !this.fullscreen;
|
||||||
|
},
|
||||||
|
refreshTab() {
|
||||||
|
// console.log("현재 탭 새로고침");
|
||||||
|
//this.routerTabInstance.refresh();
|
||||||
|
this.$nuxt.refresh();
|
||||||
|
this.routerTabInstance.refresh();
|
||||||
|
},
|
||||||
|
delAllTabsData() {
|
||||||
|
// console.log("탭 전체 닫기");
|
||||||
|
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
// const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
// if (diffTo != this.myHome.root) {
|
||||||
|
// this.routerTabInstance.items.splice(i, 1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//if(this.$router.currentRoute.fullPath != this.myHome.root){
|
||||||
|
if (this.routerTabInstance.items.length > 0) {
|
||||||
|
this.routerTabInstance.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$router.replace(this.myHome.root);
|
||||||
|
//}
|
||||||
|
},
|
||||||
|
deleteSblingsTab() {
|
||||||
|
// console.log("탭 나머지 닫기");
|
||||||
|
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
// const activeTo = this.routerTabInstance.activeTab.to;
|
||||||
|
// const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
// if (activeTo != diffTo && diffTo != this.myHome.root) {
|
||||||
|
// this.routerTabInstance.items.splice(i, 1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (this.routerTabInstance.items.length > 1) {
|
||||||
|
for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
|
||||||
|
const activeTo = this.routerTabInstance.activeTab.to;
|
||||||
|
const diffTo = this.routerTabInstance.items[i].to;
|
||||||
|
|
||||||
|
if (activeTo != diffTo && diffTo != this.myHome.root) {
|
||||||
|
this.routerTabInstance.close(diffTo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tabScrollMove(dir) {
|
||||||
|
const scrollTab = this.routerTabInstance.$refs.scroll;
|
||||||
|
const scrollWidth =
|
||||||
|
scrollTab.scrollData.scrollWidth - scrollTab.scrollData.clientWidth;
|
||||||
|
const scrollLeft = scrollTab.scrollData.scrollLeft;
|
||||||
|
|
||||||
|
const xAxis = this.calcScroll(scrollLeft, scrollWidth, dir);
|
||||||
|
scrollTab.scrollTo(xAxis, 0);
|
||||||
|
},
|
||||||
|
updateTreeview() {
|
||||||
|
if (this.miniVariant) {
|
||||||
|
// sidebar 접혀져 있을 때
|
||||||
|
this.$refs.treeview.updateAll();
|
||||||
|
} else {
|
||||||
|
// sidebar 펼쳐져 있을 때
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 열려있는 노드의 key 값 리턴(선택된 값이 아님)
|
||||||
|
openNode(node) {
|
||||||
|
//console.log('onOpen');
|
||||||
|
if (this.miniVariant) {
|
||||||
|
// sidebar 접혀져 있을 때
|
||||||
|
if (event.currentTarget.id !== this.$refs.appbarnavicon.$refs.link.id) {
|
||||||
|
this.$refs.appbarnavicon.click(event);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// sidebar 펼쳐져 있을 때
|
||||||
|
}
|
||||||
|
},
|
||||||
|
doMouseOver: function (event) {
|
||||||
|
//console.log(event);
|
||||||
|
},
|
||||||
|
calcScroll(sl, sw, dir) {
|
||||||
|
const deScrW = 60;
|
||||||
|
let returnSl = 0;
|
||||||
|
switch (dir) {
|
||||||
|
case "prev":
|
||||||
|
returnSl = sl - deScrW <= 0 ? 0 : sl - deScrW;
|
||||||
|
break;
|
||||||
|
case "next":
|
||||||
|
returnSl = sl + deScrW >= sw ? sw : sl + deScrW;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return returnSl;
|
||||||
|
},
|
||||||
|
initPageDataFunc() {
|
||||||
|
const _this = this;
|
||||||
|
this.prgmIdList = Object.keys(this.menuData);
|
||||||
|
this.initPageData = {};
|
||||||
|
this.prgmIdList.forEach((item) => {
|
||||||
|
_this.obj = {};
|
||||||
|
if (_this.pageData[item]) {
|
||||||
|
_this.obj = _this.pageData[item];
|
||||||
|
}
|
||||||
|
_this.newObj = {};
|
||||||
|
_this.newObj = {
|
||||||
|
[item]: _this.obj,
|
||||||
|
};
|
||||||
|
_this.initPageData = Object.assign({}, _this.initPageData, _this.newObj);
|
||||||
|
});
|
||||||
|
localStorage.setItem("pageData", JSON.stringify(this.initPageData));
|
||||||
|
this.setPageDataInit(this.initPageData);
|
||||||
|
},
|
||||||
|
onCloseTab(to) {
|
||||||
|
const findIndex = this.$tabs.items.findIndex((v) => v.to === to);
|
||||||
|
const { to: next } = this.$tabs.items[findIndex - 1];
|
||||||
|
this.$tabs.close(to, null);
|
||||||
|
if (this.$router.currentRoute.fullPath != next) {
|
||||||
|
this.$router.replace(next);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async addBookMark() {
|
||||||
|
var params = {
|
||||||
|
menuId: this.activeMenuId,
|
||||||
|
};
|
||||||
|
await this.postUpdateApi({
|
||||||
|
apiKey: "saveBookmark",
|
||||||
|
sendParam: {
|
||||||
|
datas: {
|
||||||
|
bookmarkDt: [params],
|
||||||
|
},
|
||||||
|
params: {},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = await this.postApiReturn({
|
||||||
|
apiKey: "selectMyMenu",
|
||||||
|
resKey: "menuData",
|
||||||
|
sendParam: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
// const res = [
|
||||||
|
// {
|
||||||
|
// comId: "abc",
|
||||||
|
// upMenuId: "abc",
|
||||||
|
// menuId: "dashboard",
|
||||||
|
// menuNm: "abc",
|
||||||
|
// url: "DashboardPage",
|
||||||
|
// authCd: "yes",
|
||||||
|
// lvl: 9999,
|
||||||
|
// prgmId: "PRG0001",
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// comId: "abc",
|
||||||
|
// upMenuId: "dashboard",
|
||||||
|
// menuId: "test",
|
||||||
|
// menuNm: "test",
|
||||||
|
// url: "DashboardPage",
|
||||||
|
// authCd: "yes",
|
||||||
|
// lvl: 666,
|
||||||
|
// prgmId: "PRG0002",
|
||||||
|
// },
|
||||||
|
// ];
|
||||||
|
|
||||||
|
this.myMenuList = res;
|
||||||
|
this.bookmarkBtn = 1;
|
||||||
|
},
|
||||||
|
async removeBookMark() {
|
||||||
|
var params = {
|
||||||
|
menuId: this.activeMenuId,
|
||||||
|
};
|
||||||
|
await this.postUpdateApi({
|
||||||
|
apiKey: "deleteBookmark",
|
||||||
|
sendParam: {
|
||||||
|
datas: {
|
||||||
|
bookmarkDt: [params],
|
||||||
|
},
|
||||||
|
params: {},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const res = await this.postApiReturn({
|
||||||
|
apiKey: "selectMyMenu",
|
||||||
|
resKey: "menuData",
|
||||||
|
sendParam: {},
|
||||||
|
});
|
||||||
|
this.myMenuList = res;
|
||||||
|
this.bookmarkBtn = 0;
|
||||||
|
},
|
||||||
|
moveToMyMenu(url, menuId, prgmId) {
|
||||||
|
// console.log('moveToMyMenu...');
|
||||||
|
// if(this.isLoading == true){
|
||||||
|
// console.log('if isLoading stmt3');
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
alert("move to", url);
|
||||||
|
this.$router.push({
|
||||||
|
path: url + "?prgmId=" + prgmId,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async selectMyMenuFunc() {
|
||||||
|
const headers = {
|
||||||
|
headers: {
|
||||||
|
"X-Fems-MenuId": "MNU0001",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const params = { params: {} };
|
||||||
|
const res = await this.$axios.post(
|
||||||
|
"/comm/base/MenuMngCtr/selectMyMenu",
|
||||||
|
params,
|
||||||
|
headers
|
||||||
|
);
|
||||||
|
|
||||||
|
this.myMenuList = res.data.dataset.menuData;
|
||||||
|
},
|
||||||
|
// unLoadEvent: function (event) {
|
||||||
|
// //if (this.isLeaveSite) return;
|
||||||
|
// //this.delAllTabsData();
|
||||||
|
// this.$router.push({
|
||||||
|
// path: this.myHome.root
|
||||||
|
// });
|
||||||
|
// console.log("event", event)
|
||||||
|
// event.preventDefault();
|
||||||
|
// event.returnValue = '';
|
||||||
|
|
||||||
|
// },
|
||||||
|
// treeModel(obj) {
|
||||||
|
// console.log(">>> treeModel::obj = ", obj);
|
||||||
|
// this.treeValue[0] = obj;
|
||||||
|
// this.$refs.treeview.updateAll();
|
||||||
|
// // console.log(this.$refs.treeview);
|
||||||
|
// // this.$refs.treeview.activeCache = obj.id;
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.loading {
|
||||||
|
z-index: 99;
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
background-color: rgba(0, 0, 0, 0.4);
|
||||||
|
//box-shadow: rgba(68, 67, 67, 0.9) 0 0 0 9999px;
|
||||||
|
}
|
||||||
|
.v-spinner {
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
}
|
||||||
|
</style>
|
@ -58,7 +58,7 @@ export default {
|
|||||||
layoutInit() {
|
layoutInit() {
|
||||||
if (this.$refs.searchFilter) {
|
if (this.$refs.searchFilter) {
|
||||||
const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
|
const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
|
||||||
this.$refs.contents.style.height = `calc(100% - ${searchFilterHeight + 20}px)`;
|
this.$refs.contents.style.height = `calc(100% - ${searchFilterHeight}px)`;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//init() {}
|
//init() {}
|
||||||
|
@ -49,7 +49,7 @@ module.exports = {
|
|||||||
|
|
||||||
// Auto import components: https://go.nuxtjs.dev/config-components
|
// Auto import components: https://go.nuxtjs.dev/config-components
|
||||||
components: true,
|
components: true,
|
||||||
|
|
||||||
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
|
// Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
|
||||||
buildModules: [
|
buildModules: [
|
||||||
// https://go.nuxtjs.dev/vuetify
|
// https://go.nuxtjs.dev/vuetify
|
||||||
|
@ -22,7 +22,8 @@
|
|||||||
customClass="input-large"
|
customClass="input-large"
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col class="text-right d-flex justify-end align-end mr-3">
|
<v-col :cols="6" class="text-right">
|
||||||
|
<!-- <v-btn @click="test = !test">WWW</v-btn> -->
|
||||||
<BtnSearch size="large" />
|
<BtnSearch size="large" />
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@ -30,8 +31,8 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<v-row ref="contents" >
|
<v-row ref="contents" style="height: 100vh;">
|
||||||
<v-col cols="12" lg="2" >
|
<v-col cols="12" lg="2" class="h100">
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>
|
<v-card-title>
|
||||||
<span class="custom-title-4">역할 리스트</span>
|
<span class="custom-title-4">역할 리스트</span>
|
||||||
@ -52,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12" lg="10" >
|
<v-col cols="12" lg="10" class="h100">
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title>
|
<v-card-title>
|
||||||
<span class="custom-title-4">역할 메뉴별 권한</span>
|
<span class="custom-title-4">역할 메뉴별 권한</span>
|
||||||
@ -69,7 +70,7 @@
|
|||||||
:style="{ minHeight: '36px' }"
|
:style="{ minHeight: '36px' }"
|
||||||
>[미배정]메뉴리스트</span
|
>[미배정]메뉴리스트</span
|
||||||
>
|
>
|
||||||
<div class="px-0 mt-2" style="height:calc(100% - 64px)">
|
<div class="px-5" style="height:calc(100% - 64px)">
|
||||||
<div
|
<div
|
||||||
ref="treeGridParent"
|
ref="treeGridParent"
|
||||||
class="w100 h100"
|
class="w100 h100"
|
||||||
@ -112,7 +113,7 @@
|
|||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<div class="px-0 mt-2" style="height:calc(100% - 64px)">
|
<div class="px-5" style="height:calc(100% - 64px)">
|
||||||
<div
|
<div
|
||||||
ref="treeGridParent2"
|
ref="treeGridParent2"
|
||||||
class="w100 h100"
|
class="w100 h100"
|
||||||
@ -402,17 +403,6 @@ export default {
|
|||||||
];
|
];
|
||||||
|
|
||||||
const myTreeColumns = [
|
const myTreeColumns = [
|
||||||
{
|
|
||||||
header: '',
|
|
||||||
name: '',
|
|
||||||
align: 'center',
|
|
||||||
width: 30,
|
|
||||||
formatter: (props) => {
|
|
||||||
return `<label class="custom-radio">
|
|
||||||
<span class="radio-mark"></span>
|
|
||||||
</label>`;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
header: '메뉴명',
|
header: '메뉴명',
|
||||||
name: 'menuNm',
|
name: 'menuNm',
|
||||||
@ -425,17 +415,6 @@ export default {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
const myTreeColumns2 = [
|
const myTreeColumns2 = [
|
||||||
{
|
|
||||||
header: '',
|
|
||||||
name: '',
|
|
||||||
align: 'center',
|
|
||||||
width: 30,
|
|
||||||
formatter: (props) => {
|
|
||||||
return `<label class="custom-radio">
|
|
||||||
<span class="radio-mark"></span>
|
|
||||||
</label>`;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ header: '역할ID', name: 'roleId', hidden: true },
|
{ header: '역할ID', name: 'roleId', hidden: true },
|
||||||
{ header: '메뉴ID', name: 'menuId', hidden: true },
|
{ header: '메뉴ID', name: 'menuId', hidden: true },
|
||||||
{ header: '메뉴명', name: 'menuNm', minWidth: '235' },
|
{ header: '메뉴명', name: 'menuNm', minWidth: '235' },
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
:gridName="gridName"
|
:gridName="gridName"
|
||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -131,8 +132,22 @@ export default {
|
|||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
gridName: 'rowGrid',
|
gridName: 'rowGrid',
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
detailList: myDetail,
|
detailList: myDetail,
|
||||||
|
dataPathMock : {
|
||||||
|
rowGrid: {
|
||||||
|
column: [
|
||||||
|
{ header: '추가 정보 그룹', name: 'addGrpId', align: 'left' },
|
||||||
|
{ header: '추가 정보 ID', name: 'addInfoId', align: 'left' },
|
||||||
|
{ header: '추가 정보 명', name: 'addInfoNm', align: 'left' },
|
||||||
|
{ header: 'Data 형식', name: 'addInfoDataKind', align: 'center' },
|
||||||
|
{ header: '사용여부', name: 'useFg', align: 'center' },
|
||||||
|
],
|
||||||
|
data: dataMockExample,
|
||||||
|
defaultRow: dataMockExample,
|
||||||
|
option: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -503,4 +518,43 @@ const myDetail = [
|
|||||||
placeholder: '시스템 자동입력',
|
placeholder: '시스템 자동입력',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const dataMockExample = [
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP001',
|
||||||
|
addInfoId: 'INFO001',
|
||||||
|
addInfoNm: '온도 센서',
|
||||||
|
addInfoDataKind: 'DATA01',
|
||||||
|
useFg: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP002',
|
||||||
|
addInfoId: 'INFO002',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA02',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP003',
|
||||||
|
addInfoId: 'INFO003',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA03',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP004',
|
||||||
|
addInfoId: 'INFO004',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA04',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP005',
|
||||||
|
addInfoId: 'INFO005',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA05',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -12,8 +12,6 @@
|
|||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
:sendParam="{ comId }"
|
:sendParam="{ comId }"
|
||||||
customClass="select-large"
|
customClass="select-large"
|
||||||
labelCols="12"
|
|
||||||
textCols="12"
|
|
||||||
/>
|
/>
|
||||||
<!-- <component
|
<!-- <component
|
||||||
:is="'selectCodeList'"
|
:is="'selectCodeList'"
|
||||||
@ -312,9 +310,37 @@ export default {
|
|||||||
this.gridInit();
|
this.gridInit();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
gridInitTest() {
|
||||||
|
const rowGrid = {
|
||||||
|
column: [
|
||||||
|
{ header: '사용자No', name: 'userNo', align: 'center', hidden: true },
|
||||||
|
{ header: '사용자명', name: 'userNm' },
|
||||||
|
{ header: '사용자ID', name: 'userLoginId' },
|
||||||
|
{ header: '사용자비밀번호', name: 'userPswd', hidden: true },
|
||||||
|
{ header: '사업장', name: 'blocId', hidden: true },
|
||||||
|
{ header: 'email', name: 'email', hidden: true },
|
||||||
|
{ header: '등록자NO', name: 'regUserNo', hidden: true },
|
||||||
|
{ header: '등록일시', name: 'regDttm', hidden: true },
|
||||||
|
{ header: '수정자NO', name: 'procUserNo', hidden: true },
|
||||||
|
{ header: '수정일시', name: 'procDttm', hidden: true },
|
||||||
|
{ header: 'comId', name: 'comId', hidden: true },
|
||||||
|
{ header: 'deptId', name: 'deptId', hidden: true },
|
||||||
|
],
|
||||||
|
data: dataMockExample,
|
||||||
|
defaultRow: dataMockExample,
|
||||||
|
option: [],
|
||||||
|
}
|
||||||
|
this.dataPathMock = {rowGrid};
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.loadGrid = true;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
// 사용자 리스트 그리드 세팅
|
// 사용자 리스트 그리드 세팅
|
||||||
gridInit() {
|
gridInit() {
|
||||||
|
|
||||||
|
// this.gridInitTest(); return
|
||||||
|
|
||||||
const gridHeight = this.$refs.gridParent.offsetHeight - 90;
|
const gridHeight = this.$refs.gridParent.offsetHeight - 90;
|
||||||
|
|
||||||
const myOptions = {
|
const myOptions = {
|
||||||
|
@ -63,10 +63,11 @@
|
|||||||
<div ref="gridParent" class="px-5 h100">
|
<div ref="gridParent" class="px-5 h100">
|
||||||
<component
|
<component
|
||||||
:ref="gridName"
|
:ref="gridName"
|
||||||
:is="loadGrid ? 'Grid' : null"
|
:is=" 'Grid' "
|
||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
:gridName="gridName"
|
:gridName="gridName"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -139,10 +140,56 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
gridName: 'rowGrid',
|
gridName: 'rowGrid',
|
||||||
rowGridOrigin: [],
|
// rowGridOrigin: [],
|
||||||
detailList: myDetail,
|
detailList: myDetail,
|
||||||
|
dataPathMock : {
|
||||||
|
'rowGrid': {
|
||||||
|
column: [
|
||||||
|
{ header: 'No.', name: 'batchLogSeq', align: 'center', width: 100 },
|
||||||
|
{ header: '배치ID', name: 'batchId', align: 'center', width: 100 },
|
||||||
|
{ header: '배치명', name: 'batchNm', align: 'left', width: 150 },
|
||||||
|
{ header: '실행 일자', name: 'execDt', align: 'center', width: 80 },
|
||||||
|
{
|
||||||
|
header: '실행 결과',
|
||||||
|
name: 'execRsltCd',
|
||||||
|
align: 'center',
|
||||||
|
width: 80,
|
||||||
|
// formatter({ value }) {
|
||||||
|
// let retVal = '';
|
||||||
|
// const newValue = _this.pageData.execRsltCdList.filter(
|
||||||
|
// item => item.commCd == value,
|
||||||
|
// );
|
||||||
|
// if (newValue.length > 0) {
|
||||||
|
// retVal = newValue[0].commCdNm;
|
||||||
|
// }
|
||||||
|
// return retVal;
|
||||||
|
// },
|
||||||
|
}, // "1": 프로그램, "2": 팝업
|
||||||
|
{ header: '실행 로그', name: 'execLogCont', minWidth: 150 },
|
||||||
|
{
|
||||||
|
header: '배치 시작 일시',
|
||||||
|
name: 'batchStrtDttm',
|
||||||
|
align: 'center',
|
||||||
|
width: 160,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: '배치 종료 일시',
|
||||||
|
name: 'batchEndDttm',
|
||||||
|
align: 'center',
|
||||||
|
width: 160,
|
||||||
|
},
|
||||||
|
{ header: '등록자NO', name: 'regUserNo', width: 120 },
|
||||||
|
{ header: '등록일시', name: 'regDttm', align: 'center', width: 160 },
|
||||||
|
{ header: '수정자NO', name: 'procUserNo', width: 120 },
|
||||||
|
{ header: '수정일시', name: 'procDttm', align: 'center', width: 160 },
|
||||||
|
],
|
||||||
|
data: dataMockExample,
|
||||||
|
defaultRow: dataMockExample,
|
||||||
|
option: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -201,6 +248,14 @@ export default {
|
|||||||
init() {
|
init() {
|
||||||
// this.layoutInit();
|
// this.layoutInit();
|
||||||
this.gridInit();
|
this.gridInit();
|
||||||
|
|
||||||
|
// _this.pageData = {
|
||||||
|
// execRsltCdList: [
|
||||||
|
// { commCd: '1', commCdNm: '성공' },
|
||||||
|
// { commCd: '2', commCdNm: '실패' },
|
||||||
|
// ],
|
||||||
|
// };
|
||||||
|
|
||||||
},
|
},
|
||||||
// layoutInit() {
|
// layoutInit() {
|
||||||
// const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
|
// const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
|
||||||
@ -297,7 +352,7 @@ export default {
|
|||||||
|
|
||||||
// 엑셀 다운로드용 데이터 재정렬
|
// 엑셀 다운로드용 데이터 재정렬
|
||||||
this.xlsDataBind(res);
|
this.xlsDataBind(res);
|
||||||
this.rowGridOrigin = Utility.copyObj(newRes);
|
// this.rowGridOrigin = Utility.copyObj(newRes);
|
||||||
this.setGridData({
|
this.setGridData({
|
||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
value: newRes,
|
value: newRes,
|
||||||
@ -313,10 +368,13 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async getRowData(data) {
|
// async getRowData(data) {
|
||||||
|
async getRowData() {
|
||||||
|
console.log("something")
|
||||||
this.setPageData({
|
this.setPageData({
|
||||||
rowGridSelectKey: data.rowKey,
|
// rowGridSelectKey: data.rowKey,
|
||||||
rowGridSelectData: data,
|
rowGridSelectKey: 1,
|
||||||
|
rowGridSelectData: fakeRowData,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
compareData(type, newDt) {
|
compareData(type, newDt) {
|
||||||
@ -423,13 +481,86 @@ const defaultData = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const dataMockExample = [
|
||||||
|
{
|
||||||
|
batchLogSeq: 1,
|
||||||
|
batchId: 'BATCH001',
|
||||||
|
batchNm: '일일 데이터 백업',
|
||||||
|
execDt: '2025-07-15',
|
||||||
|
execRsltCd: '1', // sẽ được formatter thành "성공" hoặc tương tự
|
||||||
|
execLogCont: '백업 완료. 오류 없음.',
|
||||||
|
batchStrtDttm: '2025-07-15 01:00:00',
|
||||||
|
batchEndDttm: '2025-07-15 01:30:00',
|
||||||
|
regUserNo: 'admin01',
|
||||||
|
regDttm: '2025-07-15 01:00:00',
|
||||||
|
procUserNo: 'admin02',
|
||||||
|
procDttm: '2025-07-15 01:35:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
batchLogSeq: 2,
|
||||||
|
batchId: 'BATCH002',
|
||||||
|
batchNm: '월간 리포트 생성',
|
||||||
|
execDt: '2025-07-01',
|
||||||
|
execRsltCd: '2',
|
||||||
|
execLogCont: '리포트 생성 중 오류 발생: 파일 접근 실패.',
|
||||||
|
batchStrtDttm: '2025-07-01 03:00:00',
|
||||||
|
batchEndDttm: '2025-07-01 03:10:00',
|
||||||
|
regUserNo: 'reportUser',
|
||||||
|
regDttm: '2025-07-01 03:00:00',
|
||||||
|
procUserNo: 'admin03',
|
||||||
|
procDttm: '2025-07-01 03:15:00',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
batchLogSeq: 3,
|
||||||
|
batchId: 'BATCH003',
|
||||||
|
batchNm: '사용자 통계 갱신',
|
||||||
|
execDt: '2025-07-14',
|
||||||
|
execRsltCd: '1',
|
||||||
|
execLogCont: '통계 갱신 완료.',
|
||||||
|
batchStrtDttm: '2025-07-14 23:00:00',
|
||||||
|
batchEndDttm: '2025-07-14 23:20:00',
|
||||||
|
regUserNo: 'statUser',
|
||||||
|
regDttm: '2025-07-14 23:00:00',
|
||||||
|
procUserNo: 'admin01',
|
||||||
|
procDttm: '2025-07-14 23:25:00',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const fakeRowData = {
|
||||||
|
rowKey: 1,
|
||||||
|
batchLogSeq: 1,
|
||||||
|
batchId: 'BATCH001',
|
||||||
|
batchNm: '일일 데이터 백업',
|
||||||
|
execDt: '2025-07-15',
|
||||||
|
execRsltCd: '1',
|
||||||
|
execLogCont: JSON.stringify({
|
||||||
|
session: {
|
||||||
|
userNo: 'admin01',
|
||||||
|
userNm: '관리자',
|
||||||
|
comId: 'SKCC',
|
||||||
|
locale: 'ko_KR',
|
||||||
|
},
|
||||||
|
batch: {
|
||||||
|
comId: 'SKCC',
|
||||||
|
totStdDt: '20230110',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
batchStrtDttm: '2025-07-15 01:00:00',
|
||||||
|
batchEndDttm: '2025-07-15 01:30:00',
|
||||||
|
regUserNo: 'admin01',
|
||||||
|
regDttm: '2025-07-15 01:00:00',
|
||||||
|
procUserNo: 'admin02',
|
||||||
|
procDttm: '2025-07-15 01:35:00',
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const myDetail = [
|
const myDetail = [
|
||||||
{
|
{
|
||||||
type: 'TextArea',
|
type: 'TextArea',
|
||||||
valueNm: 'execLogCont',
|
valueNm: 'execLogCont',
|
||||||
readonly: true,
|
readonly: true,
|
||||||
cols: 12,
|
cols: 12,
|
||||||
class: 'py-2',
|
class: 'py-2 transparent',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
|
||||||
<!-- 리스트 페이지 시작 -->
|
<!-- 리스트 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'list'" class="h1001">
|
<div v-if="pageActionFlag == 'list'" class="h1001">
|
||||||
<v-card class="" >
|
<v-card class="" >
|
||||||
@ -15,10 +14,10 @@
|
|||||||
<!-- <v-btn @click="listPageButtonGroupClickEvent('delete')" :ripple="false">삭제</v-btn> -->
|
<!-- <v-btn @click="listPageButtonGroupClickEvent('delete')" :ripple="false">삭제</v-btn> -->
|
||||||
</div>
|
</div>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" ref="contents" class="mt-5" style="min-height: calc(100% - 76px);">
|
<v-col :cols="12" ref="contents" class="mt-5">
|
||||||
<div ref="gridParent" class="px-50" style="min-height: 70vh;">
|
<div ref="gridParent" class="h100 px-50">
|
||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
<component :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
||||||
@getRowsData="getRowData" />
|
ref="noticeMngGrid" @getRowsData="getRowData" :dataPath="dataPathMock" />
|
||||||
</div>
|
</div>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
@ -27,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 리스트 페이지 끝 -->
|
<!-- 리스트 페이지 끝 -->
|
||||||
<!-- 상세보기 페이지 시작 -->
|
<!-- 상세보기 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'view'" >
|
<div v-if="pageActionFlag == 'view'" class="h1001">
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-row class="pa-5">
|
<v-row class="pa-5">
|
||||||
<v-col :cols="12" class="d-flex align-center justify-space-between ">
|
<v-col :cols="12" class="d-flex align-center justify-space-between ">
|
||||||
@ -45,25 +44,25 @@
|
|||||||
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button>
|
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button>
|
||||||
</div>
|
</div>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" class="mt-5">
|
<v-col :cols="12">
|
||||||
<v-card-title class="custom-title-6 pa-0">{{ viewActionData.title }}</v-card-title>
|
<p class="custom-title-3 mb-2"> 제목 </p>
|
||||||
|
<v-text-field v-model="viewActionData.title" class="v-input__custom" hide-details :readonly="true">
|
||||||
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" style="min-height: 30vh;" class="pa-0">
|
<v-col :cols="12" style="min-height:calc(90vh - 218px);" class="pa-5">
|
||||||
<viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit"
|
<viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit"
|
||||||
:initialValue="viewActionData.content" theme="white"
|
:initialValue="viewActionData.content" theme="white"
|
||||||
:class="[isDarkMode ? 'theme--white' : 'theme--black', 'custom-view pa-3']" />
|
:class="isDarkMode ? 'theme--white' : 'theme--black'" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="6" class="mt-5">
|
<v-col :cols="6">
|
||||||
<v-card-title class="custom-title-7 pa-0">
|
<p class="custom-title-3 mb-2">파일목록</p>
|
||||||
파일목록
|
|
||||||
</v-card-title>
|
|
||||||
<div v-for="fileData in viewActionData.fileData"
|
<div v-for="fileData in viewActionData.fileData"
|
||||||
:key="fileData.apndFileId"
|
:key="fileData.apndFileId"
|
||||||
class="file-item">
|
class="file-item">
|
||||||
<a @click.prevent="downloadFile(fileData)">
|
<a @click.prevent="downloadFile(fileData)">
|
||||||
<div class="d-flex justify-start search-box-label">
|
<div class="d-flex justify-space-between search-box-label">
|
||||||
<v-icon>mdi-paperclip</v-icon>
|
<v-icon>mdi-paperclip</v-icon>
|
||||||
<span class="file-item-name ml-2">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span>
|
<span class="file-item-name">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -73,24 +72,28 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 상세보기 페이지 끝 -->
|
<!-- 상세보기 페이지 끝 -->
|
||||||
<!-- 작성 페이지 시작 -->
|
<!-- 작성 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'write'" >
|
<div v-if="pageActionFlag == 'write'" class="h1001">
|
||||||
<v-card>
|
<v-card>
|
||||||
<div class="pa-5">
|
<div class="pa-5">
|
||||||
<v-row class="pa-50">
|
<v-row class="pa-50">
|
||||||
<v-col :cols="12" class="">
|
<v-col :cols="12" class="">
|
||||||
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" class="mt-4">
|
<v-col :cols="12" class="custom-title-4-new mt-4">
|
||||||
<v-card-title class="custom-title-7 pa-0">제목</v-card-title>
|
<p class="custom-title-3 mb-2">제목</p>
|
||||||
<v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined>
|
<v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined>
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" style="min-height: calc(100vh - 450px);">
|
<v-col :cols="12" style="min-height: calc(90vh - 270px);">
|
||||||
<editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" />
|
<editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" />
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<v-col :cols="6" class="mt-5">
|
<v-col :cols="12" class="mt-2">
|
||||||
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
|
<p class="custom-title-3 mb-2">
|
||||||
|
파일첨부
|
||||||
|
</p>
|
||||||
|
</v-col>
|
||||||
|
<v-col :cols="6">
|
||||||
<div class="" v-if="writeActionData.fileData">
|
<div class="" v-if="writeActionData.fileData">
|
||||||
<div
|
<div
|
||||||
v-for="(fileData, index) in writeActionData.fileData"
|
v-for="(fileData, index) in writeActionData.fileData"
|
||||||
@ -126,23 +129,25 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 작성 페이지 끝 -->
|
<!-- 작성 페이지 끝 -->
|
||||||
<!-- 답글 작성 페이지 시작 -->
|
<!-- 답글 작성 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'reply'" >
|
<div v-if="pageActionFlag == 'reply'" class="h1001">
|
||||||
<v-card class="pa-5">
|
<v-card class="pa-5">
|
||||||
<v-row align="center" class="mt-0">
|
<v-row align="center" class="mt-0">
|
||||||
<v-col :cols="12" class="">
|
<v-col :cols="12" class="">
|
||||||
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" class="mt-4">
|
<v-col :cols="12">
|
||||||
<v-card-title class="custom-title-7 pa-0">제목</v-card-title>
|
<p class="custom-title-3 mb-2">제목</p>
|
||||||
<v-text-field v-model="replyActionData.title" class="v-input__custom" outlined
|
<v-text-field v-model="replyActionData.title" class="v-input__custom" placeholder="제목" outlined
|
||||||
hide-details>
|
hide-details>
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-2">
|
<v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-2">
|
||||||
<editor ref="tuiReplyEditor" height="100%" initialEditType="wysiwyg" />
|
<editor ref="tuiReplyEditor" height="100%" initialEditType="wysiwyg" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="6" class="mt-5">
|
<v-col :cols="6" class="mt-4">
|
||||||
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
|
<p class="custom-title-3 mb-2">
|
||||||
|
파일첨부
|
||||||
|
</p>
|
||||||
<div class="" v-if="replyActionData.fileData">
|
<div class="" v-if="replyActionData.fileData">
|
||||||
<div
|
<div
|
||||||
v-for="(fileData, index) in replyActionData.fileData"
|
v-for="(fileData, index) in replyActionData.fileData"
|
||||||
@ -170,7 +175,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 답글 작성 페이지 끝 -->
|
<!-- 답글 작성 페이지 끝 -->
|
||||||
<!-- 수정 페이지 시작 -->
|
<!-- 수정 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'update'" >
|
<div v-if="pageActionFlag == 'update'" class="h1001">
|
||||||
<v-card>
|
<v-card>
|
||||||
<div class="pa-5">
|
<div class="pa-5">
|
||||||
<v-row align="center" no-gutters>
|
<v-row align="center" no-gutters>
|
||||||
@ -178,16 +183,16 @@
|
|||||||
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" class="mt-4">
|
<v-col :cols="12" class="mt-4">
|
||||||
<v-card-title class="custom-title-7 pa-0">제목</v-card-title>
|
<p class="custom-title-3 mb-2">제목</p>
|
||||||
<v-text-field v-model="updateActionData.title" class="v-input__custom" hide-details outlined>
|
<v-text-field v-model="updateActionData.title" class="v-input__custom" placeholder="" hide-details outlined>
|
||||||
</v-text-field>
|
</v-text-field>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="12" style="height: calc(90vh - 270px);" class="mt-4" >
|
<v-col :cols="12" style="height: calc(90vh - 270px);" class="mt-4" >
|
||||||
<editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg"
|
<editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg"
|
||||||
:initialValue="updateActionData.content" />
|
:initialValue="updateActionData.content" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="6" class="mt-5">
|
<v-col :cols="6">
|
||||||
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
|
<p class="pa-0 mb-2 custom-title-4-new-1">파일첨부</p>
|
||||||
<div class="" v-if="updateActionData.fileData">
|
<div class="" v-if="updateActionData.fileData">
|
||||||
<div
|
<div
|
||||||
v-for="(fileData, index) in updateActionData.fileData"
|
v-for="(fileData, index) in updateActionData.fileData"
|
||||||
@ -261,8 +266,7 @@ export default {
|
|||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
//comId: "SEMPIO",
|
//comId: "SEMPIO",
|
||||||
//comId: this.userInfo.comId,
|
//comId: this.userInfo.comId,
|
||||||
// comId: this.$store.state.userInfo.comId,
|
comId: this.$store.state.userInfo.comId,
|
||||||
|
|
||||||
bordNo: null,
|
bordNo: null,
|
||||||
pageActionFlag: 'list',
|
pageActionFlag: 'list',
|
||||||
gridName: 'noticeMngGrid',
|
gridName: 'noticeMngGrid',
|
||||||
@ -398,6 +402,7 @@ export default {
|
|||||||
this.getGridData();
|
this.getGridData();
|
||||||
},
|
},
|
||||||
gridInit() {
|
gridInit() {
|
||||||
|
this.loadGrid = false;
|
||||||
const gridHeight = this.$refs.contents.offsetHeight - 76;
|
const gridHeight = this.$refs.contents.offsetHeight - 76;
|
||||||
|
|
||||||
const myOptions = {};
|
const myOptions = {};
|
||||||
@ -461,6 +466,13 @@ export default {
|
|||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
value: columnList,
|
value: columnList,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// -----------------------TEST------------------
|
||||||
|
this.dataPathMock[this.gridName] = {
|
||||||
|
column: columnList,
|
||||||
|
data: dataPathDataExample,
|
||||||
|
}
|
||||||
|
// -----------------------END TEST--------------
|
||||||
this.getGridData();
|
this.getGridData();
|
||||||
},
|
},
|
||||||
async getGridData() {
|
async getGridData() {
|
||||||
@ -469,13 +481,23 @@ export default {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.loadGrid = false;
|
this.loadGrid = false;
|
||||||
|
let res = null;
|
||||||
|
try {
|
||||||
|
res = await this.postApiReturn({
|
||||||
|
apiKey: 'selectPostList',
|
||||||
|
resKey: 'postData',
|
||||||
|
sendParam: params,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) { }
|
||||||
|
finally {
|
||||||
|
// -----Test mock data-------------
|
||||||
|
if (null === res) {
|
||||||
|
res = dataPathDataExample;
|
||||||
|
}
|
||||||
|
// -----End test
|
||||||
|
}
|
||||||
|
|
||||||
const res = await this.postApiReturn({
|
|
||||||
apiKey: 'selectPostList',
|
|
||||||
resKey: 'postData',
|
|
||||||
sendParam: params,
|
|
||||||
});
|
|
||||||
|
|
||||||
this.setGridData({
|
this.setGridData({
|
||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
value: res,
|
value: res,
|
||||||
@ -1046,19 +1068,4 @@ const dataPathDataExample = getPathDataExample({
|
|||||||
color: #1677FF;
|
color: #1677FF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::v-deep {
|
|
||||||
.v-input__slot {
|
|
||||||
padding-left: 8px;
|
|
||||||
padding-right: 8px;
|
|
||||||
}
|
|
||||||
.custom-view {
|
|
||||||
border: 1px solid;
|
|
||||||
border-radius: 6px;
|
|
||||||
height: 100%;
|
|
||||||
@each $theme in dark, light {
|
|
||||||
@include theme($theme);
|
|
||||||
border-color: map-deep-get($config, #{$theme}, "v-input-textarea-border");;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
<v-row ref="contents">
|
<v-row ref="contents">
|
||||||
<!-- 프로그램 리스트 -->
|
<!-- 프로그램 리스트 -->
|
||||||
<v-col :cols="5" >
|
<v-col :cols="5" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-5">
|
<div class="d-flex align-center justify-space-between pa-5">
|
||||||
<v-card-title class="pa-0">프로그램 리스트</v-card-title>
|
<v-card-title class="pa-0">프로그램 리스트</v-card-title>
|
||||||
@ -50,7 +50,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="min-height: 60vh">
|
<div style="min-height:calc(100% - 70px)">
|
||||||
<div ref="gridParent" class="px-5 h100">
|
<div ref="gridParent" class="px-5 h100">
|
||||||
<component
|
<component
|
||||||
:ref="gridName"
|
:ref="gridName"
|
||||||
@ -65,7 +65,7 @@
|
|||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<!-- 프로그램 상세 -->
|
<!-- 프로그램 상세 -->
|
||||||
<v-col :cols="7" >
|
<v-col :cols="7" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-5">
|
<div class="d-flex align-center justify-space-between pa-5">
|
||||||
<v-card-title class="pa-0">프로그램 상세</v-card-title>
|
<v-card-title class="pa-0">프로그램 상세</v-card-title>
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
:gridName="gridName"
|
:gridName="gridName"
|
||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
@getRowsData="getRowData"
|
@getRowsData="getRowData"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -136,10 +137,24 @@ export default {
|
|||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
gridName: 'rowGrid',
|
gridName: 'rowGrid',
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
tab: null,
|
tab: null,
|
||||||
detailList: myDetail,
|
detailList: myDetail,
|
||||||
initedFlag: false,
|
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: {
|
computed: {
|
||||||
@ -336,7 +351,8 @@ export default {
|
|||||||
this.search();
|
this.search();
|
||||||
},
|
},
|
||||||
async search() {
|
async search() {
|
||||||
this.loadGrid = false;
|
//process
|
||||||
|
this.loadGrid = true;
|
||||||
await this.getRowGridData();
|
await this.getRowGridData();
|
||||||
await this.setPageData({
|
await this.setPageData({
|
||||||
isFind: false,
|
isFind: false,
|
||||||
@ -626,7 +642,43 @@ const myDetail = [
|
|||||||
placeholder: '시스템 자동입력',
|
placeholder: '시스템 자동입력',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const dataMockExample = [
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP001',
|
||||||
|
addInfoId: 'INFO001',
|
||||||
|
addInfoNm: '온도 센서',
|
||||||
|
addInfoDataKind: 'DATA01',
|
||||||
|
useFg: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP002',
|
||||||
|
addInfoId: 'INFO002',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA02',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP003',
|
||||||
|
addInfoId: 'INFO003',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA03',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP004',
|
||||||
|
addInfoId: 'INFO004',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA04',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
addGrpId: 'GRP005',
|
||||||
|
addInfoId: 'INFO005',
|
||||||
|
addInfoNm: '압력 센서',
|
||||||
|
addInfoDataKind: 'DATA05',
|
||||||
|
useFg: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
|
||||||
@import '@/assets/scss/common.scss';
|
|
||||||
</style>
|
|
||||||
|
@ -745,6 +745,7 @@ export default {
|
|||||||
if (this.$refs.gridParent != undefined) {
|
if (this.$refs.gridParent != undefined) {
|
||||||
// gridHeight = gridHeight*0.9
|
// gridHeight = gridHeight*0.9
|
||||||
gridHeight = this.$refs.gridParent.offsetHeight - 35;
|
gridHeight = this.$refs.gridParent.offsetHeight - 35;
|
||||||
|
// console.log("gridHeight : ", gridHeight);
|
||||||
}
|
}
|
||||||
const myOptions = {
|
const myOptions = {
|
||||||
// scrollX: false,
|
// scrollX: false,
|
||||||
@ -958,6 +959,7 @@ export default {
|
|||||||
title: "Energy Usage",
|
title: "Energy Usage",
|
||||||
isDarkMode: this.isDarkMode,
|
isDarkMode: this.isDarkMode,
|
||||||
});
|
});
|
||||||
|
console.log("charto:", chartOption);
|
||||||
chartOption["series"][0]["data"][0].value =
|
chartOption["series"][0]["data"][0].value =
|
||||||
res[0]["effcRt"] != null ? res[0]["effcRt"] : 0;
|
res[0]["effcRt"] != null ? res[0]["effcRt"] : 0;
|
||||||
this.$store.state.pageData[myPrgmId][this.chart_01] = chartOption;
|
this.$store.state.pageData[myPrgmId][this.chart_01] = chartOption;
|
||||||
@ -1164,6 +1166,7 @@ export default {
|
|||||||
// series: seriesData,
|
// series: seriesData,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
|
console.log("chart 5 data:", seriesData);
|
||||||
await this.$nextTick(() => {});
|
await this.$nextTick(() => {});
|
||||||
this.setChartOption({
|
this.setChartOption({
|
||||||
chartKey: "compareEqpmTGdChart",
|
chartKey: "compareEqpmTGdChart",
|
||||||
@ -1646,6 +1649,7 @@ export default {
|
|||||||
}[state];
|
}[state];
|
||||||
},
|
},
|
||||||
chartClickEvent(argData, $event) {
|
chartClickEvent(argData, $event) {
|
||||||
|
// console.log('chartClickEvent', argData);
|
||||||
let pageMapper = {
|
let pageMapper = {
|
||||||
dashBoard_enrgUsageGauge: {
|
dashBoard_enrgUsageGauge: {
|
||||||
pageName: "ems-effc-EnrgUseTotSummPage",
|
pageName: "ems-effc-EnrgUseTotSummPage",
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
<v-row ref="searchFilter">
|
||||||
<v-row ref="searchFilter" class="mt-2">
|
|
||||||
<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>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
<v-row ref="searchFilter">
|
||||||
<v-row ref="searchFilter" class="mt-2">
|
|
||||||
<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>
|
||||||
@ -20,7 +19,7 @@
|
|||||||
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :labelCols="12"
|
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :labelCols="12"
|
||||||
:textCols="12" :customClass="'select-large'" :iconShow="true" />
|
:textCols="12" :customClass="'select-large'" :iconShow="true" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="2.5" class="pr-4">
|
<v-col :cols="2.5">
|
||||||
<InputText :parentPrgmId="myPrgmId" label="검침개소명" valueNm="readPlcNm" :labelCols="12"
|
<InputText :parentPrgmId="myPrgmId" label="검침개소명" valueNm="readPlcNm" :labelCols="12"
|
||||||
:textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" />
|
:textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" />
|
||||||
</v-col>
|
</v-col>
|
||||||
@ -31,25 +30,25 @@
|
|||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row ref="contents" class="mt-3">
|
<v-row ref="contents" class="mt-4">
|
||||||
<v-col :cols="5" class="h100 pr-2">
|
<v-col :cols="5" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-4 pb-6">
|
<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>
|
<v-card-title class="pa-0 custom-title-4">검침개소 정보</v-card-title>
|
||||||
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
||||||
:btnActionsFnc="btnActions" />
|
:btnActionsFnc="btnActions" />
|
||||||
</div>
|
</div>
|
||||||
<div class="px-4" style="height:calc(100% - 76px)">
|
<div class="px-4">
|
||||||
<div ref="gridParent" class="w100 h100">
|
<div ref="gridParent" class="w100 h100">
|
||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
|
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
|
||||||
:parentPrgmId="myPrgmId" @getRowsData="getRowData"
|
:parentPrgmId="myPrgmId" @getRowsData="getRowData"
|
||||||
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
|
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
|
||||||
/>
|
:dataPath="dataPathExample" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="7" class="h100 pl-2">
|
<v-col :cols="7" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<v-card-title class="custom-title-4 pb-1 pa-4">검침개소 상세
|
<v-card-title class="custom-title-4 pb-1 pa-4">검침개소 상세
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
@ -135,7 +134,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
gridName: 'rowGrid',
|
gridName: 'rowGrid',
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
tab: null,
|
tab: null,
|
||||||
isImgTabDisabled: false,
|
isImgTabDisabled: false,
|
||||||
items: [
|
items: [
|
||||||
@ -158,6 +157,47 @@ export default {
|
|||||||
],
|
],
|
||||||
detailList: myDetail,
|
detailList: myDetail,
|
||||||
defaultUseFg: 1,
|
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
|
// loadTree: false
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
@ -272,18 +312,18 @@ export default {
|
|||||||
},
|
},
|
||||||
async initData() {
|
async initData() {
|
||||||
let ercList = [];
|
let ercList = [];
|
||||||
const res = await this.postApiReturn({
|
// const res = await this.postApiReturn({
|
||||||
apiKey: 'selectErcInfo',
|
// apiKey: 'selectErcInfo',
|
||||||
resKey: 'ercInfoData',
|
// resKey: 'ercInfoData',
|
||||||
sendParam: {
|
// sendParam: {
|
||||||
blocId: this.userInfo.blocId,
|
// blocId: this.userInfo.blocId,
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
res.forEach(item => {
|
// res.forEach(item => {
|
||||||
const it = { text: item.ercNm, value: item.ercId };
|
// const it = { text: item.ercNm, value: item.ercId };
|
||||||
ercList.push(it);
|
// ercList.push(it);
|
||||||
});
|
// });
|
||||||
this.setPageData({ ercNmList: ercList });
|
// this.setPageData({ ercNmList: ercList });
|
||||||
},
|
},
|
||||||
gridInit() {
|
gridInit() {
|
||||||
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
|
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
|
||||||
@ -294,12 +334,10 @@ export default {
|
|||||||
resizable: true,
|
resizable: true,
|
||||||
},
|
},
|
||||||
treeColumnOptions: {
|
treeColumnOptions: {
|
||||||
name: 'readPlcNm',
|
name: 'eccNm', // Showing tree table
|
||||||
|
useIcon: false, // Not using icon
|
||||||
|
indentWidth: 10,
|
||||||
},
|
},
|
||||||
header: {
|
|
||||||
height: 37,
|
|
||||||
},
|
|
||||||
rowHeight: 37,
|
|
||||||
};
|
};
|
||||||
this.setGridOption({
|
this.setGridOption({
|
||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
@ -470,12 +508,12 @@ export default {
|
|||||||
this.$refs[this.gridName].focus({
|
this.$refs[this.gridName].focus({
|
||||||
rowKey:
|
rowKey:
|
||||||
this.pageData.rowGridSelectKey == '' ||
|
this.pageData.rowGridSelectKey == '' ||
|
||||||
this.pageData.rowGridSelectKey == null
|
this.pageData.rowGridSelectKey == null
|
||||||
? 0
|
? 0
|
||||||
: this.pageData.rowGridSelectKey ==
|
: this.pageData.rowGridSelectKey ==
|
||||||
this.$refs[this.gridName].getData().length - 1
|
this.$refs[this.gridName].getData().length - 1
|
||||||
? this.pageData.rowGridSelectKey
|
? this.pageData.rowGridSelectKey
|
||||||
: 0,
|
: 0,
|
||||||
columnName: 'readPlcNm',
|
columnName: 'readPlcNm',
|
||||||
setScroll: true,
|
setScroll: true,
|
||||||
});
|
});
|
||||||
@ -493,7 +531,7 @@ export default {
|
|||||||
if (this.tab == 2) {
|
if (this.tab == 2) {
|
||||||
this.tab = 0;
|
this.tab = 0;
|
||||||
}
|
}
|
||||||
this.isImgTabDisabled = false;
|
this.isImgTabDisabled = true;
|
||||||
} else {
|
} else {
|
||||||
this.isImgTabDisabled = false;
|
this.isImgTabDisabled = false;
|
||||||
}
|
}
|
||||||
@ -961,6 +999,18 @@ const sampleData = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const myOptions = {
|
||||||
|
columnOptions: {
|
||||||
|
resizable: true,
|
||||||
|
},
|
||||||
|
treeColumnOptions: {
|
||||||
|
name: 'readPlcNm', // Showing tree table
|
||||||
|
useIcon: false, // Not using icon
|
||||||
|
indentWidth: 10,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
const myDetail = [
|
const myDetail = [
|
||||||
{
|
{
|
||||||
type: 'InputText',
|
type: 'InputText',
|
||||||
|
@ -996,3 +996,6 @@ const myDetail = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
@import '@/assets/scss/common.scss';
|
||||||
|
</style>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="mainDiv" class="l-layout">
|
<div ref="mainDiv" class="l-layout">
|
||||||
<CommonPageTitle />
|
<v-row ref="searchFilter">
|
||||||
<v-row ref="searchFilter" class="mt-2">
|
|
||||||
<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>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<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">
|
||||||
@ -35,23 +34,23 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row ref="contents">
|
<v-row ref="contents">
|
||||||
<v-col :cols="5" >
|
<v-col :cols="5" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-5">
|
<div class="d-flex align-center justify-space-between pa-5">
|
||||||
<v-card-title class="pa-0 custom-title-4">설비 정보</v-card-title>
|
<v-card-title class="pa-0 custom-title-4">설비 정보</v-card-title>
|
||||||
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
||||||
:btnActionsFnc="btnActions" />
|
:btnActionsFnc="btnActions" />
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" class="px-5" style="min-height:60vh;">
|
<div class="px-5" style="min-height:calc(100% - 76px)">
|
||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
<div ref="gridParent" class="w100 h100">
|
||||||
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
||||||
:selectedRowDataWatchFlag="true" :preventFocusChangeEventFlag="false" />
|
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
||||||
<!-- <div ref="gridParent" class="w100 h100">
|
:selectedRowDataWatchFlag="true" :preventFocusChangeEventFlag="false" :dataPath="dataPathMock" />
|
||||||
</div> -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="7" >
|
<v-col :cols="7" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title>
|
<v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title>
|
||||||
<div class="px-5" style="min-height:calc(100% - 76px)">
|
<div class="px-5" style="min-height:calc(100% - 76px)">
|
||||||
@ -288,7 +287,7 @@ export default {
|
|||||||
blocId: this.userInfo.blocId,
|
blocId: this.userInfo.blocId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
// console.log('res : ', res);
|
console.log('res : ', res);
|
||||||
res.map(item => {
|
res.map(item => {
|
||||||
const it = { text: item.ercNm, value: item.ercId };
|
const it = { text: item.ercNm, value: item.ercId };
|
||||||
ercList.push(it);
|
ercList.push(it);
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="mainDiv" class="l-layout">
|
<div ref="mainDiv" class="l-layout">
|
||||||
<CommonPageTitle />
|
<v-row ref="searchFilter">
|
||||||
<v-row ref="searchFilter" class="mt-2">
|
|
||||||
<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>
|
||||||
@ -42,7 +41,7 @@
|
|||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
|
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
|
||||||
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
|
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex py-4 mt-4" >
|
<div class="d-flex py-4" >
|
||||||
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
|
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
|
||||||
@gridEditingFinish="gridEditingFinish" />
|
@gridEditingFinish="gridEditingFinish" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="mainDiv" class="l-layout">
|
<div ref="mainDiv" class="l-layout">
|
||||||
<CommonPageTitle />
|
<v-row ref="searchFilter">
|
||||||
<v-row ref="searchFilter" class="mt-2">
|
|
||||||
<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>
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
customClass="select-large"
|
customClass="select-large"
|
||||||
/>
|
/>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="3">
|
<v-col :cols="3">
|
||||||
<InputText
|
<InputText
|
||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
label="검침대상명"
|
label="검침대상명"
|
||||||
@ -59,16 +59,19 @@
|
|||||||
:btnActionsFnc="btnActions"
|
:btnActionsFnc="btnActions"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" class="h100 px-5" style="height:calc(100% - 70px)">
|
<div class="h100 px-5" style="height:calc(100% - 70px)">
|
||||||
<component
|
<div ref="gridParent" class="w100 h100">
|
||||||
:ref="gridName"
|
<component
|
||||||
:is="loadGrid ? 'Grid' : null"
|
:ref="gridName"
|
||||||
:gridName="gridName"
|
:is="loadGrid ? 'Grid' : null"
|
||||||
:parentPrgmId="myPrgmId"
|
:gridName="gridName"
|
||||||
@getRowsData="getRowData"
|
:parentPrgmId="myPrgmId"
|
||||||
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
@getRowsData="getRowData"
|
||||||
:selectedRowDataWatchFlag="true"
|
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
||||||
/>
|
:selectedRowDataWatchFlag="true"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
@ -78,7 +81,7 @@
|
|||||||
>검침대상 상세
|
>검침대상 상세
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
<div class="px-5" style="height:calc(100% - 76px)">
|
<div class="px-5" style="height:calc(100% - 76px)">
|
||||||
<v-tabs v-model="tab">
|
<v-tabs v-model="tab" >
|
||||||
<v-tab
|
<v-tab
|
||||||
v-for="item in items"
|
v-for="item in items"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@ -185,8 +188,26 @@ export default {
|
|||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
gridName: 'rowGrid',
|
gridName: 'rowGrid',
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
tab: null,
|
tab: null,
|
||||||
|
dataPathMock: {
|
||||||
|
"rowGrid": {
|
||||||
|
column: [
|
||||||
|
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
|
||||||
|
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
|
||||||
|
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
|
||||||
|
{ header: '그룹', name: 'grpCd', align: 'left' },
|
||||||
|
{ header: 'TJ 환산계수', name: 'tjCvrtCoef', align: 'right' },
|
||||||
|
{ header: 'TOE 환산계수', name: 'toeCvrtCoef', align: 'right' },
|
||||||
|
{ header: 'CO2 환산계수', name: 'co2CvrtCoef', align: 'right' },
|
||||||
|
{ header: '단위', name: 'unitCd', align: 'left' },
|
||||||
|
{ header: '사용 여부', name: 'useFg', align: 'center' },
|
||||||
|
],
|
||||||
|
data: dataPathDataExample,
|
||||||
|
defaultRow: dataPathDataExample,
|
||||||
|
option: {}
|
||||||
|
}
|
||||||
|
},
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
name: '검침 대상 정보',
|
name: '검침 대상 정보',
|
||||||
@ -405,6 +426,8 @@ export default {
|
|||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.loadGrid = true;
|
||||||
|
|
||||||
this.search();
|
this.search();
|
||||||
},
|
},
|
||||||
async getRowGridData() {
|
async getRowGridData() {
|
||||||
@ -433,9 +456,8 @@ export default {
|
|||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
value: newRes,
|
value: newRes,
|
||||||
});
|
});
|
||||||
console.log('-------DEBUG-----newRes: ', newRes);
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.loadGrid = true;
|
|
||||||
if (newRes.length > 0) {
|
if (newRes.length > 0) {
|
||||||
try {
|
try {
|
||||||
this.$refs[this.gridName].focus({
|
this.$refs[this.gridName].focus({
|
||||||
@ -702,8 +724,8 @@ const defaultData = {
|
|||||||
},
|
},
|
||||||
buttonAuth: {
|
buttonAuth: {
|
||||||
add: true,
|
add: true,
|
||||||
remove: true,
|
|
||||||
save: true,
|
save: true,
|
||||||
|
remove: true,
|
||||||
excel: false,
|
excel: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -851,7 +873,40 @@ const myDetail = [
|
|||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
const dataPathDataExample = [
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ001',
|
||||||
|
readObjNm: '서울 본사',
|
||||||
|
readObjKind: 'TYPE01',
|
||||||
|
grpCd: 'GRP01',
|
||||||
|
tjCvrtCoef: 1.25,
|
||||||
|
toeCvrtCoef: 0.85,
|
||||||
|
co2CvrtCoef: 2.1,
|
||||||
|
unitCd: 'kWh',
|
||||||
|
useFg: '1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ002',
|
||||||
|
readObjNm: '부산 지사',
|
||||||
|
readObjKind: 'TYPE02',
|
||||||
|
grpCd: 'GRP02',
|
||||||
|
tjCvrtCoef: 1.10,
|
||||||
|
toeCvrtCoef: 0.90,
|
||||||
|
co2CvrtCoef: 1.8,
|
||||||
|
unitCd: 'MJ',
|
||||||
|
useFg: '0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
readObjId: 'OBJ003',
|
||||||
|
readObjNm: '대전 공장',
|
||||||
|
readObjKind: 'TYPE03',
|
||||||
|
grpCd: 'GRP01',
|
||||||
|
tjCvrtCoef: 1.30,
|
||||||
|
toeCvrtCoef: 0.95,
|
||||||
|
co2CvrtCoef: 2.3,
|
||||||
|
unitCd: 'GJ',
|
||||||
|
useFg: '1',
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
|
||||||
@import '@/assets/scss/common.scss';
|
|
||||||
</style>
|
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
<!-- <h2 class="title">
|
||||||
|
<v-icon small color="primary" class="mr-1">mdi-circle</v-icon>
|
||||||
|
계량 데이터 마감 관리
|
||||||
|
</h2> -->
|
||||||
|
<PageTitle text="계량 데이터 마감 관리" />
|
||||||
|
|
||||||
<v-row ref="searchFilter">
|
<v-row ref="searchFilter">
|
||||||
<!-- 조회조견 -->
|
<!-- 조회조견 -->
|
||||||
<v-col :cols="12">
|
<v-col :cols="12">
|
||||||
@ -70,8 +75,8 @@
|
|||||||
</v-row>
|
</v-row>
|
||||||
<v-row ref="contents">
|
<v-row ref="contents">
|
||||||
<!-- 일일검침정보 목록-->
|
<!-- 일일검침정보 목록-->
|
||||||
<v-col :cols="12">
|
<v-col :cols="12" class="h100">
|
||||||
<v-card class="pb-5 w100">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-5">
|
<div class="d-flex align-center justify-space-between pa-5">
|
||||||
<v-card-title class="custom-title-4 pa-0">일일검침정보</v-card-title>
|
<v-card-title class="custom-title-4 pa-0">일일검침정보</v-card-title>
|
||||||
<div class="d-flex align-center">
|
<div class="d-flex align-center">
|
||||||
@ -86,18 +91,20 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
:ripple="false"
|
:ripple="false"
|
||||||
@click="saveReadResultCloseMng('N')"
|
@click="saveReadResultCloseMng('N')"
|
||||||
|
>일마감</a-button
|
||||||
>
|
>
|
||||||
일마감
|
|
||||||
</a-button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" class="px-5 w100" style="min-height: 60vh">
|
<div class="px-5" style="min-height: calc(100% - 76px)">
|
||||||
|
<div ref="gridParent" class="h100 w100">
|
||||||
<component
|
<component
|
||||||
:is="loadGrid ? 'Grid' : null"
|
:is="loadGrid ? 'Grid' : null"
|
||||||
:ref="gridName"
|
:ref="gridName"
|
||||||
:parentPrgmId="myPrgmId"
|
:parentPrgmId="myPrgmId"
|
||||||
:gridName="gridName"
|
:gridName="gridName"
|
||||||
|
:dataPath="dataPathMock"
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
@ -116,6 +123,7 @@ import selectCodeList from "@/components/common/select/selectCodeList";
|
|||||||
import SelectMttList from "@/components/common/select/SelectMttList";
|
import SelectMttList from "@/components/common/select/SelectMttList";
|
||||||
import Datepicker from "~/components/common/Datepicker";
|
import Datepicker from "~/components/common/Datepicker";
|
||||||
import BtnExcelDownload from "~/components/common/button/BtnExcelDownload";
|
import BtnExcelDownload from "~/components/common/button/BtnExcelDownload";
|
||||||
|
import PageTitle from "~/components/common/PageTitle";
|
||||||
|
|
||||||
let myTitle;
|
let myTitle;
|
||||||
// const myPrgmId = "PRG0018";
|
// const myPrgmId = "PRG0018";
|
||||||
@ -143,12 +151,13 @@ export default {
|
|||||||
Datepicker,
|
Datepicker,
|
||||||
Search,
|
Search,
|
||||||
Grid,
|
Grid,
|
||||||
|
PageTitle,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
myPrgmId: myPrgmId,
|
myPrgmId: myPrgmId,
|
||||||
gridName: "rowGrid",
|
gridName: "rowGrid",
|
||||||
loadGrid: false,
|
loadGrid: true,
|
||||||
dataPathMock: {
|
dataPathMock: {
|
||||||
rowGrid: {
|
rowGrid: {
|
||||||
column: [
|
column: [
|
||||||
@ -251,6 +260,7 @@ export default {
|
|||||||
gridKey: this.gridName,
|
gridKey: this.gridName,
|
||||||
value: myColumns,
|
value: myColumns,
|
||||||
});
|
});
|
||||||
|
this.loadGrid = true;
|
||||||
},
|
},
|
||||||
async search() {
|
async search() {
|
||||||
await this.getRowGridData();
|
await this.getRowGridData();
|
||||||
@ -278,12 +288,8 @@ export default {
|
|||||||
mgnf: item.mgnf || 0,
|
mgnf: item.mgnf || 0,
|
||||||
})),
|
})),
|
||||||
});
|
});
|
||||||
// console.log('--------------DEBUG-----res-------', res);
|
|
||||||
}
|
}
|
||||||
this.setPageData({ isFind: false });
|
this.setPageData({ isFind: false });
|
||||||
this.$nextTick(() => {
|
|
||||||
this.loadGrid = true;
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
//전월 or 일 마감--------------------------------------------------------------------------------------------
|
//전월 or 일 마감--------------------------------------------------------------------------------------------
|
||||||
async saveReadResultCloseMng(mnthYn) {
|
async saveReadResultCloseMng(mnthYn) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
|
||||||
<!-- Dataset 페이지 시작 -->
|
<!-- Dataset 페이지 시작 -->
|
||||||
<div v-if="pageActionFlag == 'list'" class="h100">
|
<div v-if="pageActionFlag == 'list'" class="h100">
|
||||||
<v-row ref="searchFilter">
|
<v-row ref="searchFilter">
|
||||||
@ -35,23 +34,23 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row ref="contents">
|
<v-row ref="contents">
|
||||||
<v-col :cols="5" >
|
<v-col :cols="5" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<div class="d-flex align-center justify-space-between pa-5">
|
<div class="d-flex align-center justify-space-between pa-5">
|
||||||
<v-card-title class="pa-0 custom-title-4">Data Set 리스트</v-card-title>
|
<v-card-title class="pa-0 custom-title-4">Data Set 리스트</v-card-title>
|
||||||
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
|
||||||
:btnActionsFnc="btnActions" />
|
:btnActionsFnc="btnActions" />
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" class="px-5" style="min-height: 60vh">
|
<div class="px-5" style="min-height:calc(100% - 76px)">
|
||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
<div ref="gridParent" class="w100 h100">
|
||||||
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
||||||
:selectedRowDataWatchFlag="true" />
|
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
|
||||||
<!-- <div ref="gridParent" class="w100 h100">
|
:selectedRowDataWatchFlag="true" />
|
||||||
</div> -->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="7" >
|
<v-col :cols="7" class="h100">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5">
|
||||||
<v-card-title class="custom-title-4" style="min-height:76px;">Data Set 상세
|
<v-card-title class="custom-title-4" style="min-height:76px;">Data Set 상세
|
||||||
</v-card-title>
|
</v-card-title>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<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">
|
||||||
@ -159,8 +158,8 @@ export default {
|
|||||||
},
|
},
|
||||||
async created() { },
|
async created() { },
|
||||||
async mounted() {
|
async mounted() {
|
||||||
// this.initTest();
|
this.initTest();
|
||||||
// return;
|
return;
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
// document.querySelector('.icon_arrow').style.width = document.querySelector('.iconArrowCols').clientWidth-20 + "px";
|
// document.querySelector('.icon_arrow').style.width = document.querySelector('.iconArrowCols').clientWidth-20 + "px";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="l-layout">
|
<div class="l-layout">
|
||||||
<CommonPageTitle />
|
<PageTitle text="효율성 지표 보고서" />
|
||||||
<v-row ref="searchFilter">
|
<v-row ref="searchFilter">
|
||||||
<v-col :cols="12">
|
<v-col :cols="12">
|
||||||
<v-card class="searchFilter">
|
<v-card class="searchFilter">
|
||||||
@ -98,6 +98,7 @@ import Chart from '~/components/common/Chart';
|
|||||||
import EqpmSelectPop from '~/components/common/modal/EqpmSelectPop';
|
import EqpmSelectPop from '~/components/common/modal/EqpmSelectPop';
|
||||||
import DateUtility from '~/plugins/dateUtility';
|
import DateUtility from '~/plugins/dateUtility';
|
||||||
import XLSX from 'xlsx';
|
import XLSX from 'xlsx';
|
||||||
|
import PageTitle from "~/components/common/PageTitle";
|
||||||
|
|
||||||
let myTitle;
|
let myTitle;
|
||||||
let myPrgmId;
|
let myPrgmId;
|
||||||
@ -129,6 +130,7 @@ export default {
|
|||||||
EqpmSelectPop,
|
EqpmSelectPop,
|
||||||
DateUtility,
|
DateUtility,
|
||||||
XLSX,
|
XLSX,
|
||||||
|
PageTitle,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="mainDiv" class="l-layout">
|
<div ref="mainDiv" class="l-layout">
|
||||||
<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">
|
||||||
@ -10,20 +9,20 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="2.5">
|
<v-col :cols="2.5">
|
||||||
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01"
|
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01"
|
||||||
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" customClass="select-large" />
|
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="2.5">
|
<v-col :cols="2.5">
|
||||||
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" :itemList="selectValueList02"
|
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" :itemList="selectValueList02"
|
||||||
:label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="false" customClass="select-large"/>
|
:label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="false" />
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col :cols="2.5">
|
<v-col :cols="2.5">
|
||||||
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03" :itemList="selectValueList03"
|
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03" :itemList="selectValueList03"
|
||||||
:label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" customClass="select-large" />
|
:label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" />
|
||||||
</v-col>
|
</v-col>
|
||||||
|
|
||||||
<BtnSearch size="large" @click="search" />
|
<BtnSearch @click="search" />
|
||||||
<!-- <v-col>
|
<v-col>
|
||||||
</v-col> -->
|
</v-col>
|
||||||
<component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId"
|
<component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId"
|
||||||
@gridEditingFinish="gridEditingFinish" />
|
@gridEditingFinish="gridEditingFinish" />
|
||||||
</v-row>
|
</v-row>
|
||||||
@ -31,15 +30,18 @@
|
|||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
<v-row ref="contents">
|
<v-row ref="contents">
|
||||||
<v-col :cols="12" >
|
<v-col :cols="12" style="height: 100%">
|
||||||
<v-card class="pb-5">
|
<v-card class="pb-5 h100">
|
||||||
<div class="d-flex align-center justify-space-between pa-4">
|
<div class="d-flex align-center justify-space-between pa-4">
|
||||||
<v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title>
|
<v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title>
|
||||||
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
|
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
|
||||||
</div>
|
</div>
|
||||||
<div ref="gridParent" class="px-5" style="min-height: 60vh;">
|
<div class="h100 px-5" style="height:calc(100% - 70px)">
|
||||||
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
<div ref="gridParent" class="w100 h100">
|
||||||
:editorGrid="true" @getRowsData="getRowData" />
|
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
|
||||||
|
:editorGrid="true" @getRowsData="getRowData" :dataPath="dataPathMock" />
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
@ -169,8 +171,8 @@ export default {
|
|||||||
created() { },
|
created() { },
|
||||||
async mounted() {
|
async mounted() {
|
||||||
// -------
|
// -------
|
||||||
// this.initTest();
|
this.initTest();
|
||||||
// return;
|
return;
|
||||||
// ========End test===========
|
// ========End test===========
|
||||||
await this.init();
|
await this.init();
|
||||||
this.initedFlag = true;
|
this.initedFlag = true;
|
||||||
@ -418,25 +420,53 @@ export default {
|
|||||||
|
|
||||||
class CustumButton {
|
class CustumButton {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
// v-btn v-btn--is-elevated v-btn--has-bg theme--dark v-size--default
|
||||||
|
const el = document.createElement('button');
|
||||||
const { grid, rowKey, columnInfo } = props;
|
const { grid, rowKey, columnInfo } = props;
|
||||||
|
|
||||||
const gridData = grid.store.data.rawData;
|
$(el).addClass('tui-grid-cell-content');
|
||||||
const value = gridData[rowKey][columnInfo.name];
|
// $(el).css('text-align', 'center');
|
||||||
|
el.classList.add('v-btn');
|
||||||
|
// el.style.width = '80%';
|
||||||
|
// el.style.height = '80%';
|
||||||
|
// el.style.boxShadow = '0px 0px 0px 2px #cbced6';
|
||||||
|
// el.style.background = 'linear-gradient(to bottom, #242940 5%, #476e9e 100%)';
|
||||||
|
// el.style.backgroundColor = '#144985';
|
||||||
|
el.style.borderRadius = '7px';
|
||||||
|
el.style.border = '1px solid #4e6096';
|
||||||
|
// el.style.display = 'inline-block';
|
||||||
|
// el.style.cursor = 'pointer';
|
||||||
|
el.style.color = '#ffffff';
|
||||||
|
// el.style.fontFamily = 'Arial';
|
||||||
|
el.style.padding = '6% 3%';
|
||||||
|
|
||||||
|
// el.style.textDecoration = 'none';
|
||||||
|
// el.style.textShadow = '0px 1px 0px #283966';
|
||||||
|
|
||||||
|
el.innerText = columnInfo.renderer.options.value;
|
||||||
|
this.el = el;
|
||||||
this.disabled = columnInfo.renderer.options.disabled || false;
|
this.disabled = columnInfo.renderer.options.disabled || false;
|
||||||
const elDiv = document.createElement('div');
|
|
||||||
elDiv.innerHTML = `<span>${value}</span>`;
|
|
||||||
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
|
|
||||||
const el2 = document.createElement('button');
|
|
||||||
$(el2).addClass('edit-btn blue--text');
|
|
||||||
el2.innerText = 'Edit';
|
|
||||||
elDiv.appendChild(el2);
|
|
||||||
|
|
||||||
this.el = elDiv;
|
|
||||||
|
|
||||||
if (!this.disabled) {
|
if (!this.disabled) {
|
||||||
|
// hover 기능 구현
|
||||||
|
this.el.addEventListener('mouseover', function (event) {
|
||||||
|
// console.log('darkModeFg', _this.darkModeFg);
|
||||||
|
// console.log('event',event.fromElement);
|
||||||
|
// console.log('event',document.defaultView.getComputedStyle(el).getPropertyValue('background-color'));
|
||||||
|
// rgb(85, 130, 220) // light
|
||||||
|
// el.style.backgroundColor = '#26578F'; // rgb(20, 73, 133) // dark
|
||||||
|
// let btnColor = _this.darkModeFg? {mouseOver: '#26578F', mouseOut: '#144985'} : {mouseOver: 'rgb(85, 130, 220)', mouseOut: 'rgb(71, 119, 217)'};
|
||||||
|
// el.style.backgroundColor = btnColor['mouseOver'];
|
||||||
|
});
|
||||||
|
this.el.addEventListener('mouseout', function (event) {
|
||||||
|
// rgb(71, 119, 217) // light
|
||||||
|
// el.style.backgroundColor = '#144985'; // dark
|
||||||
|
// console.log('event',event.fromElement);
|
||||||
|
// let btnColor = _this.darkModeFg? {mouseOver: '#26578F', mouseOut: '#144985'} : {mouseOver: 'rgb(85, 130, 220)', mouseOut: 'rgb(71, 119, 217)'};
|
||||||
|
// el.style.backgroundColor = btnColor['mouseOut'];
|
||||||
|
});
|
||||||
// click 이벤트
|
// click 이벤트
|
||||||
el2.addEventListener('click', function (event) {
|
this.el.addEventListener('click', function (event) {
|
||||||
let gridData = grid.store.data.rawData;
|
let gridData = grid.store.data.rawData;
|
||||||
let rowNum = gridData[rowKey].rowNum;
|
let rowNum = gridData[rowKey].rowNum;
|
||||||
let selectedGridData = gridData.filter(item => {
|
let selectedGridData = gridData.filter(item => {
|
||||||
@ -507,25 +537,18 @@ export default {
|
|||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
// hidden: true,
|
// hidden: true,
|
||||||
// formatter: ({ value, row }) => {
|
formatter: ({ value, row }) => {
|
||||||
// return `
|
return `
|
||||||
// <span>${value}</span>
|
<span>${value}</span>
|
||||||
// <button class="edit-btn" data-row='${JSON.stringify(row)}'>Edit</button>
|
<button class="edit-btn" data-row='${JSON.stringify(row)}'>Edit</button>
|
||||||
// `;
|
`;
|
||||||
// }
|
}
|
||||||
renderer: {
|
|
||||||
type: CustumButton,
|
|
||||||
options: {
|
|
||||||
value: '계획수정',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: '',
|
header: '',
|
||||||
name: 'btnCol',
|
name: 'btnCol',
|
||||||
width: 70,
|
width: 70,
|
||||||
align: 'center',
|
align: 'center',
|
||||||
hidden: true,
|
|
||||||
renderer: {
|
renderer: {
|
||||||
type: CustumButton,
|
type: CustumButton,
|
||||||
options: {
|
options: {
|
||||||
|
@ -198,6 +198,7 @@ export default {
|
|||||||
async asyncData(context) {
|
async asyncData(context) {
|
||||||
const myState = context.store.state;
|
const myState = context.store.state;
|
||||||
myPrgmId = context.route.query.prgmId;
|
myPrgmId = context.route.query.prgmId;
|
||||||
|
console.log("menudata:", myState.menuData[myPrgmId]);
|
||||||
await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
|
await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
|
||||||
myTitle = await myState.activeMenuInfo.menuNm;
|
myTitle = await myState.activeMenuInfo.menuNm;
|
||||||
},
|
},
|
||||||
@ -521,6 +522,7 @@ export default {
|
|||||||
async btnActions(action) {
|
async btnActions(action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case "add" /* */:
|
case "add" /* */:
|
||||||
|
console.log('aa:',this.tagList);
|
||||||
// if(this.pageData.totalSelectedTags.split('/*wq2a/').length>5){
|
// if(this.pageData.totalSelectedTags.split('/*wq2a/').length>5){
|
||||||
if (this.tagList.length >= 5) {
|
if (this.tagList.length >= 5) {
|
||||||
alert("TAG는 최대 5개까지 선택 가능합니다.");
|
alert("TAG는 최대 5개까지 선택 가능합니다.");
|
||||||
@ -800,6 +802,7 @@ export default {
|
|||||||
// data SeriesData 추가
|
// data SeriesData 추가
|
||||||
chartDataDict[dataTagTitle]["seriesData"] = seriesData;
|
chartDataDict[dataTagTitle]["seriesData"] = seriesData;
|
||||||
// data legend 추가
|
// data legend 추가
|
||||||
|
console.log("le dat:", legendData);
|
||||||
chartDataDict[dataTagTitle]["legendList"] = legendData;
|
chartDataDict[dataTagTitle]["legendList"] = legendData;
|
||||||
//
|
//
|
||||||
//rawData chart data 구성하기
|
//rawData chart data 구성하기
|
||||||
|
@ -52,4 +52,5 @@ use([
|
|||||||
// ToolboxComponent, // 그래프 이미지 save
|
// ToolboxComponent, // 그래프 이미지 save
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
console.log('echart plugin', echarts)
|
||||||
Vue.component('VChart', VChart);
|
Vue.component('VChart', VChart);
|
||||||
|
@ -10,7 +10,6 @@ import icoBulletPoint from '~/components/icons/icoBulletPoint';
|
|||||||
import icoChevronDown from '~/components/icons/icoChevronDown';
|
import icoChevronDown from '~/components/icons/icoChevronDown';
|
||||||
import icoSearch from '~/components/icons/icoSearch';
|
import icoSearch from '~/components/icons/icoSearch';
|
||||||
import icoSend from '~/components/icons/icoSend';
|
import icoSend from '~/components/icons/icoSend';
|
||||||
import icoExpandAlt from '~/components/icons/icoExpandAlt';
|
|
||||||
import '@mdi/font/css/materialdesignicons.css'; // Ensure you are using css-loader
|
import '@mdi/font/css/materialdesignicons.css'; // Ensure you are using css-loader
|
||||||
import 'material-design-icons-iconfont/dist/material-design-icons.css';
|
import 'material-design-icons-iconfont/dist/material-design-icons.css';
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
@ -74,9 +73,6 @@ export default new Vuetify({
|
|||||||
icoSend: {
|
icoSend: {
|
||||||
component: icoSend,
|
component: icoSend,
|
||||||
},
|
},
|
||||||
icoExpandAlt: {
|
|
||||||
component: icoExpandAlt,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -197,8 +197,8 @@ export const mutations = {
|
|||||||
|
|
||||||
// 페이지 그리드 데이터 set
|
// 페이지 그리드 데이터 set
|
||||||
setGridData: (state, payload) => {
|
setGridData: (state, payload) => {
|
||||||
// console.log('check:', state.pageData)
|
console.log('check:', state.pageData)
|
||||||
// console.log('payload:', payload)
|
console.log('payload:', payload)
|
||||||
// state.pageData['PRG0001']['dashBoard_grid_01'] = {
|
// state.pageData['PRG0001']['dashBoard_grid_01'] = {
|
||||||
// ...state.pageData['PRG0001']['dashBoard_grid_01'],
|
// ...state.pageData['PRG0001']['dashBoard_grid_01'],
|
||||||
// data: payload.value,
|
// data: payload.value,
|
||||||
|
Reference in New Issue
Block a user