Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729

This commit is contained in:
dev
2025-08-04 19:40:08 +09:00
42 changed files with 1704 additions and 2122 deletions

View File

@ -266,7 +266,7 @@ a {
} }
&>.v-treeview-node__root:hover:before { &>.v-treeview-node__root:hover:before {
opacity: 1 !important; opacity: 0 !important;
} }
.v-treeview-node__children { .v-treeview-node__children {
@ -280,13 +280,17 @@ a {
.v-treeview-node--click[aria-expanded="true"] { .v-treeview-node--click[aria-expanded="true"] {
&>.v-treeview-node__root:before { &>.v-treeview-node__root:before {
opacity: 1 !important; opacity: 0 !important;
} }
} }
.v-treeview-node[aria-expanded="true"] { .v-treeview-node[aria-expanded="true"] {
&>.v-treeview-node__root>.v-treeview-node__content>.v-treeview-node__label>button>.v-icon.mdi-chevron-down { &>.v-treeview-node__root>.v-treeview-node__content
transform: rotate(-180deg); >.v-treeview-node__label>button {
>.anticon,
>.v-icon.mdi-chevron-down {
transform: rotate(-180deg);
}
} }
} }
@ -298,15 +302,17 @@ a {
// justify-content: center; // justify-content: center;
} }
& .anticon,
& .v-icon.mdi-chevron-down { & .v-icon.mdi-chevron-down {
margin-left: auto; margin-left: auto;
animation-duration: 0.5s;
} }
} }
} }
.v-treeview-node--active { .v-treeview-node--active {
&:before { &:before {
opacity: 1 !important; opacity: 0 !important;
} }
} }
@ -322,7 +328,8 @@ a {
.v-treeview-node__content span:not(.v-icon), .v-treeview-node__content span:not(.v-icon),
.v-treeview-node__root>button, .v-treeview-node__root>button,
.v-treeview-node__level, .v-treeview-node__level,
.v-treeview-node__content .v-icon.mdi-chevron-down { .v-treeview-node__content .v-icon.mdi-chevron-down,
.v-treeview-node__content .anticon {
display: none; display: none;
} }
@ -474,7 +481,7 @@ a {
.header { .header {
background-color: map-deep-get($config, #{$theme}, "header-backgroud"); background-color: map-deep-get($config, #{$theme}, "header-backgroud");
border-color: #D3D6EA; border-bottom: 1px solid map-deep-get($config, #{$theme}, "v-header-border");
} }
.btn-header { .btn-header {
@ -489,6 +496,7 @@ a {
.menu-container { .menu-container {
height:calc(100vh - 60px); height:calc(100vh - 60px);
overflow-y: auto; overflow-y: auto;
border-right: 1px solid map-deep-get($config, #{$theme}, "v-sidebar-border") ;
} }
} }
@ -614,36 +622,36 @@ a {
.v-navigation-drawer__append { .v-navigation-drawer__append {
>p { >p {
@if $theme ==dark { color: map-deep-get($config, #{$theme}, "v-banner-border-color" ) !important;
color: rgba(255, 255, 255, 0.6); // @if $theme ==dark {
} // color: rgba(255, 255, 255, 0.6);
// }
@else { // @else {
color: #999; // color: #999;
} // }
} }
} }
.v-footer { // .v-footer {
@if $theme ==light { // @if $theme ==light {
background-color: #dfdfe5; // background-color: #dfdfe5;
color: #767d83; // color: #767d83;
} // }
} // }
.bd { // .bd {
@if $theme ==dark { // @if $theme ==dark {
&-r-1 { // &-r-1 {
border-right: 1px #373f45 solid; // border-right: 1px #373f45 solid;
} // }
} // }
// @else {
@else { // &-r-1 {
&-r-1 { // border-right: 1px #efefef solid;
border-right: 1px #efefef solid; // }
} // }
} // }
}
.border-bottom-1 { .border-bottom-1 {
border-bottom: 1px solid map-deep-get($config, #{$theme}, "border-color"); border-bottom: 1px solid map-deep-get($config, #{$theme}, "border-color");
@ -691,256 +699,224 @@ a {
} }
&>.v-treeview-node { &>.v-treeview-node {
&>.v-treeview-node__root { .v-treeview-node__root {
&:before { border-radius: 8px;
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-label-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-icon-color"
);
}
}
&:hover { &:hover {
&>.v-treeview-node__content { background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color" );
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-icon-active-color"
);
}
}
} }
} .v-treeview-node__content {
&>.v-treeview-node__children {
&>.v-treeview-node {
&>.v-treeview-node__root {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-color"
);
}
}
&:not(.v-treeview-node--active):hover {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
}
}
}
&>.v-treeview-node__children {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-subchildren-backgroundColor"
);
}
&>.v-treeview-node--active {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
}
}
}
&>.v-treeview-node__children {
& .v-treeview-node {
&>.v-treeview-node__root {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-color"
);
}
}
&:not(.v-treeview-node--active):hover {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
}
}
}
&>.v-treeview-node--active {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-bg"
);
border: 1px solid map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-border"
);
border-radius: 8px;
&:before {
opacity: 0 !important;
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
}
}
}
}
&[aria-expanded="true"] {
& .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-children-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
}
}
}
}
}
&[aria-expanded="true"] {
& .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
#{$theme},
"v-treeview-node-root-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-icon-active-color"
);
} }
} }
} }
&[aria-expanded="true"]{
// Level 1
&>.v-treeview-node__root {
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-bg" );
border: 1px solid map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border");
&:before {
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-subroot-backgroundColor");
}
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border");
}
.v-icon:first-child,
.v-icon:first-child::before {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
}
}
}
&>.v-treeview-node__children {
// Level 2
.v-treeview-node__root {
color: map-deep-get($config, #{$theme}, "v-treeview-node-root-label-color");
&:hover {
background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-backgroundColor");
}
}
&>[aria-expanded="true"] >.v-treeview-node__root,
.v-treeview-node__root.v-treeview-node--active {
background-color: map-deep-get($config, #{$theme}, "v-calendar-day-in-not-month-color" );
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "card-title-color");
}
.v-icon,
.v-icon::before,
.anticon {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
}
}
}
// Level 3
.v-treeview-node__children {
.v-treeview-node {
>.v-treeview-node__root {
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "card-default-color");
}
}
*:hover,
:hover {
border-width: 0;
}
&:hover {
border: 1px solid map-deep-get($config, #{$theme}, "v-input-textarea-border");
border-radius: 8px;
background-color: rgba(0, 0, 0, 0);
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
}
}
}
&.v-treeview-node--active {
// color: map-deep-get($config, #{$theme}, "card-title-color");
background-color: rgba(0, 0, 0, 0);
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
}
.v-icon,
.v-icon::before,
.anticon {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
}
}
}
}
}
}
}
}
// &>.v-treeview-node__root {
// &:before {
// background-color: map-deep-get($config, #{$theme}, "v-treeview-node-root-backgroundColor" );
// }
// &>.v-treeview-node__content {
// .v-treeview-node__label {
// color: map-deep-get($config, #{$theme}, "v-treeview-node-root-label-color");
// }
// }
// &:hover {
// &>.v-treeview-node__content {
// .v-treeview-node__label {
// color: map-deep-get($config,
// #{$theme},
// "v-treeview-node-root-label-active-color"
// );
// }
// .v-icon {
// color: map-deep-get($config,
// #{$theme},
// "v-treeview-node-root-icon-active-color"
// );
// }
// }
// }
// }
// &>.v-treeview-node__children {
// &>.v-treeview-node {
// &>.v-treeview-node__root {
// &:before {
// background-color: map-deep-get($config,
// #{$theme},
// "v-treeview-node-subroot-backgroundColor"
// );
// }
// &>.v-treeview-node__content {
// .v-treeview-node__label {
// color: map-deep-get($config, #{$theme}, "v-treeview-node-label-color" );
// }
// .v-icon {
// color: map-deep-get($config, #{$theme}, "v-treeview-icon-color" );
// }
// }
// &:not(.v-treeview-node--active):hover {
// &:before {
// background-color: map-deep-get($config,
// #{$theme},
// "v-treeview-leaf-active-backgroundColor"
// );
// }
// &>.v-treeview-node__content {
// .v-treeview-node__label {
// color: map-deep-get($config,
// #{$theme},
// "v-treeview-leaf-active-color"
// );
// }
// .v-icon {
// color: map-deep-get($config,
// #{$theme},
// "v-treeview-leaf-active-color"
// );
// }
// }
// }
// }
// &>.v-treeview-node__children {
// // background-color: map-deep-get($config,
// // #{$theme},
// // "v-treeview-leaf-subchildren-backgroundColor"
// // );
// }
// // &[aria-expanded="true"] {
// // & .v-treeview-node__root>.v-treeview-node__content {
// // .v-treeview-node__label {
// // color: map-deep-get($config,
// // #{$theme},
// // "v-treeview-node-label-children-color"
// // );
// // }
// // .v-icon {
// // color: map-deep-get($config,
// // #{$theme},
// // "v-treeview-icon-active-color"
// // );
// // }
// // }
// // }
// }
// }
} }
} }

View File

@ -98,6 +98,12 @@
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.tui-grid-content-area{
.tui-grid-header-area{
height: auto !important;
}
}
.grid-title { .grid-title {
font-weight: 600; font-weight: 600;
font-size: 16px; font-size: 16px;
@ -109,6 +115,15 @@
); );
} }
.grid-toggle-section{
.tui-grid-rside-area{
.tui-grid-body-area {
height: auto !important;
}
}
}
.tui-grid { .tui-grid {
&-table { &-table {
border: 1px solid; border: 1px solid;
@ -299,13 +314,13 @@
#{$theme}, #{$theme},
"tui-grid-cell-borderColor" "tui-grid-cell-borderColor"
); );
.tui-grid-cell-content { // .tui-grid-cell-content {
border-right: 1px solid ; // border-right: 1px solid ;
border-right-color: map-deep-get($config, // border-right-color: map-deep-get($config,
#{$theme}, // #{$theme},
"tui-grid-cell-borderColor" // "tui-grid-cell-borderColor"
); // );
} // }
} }
} }

View File

@ -174,6 +174,8 @@ $config: (
btn-header-select-bg: #1F1F1F, btn-header-select-bg: #1F1F1F,
btn-header-select-color:#FFFFFFD9, btn-header-select-color:#FFFFFFD9,
subtitle-tab: #FFFFFFA6, subtitle-tab: #FFFFFFA6,
v-header-border: #424242,
v-sidebar-border: #303030,
), ),
light: (w-g5: $--color-gray_555, light: (w-g5: $--color-gray_555,
g5-w: $--color-white, g5-w: $--color-white,
@ -312,5 +314,7 @@ $config: (
btn-header-select-color:#1F1F1F, btn-header-select-color:#1F1F1F,
btn-header-select-bg:#FFFFFF, btn-header-select-bg:#FFFFFF,
subtitle-tab: #000000A6, subtitle-tab: #000000A6,
v-header-border: #D9D9D9,
v-sidebar-border: #F0F0F0,
), ),
); );

View File

@ -4,12 +4,12 @@
:data="chkGridData" :data="chkGridData"
:columns="chkGridColumns" :columns="chkGridColumns"
:options="chkGridOptions" :options="chkGridOptions"
@mousedown="onMousedown"
@click="startEditing" @click="startEditing"
@editingFinish="editingFinish" @editingFinish="editingFinish"
@dblclick="dblClick" @dblclick="dblClick"
@mouseover="mouseoverEvent" @mouseover="mouseoverEvent"
@mouseout="mouseoutEvent" @mouseout="mouseoutEvent"
@mousedown="onMousedown"
@focusChange="focusChangeEvt" @focusChange="focusChangeEvt"
/> />
</template> </template>
@ -251,11 +251,9 @@ export default {
this.gridInstance.invoke('check', rowData.rowKey, instance); this.gridInstance.invoke('check', rowData.rowKey, instance);
}, },
setSelectionRange(rowKey) { setSelectionRange(rowKey) {
// console.log("------------------DEBUG-------setSelectionRange:", rowKey);
const rowDatas = this.gridInstance.invoke('getData'); const rowDatas = this.gridInstance.invoke('getData');
rowDatas.forEach(item => { rowDatas.forEach(item => {
if (item.rowKey == rowKey) { if (item.rowKey == rowKey) {
// console.log("------------------DEBUG-------setSelectionRange---item:", item);
this.gridInstance.invoke( this.gridInstance.invoke(
'addRowClassName', 'addRowClassName',
item.rowKey, item.rowKey,
@ -271,11 +269,14 @@ export default {
}); });
}, },
onMousedown(evt) { onMousedown(evt) {
// console.log("------------------DEBUG-------onMousedown:", evt); this.handleSelectedRow(evt);
this.focusChangeEvt(evt);
}, },
focusChangeEvt(e) { focusChangeEvt(e) {
// console.log("------------------DEBUG-------focusChangeEvt:", e); if(e.rowKey === 0) {
this.handleSelectedRow(e);
}
},
handleSelectedRow(e) {
// console.log('focusChangeEvt1...') // console.log('focusChangeEvt1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent focusChangeEvt') // console.log('prevent focusChangeEvt')
@ -283,7 +284,7 @@ export default {
} }
// console.log('focusChangeEvt2...') // console.log('focusChangeEvt2...')
// cell 선택시 row 선택 method // cell 선택시 row 선택 method
if (e.rowKey >= 0) { if (e.rowKey > -1) {
this.$emit( this.$emit(
'getRowsData', 'getRowsData',
this.gridInstance.invoke('getRow', e.rowKey), this.gridInstance.invoke('getRow', e.rowKey),
@ -296,7 +297,6 @@ export default {
this.sendSelectedRowData(e.rowKey); this.sendSelectedRowData(e.rowKey);
}, },
startEditing(e) { startEditing(e) {
// console.log("------------------DEBUG-------startEditing:", e);
// console.log('startEditing1...') // console.log('startEditing1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent startEditing') // console.log('prevent startEditing')
@ -323,7 +323,6 @@ export default {
} }
}, },
async editingFinish(e) { async editingFinish(e) {
// console.log('------------------DEBUG-------editingFinish:', e);
// console.log("Editing END E::", e); // console.log("Editing END E::", e);
// editor 간 이동시 수정되는 문제 수정 // editor 간 이동시 수정되는 문제 수정
// e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg // e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg
@ -685,7 +684,6 @@ export default {
? this.gridInstance.invoke('getFocusedCell').rowKey ? this.gridInstance.invoke('getFocusedCell').rowKey
: eventRowKey; : eventRowKey;
var rowData = this.gridInstance.invoke('getRow', rowKey); var rowData = this.gridInstance.invoke('getRow', rowKey);
// console.log('------------------DEBUG-------sendSelectedRowData:', {eventRowKey, rowKey});
this.$emit('sendSelectedRowStatInfo', rowData); this.$emit('sendSelectedRowStatInfo', rowData);
} }
}, },

View File

@ -9,7 +9,7 @@
</label> </label>
</v-col> </v-col>
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<div class="datepicker-container"> <div :class="['datepicker-container', customClass]" >
<v-text-field <v-text-field
id="startpicker" id="startpicker"
ref="startpicker" ref="startpicker"
@ -79,6 +79,10 @@ export default {
require: false, require: false,
default: 8, default: 8,
}, },
customClass: {
type: String,
require: false,
},
}, },
data() { data() {
return { return {

View File

@ -1,21 +1,8 @@
<template> <template>
<div class="d-flex flex-column justify-center align-center"> <div class="d-flex flex-row justify-center align-center" style="gap: 12px">
<!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')"> <a-button @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost :icon="icons.remove" >
<v-icon>mdi-chevron-right</v-icon>
</v-btn> -->
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost icon="right" >
</a-button> </a-button>
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost :icon="icons.add">
<!--<v-btn
icon
tile
:ripple="false"
class="mt-2"
@click="btnActionsFnc('removeRightToLeft')"
>
<v-icon>mdi-chevron-left</v-icon>
</v-btn> -->
<a-button class="mt-2" @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost icon="left">
</a-button> </a-button>
</div> </div>
</template> </template>
@ -38,8 +25,18 @@ export default {
type: Function, type: Function,
required: true, required: true,
}, },
directionBtn: {
type: String,
default: "horizontally" //horizontally, vertically.
}
},
computed: {
icons() {
return this.directionBtn === "vertically"
? { remove: "up", add: "down" }
: { remove: "left", add: "right" };
},
}, },
computed: {},
data() { data() {
return {}; return {};
}, },

View File

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

View File

@ -44,8 +44,7 @@
<v-card-title> <v-card-title>
<span class="custom-title-4">비밀번호 {{ isPassword }}</span> <span class="custom-title-4">비밀번호 {{ isPassword }}</span>
</v-card-title> </v-card-title>
<v-divider></v-divider> <v-card-text class="pb-4">
<v-card-text>
<v-col> <v-col>
<label for="" class="search-box-label"> <label for="" class="search-box-label">
{{ isPassword }} 비밀번호를 입력하세요 {{ isPassword }} 비밀번호를 입력하세요
@ -73,11 +72,10 @@
></v-text-field> ></v-text-field>
</v-col> </v-col>
</v-card-text> </v-card-text>
<v-divider></v-divider> <v-card-actions class="pb-4">
<v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<!-- <v-btn color="primary" dark @click="setUpdate()">확인</v-btn> --> <!-- <v-btn color="primary" dark @click="setUpdate()">확인</v-btn> -->
<div> <div class="pr-3">
<a-button @click="close()" class="btn-default">삭제</a-button> <a-button @click="close()" class="btn-default">삭제</a-button>
<a-button type="primary" @click="setUpdate()" class="v-btn-add-text"> <a-button type="primary" @click="setUpdate()" class="v-btn-add-text">
확인 확인

View File

@ -58,7 +58,7 @@
<div class="pa-5"> <div class="pa-5">
<!-- <v-text-field label="위치정보 선택"></v-text-field> --> <!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="label ? 3 : ''"> <v-col :cols="label ? 3 : ''" class="pr-3" >
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -66,41 +66,66 @@
dataKey="searchElecContKind" dataKey="searchElecContKind"
:sendParam="{ commGrpCd: 'EM_CONT', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_CONT', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="label ? 3 : ''"> <v-col :cols="label ? 3 : ''" class="pr-3" >
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:label="'전압구분'" :label="'전압구분'"
dataKey="searchVoltKind" dataKey="searchVoltKind"
:sendParam="{ commGrpCd: 'EM_VOLT_KIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_VOLT_KIND', useFg: '1' }"
:customClass="'select-large'"
:addAll="true" :addAll="true"
/> />
</v-col> </v-col>
<v-col :cols="label ? 3 : ''"> <v-col :cols="label ? 3 : ''" class="pr-3" >
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:label="'전압구분'" :label="'전압구분'"
dataKey="searchOptKind" dataKey="searchOptKind"
:sendParam="{ commGrpCd: 'EM_VOLT_OPT', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_VOLT_OPT', useFg: '1' }"
:customClass="'select-large'"
:addAll="true" :addAll="true"
/> />
</v-col> </v-col>
<v-col cols="3" class="text-right"> <v-col cols="3" class="text-right">
<v-btn <div style="height: 25px"></div>
<!-- <v-btn
v-if="!searchParam.isMulti" v-if="!searchParam.isMulti"
:ripple="false" :ripple="false"
@click="search()" @click="search()"
>검색</v-btn >검색</v-btn
> -->
<a-button
v-if="!searchParam.isMulti"
type="primary"
class="mr-1"
icon="search"
:ripple="false"
@click="search"
style="height: 40px"
> >
<v-btn 검색
</a-button>
<!-- <v-btn
v-if="!searchParam.isMulti" v-if="!searchParam.isMulti"
:ripple="false" :ripple="false"
@click="initVal()" @click="initVal()"
>초기화</v-btn >초기화</v-btn
> -->
<a-button
v-if="!searchParam.isMulti"
type="primary"
class="mr-1"
:ripple="false"
@click="initVal"
style="height: 40px"
> >
초기화
</a-button>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
@ -310,7 +335,11 @@ export default {
}, },
// 공정/설비 트리 그리드 세팅 // 공정/설비 트리 그리드 세팅
gridInit() { gridInit() {
const myOptions = {}; const myOptions = {
header: {
height: 38,
},
};
this.setModalGridOption({ this.setModalGridOption({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.gridName, gridKey: this.gridName,
@ -606,11 +635,11 @@ const myColumns = [
{ header: '전력계약 ID', name: 'eleclContId', hidden: true}, { header: '전력계약 ID', name: 'eleclContId', hidden: true},
{ header: '전력계약 명', name: 'eleclContNm', hidden: true}, { header: '전력계약 명', name: 'eleclContNm', hidden: true},
{ header: '전력계약구분CD', name: 'elecContKind', hidden: true}, { header: '전력계약구분CD', name: 'elecContKind', hidden: true},
{ header: '전력계약구분', name: 'elecContKindNm', align: 'center'}, { header: '전력계약구분', name: 'elecContKindNm', align: 'left'},
{ header: '전압구분CD', name: 'voltKind', hidden: true }, { header: '전압구분CD', name: 'voltKind', hidden: true },
{ header: '전압구분', name: 'voltKindNm', align: 'center' }, { header: '전압구분', name: 'voltKindNm', align: 'left' },
{ header: '옵션CD', name: 'optKind', hidden: true }, { header: '옵션CD', name: 'optKind', hidden: true },
{ header: '옵션', name: 'optKindNm', align: 'center' }, { header: '옵션', name: 'optKindNm', align: 'left' },
{ {
header: '기본요금(원/kW)', header: '기본요금(원/kW)',
name: 'baseChrg', name: 'baseChrg',
@ -620,7 +649,7 @@ const myColumns = [
}, },
}, },
{ header: '시간대CD', name: 'peakKind', hidden: true }, { header: '시간대CD', name: 'peakKind', hidden: true },
{ header: '시간대', name: 'peakKindNm', align: 'center' }, { header: '시간대', name: 'peakKindNm', align: 'left' },
{ {
header: '여름철(6~8월)', header: '여름철(6~8월)',
name: 'unitPrcSum', name: 'unitPrcSum',

View File

@ -16,54 +16,52 @@
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
<v-dialog ref="popModal" v-model="dialog" width="800" overlay-color="#000" overlay-opacity="0.8" scrollable> <v-dialog ref="popModal" v-model="dialog" width="800" scrollable>
<v-card style="height: 100%"> <v-card style="height: 90vh;">
<v-card-title class="px-5 py-4 d-flex align-center justify-space-between"> <v-card-title class="px-5 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">설비 선택</span> <span class="custom-title-4">설비 선택</span>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button> <a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title> </v-card-title>
<div class="pa-2 pt-0"> <div class="pa-2 pt-0">
<v-card class="searchFilter"> <!-- <v-card class="searchFilter">
<v-row align="end"> </v-card> -->
<v-col :cols="3.5"> <v-row align="end" class="searchFilter">
<!-- 설비그룹 --> <v-col :cols="3.5">
<component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01" <!-- 설비그룹 -->
:label="'설비그룹'" :disabled="eqpmGrpDisabled" <component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12" :label="'설비그룹'" :disabled="eqpmGrpDisabled"
:iconShow="true" /> @update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
</v-col> :iconShow="true" />
<v-col :cols="3.5"> </v-col>
<!-- FAB --> <v-col :cols="3.5">
<component :is="'SelectBoxMulti'" :propsValue="selectValue02" <!-- FAB -->
:itemList="selectValueList02" :label="'FAB'" :labelCols="12" :multiple="true" <component :is="'SelectBoxMulti'" :propsValue="selectValue02"
:disabled="fabDisabled" @update:propsValue="selectValue02 = $event" :textCols="12" :itemList="selectValueList02" :label="'FAB'" :labelCols="12" :multiple="true"
:iconShow="true" /> :disabled="fabDisabled" @update:propsValue="selectValue02 = $event" :textCols="12"
</v-col> :iconShow="true" />
<v-col :cols="3.5"> </v-col>
<v-row> <v-col :cols="3.5">
<v-col :cols="12" class="py-0"> <v-row>
<label for="" class="search-box-label"> <v-col :cols="12" class="py-0">
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon> <label for="" class="search-box-label">
설비명 <v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
</label> 설비명
</v-col> </label>
<v-col :cols="12" class="pt-0"> </v-col>
<v-text-field append-icon="" class="v-input__custom" outlined <v-col :cols="12" class="pt-0">
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template <v-text-field append-icon="" class="v-input__custom" outlined
v-slot:append> :hide-details="true" v-model="searchWord" @keyup.enter="search"><template
<!-- Custom SVG icon --> v-slot:append>
<v-icon>$icoSearch</v-icon> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
</v-row> </v-row>
</v-col> </v-col>
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button> <a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
</v-row>
</v-row>
</v-card>
<!-- <v-row align="center" no-gutters style="margin-top: 14px;"> <!-- <v-row align="center" no-gutters style="margin-top: 14px;">
<v-col :cols="1"> <v-col :cols="1">
@ -77,14 +75,20 @@
:hide-details="true" v-model="searchWord" @keyup.enter="search"></v-text-field> :hide-details="true" v-model="searchWord" @keyup.enter="search"></v-text-field>
</v-col> </v-col>
</v-row> --> </v-row> -->
<!-- <v-row>
<v-col :col="12">
</v-col>
</v-row> -->
</div> </div>
<div class="px-5" style="height:429px;">
<div ref="modalGridParent" class="w100 h100"> <v-card-text class="px-2 w100">
<div ref="modalGridParent" style="height: 450px;" class="h100 w100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" <component :ref="gridName" :is="loadGrid ? 'Grid' : null"
:dataPath="searchParam.eqpmSelectPopData.eqpmSelectPop" :gridName="gridName" :dataPath="searchParam.eqpmSelectPopData.eqpmSelectPop" :gridName="gridName"
:parentPrgmId="parentPrgmId" @getRowsData="getRowData" /> :parentPrgmId="parentPrgmId" @getRowsData="getRowData" />
</div> </div>
</div> </v-card-text>
<v-card-actions class="px-6 py-4 d-flex align-center justify-end"> <v-card-actions class="px-6 py-4 d-flex align-center justify-end">
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button> <a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button> <a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>

View File

@ -280,52 +280,41 @@ export default {
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,
modalDataKey: this.modalDataKey, modalDataKey: this.modalDataKey,
value: [{ header: '위치정보', name: 'eccNm' }], value: [
{
align: 'center',
width: 30,
minWidth: 60,
formatter: (props) => {
return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
}
},
{ header: '위치정보', name: 'eccNm' }
],
}); });
}, },
async getGridData() { async getGridData() {
// this.loadGrid = false; this.loadGrid = false;
// const res = await this.postApiReturn({ const res = await this.postApiReturn({
// apiKey: 'selectEccBaseInfo', apiKey: 'selectEccBaseInfo',
// resKey: 'eccBaseInfoData', resKey: 'eccBaseInfoData',
// sendParam: { sendParam: {
// blocId: this.myBindingData.blocId, blocId: this.myBindingData.blocId,
// eqpmYn: '0', eqpmYn: '0',
// search: this.searchWord, search: this.searchWord,
// }, },
// }); });
// const setTreeData = await this.setTree({ const setTreeData = await this.setTree({
// gridKey: this.gridNameTree, gridKey: this.gridNameTree,
// treeKey: 'ECC_ID', treeKey: 'ECC_ID',
// value: res.map(item => ({ value: res.map(item => ({
// ...item,
// eccNm: item.eccNm,
// })),
// });
//mockdata eccNm
let res = [
{ ECC_ID: 'ECC001', eccNm: '서울 본사', iconShow: false, align: 'center' },
{ ECC_ID: 'ECC002', eccNm: '부산 지사', useIcon: false, align: 'center' },
{ ECC_ID: 'ECC003', eccNm: '대구 센터', useIcon: false, align: 'center' },
{ ECC_ID: 'ECC004', eccNm: '광주 사무소' , useIcon: false, align: 'center'},
{ ECC_ID: 'ECC005', eccNm: '인천 물류창고' , useIcon: false, align: 'center'},
];
const setTreeData = {
ROOT: res.map(item => ({
...item, ...item,
eccNm: item.eccNm, eccNm: item.eccNm,
})) })),
}; });
// console.log(res);
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,

View File

@ -273,9 +273,9 @@ export default {
}); });
}, },
async created() { async created() {
// await this.setSelectValueList01(); await this.setSelectValueList01();
// await this.setSelectValueList02(); await this.setSelectValueList02();
// await this.setSelectValueList03(); await this.setSelectValueList03();
this.init(); this.init();
// if(this.searchParam.isMulti == true){ // if(this.searchParam.isMulti == true){
// this.setPageData({ // this.setPageData({
@ -487,40 +487,40 @@ export default {
eqpmId: this.selectValue03, eqpmId: this.selectValue03,
searchWord: this.searchWord, searchWord: this.searchWord,
}; };
let res = [ // let res = [
{ // {
eqpmGrpNm: "냉각 시스템", // eqpmGrpNm: "냉각 시스템",
eqpmGrpId: "GRP001", // eqpmGrpId: "GRP001",
eqpmId: "EQ001", // eqpmId: "EQ001",
eqpmNm: "냉각기 A", // eqpmNm: "냉각기 A",
tagId: "TAG001-001", // tagId: "TAG001-001",
tagNm: "냉각 온도 센서", // tagNm: "냉각 온도 센서",
rowStat: "I", // rowStat: "I",
}, // },
{ // {
eqpmGrpNm: "전력 시스템", // eqpmGrpNm: "전력 시스템",
eqpmGrpId: "GRP002", // eqpmGrpId: "GRP002",
eqpmId: "EQ002", // eqpmId: "EQ002",
eqpmNm: "변압기 B", // eqpmNm: "변압기 B",
tagId: "TAG002-002", // tagId: "TAG002-002",
tagNm: "전류 센서", // tagNm: "전류 센서",
rowStat: "U", // rowStat: "U",
}, // },
{ // {
eqpmGrpNm: "공기압 시스템", // eqpmGrpNm: "공기압 시스템",
eqpmGrpId: "GRP003", // eqpmGrpId: "GRP003",
eqpmId: "EQ003", // eqpmId: "EQ003",
eqpmNm: "압축기 C", // eqpmNm: "압축기 C",
tagId: "TAG003-003", // tagId: "TAG003-003",
tagNm: "압력 센서", // tagNm: "압력 센서",
rowStat: "D", // rowStat: "D",
}, // },
]; // ];
// res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: "selectTagAndEqpmList", apiKey: "selectTagAndEqpmList",
// resKey: "tagTrndDatas", resKey: "tagTrndDatas",
// sendParam: searchParam, sendParam: searchParam,
// }); });
let newRes = []; let newRes = [];
if (this.searchParam["tagList"].length > 0) { if (this.searchParam["tagList"].length > 0) {
newRes = res.filter((item) => { newRes = res.filter((item) => {

View File

@ -38,7 +38,7 @@
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import Buttons from '~/components/common/button/Buttons'; import Buttons from '~/components/common/button/Buttons';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import { CustumChecbox } from '~/plugins/gridUtility'; import { CustomCheckbox } from '~/plugins/gridUtility';
import { CustomNumberEditor } from '~/plugins/gridUtility'; import { CustomNumberEditor } from '~/plugins/gridUtility';
import Form from '~/components/common/form/Form'; import Form from '~/components/common/form/Form';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';

View File

@ -96,20 +96,20 @@ export default {
watch: { watch: {
selectedEqpmKindId(val) { selectedEqpmKindId(val) {
if (val) { if (val) {
this.detailList[2].eqpmKindId = val; this.detailList[1].eqpmKindId = val;
} }
}, },
selectedEqpmGrpId(val) { selectedEqpmGrpId(val) {
// if(!val){ // if(!val){
// this.detailList[2].eqpmGrpId = ''; // this.detailList[1].eqpmGrpId = '';
// }else{ // }else{
// this.detailList[2].eqpmGrpId = val; // this.detailList[1].eqpmGrpId = val;
// } // }
// if(val){ // if(val){
// this.detailList[2].eqpmGrpId = val; // this.detailList[1].eqpmGrpId = val;
// } // }
// else if(val == null || val == ''){ // else if(val == null || val == ''){
// this.detailList[2].eqpmGrpId = ''; // this.detailList[1].eqpmGrpId = '';
// } // }
}, },
}, },
@ -238,10 +238,10 @@ export default {
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
if (data.rowStat === 'I') { if (data.rowStat === 'I') {
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
} else { } else {
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
} }
@ -257,12 +257,12 @@ export default {
switch (action) { switch (action) {
case 'add': case 'add':
this.$refs[this.gridName].addRow(); this.$refs[this.gridName].addRow();
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
break; break;
case 'remove': case 'remove':
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.$refs[this.gridName].removeRow(); this.$refs[this.gridName].removeRow();
break; break;
@ -358,7 +358,6 @@ const myEqpmConstDetail = [
{ {
type: 'SelectBox', type: 'SelectBox',
label: '대상 유형', label: '대상 유형',
disabled: true,
cols: 6, cols: 6,
class: 'py-3 pr-4', class: 'py-3 pr-4',
list: 'emMapDivList2', list: 'emMapDivList2',
@ -371,6 +370,7 @@ const myEqpmConstDetail = [
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
}, },
// ==================
{ {
type: 'EgrpPysclQtyPop', type: 'EgrpPysclQtyPop',
labelContent: '물리량', labelContent: '물리량',
@ -382,7 +382,7 @@ const myEqpmConstDetail = [
pysclQtyNm: 'pysclQtyNm', pysclQtyNm: 'pysclQtyNm',
}, },
valueNm: 'objId', valueNm: 'objId',
disabled: false, disabled: true,
required: true, required: true,
openMode: 'CONST', openMode: 'CONST',
cols: 6, cols: 6,
@ -413,6 +413,7 @@ const myEqpmConstDetail = [
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
}, },
// ------------
{ {
type: 'InputText', type: 'InputText',
label: '물리량 값', label: '물리량 값',

View File

@ -18,7 +18,7 @@
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
/> />
</div> </div>
<div style="min-height: calc(100vh - 900px);"> <div style="min-height: calc(100vh - 900px);" class="mt-4">
<component <component
:is="'Form'" :is="'Form'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -108,18 +108,24 @@ export default {
}, },
watch: { watch: {
selectedObjId(val) { selectedObjId(val) {
// console.log('selectedObjId : ', val);
if (val === 'TAG') { if (val === 'TAG') {
// this.detailList[1].class = 'py-3 pl-4 pb-0';
this.detailList[1].class = 'py-3 d-none';
this.detailList[2].class = 'py-3 d-none'; this.detailList[2].class = 'py-3 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-1 d-none'; this.detailList[3].class = 'py-3 pl-4 pt-1 d-none';
this.detailList[4].class = 'py-3'; this.detailList[4].class = 'py-3';
this.detailList[5].class = 'py-3'; this.detailList[5].class = 'py-3 pl-4';
this.detailList[6].class = 'py-3 pl-4 pt-0';
} else { } else {
// }else if(val==="READ_PLC"){ // }else if(val==="READ_PLC"){
this.detailList[5].class = 'py-3 d-none'; this.detailList[1].class = 'py-3 pl-4';
this.detailList[4].class = 'py-3 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-1';
this.detailList[2].class = 'py-3'; this.detailList[2].class = 'py-3';
this.detailList[3].class = 'py-3 pl-4 pt-0';
this.detailList[4].class = 'py-3 d-none';
this.detailList[5].class = 'py-3 d-none';
this.detailList[6].class = 'py-3 d-none';
} }
}, },
selectedCalcFg(val) { selectedCalcFg(val) {
@ -282,13 +288,13 @@ export default {
async getRowData(data, gridName) { async getRowData(data, gridName) {
if (data.rowStat === 'I') { if (data.rowStat === 'I') {
this.detailList[0].disabled = false; this.detailList[0].disabled = false;
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
this.detailList[4].disabled = false; this.detailList[4].disabled = false;
this.detailList[5].disabled = false; this.detailList[5].disabled = false;
} else { } else {
this.detailList[0].disabled = true; this.detailList[0].disabled = true;
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.detailList[4].disabled = true; this.detailList[4].disabled = true;
this.detailList[5].disabled = true; this.detailList[5].disabled = true;
@ -306,7 +312,7 @@ export default {
case 'add': case 'add':
this.$refs[this.gridName].addRow(); this.$refs[this.gridName].addRow();
this.detailList[0].disabled = false; this.detailList[0].disabled = false;
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
this.detailList[4].disabled = false; this.detailList[4].disabled = false;
this.detailList[5].disabled = false; this.detailList[5].disabled = false;
@ -315,7 +321,7 @@ export default {
case 'remove': case 'remove':
this.$refs[this.gridName].removeRow(); this.$refs[this.gridName].removeRow();
this.detailList[0].disabled = true; this.detailList[0].disabled = true;
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.detailList[4].disabled = true; this.detailList[4].disabled = true;
this.detailList[5].disabled = true; this.detailList[5].disabled = true;
@ -436,10 +442,10 @@ const myEqpmIaoDetail = [
type: 'ReadPlcPop', type: 'ReadPlcPop',
label: '대상 항목', label: '대상 항목',
valueNm: 'objId', valueNm: 'objId',
disabled: true,
cols: 6, cols: 6,
class: 'py-3 pl-4', class: 'py-3 pl-4 pb-0',
required: true, required: true,
disabled: true,
bindNm: 'objNm', bindNm: 'objNm',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
@ -460,11 +466,12 @@ const myEqpmIaoDetail = [
readonly: true, readonly: true,
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-3 pl-4 pt-1', class: 'py-3 pl-4 pt-0',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// ============
{ {
type: 'EvtObjPop', type: 'EvtObjPop',
labelContent: '대상 항목', labelContent: '대상 항목',
@ -474,16 +481,24 @@ const myEqpmIaoDetail = [
disabled: true, disabled: true,
required: true, required: true,
cols: 6, cols: 6,
class: 'py-3 d-none', class: 'py-3 pl-4 d-none',
disableContent: true, disableContent: true,
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
{ {
type: 'InputText', type: 'Label',
cols: 6, cols: 6,
class: 'py-3 d-none', class: 'py-3 d-none',
disabled: true,
textCols: 12,
labelCols: 12,
},
{
type: 'InputText',
cols: 6,
class: 'py-3 pl-4 d-none',
valueNm: 'objNm', valueNm: 'objNm',
readonly: true, readonly: true,
disabled: true, disabled: true,
@ -491,6 +506,7 @@ const myEqpmIaoDetail = [
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// --------------------------------------------
{ {
type: 'SelectBox', type: 'SelectBox',
label: '에너지원', label: '에너지원',

View File

@ -30,7 +30,7 @@
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import Buttons from '~/components/common/button/Buttons'; import Buttons from '~/components/common/button/Buttons';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import { CustumChecbox } from '~/plugins/gridUtility'; import { CustomCheckbox } from '~/plugins/gridUtility';
import { CustomNumberEditor } from '~/plugins/gridUtility'; import { CustomNumberEditor } from '~/plugins/gridUtility';
import Form from '~/components/common/form/Form'; import Form from '~/components/common/form/Form';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';
@ -183,7 +183,7 @@ export default {
name: 'reprTagFg', name: 'reprTagFg',
width: 100, width: 100,
// renderer: { // renderer: {
// type: CustumChecbox, // type: CustomCheckbox,
// options: { // options: {
// onlyone: true, // onlyone: true,
// // disabled: true // // disabled: true

View File

@ -107,8 +107,7 @@ export default {
header: { header: {
height: 38, height: 38,
}, },
rowHeight: 22,
minRowHeight: 22,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
}; };
@ -269,7 +268,7 @@ export default {
{ {
header: 'Data 구분', header: 'Data 구분',
name: 'addInfoDataKind', name: 'addInfoDataKind',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = addInfoDataKindList.filter( const newValue = addInfoDataKindList.filter(

View File

@ -9,7 +9,6 @@
<div class="lnb-logo"> <div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" /> <img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
<img v-else src="@/assets/images/logo_lm.png" /> <img v-else src="@/assets/images/logo_lm.png" />
<!-- <img v-else src="@/assets/images/logo_lm.png" /> -->
</div> </div>
<!-- <div class="lnb-logo">FEMS</div>--> <!-- <div class="lnb-logo">FEMS</div>-->
</router-link> </router-link>
@ -40,16 +39,16 @@
<v-menu offset-y> <v-menu offset-y>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<a-button <a-button
:ripple="false" :ripple="false"
tile tile
class="btn-header" class="btn-header"
v-bind="attrs" v-bind="attrs"
v-on="on" v-on="on"
style="width: 100px" style="width: 100px"
> >
<span class="body-2">즐겨찾기</span> <span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon> <v-icon size="20">mdi-chevron-down</v-icon>
</a-button> </a-button>
<!-- <a-button style="width: 100px; height: 36px" class="btn-header"> <!-- <a-button style="width: 100px; height: 36px" class="btn-header">
<span class="body-2">즐겨찾기</span> <span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button> --> <v-icon size="20">mdi-chevron-down</v-icon></a-button> -->
@ -62,10 +61,10 @@
</v-list-item> </v-list-item>
</v-list> </v-list>
</v-menu> </v-menu>
<a-button id="refresh" class="btn-header" @click="removeBookMark" v-if="bookmarkBtn == 1"> <a-button id="removeBm" class="btn-header" @click="removeBookMark" v-if="bookmarkBtn == 1">
<span class="material-icons" style="font-size: 17px">star</span> <span class="material-icons" style="font-size: 17px">star</span>
</a-button> </a-button>
<a-button id="refresh" class="btn-header" :style="{ <a-button id="addBm" class="btn-header" :style="{
display: 'flex', display: 'flex',
alignItems: 'center'}" @click="addBookMark" v-if="bookmarkBtn == 0"> alignItems: 'center'}" @click="addBookMark" v-if="bookmarkBtn == 0">
<span class="material-icons" style="font-size: 17px">star_border</span> <span class="material-icons" style="font-size: 17px">star_border</span>
@ -88,32 +87,12 @@
</v-row> </v-row>
</div> </div>
<v-main> <v-main>
<v-container fluid> <v-container fluid>
<v-row class="flex-nowrap"> <v-row class="flex-nowrap">
<div class="menu-container"> <div class="menu-container">
<v-navigation-drawer ref="navigationdrawer" :value="drawer" :mini-variant="miniVariant" :clipped="clipped" <v-navigation-drawer ref="navigationdrawer" :value="drawer" :mini-variant="miniVariant" :clipped="clipped"
:absolute="false" mini-variant-width="60"> :absolute="false" mini-variant-width="60">
<div class="d-flex align-center justify-space-between py-4 px-3" v-if="false">
<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>
<ThemeSwitch style="margin-right: 20px" />
<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>
<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" />
<v-treeview ref="treeview" :active.sync="activeTree" active-class="v-treeview-node--active" <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"> :items="treevieItems" activatable hoverable color="#3896ff" open-on-click @update:open="openNode">
@ -130,14 +109,16 @@
:class="miniVariant === false ? 'mr-2' : ''" size="9"> :class="miniVariant === false ? 'mr-2' : ''" size="9">
$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">
mdi-chevron-down mdi-chevron-down
</v-icon> </v-icon> -->
<a-icon type="down" v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url" />
</button> </button>
</template> </template>
</v-treeview> </v-treeview>
@ -805,7 +786,7 @@ export default {
// console.log('if isLoading stmt3'); // console.log('if isLoading stmt3');
// return; // return;
// } // }
alert("move to", url); // alert("move to", url);
this.$router.push({ this.$router.push({
path: url + "?prgmId=" + prgmId, path: url + "?prgmId=" + prgmId,
}); });

View File

@ -57,7 +57,7 @@ module.exports = {
], ],
// Modules: https://go.nuxtjs.dev/config-modules // Modules: https://go.nuxtjs.dev/config-modules
modules: ['@nuxtjs/axios', '@nuxtjs/dayjs', '@nuxtjs/style-resources','@nuxtjs/google-fonts'], modules: ['@nuxtjs/axios', '@nuxtjs/dayjs', '@nuxtjs/style-resources' ],
styleResources: { styleResources: {
scss: ['./assets/scss/*.scss'], scss: ['./assets/scss/*.scss'],
}, },

View File

@ -342,7 +342,7 @@ export default {
//---------------------gridOption 설정 끝---------------------------- //---------------------gridOption 설정 끝----------------------------
//---------------------gridName3의 체크박스 설정 시작---------------------------- //---------------------gridName3의 체크박스 설정 시작----------------------------
class CustumChecbox { class CustomCheckbox {
constructor(props) { constructor(props) {
const el = document.createElement('input'); const el = document.createElement('input');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -398,14 +398,11 @@ export default {
const myTreeColumns = [ const myTreeColumns = [
{ {
header: '',
name: '',
align: 'center', align: 'center',
width: 30, width: 30,
minWidth: 60,
formatter: (props) => { formatter: (props) => {
return `<span class="custom-radio"> return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
<span class="radio-mark"></span>
</span>`;
} }
}, },
{ {
@ -421,14 +418,11 @@ export default {
]; ];
const myTreeColumns2 = [ const myTreeColumns2 = [
{ {
header: '',
name: '',
align: 'center', align: 'center',
width: 30, width: 30,
minWidth: 60,
formatter: (props) => { formatter: (props) => {
return `<span class="custom-radio"> return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
<span class="radio-mark"></span>
</span>`;
} }
}, },
{ header: '역할ID', name: 'roleId', hidden: true }, { header: '역할ID', name: 'roleId', hidden: true },
@ -439,7 +433,7 @@ export default {
name: 'useFg', name: 'useFg',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -447,7 +441,7 @@ export default {
name: 'authCd1', name: 'authCd1',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -455,7 +449,7 @@ export default {
name: 'authCd2', name: 'authCd2',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -463,7 +457,7 @@ export default {
name: 'authCd3', name: 'authCd3',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -471,7 +465,7 @@ export default {
name: 'authCd4', name: 'authCd4',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -479,7 +473,7 @@ export default {
name: 'authCd5', name: 'authCd5',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -487,7 +481,7 @@ export default {
name: 'authCd6', name: 'authCd6',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
]; ];
@ -674,8 +668,6 @@ export default {
}, },
getUnAsgnRowData(data) { getUnAsgnRowData(data) {
console.log("------------------DEBUG-------getUnAsgnRowData:", data);
const getRowData = data; const getRowData = data;
this.leftSelectRowData = Object.assign({}, getRowData); this.leftSelectRowData = Object.assign({}, getRowData);
}, },

View File

@ -127,13 +127,13 @@
<!-- 역할수정 --> <!-- 역할수정 -->
<template v-else-if="item.id == 'AsgnRoleByUser'"> <template v-else-if="item.id == 'AsgnRoleByUser'">
<v-col :cols="3" class="h100"> <v-col :cols="12" class="overflow-y-scroll grid-toggle-section">
<v-card-title <v-card-title
class="pa-0 custom-subtitle-tab" class="pa-0 custom-subtitle-tab"
style="min-height:36px;" style="min-height:36px;"
>역할리스트</v-card-title >역할리스트</v-card-title
> >
<div style="height:calc(100% - 36px)" class="py-5"> <div class="py-5">
<component <component
class="w100" class="w100"
:is="loadGridTab2 ? 'Grid' : null" :is="loadGridTab2 ? 'Grid' : null"
@ -145,15 +145,16 @@
/> />
</div> </div>
</v-col> </v-col>
<v-col :cols="1" class="d-flex justify-center"> <v-col :cols="12" class="d-flex justify-center">
<ActionButtons <ActionButtons
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:leftGridName="gridName2" :leftGridName="gridName2"
:rightGridName="gridName3" :rightGridName="gridName3"
:btnActionsFnc="dualGridBtnActions" :btnActionsFnc="dualGridBtnActions"
directionBtn="vertically"
/> />
</v-col> </v-col>
<v-col :cols="8" class="h100"> <v-col :cols="12" class="h100">
<div class="d-flex align-center justify-space-between"> <div class="d-flex align-center justify-space-between">
<v-card-title class="pa-0 custom-subtitle-tab"> <v-card-title class="pa-0 custom-subtitle-tab">
사용자 역할</v-card-title 사용자 역할</v-card-title
@ -894,6 +895,7 @@ const defaultData = {
}; };
const myColumns = [ const myColumns = [
{ header: '사용자No', name: 'userNo', align: 'center', hidden: true }, { header: '사용자No', name: 'userNo', align: 'center', hidden: true },
{ header: '사용자명', name: 'userNm' }, { header: '사용자명', name: 'userNm' },
{ header: '사용자ID', name: 'userLoginId' }, { header: '사용자ID', name: 'userLoginId' },
@ -909,6 +911,17 @@ const myColumns = [
]; ];
const unAsgnRoleByUserColumns = [ const unAsgnRoleByUserColumns = [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '역할ID', name: 'roleId', align: 'center' }, { header: '역할ID', name: 'roleId', align: 'center' },
{ header: '역할명', name: 'roleNm' }, { header: '역할명', name: 'roleNm' },
{ header: '적용시작일', name: 'aplyStartDt', hidden: true }, { header: '적용시작일', name: 'aplyStartDt', hidden: true },
@ -918,6 +931,7 @@ const unAsgnRoleByUserColumns = [
]; ];
const asgnRoleByUserColumns = [ const asgnRoleByUserColumns = [
{ header: '역할ID', name: 'roleId', align: 'center' }, { header: '역할ID', name: 'roleId', align: 'center' },
{ header: '역할명', name: 'roleNm' }, { header: '역할명', name: 'roleNm' },
{ {
@ -931,7 +945,19 @@ const asgnRoleByUserColumns = [
{ header: 'comId', name: 'comId', hidden: true }, { header: 'comId', name: 'comId', hidden: true },
]; ];
const asgnMenuByUserColumns = [{ header: '메뉴명', name: 'menuNm' }]; const asgnMenuByUserColumns = [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '메뉴명', name: 'menuNm' }];
const myDetail = blocCdList => { const myDetail = blocCdList => {
return [ return [
@ -956,7 +982,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -980,7 +1006,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -1006,7 +1032,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
}, },
{ {
@ -1029,7 +1055,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
@ -1053,7 +1079,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },

View File

@ -5,7 +5,6 @@
<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>
<div></div>
<v-col :cols="2.5"> <v-col :cols="2.5">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"

View File

@ -3,22 +3,22 @@
<CommonPageTitle /> <CommonPageTitle />
<!-- 리스트 페이지 시작 --> <!-- 리스트 페이지 시작 -->
<div v-if="pageActionFlag == 'list'" class="h1001"> <div v-if="pageActionFlag == 'list'" class="h1001">
<v-card class="" > <v-card class="">
<div class="pa-5"> <div class="pa-5">
<v-row align="center" no-gutters > <v-row align="center" no-gutters>
<v-col :cols="12" class="d-flex align-center justify-space-between"> <v-col :cols="12" class="d-flex align-center justify-space-between">
<v-card-title class="pa-0 custom-title-4">공지사항</v-card-title> <v-card-title class="pa-0 custom-title-4">공지사항</v-card-title>
<div class="d-flex align-center"> <div class="d-flex align-center">
<!-- <v-btn @click="listPageButtonGroupClickEvent('view')" :ripple="false" class="mr-1">상세보기</v-btn> --> <!-- <v-btn @click="listPageButtonGroupClickEvent('view')" :ripple="false" class="mr-1">상세보기</v-btn> -->
<a-button type="primary" size="large" @click="listPageButtonGroupClickEvent('write')" :ripple="false" <a-button type="primary" @click="listPageButtonGroupClickEvent('write')" :ripple="false"
icon="edit" class="mr-1">작성</a-button> icon="edit" class="mr-1">작성</a-button>
<!-- <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" style="min-height: calc(100% - 76px);">
<div ref="gridParent" class="px-50" style="min-height: 70vh;"> <div ref="gridParent" class="px-50" style="min-height: 70vh;">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
@getRowsData="getRowData" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -27,22 +27,23 @@
</div> </div>
<!-- 리스트 페이지 --> <!-- 리스트 페이지 -->
<!-- 상세보기 페이지 시작 --> <!-- 상세보기 페이지 시작 -->
<div v-if="pageActionFlag == 'view'" > <div v-if="pageActionFlag == 'view'">
<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 ">
<v-card-title class="pa-0 custom-title-4">공지사항</v-card-title> <v-card-title class="pa-0 custom-title-4">공지사항 보기</v-card-title>
<div class="d-flex align-center"> <div class="d-flex align-center">
<a-button @click="viewPageButtonGroupClickEvent('list')" type="primary" :ripple="false" class="mr-1" <a-button @click="viewPageButtonGroupClickEvent('list')" type="primary" :ripple="false"
icon="unordered-list">목록</a-button> class="mr-1" icon="unordered-list">목록</a-button>
<a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false" class="mr-1" <a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false"
icon="send-outlined"> class="mr-1" icon="send-outlined">
<v-icon small :class="['mr-2']">$icoSend</v-icon> <v-icon small :class="['mr-2']">$icoSend</v-icon>
답글 답글
</a-button> </a-button>
<a-button @click="viewPageButtonGroupClickEvent('update')" type="primary" :ripple="false" class="mr-1" <a-button @click="viewPageButtonGroupClickEvent('update')" type="primary" :ripple="false"
icon="edit">수정</a-button> class="mr-1" icon="edit">수정</a-button>
<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" class="mt-5">
@ -57,13 +58,12 @@
<v-card-title class="custom-title-7 pa-0"> <v-card-title class="custom-title-7 pa-0">
파일목록 파일목록
</v-card-title> </v-card-title>
<div v-for="fileData in viewActionData.fileData" <div v-for="fileData in viewActionData.fileData" :key="fileData.apndFileId" class="file-item">
:key="fileData.apndFileId"
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-start 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 ml-2">{{ fileData.apndFileNm + '.' +
fileData.apndFileExt }}</span>
</div> </div>
</a> </a>
</div> </div>
@ -73,12 +73,12 @@
</div> </div>
<!-- 상세보기 페이지 --> <!-- 상세보기 페이지 -->
<!-- 작성 페이지 시작 --> <!-- 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'write'" > <div v-if="pageActionFlag == 'write'">
<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="mt-4">
<v-card-title class="custom-title-7 pa-0">제목</v-card-title> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
@ -88,37 +88,31 @@
<v-col :cols="12" style="min-height: calc(100vh - 450px);"> <v-col :cols="12" style="min-height: calc(100vh - 450px);">
<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="6" class="mt-5">
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
<div class="" v-if="writeActionData.fileData"> <div class="" v-if="writeActionData.fileData">
<div <div v-for="(fileData, index) in writeActionData.fileData" :key="fileData.apndFileId"
v-for="(fileData, index) in writeActionData.fileData"
:key="fileData.apndFileId"
class="file-item d-flex justify-space-between"> class="file-item d-flex justify-space-between">
<div class="file-item-detail"> <div class="file-item-detail">
<v-icon>mdi-paperclip</v-icon> <v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span> <span href="#" class="file-item-name">{{ fileData.name }}</span>
</div> </div>
<a-icon type="delete" class="v-icon pointer" @click="writeActionData.fileData.splice(index, 1)" /> <a-icon type="delete" class="v-icon pointer"
@click="writeActionData.업로드fileData.splice(index, 1)" />
</div> </div>
</div> </div>
<a-button class="mt-2" icon="upload" @click="$refs.writeInputFile.$refs.input.click()" > <a-button class="mt-2" icon="upload" @click="$refs.writeInputFile.$refs.input.click()">
업로드 업로드
</a-button> </a-button>
<v-file-input <v-file-input ref="writeInputFile" v-model="writeActionData.fileData" multiple outlined
ref="writeInputFile" hide-input class="d-none" prepend-icon="mdi-tray-arrow-up"></v-file-input>
v-model="writeActionData.fileData"
multiple
outlined
hide-input
class="d-none"
prepend-icon="mdi-tray-arrow-up"
></v-file-input>
</v-col> </v-col>
<v-col :cols="12" class="text-right"> <v-col :cols="12" class="text-right">
<a-button @click="writePageButtonGroupClickEvent('cancel')" :ripple="false" class="mr-2">취소</a-button> <a-button @click="writePageButtonGroupClickEvent('cancel')" :ripple="false"
<a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false" type="primary">등록</a-button> class="mr-2">취소</a-button>
<a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false"
type="primary">등록</a-button>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
@ -126,7 +120,7 @@
</div> </div>
<!-- 작성 페이지 --> <!-- 작성 페이지 -->
<!-- 답글 작성 페이지 시작 --> <!-- 답글 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'reply'" > <div v-if="pageActionFlag == 'reply'">
<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="">
@ -134,8 +128,7 @@
</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> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
<v-text-field v-model="replyActionData.title" class="v-input__custom" outlined <v-text-field v-model="replyActionData.title" class="v-input__custom" 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">
@ -144,72 +137,73 @@
<v-col :cols="6" class="mt-5"> <v-col :cols="6" class="mt-5">
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
<div class="" v-if="replyActionData.fileData"> <div class="" v-if="replyActionData.fileData">
<div <div v-for="(fileData, index) in replyActionData.fileData" :key="fileData.apndFileId"
v-for="(fileData, index) in replyActionData.fileData"
:key="fileData.apndFileId"
class="file-item d-flex justify-space-between"> class="file-item d-flex justify-space-between">
<div class="file-item-detail"> <div class="file-item-detail">
<v-icon>mdi-paperclip</v-icon> <v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span> <span href="#" class="file-item-name">{{ fileData.name }}</span>
</div> </div>
<a-icon type="delete" class="v-icon pointer" @click="replyActionData.fileData.splice(index, 1)" /> <a-icon type="delete" class="v-icon pointer"
@click="replyActionData.fileData.splice(index, 1)" />
</div> </div>
</div> </div>
<a-button class="mt-3" icon="upload" @click="$refs.replyInputFile.$refs.input.click()" > <a-button class="mt-3" icon="upload" @click="$refs.replyInputFile.$refs.input.click()">
업로드 업로드
</a-button> </a-button>
<v-file-input ref="replyInputFile" multiple show-size v-model="replyActionData.fileData" hide-details="true" class="d-none"> <v-file-input ref="replyInputFile" multiple show-size v-model="replyActionData.fileData"
hide-details="true" class="d-none">
</v-file-input> </v-file-input>
</v-col> </v-col>
<v-col :cols="12" class="text-right"> <v-col :cols="12" class="text-right">
<a-button @click="replyPageButtonGroupClickEvent('cancel')" :ripple="false">취소</a-button> <a-button @click="replyPageButtonGroupClickEvent('cancel')" :ripple="false">취소</a-button>
<a-button @click="replyPageButtonGroupClickEvent('reply')" :ripple="false" type="primary">등록</a-button> <a-button @click="replyPageButtonGroupClickEvent('reply')" :ripple="false"
type="primary">등록</a-button>
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
</div> </div>
<!-- 답글 작성 페이지 --> <!-- 답글 작성 페이지 -->
<!-- 수정 페이지 시작 --> <!-- 수정 페이지 시작 -->
<div v-if="pageActionFlag == 'update'" > <div v-if="pageActionFlag == 'update'">
<v-card> <v-card>
<div class="pa-5"> <div class="pa-5">
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="12"> <v-col :cols="12">
<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> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
<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" 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" class="mt-5">
<v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
<div class="" v-if="updateActionData.fileData"> <div class="" v-if="updateActionData.fileData">
<div <div v-for="(fileData, index) in updateActionData.fileData" :key="fileData.apndFileId"
v-for="(fileData, index) in updateActionData.fileData" class="file-item d-flex justify-space-between">
:key="fileData.apndFileId" <div class="file-item-detail">
class="file-item d-flex justify-space-between"> <v-icon>mdi-paperclip</v-icon>
<div class="file-item-detail"> <span href="#" class="file-item-name">{{ fileData.name }}</span>
<v-icon>mdi-paperclip</v-icon>
<span href="#" class="file-item-name">{{ fileData.name }}</span>
</div>
<a-icon type="delete" class="v-icon pointer" @click="updateActionData.fileData.splice(index, 1)" />
</div> </div>
<a-icon type="delete" class="v-icon pointer"
@click="updateActionData.fileData.splice(index, 1)" />
</div> </div>
<a-button class="mt-2" icon="upload" @click="$refs.updateInputFile.$refs.input.click()" > </div>
업로드 <a-button class="mt-2" icon="upload" @click="$refs.updateInputFile.$refs.input.click()">
</a-button> 업로드
<v-file-input ref="updateInputFile" multiple show-size v-model="updateActionData.fileData" </a-button>
hide-details="true" class="d-none"> <v-file-input ref="updateInputFile" multiple show-size v-model="updateActionData.fileData"
</v-file-input> hide-details="true" class="d-none">
</v-file-input>
</v-col> </v-col>
<v-col :cols="12" class="text-right"> <v-col :cols="12" class="text-right">
<a-button @click="updatePageButtonGroupClickEvent('cancel')" >취소</a-button> <a-button @click="updatePageButtonGroupClickEvent('cancel')">취소</a-button>
<a-button @click="updatePageButtonGroupClickEvent('update')" type="primary" >등록</a-button> <a-button @click="updatePageButtonGroupClickEvent('update')" type="primary">등록</a-button>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
@ -295,8 +289,6 @@ export default {
postGrpOrd: null, postGrpOrd: null,
postOrgNo: null, postOrgNo: null,
}, },
dataPathMock: {},
}; };
}, },
computed: { computed: {
@ -341,7 +333,7 @@ export default {
chkOpenTabList: 'chkOpenTabList', chkOpenTabList: 'chkOpenTabList',
getDomain: 'modules/list/getDomain', getDomain: 'modules/list/getDomain',
}), }),
onTest(){ onTest() {
console.log(this.writeActionData.fileData); console.log(this.writeActionData.fileData);
}, },
async init() { async init() {
@ -400,7 +392,11 @@ export default {
gridInit() { gridInit() {
const gridHeight = this.$refs.contents.offsetHeight - 76; const gridHeight = this.$refs.contents.offsetHeight - 76;
const myOptions = {}; const myOptions = {
header: {
height: 38,
},
};
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions), value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
@ -421,7 +417,7 @@ export default {
align: 'center', align: 'center',
hidden: true, hidden: true,
}, },
{ header: '번호', name: 'postNo', width: 150, align: 'center' }, { header: '번호', name: 'postNo', width: 150, align: 'right' },
{ {
header: '원글번호', header: '원글번호',
name: 'postOrgNo', name: 'postOrgNo',
@ -451,9 +447,9 @@ export default {
hidden: true, hidden: true,
}, },
{ header: '제목', name: 'title', align: 'left' }, { header: '제목', name: 'title', align: 'left' },
{ header: '작성자', name: 'regUserNo', width: 250, align: 'center' }, { header: '작성자', name: 'regUserNo', width: 250, align: 'right' },
{ header: '작성일', name: 'regDttm', width: 250, align: 'center' }, { header: '작성일', name: 'regDttm', width: 250, align: 'center' },
{ header: '조회수', name: 'viewCnt', width: 150, align: 'center' }, { header: '조회수', name: 'viewCnt', width: 150, align: 'right' },
// {header: "파일아이디", name:"apndFileUuid", width:150, align:"center"}, // 수정필요 // {header: "파일아이디", name:"apndFileUuid", width:150, align:"center"}, // 수정필요
]; ];
@ -475,7 +471,7 @@ export default {
resKey: 'postData', resKey: 'postData',
sendParam: params, sendParam: params,
}); });
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: res, value: res,
@ -1020,15 +1016,6 @@ const defaultData = {
}, },
}; };
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
postNo: '18',
title: '오픈공지',
regUserNo: '1',
regDttm: '2023-01-09 09:39:41',
viewCnt: '1'
}, 10);
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -1042,23 +1029,41 @@ const dataPathDataExample = getPathDataExample({
margin: 2px 0; margin: 2px 0;
padding: 4px; padding: 4px;
background-color: #0000000A; background-color: #0000000A;
.file-item-name{
.file-item-name {
color: #1677FF; color: #1677FF;
} }
} }
::v-deep { ::v-deep {
.v-input__slot { .v-input__slot {
padding-left: 8px; padding-left: 8px;
padding-right: 8px; padding-right: 8px;
} }
.custom-view { .custom-view {
border: 1px solid; border: 1px solid;
border-radius: 6px; border-radius: 6px;
height: 100%; height: 100%;
@each $theme in dark, light { @each $theme in dark, light {
@include theme($theme); @include theme($theme);
border-color: map-deep-get($config, #{$theme}, "v-input-textarea-border");; border-color: map-deep-get($config, #{$theme}, "v-input-textarea-border");
;
} }
} }
.toastui-editor-mode-switch {
font-family: Inter !important;
font-size: 1.0rem !important;
}
.toastui-editor-mode-switch .tab-item.active {
color: #1677FF
}
.toastui-editor-mode-switch .tab-item {
color: #000000E0
}
} }
</style> </style>

View File

@ -1,5 +1,6 @@
<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">
@ -314,7 +315,6 @@ export default {
}); });
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
// console.log("-----------------------DEBUG--getRowData--------------", {
// gridKey: gridName, // gridKey: gridName,
// gridSelect: true, // gridSelect: true,
// rowGridSelectKey: data.rowKey, // rowGridSelectKey: data.rowKey,

View File

@ -3,7 +3,7 @@
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -12,8 +12,6 @@
dataKey="searchLocKind" dataKey="searchLocKind"
:sendParam="{ commGrpCd: 'EM_LOC_KIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_LOC_KIND', useFg: '1' }"
:addAll="true" :addAll="true"
:iconShow="true"
customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
@ -24,12 +22,10 @@
dataKey="searchEccKind" dataKey="searchEccKind"
:sendParam="{ commGrpCd: 'EM_ECC_KIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_ECC_KIND', useFg: '1' }"
:addAll="true" :addAll="true"
:iconShow="true"
customClass="select-large"
/> />
</v-col> </v-col>
<!-- 사업장 -->
<!-- <v-col :cols="3"> <!-- <v-col :cols="3">
사업장
<div style="visibility:hidden"> <div style="visibility:hidden">
<component <component
:is="'SelectBlocMstr'" :is="'SelectBlocMstr'"
@ -46,8 +42,6 @@
dataKey="useFg" dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true" :addAll="true"
:iconShow="true"
customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
@ -55,14 +49,17 @@
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="공정명" label="공정명"
valueNm="eccNm" valueNm="eccNm"
:labelCols="12" :labelCols="2"
:textCols="12" :textCols="9"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large"
/> />
</v-col> </v-col>
<BtnSearch @click="search" size="large" /> <v-col class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
@ -79,17 +76,16 @@
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100 pb-2"> <div ref="gridParent" class="w100 h100">
<component <component
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -196,15 +192,13 @@ export default {
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: false, loadGrid: false,
tab: null, tab: null,
selectedRowKey: null,
// rowSelectionStatus: {},
dataPathMock : { },
items: [ items: [
{ name: '공정 정보', id: 'eccBaseInfoTab', disabledFlag: false }, { name: '공정 정보', id: 'eccBaseInfoTab', disabledFlag: false },
{ name: '공정 추가 정보', id: 'eccAddInfoTab', disabledFlag: false }, { name: '공정 추가 정보', id: 'eccAddInfoTab', disabledFlag: false },
{ name: '공정 연결 정보', id: 'eccIaoTab', disabledFlag: false }, { name: '공정 연결 정보', id: 'eccIaoTab', disabledFlag: false },
], ],
detailList: myDetail, detailList: myDetail,
loadGrid: false,
}; };
}, },
computed: { computed: {
@ -320,23 +314,11 @@ export default {
}, },
mounted() { mounted() {
this.init(); this.init();
this.$nextTick(() => {
// const checkbox = document.getElementById('headerCheckbox');
// if (checkbox) {
// checkbox.addEventListener('change', this.handleHeaderCheckboxChange);
// }
});
}, },
beforeDestroy() { beforeDestroy() {
this.chkOpenTabList({ key: 'destroy', prgmId: myPrgmId }); this.chkOpenTabList({ key: 'destroy', prgmId: myPrgmId });
}, },
methods: { methods: {
handleHeaderCheckboxChange(event) {
const checked = event.target.checked;
this.dataPathMock.rowGrid.data.forEach(row => {
row.selected = checked;
});},
...mapMutations({ ...mapMutations({
setPageData: 'setPageData', setPageData: 'setPageData',
}), }),
@ -351,41 +333,7 @@ export default {
blocId: this.userInfo.blocId, blocId: this.userInfo.blocId,
}); });
}, },
gridInitTest() {
const rowGrid = {
column: [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '공정 정보', name: 'eccNm', align: 'left' },
{ header: '현재 상태', name: 'status', align: 'center' },
{ header: '공정 유형', name: 'eccKind', align: 'left' },
{ header: '사용 여부', name: 'useFg', align: 'center' },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {
...gridOptions,
},
}
this.dataPathMock = {rowGrid};
this.$nextTick(() => {
this.loadGrid = true;
});
},
gridInit() { gridInit() {
// Test
this.gridInitTest(); return;
// End test
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const gridWidth = this.$refs.gridParent.offsetWidth; const gridWidth = this.$refs.gridParent.offsetWidth;
@ -404,6 +352,17 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ {
header: '공정 명', header: '공정 명',
@ -598,16 +557,6 @@ export default {
}); });
}, },
async getRowData(data) { async getRowData(data) {
//Progess and fake radio
// const rowKey = data.rowKey;
// this.selectedRowKey = rowKey;
// Object.keys(this.rowSelectionStatus).forEach(key => {
// this.$set(this.rowSelectionStatus, key, false);
// });
// this.$set(this.rowSelectionStatus, rowKey, true);
this.setEccAddInfo(data); this.setEccAddInfo(data);
this.setEccIao(data); this.setEccIao(data);
this.setGridSelectData({ this.setGridSelectData({
@ -623,9 +572,6 @@ export default {
rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectData: Object.assign({}, data), rowGridSelectData: Object.assign({}, data),
}); });
//fake radio need recheck
// this.$refs[this.gridName]?.repaint?.();
}, },
async setEccAddInfo(data) { async setEccAddInfo(data) {
this.setPageData({ this.setPageData({
@ -1070,142 +1016,4 @@ const myDetail = [
value: { '1': true, '0': false }, value: { '1': true, '0': false },
}, },
]; ];
</script>
const dataMockExample = [
{
eccId: 'ECC000001',
eccNm: 'EGP_HVAC_LT_CH001',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000002',
eccNm: 'B01',
status: '대기',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000005',
eccNm: 'B01-1',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-1-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000006',
eccNm: 'B01-2',
status: '점검중',
eccKind: '공정',
useFg: '0',
_children: [
{
eccId: 'ECC0000013',
eccNm: 'B01-2-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000014',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000015',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000007',
eccNm: 'B01-3',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-3-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-3-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-3-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
],
},
{
eccId: 'ECC000003',
eccNm: 'B02',
status: '운영중',
eccKind: '공정',
useFg: '1',
},
{
eccId: 'ECC000004',
eccNm: 'B03',
status: '점검중',
eccKind: '공정',
useFg: '0',
},
],
},
];
const gridOptions = {
treeColumnOptions: {
name: 'eccNm', // Showing tree table
useIcon: false, // Not using icon
indentWidth: 10,// spacing when showing children
},
header: {
height: 40,
},
rowHeight: 35,
showCheckbox: false,
};
</script>

View File

@ -359,7 +359,7 @@ const myDetail = [
label: '설비종류 ID', label: '설비종류 ID',
valueNm: 'eqpmKindId', valueNm: 'eqpmKindId',
cols: 6, cols: 6,
class: 'py-2 pr-4', class: 'py-2 pr-4 pt-1',
iconShow: true, iconShow: true,
required: false, required: false,
readonly: true, readonly: true,
@ -373,7 +373,7 @@ const myDetail = [
valueNm: 'eqpmKindNm', valueNm: 'eqpmKindNm',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2 pl-4', class: 'py-2 pl-4 pt-1',
iconShow: true, iconShow: true,
required: true, required: true,
labelCols: 12, labelCols: 12,

View File

@ -461,7 +461,7 @@ const myDetail = [
valueNm: 'eqpmGrpId', valueNm: 'eqpmGrpId',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2 pr-4', class: 'py-2 pr-4 pt-1',
required: false, required: false,
iconShow: true, iconShow: true,
labelCols: 12, labelCols: 12,
@ -474,7 +474,7 @@ const myDetail = [
valueNm: 'eqpmGrpNm', valueNm: 'eqpmGrpNm',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2 pl-4', class: 'py-2 pl-4 pt-1',
required: true, required: true,
iconShow: true, iconShow: true,
labelCols: 12, labelCols: 12,

View File

@ -53,7 +53,7 @@
</v-col> </v-col>
<v-col :cols="7" > <v-col :cols="7" >
<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 pb-1" >설비 상세</v-card-title>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag"> <v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag">
@ -969,7 +969,7 @@ const myDetail = [
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
class: 'py-3 pr-4', class: 'py-3 pr-4 pb-2',
}, },
{ {
type: 'CheckBox', type: 'CheckBox',

View File

@ -16,7 +16,8 @@
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'조회기간'" :textCols="12" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'조회기간'" :textCols="12"
customClass="datepicker-large" />
</v-col> </v-col>
<v-col :cols="3" class="d-flex align-end justify-end text-right"> <v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnExcelDownload class="mr-1" :parentPrgmId="myPrgmId" :gridName="gridName" type="primary" <BtnExcelDownload class="mr-1" :parentPrgmId="myPrgmId" :gridName="gridName" type="primary"
@ -391,6 +392,7 @@ export default {
resKey: 'pastRslPageTotal', resKey: 'pastRslPageTotal',
sendParam: sendParams sendParam: sendParams
}); });
this.totalCount = res2[0].totalcount; this.totalCount = res2[0].totalcount;
this.setGridData({ this.setGridData({

View File

@ -43,6 +43,7 @@
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'조회기간'" :label="'조회기간'"
customClass="datepicker-large"
/> />
</v-col> </v-col>
<div class="d-flex"> <div class="d-flex">
@ -282,7 +283,6 @@ 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.$nextTick(() => {

View File

@ -1,61 +1,43 @@
<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">
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 사업장 --> <!-- 사업장 -->
<component <component :is="'SelectBlocMstr'" ref="SelectBlocMstr" :parentPrgmId="myPrgmId"
:is="'SelectBlocMstr'" :textCols="12" customClass="select-large" />
ref="SelectBlocMstr"
:parentPrgmId="myPrgmId"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<component <component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'측정 Data 유형'"
:is="'selectCodeList'" dataKey="searchReadDataType" :sendParam="{ commGrpCd: 'EM_READ_DATA_TYPE', useFg: '1' }"
:parentPrgmId="myPrgmId" :addAll="true" :textCols="12" customClass="select-large" />
:label="'측정 Data 유형'"
dataKey="searchReadDataType"
:sendParam="{ commGrpCd: 'EM_READ_DATA_TYPE', useFg: '1' }"
:addAll="true"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<component <component :is="'SelectReadObj'" :parentPrgmId="myPrgmId" :label="'측정대상'"
:is="'SelectReadObj'" dataKey="searchReadObj" :sendParam="{ useFg: '1' }" :labelCols="12" :textCols="12"
:parentPrgmId="myPrgmId" :addAll="true" customClass="select-large" />
:label="'측정대상'"
dataKey="searchReadObj"
:sendParam="{ useFg: '1' }"
:addAll="true"
/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
</v-col> </v-col>
</v-row> </v-row>
<v-row align="center" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'사용여부'" dataKey="useFg"
:is="'selectCodeList'" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :textCols="12"
:parentPrgmId="myPrgmId" customClass="select-large" />
:label="'사용여부'"
dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
/>
</v-col> </v-col>
<v-col :cols="6"> <v-col :cols="3">
<InputText <InputText :parentPrgmId="myPrgmId" label="TAG ID" valueNm="tagId" :labelCols="12"
:parentPrgmId="myPrgmId" :textCols="12" :searchOption="true" customClass="input-large" />
label="TAG명" </v-col>
valueNm="tagNm" <v-col :cols="3">
:labelCols="2" <InputText :parentPrgmId="myPrgmId" label="TAG명" valueNm="tagNm" :labelCols="12"
:textCols="9" :textCols="12" :searchOption="true" customClass="input-large" />
:searchOption="true" </v-col>
/> <v-col :cols="3" class="d-flex align-end justify-end text-right">
<BtnSearch @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -66,63 +48,33 @@
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="d-flex justify-space-between align-end"> <v-card-title class="d-flex justify-space-between align-end">
<span class="tit ft-size_20 ft-weight_600">TAG 정보</span> <span class="tit ft-size_20 ft-weight_600">TAG 정보</span>
<Buttons <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:parentPrgmId="myPrgmId" :btnActionsFnc="btnActions" />
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
</v-card-title> </v-card-title>
<v-card-actions> <v-card-actions>
<div <div ref="gridParent" class="w100" style="height: calc(100vh - 400px)">
ref="gridParent" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
class="w100" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
style="height: calc(100vh - 360px)" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" />
>
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true"
/>
</div> </div>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title>TAG 상세</v-card-title> <v-card-title>TAG 상세</v-card-title>
<div class="px-5" style="height:calc(100% - 70px)"> <div class="px-5" style="height:calc(100% - 70px)">
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab <v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag">
v-for="item in items"
:key="item.id"
:disabled="item.disabledFlag"
>
{{ item.name }} {{ item.name }}
</v-tab> </v-tab>
</v-tabs> </v-tabs>
<v-tabs-items <v-tabs-items v-model="tab" style="height: calc(100% - 65px);" class="py-6">
v-model="tab"
style="height: calc(100% - 65px);"
class="py-6"
>
<v-tab-item v-for="(item, idx) in items" :key="item.id"> <v-tab-item v-for="(item, idx) in items" :key="item.id">
<component <component v-if="item.id == 'tagBaseInfoTab'" :is="'Form'" :parentPrgmId="myPrgmId"
v-if="item.id == 'tagBaseInfoTab'" :detailList="detailList" @gridEditingFinish="gridEditingFinish" />
:is="'Form'" <TagAddInfoTab v-if="item.id == 'tagAddInfoTab'" :parentPrgmId="myPrgmId"
:parentPrgmId="myPrgmId" :innerTabGridInfo="{ tab, idx }" />
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
<TagAddInfoTab
v-if="item.id == 'tagAddInfoTab'"
:parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }"
/>
</v-tab-item> </v-tab-item>
</v-tabs-items> </v-tabs-items>
</div> </div>
@ -134,6 +86,7 @@
<script> <script>
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';
import { resize } from '@/mixin/resize.js';
import BtnSearch from '~/components/common/button/BtnSearch'; import BtnSearch from '~/components/common/button/BtnSearch';
import Buttons from '~/components/common/button/Buttons'; import Buttons from '~/components/common/button/Buttons';
import SelectBlocMstr from '@/components/common/select/SelectBlocMstr'; import SelectBlocMstr from '@/components/common/select/SelectBlocMstr';
@ -149,7 +102,7 @@ let myTitle;
// const myPrgmId = "PRG0051"; // const myPrgmId = "PRG0051";
let myPrgmId; let myPrgmId;
export default { export default {
mixins: [mixinGlobal], mixins: [mixinGlobal, resize],
async asyncData(context) { async asyncData(context) {
const myState = context.store.state; const myState = context.store.state;
// context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]); // context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
@ -219,15 +172,19 @@ export default {
}, },
chkBlocId() { chkBlocId() {
this.setPageData({ isFind: true }); this.setPageData({ isFind: true });
// this.search();
}, },
chkReadDataType() { chkReadDataType() {
this.setPageData({ isFind: true }); this.setPageData({ isFind: true });
// this.search();
}, },
chkReadObj() { chkReadObj() {
this.setPageData({ isFind: true }); this.setPageData({ isFind: true });
// this.search();
}, },
chkUseFg() { chkUseFg() {
this.setPageData({ isFind: true }); this.setPageData({ isFind: true });
// this.search();
}, },
}, },
async beforeCreate() { async beforeCreate() {
@ -297,12 +254,16 @@ export default {
this.gridInit(); this.gridInit();
}, },
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 16;
const myOptions = { const myOptions = {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
scrollX: true,
header: {
height: 38,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -316,21 +277,21 @@ export default {
header: 'TAG ID', header: 'TAG ID',
name: 'tagId', name: 'tagId',
width: 'auto', width: 'auto',
minWidth: 280, minWidth: 340,
align: 'left', align: 'left',
}, },
{ {
header: 'TAG 명', header: 'TAG 명',
name: 'tagNm', name: 'tagNm',
width: 'auto', width: 'auto',
minWidth: 140, minWidth: 220,
align: 'left', align: 'left',
}, },
{ {
header: '측정 값 유형', header: '측정 값 유형',
name: 'readDataTypeCd', name: 'readDataTypeCd',
width: 100, width: 90,
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.readDataTypeCdList.filter( const newValue = _this.pageData.readDataTypeCdList.filter(
@ -346,7 +307,7 @@ export default {
header: '측정대상', header: '측정대상',
name: 'readObjId', name: 'readObjId',
width: 100, width: 100,
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.readObjList.filter( const newValue = _this.pageData.readObjList.filter(
@ -363,7 +324,7 @@ export default {
header: '단위', header: '단위',
name: 'unitCd', name: 'unitCd',
width: 80, width: 80,
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.unitCdList.filter( const newValue = _this.pageData.unitCdList.filter(
@ -493,6 +454,7 @@ export default {
readObjId: this.pageData.searchReadObj, readObjId: this.pageData.searchReadObj,
useFg: this.pageData.useFg, useFg: this.pageData.useFg,
tagNmLike: this.pageData.tagNm, tagNmLike: this.pageData.tagNm,
tagIdLike: this.pageData.tagId,
}, },
}); });
} else { } else {
@ -751,7 +713,8 @@ export default {
}); });
this.$nextTick(() => { this.$nextTick(() => {
this.setPageData({ isFind: true }); // this.setPageData({ isFind: true });
this.search();
}); });
} }
} else { } else {
@ -818,6 +781,7 @@ function isValidAlrmVal(obj) {
const defaultData = { const defaultData = {
/* 검색옵션 */ /* 검색옵션 */
tagId: '',
tagNm: '', tagNm: '',
blocId: '', blocId: '',
blocMstrList: [], blocMstrList: [],
@ -907,30 +871,39 @@ const myDetail = [
label: 'TAG ID', label: 'TAG ID',
valueNm: 'tagId', valueNm: 'tagId',
disabled: false, disabled: false,
iconShow: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4',
required: false, required: false,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
label: 'TAG 명', label: 'TAG 명',
valueNm: 'tagNm', valueNm: 'tagNm',
disabled: false, disabled: false,
iconShow: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4',
required: false, required: false,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'SelectBox', type: 'SelectBox',
label: '측정 값 유형', label: '측정 값 유형',
valueNm: 'readDataTypeCd', valueNm: 'readDataTypeCd',
disabled: false, disabled: false,
iconShow: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
list: 'readDataTypeCdList', list: 'readDataTypeCdList',
itemText: 'commCdNm', itemText: 'commCdNm',
itemValue: 'commCd', itemValue: 'commCd',
required: true, required: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'SelectBox', type: 'SelectBox',
@ -938,11 +911,14 @@ const myDetail = [
valueNm: 'readObjId', valueNm: 'readObjId',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
list: 'readObjList', list: 'readObjList',
itemText: 'readObjNm', itemText: 'readObjNm',
itemValue: 'readObjId', itemValue: 'readObjId',
required: true, required: true,
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -950,8 +926,11 @@ const myDetail = [
valueNm: 'mgnf', valueNm: 'mgnf',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
required: true, required: true,
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'SelectBox', type: 'SelectBox',
@ -959,10 +938,13 @@ const myDetail = [
valueNm: 'unitCd', valueNm: 'unitCd',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
list: 'unitCdList', list: 'unitCdList',
itemText: 'commCdNm', itemText: 'commCdNm',
itemValue: 'commCd', itemValue: 'commCd',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -970,7 +952,10 @@ const myDetail = [
valueNm: 'rangMin', valueNm: 'rangMin',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -978,7 +963,10 @@ const myDetail = [
valueNm: 'rangMax', valueNm: 'rangMax',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -986,7 +974,10 @@ const myDetail = [
valueNm: 'alrmHihi', valueNm: 'alrmHihi',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -994,7 +985,10 @@ const myDetail = [
valueNm: 'alrmHi', valueNm: 'alrmHi',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -1002,7 +996,10 @@ const myDetail = [
valueNm: 'alrmLo', valueNm: 'alrmLo',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -1010,7 +1007,10 @@ const myDetail = [
valueNm: 'alrmLolo', valueNm: 'alrmLolo',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'CheckBox', type: 'CheckBox',
@ -1018,8 +1018,11 @@ const myDetail = [
valueNm: 'totFg', valueNm: 'totFg',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pr-4 pt-5',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'CheckBox', type: 'CheckBox',
@ -1027,9 +1030,12 @@ const myDetail = [
valueNm: 'useFg', valueNm: 'useFg',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pl-4 pt-5',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: false, required: false,
iconShow: true,
labelCols: 12,
textCols: 12,
}, },
{ {
type: 'SelectBox', type: 'SelectBox',
@ -1056,4 +1062,4 @@ const myDetail = [
class: 'py-2', class: 'py-2',
}, },
]; ];
</script> </script>

View File

@ -69,7 +69,7 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title>TAG 상세</v-card-title> <v-card-title>TAG 상세</v-card-title>
<div class="px-5" style="height:calc(100% - 70px)"> <div class="px-5" style="height:calc(100% - 70px)">

View File

@ -49,7 +49,7 @@
<v-col :cols="3"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="12" <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="12"
:textCols="12" :customClass="'input-large'" /> :textCols="12" :customClass="'datepicker-large'" />
</v-col> </v-col>
<v-col :cols="3" class="text-right"> <v-col :cols="3" class="text-right">
<!-- 조회버튼 --> <!-- 조회버튼 -->

View File

@ -1,5 +1,6 @@
<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">
@ -25,7 +26,7 @@
<component <component
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:customClass="'select-large'" :customClass="'datepicker-large'"
:label="'대상일'" :label="'대상일'"
:labelCols="3" :labelCols="3"
/> />
@ -99,7 +100,6 @@ 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("active menu:", myState.menuData);
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;
}, },
@ -319,8 +319,7 @@ export default {
}, },
}; };
console.log("data : ", data); data.map((item) => {
data.map((item) => {
xAxisData.push(item.fabNm); xAxisData.push(item.fabNm);
}); });
@ -374,8 +373,6 @@ export default {
]; ];
} }
// console.log("xAxisData : ", xAxisData);
console.log("seriesData : ", seriesData);
var chartOption = { var chartOption = {
legend: { legend: {
top: xAxisData.length > 7 ? "top" : "bottom", top: xAxisData.length > 7 ? "top" : "bottom",

View File

@ -5,14 +5,14 @@
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="4"> <v-col :cols="3">
<!-- 차트목록 --> <!-- 차트목록 -->
<component :is="'SelectBox'" ref="SelectBox" :propsValue="selectValue01" :itemList="selectValueList01" <component :is="'SelectBox'" ref="SelectBox" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'차트'" @update:propsValue="selectValue01 = $event" :textCols="12" customClass="select-large" /> :label="'차트'" @update:propsValue="selectValue01 = $event" :textCols="12" customClass="select-large" />
</v-col> </v-col>
<v-col :cols="4"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" />
</v-col> </v-col>
<v-col :cols="4" class="text-right"> <v-col :cols="4" class="text-right">
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />
@ -245,7 +245,6 @@ export default {
this.setChartOption({ chartKey: this.chartName, value: chartOption }); this.setChartOption({ chartKey: this.chartName, value: chartOption });
// console.log("----DEBUG chart-options-------", { chartOption });
this.$nextTick(() => { this.$nextTick(() => {
this.loadChart = true; this.loadChart = true;
}); });

View File

@ -32,7 +32,7 @@
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" />
</v-col> </v-col>
<v-col :cols="6" class="text-right d-flex align-end justify-end align-self-end"> <v-col :cols="6" class="text-right d-flex align-end justify-end align-self-end">
<!-- 조회버튼 --> <!-- 조회버튼 -->
@ -99,6 +99,8 @@ 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 getLineChartOption from "~/components/common/chartoptions/LineChart";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -264,9 +266,6 @@ export default {
}, },
created() { }, created() { },
async mounted() { async mounted() {
// console.log('----DEBUG---');
// await this.initTest();
// End Debug Test---
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;
}, },
@ -287,7 +286,7 @@ export default {
}), }),
async initTest() { async initTest() {
// debug test // debug test
console.log('----DEBUG init pages----'); // console.log('----DEBUG init pages----');
const seriesName1 = ['B01. 냉동기전력량', ' B01.COP']; const seriesName1 = ['B01. 냉동기전력량', ' B01.COP'];
const seriesName2 = [ const seriesName2 = [
'UT_HT_CH101:냉동기전혁당', 'UT_HT_CH102:냉동기전력량', 'UT_HT_CH201:냉동기전력당', 'UT_HT_CH101:냉동기전혁당', 'UT_HT_CH102:냉동기전력량', 'UT_HT_CH201:냉동기전력당',
@ -767,22 +766,14 @@ export default {
]; ];
} }
var chartOption = { const chartOption = getLineChartOption({
legend: { xAxisData: xAxisData,
top: 'top', seriesData: seriesData,
},
grid: {
top: '10%',
bottom: '20%',
},
yAxis: {},
xAxis: {
data: xAxisData,
},
series: seriesData,
tooltip: {},
dataZoom: dataZoom, dataZoom: dataZoom,
}; // legendData: legendData,
// isDarkMode: this.isDarkMode,
});
this.setChartOption({ chartKey: this.chartName01, value: chartOption }); this.setChartOption({ chartKey: this.chartName01, value: chartOption });
// this.setChartYAxisData({ chartKey: this.chartName01, value: yAxisData }); // this.setChartYAxisData({ chartKey: this.chartName01, value: yAxisData });
// this.setChartXAxisData({ chartKey: this.chartName01, value: xAxisData }); // this.setChartXAxisData({ chartKey: this.chartName01, value: xAxisData });
@ -867,22 +858,13 @@ export default {
]; ];
} }
var chartOption = { const chartOption = getLineChartOption({
legend: { xAxisData: xAxisData,
top: 'top', seriesData: seriesData,
},
grid: {
top: '10%',
bottom: '20%',
},
yAxis: {},
xAxis: {
data: xAxisData,
},
series: seriesData,
tooltip: {},
dataZoom: dataZoom, dataZoom: dataZoom,
}; // legendData: legendData,
// isDarkMode: this.isDarkMode,
});
this.setChartOption({ chartKey: this.chartName02, value: chartOption }); this.setChartOption({ chartKey: this.chartName02, value: chartOption });
// this.setChartDataZoom({chartKey : this.chartName02,value: dataZoom}); // this.setChartDataZoom({chartKey : this.chartName02,value: dataZoom});

View File

@ -97,7 +97,7 @@
</v-row> </v-row>
<v-row ref="contents" style="height: calc(100vh - 230px)"> <v-row ref="contents" style="height: calc(100vh - 230px)">
<v-col :cols="12" style="height: 100%"> <v-col :cols="12" style="height: 100%">
<v-row class="pa-1" style="height: 37%; width: 100%"> <v-row class="pa-1" style="height: 50%; width: 100%">
<div style="width: 100%; height: 100%; overflow: hidden"> <div style="width: 100%; height: 100%; overflow: hidden">
<div style="height: 15%"> <div style="height: 15%">
<v-card-title <v-card-title
@ -117,7 +117,7 @@
v-for="(value, key, index) in contentData01" v-for="(value, key, index) in contentData01"
:key="'key1' + index" :key="'key1' + index"
> >
<v-card> <v-card style="position: relative; overflow: hidden;" >
<!-- Card header --> <!-- Card header -->
<div <div
style=" style="
@ -133,23 +133,9 @@
<v-card-title style="padding-left: 10px">{{ <v-card-title style="padding-left: 10px">{{
value["gdIdxNm"] value["gdIdxNm"]
}}</v-card-title> }}</v-card-title>
<div class="v-box" style="height: 80%; padding: 3px; margin: 2px"> <div class="v-box" style="height: 80%; padding: 3px; margin: 10px;">
<v-col :cols="12" style="height: 100%"> <v-col :cols="12" style="height: 100%;">
<!-- <div style="height: 20%"> <div style="height: 85%;">
<div
style="
position: absolute;
left: 0;
top: 10px;
width: 4px;
height: 50px;
background-color: #91caff;
border-radius: 2px;
"
></div>
<v-card-title>{{ value["gdIdxNm"] }}</v-card-title>
</div> -->
<div style="height: 95%">
<component <component
class="w100 h100" class="w100 h100"
:is="loadChart ? 'Chart' : null" :is="loadChart ? 'Chart' : null"
@ -166,7 +152,7 @@
</div> </div>
</div> </div>
</v-row> </v-row>
<v-row class="pa-1" style="height: 33%; width: 100%"> <v-row class="pa-1" style="height: 40%; width: 100%">
<v-card class="pa-1" style="height: 100%; width: 100%; overflow: hidden"> <v-card class="pa-1" style="height: 100%; width: 100%; overflow: hidden">
<div style="height: 25%"> <div style="height: 25%">
<v-card-title class="d-flex align-center justify-space-between pa-5"> <v-card-title class="d-flex align-center justify-space-between pa-5">
@ -746,10 +732,12 @@ export default {
{ {
type: "line", type: "line",
data: seriesData, data: seriesData,
symbol: "none",
itemStyle: { itemStyle: {
color: "#D32029", color: "#D32029",
}, },
// symbol: "circle",
showSymbol: true,
connectNulls: true,
}, },
// { // {
// type: "line", // type: "line",

View File

@ -6,34 +6,34 @@
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="2.5"> <v-col :cols="2.5">
<DatePicker :parentPrgmId="myPrgmId" :label="'조회연도'" /> <DatePicker :parentPrgmId="myPrgmId" :label="'조회연도'" customClass="datepicker-large"/>
</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="true" customClass="select-large" />
</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="true" customClass="select-large"/>
</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="true" customClass="select-large" />
</v-col> </v-col>
<BtnSearch size="large" @click="search" /> <BtnSearch size="large" @click="search" />
<!-- <v-col> <!-- <v-col>
</v-col> --> </v-col> -->
<component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId"
@gridEditingFinish="gridEditingFinish" />
</v-row> </v-row>
<component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId"
@gridEditingFinish="gridEditingFinish" />
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents">
<v-col :cols="12" > <v-col :cols="12" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between py-4 px-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>
@ -44,8 +44,6 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
</template> </template>
<script> <script>
@ -106,9 +104,6 @@ export default {
fromDt: new Date().getFullYear(), fromDt: new Date().getFullYear(),
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
dataPathMock: {
// "grid01": {}
},
// gridName: 'rowGrid', // gridName: 'rowGrid',
}; };
}, },
@ -166,12 +161,8 @@ export default {
defaultData: defaultData, defaultData: defaultData,
}); });
}, },
created() { }, created() {},
async mounted() { async mounted() {
// -------
// this.initTest();
// return;
// ========End test===========
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;
}, },
@ -184,122 +175,6 @@ export default {
getBlocMstrList: 'modules/search/getBlocMstrList', getBlocMstrList: 'modules/search/getBlocMstrList',
getAddInfoList: 'modules/search/getAddInfoList', getAddInfoList: 'modules/search/getAddInfoList',
}), }),
...mapMutations({
setPageData: 'setPageData',
}),
initTest() {
let _this = this;
// _this.setPageData({ popupDialogFg: true });
class MockCustumButton {
constructor(props) {
const { grid, rowKey, columnInfo } = props;
const value = columnInfo.renderer.options.value;
const elDiv = document.createElement('div');
elDiv.innerHTML = `<span>${value}</span>`;
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el = document.createElement('button');
$(el).addClass('edit-btn blue--text');
el.innerText = 'Edit';
el.addEventListener('click', function (event) {
// console.log("------DEBUG----_this:", _this);
// _this.setPageData({ eqpmNm: selectedGridData[0]?.eqpmNm });
_this.setPageData({ popupDialogFg: true });
});
elDiv.appendChild(el);
this.elDiv = elDiv;
}
getElement() {
return this.elDiv;
}
}
const mockData = {
column: [
{ header: 'No', name: 'rowNum', align: 'center', width: 40 },
{ header: 'FAB', name: 'fab', align: 'left', width: 80 },
{ header: '설비 그룹', name: 'eqpmGrpNm', align: 'left', minWidth: 150 },
// {
// header: '설비명', name: 'eqpmNm', align: 'left', minWidth: 150,
// formatter: ({ value, row }) => {
// return `
// <div class="d-flex justify-space-between">
// <span>${value}</span>
// <button class="edit-btn blue--text" data-row='${JSON.stringify(row)}'>Edit</button
// </div>
// `;
// }
// },
{
header: '설비명',
name: 'eqpmNm',
width: 70,
align: 'left',
minWidth: 150,
renderer: {
type: MockCustumButton,
options: {
value: '계획수정',
},
},
},
{
header: '구분', name: 'gubun', align: 'left', width: 80,
formatter({ value }) {
let retVal = '';
if (value == '1RSLT') {
retVal = '전년실적';
} else if (value == '2PLAN') {
retVal = '계획';
} else {
retVal = value;
}
return retVal;
},
},
{ header: '1월', name: 'jan', align: 'right', width: 80 },
{ header: '2월', name: 'feb', align: 'right', width: 80 },
{ header: '3월', name: 'mar', align: 'right', width: 80 },
{ header: '4월', name: 'apr', align: 'right', width: 80 },
{ header: '5월', name: 'may', align: 'right', width: 80 },
{ header: '6월', name: 'jun', align: 'right', width: 80 },
{ header: '7월', name: 'jul', align: 'right', width: 80 },
{ header: '8월', name: 'aug', align: 'right', width: 80 },
{ header: '9월', name: 'sep', align: 'right', width: 80 },
{ header: '10월', name: 'oct', align: 'right', width: 80 },
{ header: '11월', name: 'nov', align: 'right', width: 80 },
{ header: '12월', name: 'dec', align: 'right', width: 80 }
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {
columnOptions: {
resizable: true,
},
header: {
height: 65,
complexColumns: [
{
header: '2025 년',
name: 'yyyyCol',
childNames: [
'jan', 'feb', 'mar', 'apr', 'may', 'jun',
'jul', 'aug', 'sep', 'oct', 'nov', 'dec'
],
},
],
}
}
};
this.dataPathMock[this.gridName] = mockData;
this.$nextTick(() => {
this.loadGrid = true;
});
},
async init() { async init() {
await this.getFab(); await this.getFab();
await this.getEqpmKind(); await this.getEqpmKind();
@ -416,7 +291,7 @@ export default {
}, },
}; };
class CustumButton { class CustomButton {
constructor(props) { constructor(props) {
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -429,14 +304,14 @@ export default {
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between'); $(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button'); const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text'); $(el2).addClass('edit-btn blue--text');
el2.innerText = 'Edit'; el2.innerText = '편집하다';
elDiv.appendChild(el2); elDiv.appendChild(el2);
this.el = elDiv; this.el = elDiv;
if (!this.disabled) { if (!this.disabled) {
// 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 => {
@ -477,7 +352,7 @@ export default {
header: 'NO', header: 'NO',
name: 'rowNum', name: 'rowNum',
width: 40, width: 40,
align: 'center', align: 'right',
// hidden: true, // hidden: true,
}, },
{ {
@ -514,7 +389,7 @@ export default {
// `; // `;
// } // }
renderer: { renderer: {
type: CustumButton, type: CustomButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },
@ -527,7 +402,7 @@ export default {
align: 'center', align: 'center',
hidden: true, hidden: true,
renderer: { renderer: {
type: CustumButton, type: CustomButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },
@ -600,7 +475,7 @@ export default {
let selectedGridData = gridData.filter(item => { let selectedGridData = gridData.filter(item => {
return item.rowNum == data.rowNum; return item.rowNum == data.rowNum;
}); });
await this.$nextTick(() => { }); await this.$nextTick(() => {});
this.setPageData({ this.setPageData({
rowGrid2SelectData: selectedGridData, rowGrid2SelectData: selectedGridData,
}); });
@ -799,8 +674,8 @@ export default {
dataArr[i][qty] == '' dataArr[i][qty] == ''
? null ? null
: parseInt(dataArr[i][qty]) == 0 : parseInt(dataArr[i][qty]) == 0
? 0 ? 0
: dataArr[i][qty]; : dataArr[i][qty];
dataList.push(temp); dataList.push(temp);
} }
} }
@ -942,110 +817,18 @@ const defaultData = {
}, },
}, },
}; };
const dataPathDataExample = [
{
rowNum: 1,
fab: 'B01',
eqpmGrpNm: '방송기술운',
eqpmNm: 'U/T_LT_CH101',
gubun: '전력량',
jan: 110000,
feb: 112000,
mar: 115000,
apr: 117000,
may: 120000,
jun: 118000,
jul: 119000,
aug: 121000,
sep: 122000,
oct: 123000,
nov: 124000,
dec: 125000
},
{
rowNum: 2,
fab: 'B02',
eqpmGrpNm: '방송기술운',
eqpmNm: 'U/T_LT_CH102',
gubun: '전력량',
jan: 81000,
feb: 82000,
mar: 83000,
apr: 84000,
may: 85000,
jun: 86000,
jul: 87000,
aug: 88000,
sep: 89000,
oct: 90000,
nov: 91000,
dec: 92000
},
{
rowNum: 3, fab: 'C01', eqpmGrpNm: '방송기술운', eqpmNm: 'U/T_LT_CH124', gubun: '수도량',
jan: 106178, feb: 104740, mar: 92283, apr: 116081, may: 98945, jun: 126579,
jul: 90690, aug: 124243, sep: 97524, oct: 84072, nov: 88160, dec: 118183
},
{
rowNum: 4, fab: 'B01', eqpmGrpNm: '방송기술운', eqpmNm: 'U/T_LT_CH103', gubun: '가스량',
jan: 80442, feb: 102867, mar: 114939, apr: 106335, may: 81743, jun: 83711,
jul: 86114, aug: 97432, sep: 84146, oct: 84775, nov: 117921, dec: 119417
},
{
rowNum: 5, fab: 'B01', eqpmGrpNm: '설비운영팀', eqpmNm: 'U/T_LT_CH156', gubun: '전력량',
jan: 90341, feb: 94072, mar: 122754, apr: 85471, may: 90813, jun: 116831,
jul: 90856, aug: 109437, sep: 94029, oct: 96075, nov: 127067, dec: 102503
},
{
rowNum: 6, fab: 'B03', eqpmGrpNm: '방송기술운', eqpmNm: 'U/T_LT_CH183', gubun: '가스량',
jan: 104163, feb: 107012, mar: 104631, apr: 83055, may: 106311, jun: 117306,
jul: 86434, aug: 117087, sep: 118414, oct: 91499, nov: 93829, dec: 94192
},
{
rowNum: 7, fab: 'C01', eqpmGrpNm: '전력관리부', eqpmNm: 'U/T_LT_CH158', gubun: '가스량',
jan: 84821, feb: 128234, mar: 116883, apr: 116718, may: 114738, jun: 88297,
jul: 93840, aug: 84700, sep: 98360, oct: 87021, nov: 113098, dec: 94734
},
{
rowNum: 8, fab: 'B02', eqpmGrpNm: '방송기술운', eqpmNm: 'U/T_LT_CH179', gubun: '가스량',
jan: 128714, feb: 88797, mar: 124808, apr: 109283, may: 113141, jun: 82873,
jul: 114993, aug: 129108, sep: 100885, oct: 125730, nov: 92127, dec: 122286
},
{
rowNum: 9, fab: 'C01', eqpmGrpNm: '전력관리부', eqpmNm: 'U/T_LT_CH191', gubun: '전력량',
jan: 107258, feb: 108424, mar: 113604, apr: 116648, may: 124149, jun: 129978,
jul: 112215, aug: 129602, sep: 93551, oct: 111272, nov: 89736, dec: 128423
},
{
rowNum: 10, fab: 'B02', eqpmGrpNm: '방송기술운', eqpmNm: 'U/T_LT_CH104', gubun: '전력량',
jan: 82089, feb: 102793, mar: 96784, apr: 85238, may: 86153, jun: 123849,
jul: 115095, aug: 129484, sep: 102109, oct: 80976, nov: 119841, dec: 106309
},
{
rowNum: 11, fab: 'C02', eqpmGrpNm: '전력관리부', eqpmNm: 'U/T_LT_CH139', gubun: '전력량',
jan: 128592, feb: 95647, mar: 85982, apr: 126824, may: 87928, jun: 128967,
jul: 94637, aug: 107530, sep: 122533, oct: 97546, nov: 112110, dec: 126250
},
{
rowNum: 12, fab: 'C01', eqpmGrpNm: '설비운영팀', eqpmNm: 'U/T_LT_CH109', gubun: '전력량',
jan: 106530, feb: 91716, mar: 111104, apr: 102663, may: 108912, jun: 91464,
jul: 121245, aug: 90785, sep: 120586, oct: 105718, nov: 96191, dec: 111513
}
];
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
// @import '@/assets/scss/common.scss';
@import '@/assets/scss/var.scss'; @import '@/assets/scss/var.scss';
@each $theme in dark, light { @each $theme in dark, light {
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.tui-grid { .tui-grid {
&-row-odd, &-row-odd,
&-row-even { &-row-even {
&:hover>.colrowspan { &:hover > .colrowspan {
background-color: map-deep-get($config, background-color: map-deep-get(
$config,
#{$theme}, #{$theme},
'tui-grid-cell-backgroundColor' 'tui-grid-cell-backgroundColor'
) !important; ) !important;
@ -1055,10 +838,10 @@ const dataPathDataExample = [
} }
} }
} }
&-cell { &-cell {
&.row-selected.colrowspan { &.row-selected.colrowspan {
background-color: map-deep-get($config, background-color: map-deep-get(
$config,
#{$theme}, #{$theme},
'tui-grid-cell-backgroundColor' 'tui-grid-cell-backgroundColor'
) !important; ) !important;

View File

@ -24,6 +24,7 @@
:is="'DatePicker'" :is="'DatePicker'"
:label="'대상연월'" :label="'대상연월'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:customClass="'datepicker-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> </v-col> <v-col :cols="3"> </v-col>
@ -429,9 +430,6 @@ export default {
var chartKey = null; var chartKey = null;
var chartOption = null; var chartOption = null;
console.log("data key:", dataKeyList);
console.log("data test:", data);
for (var i = 0; i < dataKeyList.length; i++) { for (var i = 0; i < dataKeyList.length; i++) {
for (var j = 0; j < data[dataKeyList[i]].chartData.length; j++) { for (var j = 0; j < data[dataKeyList[i]].chartData.length; j++) {
currentChartData = data[dataKeyList[i]].chartData[j]; currentChartData = data[dataKeyList[i]].chartData[j];

View File

@ -71,6 +71,7 @@
:label="'대상년월'" :label="'대상년월'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:isRangeOption="false" :isRangeOption="false"
:customClass="'datepicker-large'"
/> />
</v-col> </v-col>
<v-col :cols="6"> </v-col> <v-col :cols="6"> </v-col>

File diff suppressed because it is too large Load Diff

View File

@ -115,7 +115,7 @@ export class CustomCalcNumberEditor {
} }
} }
export class CustumChecbox { export class CustomCheckbox {
constructor(props) { constructor(props) {
const el = document.createElement('input'); const el = document.createElement('input');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -169,7 +169,7 @@ export class CustumChecbox {
} }
} }
export class CustumButton { export class CustomButton {
constructor(props) { constructor(props) {
const el = document.createElement('button'); const el = document.createElement('button');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -253,8 +253,9 @@ export class NewCustomRenderer {
} else { } else {
el.type = 'text'; el.type = 'text';
$(el).addClass('tui-grid-cell-content'); $(el).addClass('tui-grid-cell-content w100');
$(el).css('text-align', 'center'); $(el).css('text-align', 'center');
$(el).css('border', '0');
} }
this.render(props); this.render(props);
if(!this.disabled){ if(!this.disabled){
@ -314,6 +315,8 @@ export class NewCustomEditor {
this.rowKey = rowKey; this.rowKey = rowKey;
this.columnInfo = columnInfo; this.columnInfo = columnInfo;
this.grid = grid; this.grid = grid;
const divEl = document.createElement('div');
$(divEl).css('text-align', 'center');
const el = document.createElement('input'); const el = document.createElement('input');
if ( if (
props.grid.store.data.rawData[props.rowKey].addInfoDataKind == 'FG' props.grid.store.data.rawData[props.rowKey].addInfoDataKind == 'FG'
@ -363,16 +366,20 @@ export class NewCustomEditor {
} }
$(el).addClass('tui-grid-content-text'); $(el).addClass('tui-grid-content-text');
} }
divEl.append(el);
// console.log('props: %o', props); // console.log('props: %o', props);
// console.log('el: %o', el); // console.log('el: %o', el);
this.el = el; this.el = el;
this.divEl = divEl;
this.render(props); this.render(props);
} }
getElement() { getElement() {
return this.el; return this.divEl;
} }
getValue() { getValue() {
@ -389,9 +396,9 @@ export class NewCustomEditor {
} }
mounted() { mounted() {
if (this.el.type == 'checkbox') { // if (this.el.type == 'checkbox') {
$(this.el.parentElement).css('text-align', 'center'); // $(this.el.parentElement).css('text-align', 'center');
} // }
this.el.select(); this.el.select();
} }
} }