Compare commits

..

2 Commits

94 changed files with 4986 additions and 3655 deletions

View File

@ -266,7 +266,7 @@ a {
} }
&>.v-treeview-node__root:hover:before { &>.v-treeview-node__root:hover:before {
opacity: 0 !important; opacity: 1 !important;
} }
.v-treeview-node__children { .v-treeview-node__children {
@ -280,17 +280,13 @@ 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: 0 !important; opacity: 1 !important;
} }
} }
.v-treeview-node[aria-expanded="true"] { .v-treeview-node[aria-expanded="true"] {
&>.v-treeview-node__root>.v-treeview-node__content &>.v-treeview-node__root>.v-treeview-node__content>.v-treeview-node__label>button>.v-icon.mdi-chevron-down {
>.v-treeview-node__label>button { transform: rotate(-180deg);
>.anticon,
>.v-icon.mdi-chevron-down {
transform: rotate(-180deg);
}
} }
} }
@ -302,17 +298,15 @@ 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: 0 !important; opacity: 1 !important;
} }
} }
@ -328,8 +322,7 @@ 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;
} }
@ -441,7 +434,7 @@ a {
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
min-width: 1000px; min-width: 1000px;
.head-logo { .head-logo{
gap: 8px; gap: 8px;
} }
@ -481,7 +474,7 @@ a {
.header { .header {
background-color: map-deep-get($config, #{$theme}, "header-backgroud"); background-color: map-deep-get($config, #{$theme}, "header-backgroud");
border-bottom: 1px solid map-deep-get($config, #{$theme}, "v-header-border"); border-color: #D3D6EA;
} }
.btn-header { .btn-header {
@ -492,11 +485,9 @@ a {
.container--fluid { .container--fluid {
background-color: map-deep-get($config, #{$theme}, "container-fluid"); background-color: map-deep-get($config, #{$theme}, "container-fluid");
.menu-container { .menu-container {
height:calc(100vh - 60px); max-height:calc(100vh - 60px);
overflow-y: auto; overflow-y: auto;
border-right: 1px solid map-deep-get($config, #{$theme}, "v-sidebar-border") ;
} }
} }
@ -611,9 +602,45 @@ a {
} }
} }
// .v-banner {
// &__wrapper {
// border-bottom-color: map-deep-get($config,
// #{$theme},
// "v-banner-border-color"
// ) !important;
// }
// }
.v-navigation-drawer__append { .v-navigation-drawer__append {
>p { >p {
color: map-deep-get($config, #{$theme}, "v-banner-border-color" ) !important; @if $theme ==dark {
color: rgba(255, 255, 255, 0.6);
}
@else {
color: #999;
}
}
}
.v-footer {
@if $theme ==light {
background-color: #dfdfe5;
color: #767d83;
}
}
.bd {
@if $theme ==dark {
&-r-1 {
border-right: 1px #373f45 solid;
}
}
@else {
&-r-1 {
border-right: 1px #efefef solid;
}
} }
} }
@ -663,115 +690,254 @@ a {
} }
&>.v-treeview-node { &>.v-treeview-node {
.v-treeview-node__root { &>.v-treeview-node__root {
border-radius: 8px; &:before {
&:hover { background-color: map-deep-get($config,
background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color" ); #{$theme},
"v-treeview-node-root-backgroundColor"
);
} }
.v-treeview-node__content {
&>.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "tui-grid-title-color"); 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 {
&>.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"
);
}
}
}
} }
&[aria-expanded="true"]{ &>.v-treeview-node__children {
&>.v-treeview-node {
// Level 1 &>.v-treeview-node__root {
&>.v-treeview-node__root { &:before {
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-bg" ); background-color: map-deep-get($config,
border: 1px solid map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" ); #{$theme},
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border"); "v-treeview-node-subroot-backgroundColor"
);
&: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-treeview-node__content {
.v-icon:first-child::before { .v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" ); 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"
);
}
} }
} }
} }
}
&>.v-treeview-node__children { &[aria-expanded="true"] {
// Level 2 & .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__root { .v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "v-treeview-node-root-label-color"); color: map-deep-get($config,
&:hover { #{$theme},
background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-backgroundColor"); "v-treeview-node-root-label-active-color"
} );
}
&>[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-icon {
.v-treeview-node__children { color: map-deep-get($config,
.v-treeview-node { #{$theme},
>.v-treeview-node__root { "v-treeview-node-root-icon-active-color"
.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" );
}
}
}
}
}
} }
} }
} }
} }
@ -784,24 +950,15 @@ a {
"v-calendar-weekday-backgroundColor" "v-calendar-weekday-backgroundColor"
); );
border-right: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color"); border-right: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color");
border-bottom: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color");
border-top: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color");
color: map-deep-get($config, #{$theme}, "v-calendar-weekday-color"); color: map-deep-get($config, #{$theme}, "v-calendar-weekday-color");
&:nth-of-type(1) { &:nth-of-type(1) {
// color: map-deep-get($config, color: map-deep-get($color, "week", "sun");
// #{$theme},
// "v-calendar-is-sun"
// );
border-left: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color");
} }
// &:nth-of-type(7) { &:nth-of-type(7) {
// color: map-deep-get($config, color: map-deep-get($color, "week", "sat");
// #{$theme}, }
// "v-calendar-is-sat"
// );
// }
} }
>.vc-day { >.vc-day {
@ -810,33 +967,22 @@ a {
.day-hldyNm, .day-hldyNm,
.day-label.is-holiday { .day-label.is-holiday {
color: map-deep-get($config, color: map-deep-get($color, "week", "sun");
#{$theme},
"v-calendar-is-sun"
);
} }
&.weekday-1 { &.weekday-1 {
.day-label, .day-label,
.day-hldyNm { .day-hldyNm {
color: map-deep-get($config, color: map-deep-get($color, "week", "sun");
#{$theme},
"v-calendar-is-sun"
);
} }
border-left: 1px solid map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color");
} }
&.weekday-7 { &.weekday-7 {
.day-label, .day-label,
.day-hldyNm { .day-hldyNm {
color: map-deep-get($config, color: map-deep-get($color, "week", "sat");
#{$theme},
"v-calendar-is-sat"
);
} }
} }
@ -1038,17 +1184,11 @@ a {
} }
th.tui-sun { th.tui-sun {
color: map-deep-get($config, color: map-deep-get($color, "week", "sun");
#{$theme},
"v-calendar-is-sun"
);
} }
th.tui-sat { th.tui-sat {
color: map-deep-get($config, color: map-deep-get($color, "week", "sat");
#{$theme},
"v-calendar-is-sat"
);
} }
} }
@ -1064,17 +1204,11 @@ a {
} }
td.tui-calendar-sun { td.tui-calendar-sun {
color: map-deep-get($config, color: map-deep-get($color, "week", "sun");
#{$theme},
"v-calendar-is-sun"
);
} }
td.tui-calendar-sat { td.tui-calendar-sat {
color: map-deep-get($config, color: map-deep-get($color, "week", "sat");
#{$theme},
"v-calendar-is-sat"
);
} }
} }
} }
@ -1116,47 +1250,26 @@ a {
} }
.v-list { .v-list {
background-color: map-deep-get($config, background-color: map-deep-get($config,
#{$theme}, #{$theme},
"tui-datepicker-backgroundColor" "tui-datepicker-backgroundColor"
); );
border: 1px solid map-deep-get($config, #{$theme}, "tui-datepicker-border-color"); border: 1px solid map-deep-get($config, #{$theme}, "tui-datepicker-border-color");
border-radius: 4px; border-radius: 4px;
padding: 4px;
&-item--active { &-item--active {
border-radius: 4px; &:before {
&:before { opacity: 0;
opacity: 0; }
}
.v-list-item__title { .v-list-item__title {
color: map-deep-get($config, #{$theme}, "tui-datepicker-calendar-color"); color: map-deep-get($config,
} #{$theme},
} "tui-datepicker-calendar-color"
);
&.v-select-list{ }
>.v-list-item { }
margin-bottom: 4px; }
.anticon {
&.anticon-check {
display: none;
}
}
&[aria-selected="true"] {
border-radius: 8px;
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-bg");
.anticon {
&.anticon-check {
display: block;
color: map-deep-get($config, #{$theme}, "v-icon-blue");
}
}
}
}
}
}
.theme--white { .theme--white {
.toastui-editor-contents { .toastui-editor-contents {
@ -1209,7 +1322,6 @@ a {
color: #46c0ff; color: #46c0ff;
} }
} }
.v-btn { .v-btn {
background-color: transparent !important; background-color: transparent !important;
color: map-deep-get($config, #{$theme}, "btn-header-select-color") !important; color: map-deep-get($config, #{$theme}, "btn-header-select-color") !important;
@ -1274,6 +1386,11 @@ a {
} }
} }
} }

View File

@ -92,7 +92,7 @@
background: map-deep-get($config, #{$theme}, "basic-button-background"); background: map-deep-get($config, #{$theme}, "basic-button-background");
} }
.searchFilter { .searchFilter{
.search-button { .search-button {
height: 40px; height: 40px;
color: map-deep-get($config, #{$theme}, "search-btn-color"); color: map-deep-get($config, #{$theme}, "search-btn-color");
@ -101,14 +101,15 @@
.v-dialog { .v-dialog {
.ant-btn-icon-only { .ant-btn-icon-only {
color: map-deep-get($config, color: map-deep-get(
$config,
#{$theme}, #{$theme},
"icon-color" "icon-color"
); );
} }
} }
.ant-btn { .ant-btn {
&.ant-btn-outlined { &.ant-btn-outlined {
color:map-deep-get($config, #{$theme}, "ant-btn-default-color"); color:map-deep-get($config, #{$theme}, "ant-btn-default-color");
@ -120,8 +121,7 @@
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color"); color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
&.ant-btn-background-ghost{
&.ant-btn-background-ghost {
color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
} }
} }
@ -142,7 +142,6 @@
&.expand-btn { &.expand-btn {
.v-icon { .v-icon {
color: map-deep-get($config, #{$theme}, "basic-button-color"); color: map-deep-get($config, #{$theme}, "basic-button-color");
svg { svg {
fill: map-deep-get($config, #{$theme}, "basic-button-color"); fill: map-deep-get($config, #{$theme}, "basic-button-color");
} }
@ -153,15 +152,13 @@
} }
.v-application { .v-application {
.ant-btn { .ant-btn {
border-radius: 6px; border-radius: 6px;
&.ant-btn-lg { &.ant-btn-lg {
border-radius: 8px; border-radius: 8px;
} }
&.ant-btn-default { &.ant-btn-default {
border: none !important border:none !important
} }
} }
@ -174,14 +171,13 @@
border: none; border: none;
width: 16px; width: 16px;
height: 16px; height: 16px;
background: none; background:none;
} }
} }
.ant-btn {
.ant-btn {
&.expand-btn { &.expand-btn {
span { .v-icon {
&.v-icon { span {
margin-right: 8px; margin-right: 8px;
} }
} }

View File

@ -17,6 +17,18 @@
border: 0 !important; border: 0 !important;
} }
// &-body-container {
// width: 100% !important;
// }
// &-table {
// width: 100% !important;
// }
// &-lside-area .tui-grid-body-area {
// margin-right: -11px;
// }
&-lside-area .tui-grid-scrollbar-left-bottom { &-lside-area .tui-grid-scrollbar-left-bottom {
display: none; display: none;
} }
@ -86,12 +98,6 @@
@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;
@ -103,15 +109,6 @@
); );
} }
.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;
@ -137,29 +134,46 @@
} }
&-body-container{ &-body-container{
border-right: 0; border-right: 1px solid;
// position: relative; border-right-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-borderColor"
);
width: auto !important; width: auto !important;
.tui-grid-table-container{
// width: 100% !important;
.tui-grid-table {
// width: 100% !important;
// table-layout: fixed;
// th, td {
// &:last-child{
// width: auto !important;
// }
// }
}
}
} }
&-summary-area, &-container,
&-container { &-summary-area {
font-family: Inter; font-family: Inter;
// color: #000000E0;
& ::-webkit-scrollbar {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
-webkit-appearance: initial;
background-color: map-deep-get($config,
#{$theme},
"scrollbar-track"
) !important;
border-radius: 3px !important;
}
& ::-webkit-scrollbar-track {
background-color: map-deep-get($config,
#{$theme},
"scrollbar-track"
) !important;
}
& ::-webkit-scrollbar-thumb {
width: 50px !important;
height: 50px !important;
background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb");
border-radius: 3px;
}
.tui-grid-cell { .tui-grid-cell {
&.tui-grid-cell-summary { &.tui-grid-cell-summary {
color: map-deep-get($config, color: map-deep-get($config,
#{$theme}, #{$theme},
@ -169,32 +183,6 @@
} }
} }
&-body-area {
overflow: auto;
&::-webkit-scrollbar {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
-webkit-appearance: initial;
background-color: rgba(0, 0, 0, 0) !important;
border-radius: 3px !important;
// border-right: 1px solid;
// border-right-color: map-deep-get($config, #{$theme}, "tui-grid-cell-borderColor");
}
&::-webkit-scrollbar-track {
background-color: rgba(0, 0, 0, 0) !important;
}
&::-webkit-scrollbar-thumb {
height: 50px !important;
background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb");
border-radius: 3px;
// width: 50px !important;
// background-color: rgba(0, 0, 0, 0);
}
}
&-rside-area { &-rside-area {
background-color: map-deep-get($config, #{$theme}, "scrollbar-track"); background-color: map-deep-get($config, #{$theme}, "scrollbar-track");
} }
@ -207,7 +195,6 @@
&-scrollbar-right-top { &-scrollbar-right-top {
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
border: none; border: none;
display: none;
// background-color: map-deep-get( // background-color: map-deep-get(
// $config, // $config,
// #{$theme}, // #{$theme},
@ -233,14 +220,13 @@
&-scrollbar-right-bottom { &-scrollbar-right-bottom {
width: $scrollbar-width !important; width: $scrollbar-width !important;
height: $scrollbar-width !important; height: $scrollbar-width !important;
border-color: map-deep-get($config, #{$theme}, "cardBackground");
background-color: map-deep-get($config, #{$theme}, "cardBackground");
box-sizing: border-box;
// display: none !important; // display: none !important;
border-color: map-deep-get($config, #{$theme}, "scrollbar-track");
background-color: map-deep-get($config, #{$theme}, "scrollbar-track");
// border: none !important; // border: none !important;
// bottom: -1px; // bottom: -1px;
// right: -2px; // right: -2px;
// display: none; box-sizing: border-box;
} }
&-scrollbar-frozen-border, &-scrollbar-frozen-border,
@ -250,9 +236,13 @@
border-color: transparent !important; border-color: transparent !important;
} }
&-body-area, // &-body-area {
// overflow: auto !important;
// }
&-container, &-container,
&-layer-state, &-layer-state,
&-body-area,
&-summary-area, &-summary-area,
&-cell { &-cell {
background-color: map-deep-get($config, background-color: map-deep-get($config,
@ -264,36 +254,23 @@
"tui-grid-border-vertical-color" "tui-grid-border-vertical-color"
); );
// &-current-row{ &-current-row{
// } td {
td.row-selected { .custom-radio {
.custom-radio { .radio-mark{
background-color: map-deep-get($config, border-color: #1677ff;
#{$theme}, background-color: #fff;
"ant-btn-primary-color" &::after {
); content: "";
.radio-mark{ position: absolute;
border-color: map-deep-get($config, top: 50%;
#{$theme}, left: 50%;
"arow-line-color" transform: translate(-50%, -50%);
); height: 11px;
background-color: map-deep-get($config, width: 11px;
#{$theme}, border-radius: 50%;
"arow-line-btn-bg-color" background-color: #1677ff;
); }
&::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 8px;
width: 8px;
border-radius: 50%;
background-color: map-deep-get($config,
#{$theme},
"arow-line-color"
);
} }
} }
} }
@ -308,13 +285,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"
// ); );
// } }
} }
} }
@ -325,8 +302,8 @@
&-header-area, &-header-area,
&-cell-header { &-cell-header {
// font-family: inherit; // font-family: inherit;
// font-style: Semi Bold;
font-weight: 600; font-weight: 600;
font-style: Semi Bold;
background-color: map-deep-get($config, background-color: map-deep-get($config,
#{$theme}, #{$theme},
"tui-grid-header-backgroundColor" "tui-grid-header-backgroundColor"
@ -343,17 +320,8 @@
} }
&-header-area { &-header-area {
// background-color: none; background-color: none;
border: none; border: none;
margin-right: 0 !important;
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-backgroundColor"
);
// width: 100% !important;
// .tui-grid-table {
// width: 100% !important;
// }
} }
&-row-odd, &-row-odd,
@ -483,7 +451,6 @@
} }
&-tree-button-expand { &-tree-button-expand {
z-index: 9999;
.tui-grid-btn-tree { .tui-grid-btn-tree {
i { i {
width: 16px; width: 16px;
@ -502,7 +469,6 @@
} }
&-tree-button-collapse { &-tree-button-collapse {
z-index: 9999;
.tui-grid-btn-tree { .tui-grid-btn-tree {
i { i {
width: 16px; width: 16px;

View File

@ -171,27 +171,25 @@
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
padding-left: 0; padding-left: 28px;
margin: 5px; margin: 10px;
font-size: 16px; font-size: 16px;
} }
.custom-radio input[type="radio"] { .custom-radio input[type="radio"] {
position: absolute; position: absolute;
opacity: 0; opacity: 0;
cursor: pointer; cursor: pointer;
} }
/* Custom radio appearance */ /* Custom radio appearance */
.radio-mark { .radio-mark {
position: absolute; position: absolute;
left: -8px; left: 0;
top: 50%; top: 50%;
transform: translateY(-50%); transform: translateY(-50%);
height: 14px; height: 18px;
width: 14px; width: 18px;
// background-color: white; background-color: white;
border: 1px solid #ccc; border: 2px solid #ccc;
border-radius: 50%; border-radius: 50%;
transition: all 0.2s ease; transition: all 0.2s ease;
} }
@ -224,31 +222,11 @@
color: #424242 !important; color: #424242 !important;
} }
.ant-checkbox {
.ant-checkbox-inner {
border-radius: 4px
}
}
@each $theme in dark, light { @each $theme in dark, light {
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.ant-checkbox-wrapper {
.ant-checkbox-checked {
.ant-checkbox-inner {
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
&.ant-checkbox-inner::after {
border-color: map-deep-get($config, #{$theme}, "ant-btn-primary-color");
}
}
}
}
.v-input-popup__custom { .v-input-popup__custom {
.v-input__slot { .v-input__slot {
padding-left: 12px; padding-left: 12px;
@ -261,12 +239,11 @@
} }
.v-textarea { .v-textarea {
.v-input__slot { .v-input__slot{
border: map-deep-get($config, border: map-deep-get($config,
#{$theme}, #{$theme},
"v-input-textarea-border" "v-input-textarea-border"
); );
fieldset { fieldset {
background-color: map-deep-get($config, background-color: map-deep-get($config,
#{$theme}, #{$theme},
@ -286,6 +263,9 @@
"v-input-backgroundColor" "v-input-backgroundColor"
); );
&:not(.v-input--radio-group, .v-input--checkbox) { &:not(.v-input--radio-group, .v-input--checkbox) {
.v-input__slot { .v-input__slot {
background-color: map-deep-get($config, background-color: map-deep-get($config,
@ -392,17 +372,6 @@
} }
} }
} }
.radio-mark {
background-color: map-deep-get($config,
#{$theme},
"ant-btn-primary-color"
);
border-color: map-deep-get($config,
#{$theme},
"v-input-textarea-border"
);
}
} }
.v-radio { .v-radio {
@ -427,12 +396,6 @@
.v-input--checkbox { .v-input--checkbox {
.v-icon { .v-icon {
transform: none;
&.mdi:before {
font-size: 16px;
}
@if $theme ==dark { @if $theme ==dark {
color: rgba(255, 255, 255, 0.6); color: rgba(255, 255, 255, 0.6);
} }
@ -443,9 +406,6 @@
} }
} }
.v-textarea { .v-textarea {
textarea { textarea {
padding: 10px; padding: 10px;

View File

@ -14,14 +14,10 @@
position: relative; position: relative;
border-radius: 6px; border-radius: 6px;
border: solid 1px; border: solid 1px;
height: 32px; height: 40px;
color: map-deep-get($config, #{$theme}, "v-input-fieldset-color") !important; // border-color: #424242;
border-color: currentColor; border-color: map-deep-get($config, #{$theme}, "tui-datepicker-border-color");
// border-color: map-deep-get($config, #{$theme}, "tui-datepicker-border-color");
&.datepicker-large {
height: 40px;
}
.v-input { .v-input {

View File

@ -32,8 +32,8 @@ $color: (
"black": ("0": #000, "black": ("0": #000,
"1": #111), "1": #111),
"white": ("0": #fff), "white": ("0": #fff),
"week": ("sun": #FF4D4F, "week": ("sun": #fb5a83,
"sat": #597EF7) "sat": #2d8cf6)
); );
$config: ( $config: (
@ -96,21 +96,19 @@ $config: (
v-input-disabled-backgroundColor:rgba(255, 255, 255, 0.08), v-input-disabled-backgroundColor:rgba(255, 255, 255, 0.08),
v-input-disabled-color: rgba(255, 255, 255, 0.5), v-input-disabled-color: rgba(255, 255, 255, 0.5),
v-select-label-color: rgba(255, 255, 255, 0.85), v-select-label-color: rgba(255, 255, 255, 0.85),
v-calendar-weekday-backgroundColor: #FFFFFF0A, v-calendar-weekday-backgroundColor: #383f5d,
v-calendar-weekday-color: #FFFFFFD9, v-calendar-weekday-color: #fff,
v-calendar-weekday-border-color: #FFFFFF0F, v-calendar-weekday-border-color: rgba(255, 255, 255, 0.1),
v-calendar-day-color: #FFFFFFD9, v-calendar-day-color: #fff,
v-calendar-day-in-not-month-color: #FFFFFF14, v-calendar-day-in-not-month-color: rgba(255, 255, 255, 0.05),
v-calendar-is-today-background-color: #0A224F, v-calendar-is-today-background-color: #2d4571,
v-calendar-is-sat: #263EA0,
v-calendar-is-sun:#A61D24,
tui-grid-title-color: #FFFFFFD9, tui-grid-title-color: #FFFFFFD9,
tui-grid-header-backgroundColor: #2a2b2d, tui-grid-header-backgroundColor: #2a2b2d,
tui-grid-header-color: #FFFFFFD9, tui-grid-header-color: #FFFFFFD9,
tui-grid-border-horziontal-color: #212224, tui-grid-border-horziontal-color: #212224,
tui-grid-border-vertical-color: #FFFFFF0F, tui-grid-border-vertical-color: #212224,
tui-grid-cell-backgroundColor: #212224, tui-grid-cell-backgroundColor: #212224,
tui-grid-cell-color: #FFFFFFA6, tui-grid-cell-color: #fff,
tui-grid-cell-insert-color: #13636c, tui-grid-cell-insert-color: #13636c,
tui-grid-cell-selected-color: #0A224F, tui-grid-cell-selected-color: #0A224F,
tui-grid-cell-modify-color: #13636c, tui-grid-cell-modify-color: #13636c,
@ -174,8 +172,6 @@ $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,
@ -211,6 +207,7 @@ $config: (
router-tab-item-hover-color: #1677ff, router-tab-item-hover-color: #1677ff,
router-tab-slot-end-button-backgroundColor: #3f4d7d, router-tab-slot-end-button-backgroundColor: #3f4d7d,
v-btn-backgroundColor: #1677ff, v-btn-backgroundColor: #1677ff,
// v-btn-backgroundColor: #fff,
v-box: #FFFFFF, v-box: #FFFFFF,
v-banner-border-color: #ddd, v-banner-border-color: #ddd,
v-treeview-node-root-backgroundColor: #FFFFFF, v-treeview-node-root-backgroundColor: #FFFFFF,
@ -237,14 +234,12 @@ $config: (
v-input-disabled-backgroundColor: rgba(0, 0, 0, 0.04), v-input-disabled-backgroundColor: rgba(0, 0, 0, 0.04),
v-input-disabled-color: rgba(0, 0, 0, 0.25), v-input-disabled-color: rgba(0, 0, 0, 0.25),
v-select-label-color: rgba(0, 0, 0, 0.88), v-select-label-color: rgba(0, 0, 0, 0.88),
v-calendar-weekday-backgroundColor: #00000005, v-calendar-weekday-backgroundColor: #e0e0e0,
v-calendar-weekday-color: #000000E0, v-calendar-weekday-color: #111,
v-calendar-weekday-border-color: #0000000F, v-calendar-weekday-border-color: #d4d4d4,
v-calendar-day-color: #000000E0, v-calendar-day-color: #111,
v-calendar-day-in-not-month-color: #0000000A, v-calendar-day-in-not-month-color: #f8f8f8,
v-calendar-is-today-background-color: #E6F4FF, v-calendar-is-today-background-color: #e3eaf3,
v-calendar-is-sat: #597EF7,
v-calendar-is-sun:#FF4D4F,
tui-grid-title-color: #000000E0, tui-grid-title-color: #000000E0,
tui-grid-header-backgroundColor: #fafafa, //#e0e0e0, tui-grid-header-backgroundColor: #fafafa, //#e0e0e0,
tui-grid-header-color: rgba(0, 0, 0, 0.88), tui-grid-header-color: rgba(0, 0, 0, 0.88),
@ -252,10 +247,10 @@ $config: (
tui-grid-border-vertical-color: rgba(0, 0, 0, 0.06), //#d4d4d4, tui-grid-border-vertical-color: rgba(0, 0, 0, 0.06), //#d4d4d4,
tui-grid-cell-backgroundColor: #fff, tui-grid-cell-backgroundColor: #fff,
tui-grid-cell-color: #000000E0, tui-grid-cell-color: #000000E0,
tui-grid-cell-insert-color: #FFFBE6, tui-grid-cell-insert-color: #13636c,
tui-grid-cell-selected-color: #E6F4FF, tui-grid-cell-selected-color: #E6F4FF,
tui-grid-cell-modify-color: #e6f5f7, tui-grid-cell-modify-color: #e6f5f7,
tui-grid-cell-removed-color: #FFF1F0, tui-grid-cell-removed-color: #fddde1,
tui-grid-cell-hover-backgroundColor: #f5f5f5, tui-grid-cell-hover-backgroundColor: #f5f5f5,
v-tabs-items-border-color: #0000000F, v-tabs-items-border-color: #0000000F,
v-tabs-backgroundColor: #ddd, v-tabs-backgroundColor: #ddd,
@ -313,7 +308,5 @@ $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

@ -3,28 +3,45 @@
<div class="custom-vc-calender-title text-center" v-if="headerVisible"> <div class="custom-vc-calender-title text-center" v-if="headerVisible">
<span>{{ selectedYear }} {{ selectedMonth }}</span> <span>{{ selectedYear }} {{ selectedMonth }}</span>
</div> </div>
<vc-calendar locale="ko-KR" ref="myCalendar" :attributes="calendarAttributes" class="custom-calendar"> <vc-calendar
ref="myCalendar"
:attributes="calendarAttributes"
class="custom-calendar"
>
<!-- disable-page-swipe <!-- disable-page-swipe
is-expanded --> is-expanded -->
<template v-slot:day-content="{ day, attributes }"> <template v-slot:day-content="{ day, attributes }">
<div class="plusButton" style="overflow:auto"> <div class="plusButton" style="overflow:auto">
<!-- <p class="plusButton mr-1" >+</p> --> <!-- <p class="plusButton mr-1" >+</p> -->
<span :class="['day-label', { 'is-holiday': hldyValues(day.day) }]" <span
@click="addPlan(day.year, day.month, day.day)">{{ day.day }}</span> :class="['day-label', { 'is-holiday': hldyValues(day.day) }]"
@click="addPlan(day.year, day.month, day.day)"
>{{ day.day }}</span
>
<span v-for="attr in attributes" :key="attr.key" class="day-hldyNm"> <span v-for="attr in attributes" :key="attr.key" class="day-hldyNm">
{{ attr.customData.title }} {{ attr.customData.title }}
</span> </span>
<div class=""> <div class="">
<p v-for="attr in attributes" :key="attr.key" :class="attr.customData.planColor" <p
@click="updatePlan(attr.customData.planSeq)"> v-for="attr in attributes"
:key="attr.key"
:class="attr.customData.planColor"
@click="updatePlan(attr.customData.planSeq)"
>
{{ attr.customData.planTitle }} {{ attr.customData.planTitle }}
</p> </p>
</div> </div>
</div> </div>
</template> </template>
</vc-calendar> </vc-calendar>
<component ref="planPop" :is="'PlanPop'" v-show="false" :detailList="detailList" :label="planLabel" <component
:parentPrgmId="parentPrgmId" /> ref="planPop"
:is="'PlanPop'"
v-show="false"
:detailList="detailList"
:label="planLabel"
:parentPrgmId="parentPrgmId"
/>
</div> </div>
</template> </template>
<script> <script>
@ -46,10 +63,6 @@ export default {
type: Boolean, type: Boolean,
default: true, default: true,
}, },
showTitle: {
type: Boolean,
default: false,
},
}, },
computed: { computed: {
...mapState({ ...mapState({
@ -109,7 +122,7 @@ export default {
planColor: planColor:
// item.endDt < Utility.setFormatDate(new Date(), 'YYYY-MM-DD') // item.endDt < Utility.setFormatDate(new Date(), 'YYYY-MM-DD')
// ? 'grey': // ? 'grey':
item.planColor, item.planColor,
}, },
dates: new Date(yy, mm, dd), dates: new Date(yy, mm, dd),
}); });
@ -153,14 +166,15 @@ export default {
this.$refs['planPop'].strtDt = ''; this.$refs['planPop'].strtDt = '';
this.$refs['planPop'].endDt = ''; this.$refs['planPop'].endDt = '';
this.$refs['planPop'].addPlanData = { this.$refs['planPop'].addPlanData = {
year: year, year : year,
month: month, month : month,
day: day day : day
} }
// BEGIN TEST UI
this.$refs['planPop'].blocId = this.pageData.blocMstrList[ // this.$refs['planPop'].blocId = this.pageData.blocMstrList[
this.pageData.blocId // this.pageData.blocId
].blocId; // ].blocId;
// END TEST UI
this.$refs['planPop'].dialog = true; this.$refs['planPop'].dialog = true;
}, },
updatePlan(val) { updatePlan(val) {
@ -174,7 +188,7 @@ export default {
this.$refs['planPop'].dialog = true; this.$refs['planPop'].dialog = true;
}, },
}, },
mounted() { }, mounted() {},
}; };
const myDetail = []; const myDetail = [];
</script> </script>
@ -182,44 +196,36 @@ const myDetail = [];
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/assets/scss/var.scss'; @import '@/assets/scss/var.scss';
@import '@/assets/scss/mixin.scss'; @import '@/assets/scss/mixin.scss';
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 0px; width: 0px;
} }
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
display: none; display: none;
} }
.custom-vc-calender { .custom-vc-calender {
&-title { &-title {
margin-bottom: 20px; margin-bottom: 20px;
} }
} }
::v-deep { ::v-deep {
.custom-calendar.vc-container { .custom-calendar.vc-container {
width: 100%; width: 100%;
background-color: transparent; background-color: transparent;
border: 0; border: 0;
} }
.vc-header, .vc-header,
.vc-arrows-container { .vc-arrows-container {
display: none; display: none;
} }
.vc-weeks { .vc-weeks {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
padding: 0; padding: 0;
> div {
>div {
flex: 1 0 calc(100% / 7); flex: 1 0 calc(100% / 7);
} }
} }
.vc-weekday { .vc-weekday {
display: flex; display: flex;
align-items: center; align-items: center;
@ -227,7 +233,6 @@ const myDetail = [];
height: 36px; height: 36px;
padding: 0; padding: 0;
} }
.vc-day { .vc-day {
height: 10.889vh; height: 10.889vh;
min-height: auto; min-height: auto;
@ -236,7 +241,6 @@ const myDetail = [];
font-size: 1rem; font-size: 1rem;
line-height: 1.235; line-height: 1.235;
} }
.day-hldyNm { .day-hldyNm {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
@ -247,27 +251,25 @@ const myDetail = [];
font-size: 10pt; font-size: 10pt;
} }
>div { > div {
position: relative; position: relative;
height: 100%; height: 100%;
padding: 10px; padding: 10px;
border-radius: 0 !important; border-radius: 0 !important;
} }
} }
.vc-day.is-not-in-month { .vc-day.is-not-in-month {
* { * {
opacity: 1 !important; opacity: 1 !important;
} }
} }
.plusButton:hover > span:first-child {
.plusButton:hover>span:first-child {
font-weight: bolder; font-weight: bolder;
cursor: pointer; cursor: pointer;
} }
.red { .red {
background-color: #FF4D4F !important; //background-color: rgba(229,62,62,var(--bg-opacity));
background-color: #e53e3e !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -275,9 +277,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.blue { .blue {
background-color: #597EF7 !important; //background-color: rgba(66,153,225,var(--bg-opacity));
background-color: #4299e1 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -285,9 +287,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.puple { .puple {
background-color: #9254DE !important; //background-color: rgba(102,126,234,var(--bg-opacity));
background-color: #667eea !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -295,9 +297,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.green { .green {
background-color: #73D13D !important; //background-color: rgba(56,178,172,var(--bg-opacity));
background-color: #38b2ac !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -306,9 +308,9 @@ const myDetail = [];
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
width: 90%; width: 90%;
} }
.orange { .orange {
background-color: #FFA940 !important; //background-color: rgba(237,137,54,var(--bg-opacity));
background-color: #ed8936 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -316,9 +318,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.pink { .pink {
background-color: #F759AB !important; //background-color: rgba(237,100,166,var(--bg-opacity));
background-color: #ed64a6 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -326,8 +328,8 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.grey { .grey {
background-color: #6d6d6d;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;

View File

@ -2,17 +2,26 @@
<v-row class="search-box" align="center" no-gutters> <v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols"> <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon v-if="iconShow" small :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon> <v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }} {{ label }}
</label> </label>
</v-col> </v-col>
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<v-checkbox
<a-checkbox v-model="chkValue" :disabled="disabledFlag" :readonly="readonly || false" v-model="chkValue"
:required="required || false" @change="modifyValue"> :disabled="disabledFlag"
</a-checkbox> :readonly="readonly || false"
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#1890ff'"
@change="modifyValue"
></v-checkbox>
</v-col> </v-col>
</v-row> </v-row>
</template> </template>
@ -59,10 +68,10 @@ export default {
default: 7, default: 7,
}, },
iconShow: { iconShow: {
type: Boolean, type: Boolean,
require: false, require: false,
default: true default: true
}, },
}, },
data() { data() {
return { return {
@ -94,8 +103,7 @@ export default {
methods: { methods: {
...mapMutations({ setPageData: "setPageData" }), ...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) { modifyValue(e) {
const isChecked = e.target.checked; return this.setPageData({ [this.valueNm]: e });
return this.setPageData({ [this.valueNm]: isChecked });
}, },
}, },
}; };

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', customClass]" > <div class="datepicker-container" >
<v-text-field <v-text-field
id="startpicker" id="startpicker"
ref="startpicker" ref="startpicker"
@ -93,12 +93,7 @@ export default {
type:Boolean, type:Boolean,
require:false, require:false,
default: true default: true
}, }
customClass: {
type: String,
require: false,
},
}, },
data() { data() {
return { return {

View File

@ -52,7 +52,6 @@
selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1 selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
" "
@update:propsValue="selectTimeValue1 = $event" @update:propsValue="selectTimeValue1 = $event"
customClass="select-large"
/> />
<!-- <div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div> --> <!-- <div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div> -->
@ -100,7 +99,6 @@
selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1 selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
" "
@update:propsValue="selectTimeValue2 = $event" @update:propsValue="selectTimeValue2 = $event"
customClass="select-large"
/> />
</div> </div>
</v-col> </v-col>

View File

@ -4,13 +4,12 @@
:data="chkGridData" :data="chkGridData"
:columns="chkGridColumns" :columns="chkGridColumns"
:options="chkGridOptions" :options="chkGridOptions"
@focusChange="focusChangeEvt"
@click="startEditing" @click="startEditing"
@editingFinish="editingFinish" @editingFinish="editingFinish"
@dblclick="dblClick" @dblclick="dblClick"
@mouseover="mouseoverEvent" @mouseover="mouseoverEvent"
@mouseout="mouseoutEvent" @mouseout="mouseoutEvent"
@mousedown="onMousedown"
@focusChange="focusChangeEvt"
/> />
</template> </template>
<script> <script>
@ -108,13 +107,16 @@ export default {
}, },
chkGridOptions() { chkGridOptions() {
const options = { const options = {
// bodyHeight: 'fitToContent',
scrollX: false,
scrollY: false,
...this.gridData.option, ...this.gridData.option,
useIcon: false,
}; };
options.treeColumnOptions = { options.treeColumnOptions = {
useIcon: false, useIcon: false,
...options.treeColumnOptions, ...options.treeColumnOptions,
}; };
return options; return options;
}, },
defaultRow() { defaultRow() {
@ -161,7 +163,7 @@ export default {
}, },
created() {}, created() {},
async mounted() { async mounted() {
// console.log(this.dataPath); // console.log('--------------DEBUG----gridData: ', this.gridData);
if (this.gridName) { if (this.gridName) {
this.gridInstance = this.$refs['tuigrid' + this.gridName]; this.gridInstance = this.$refs['tuigrid' + this.gridName];
@ -184,13 +186,13 @@ export default {
}), }),
// true : 현재 행 혹은 연결된 그리드가 수정중인 상태 // true : 현재 행 혹은 연결된 그리드가 수정중인 상태
checkGridState() { checkGridState() {
const rowStatList = ['I', 'U', 'D']; var rowStatList = ['I', 'U', 'D'];
const row = this.gridInstance.invoke('getFocusedCell'); var row = this.gridInstance.invoke('getFocusedCell');
if (row) { if (row) {
const rowData = this.gridInstance.invoke('getRow', row.rowKey); var rowData = this.gridInstance.invoke('getRow', row.rowKey);
if (rowData) { if (rowData) {
const rowStat = rowData['rowStat']; var rowStat = rowData['rowStat'];
if (rowStatList.includes(rowStat)) { if (rowStatList.includes(rowStat)) {
return true; return true;
} }
@ -198,8 +200,8 @@ export default {
} }
if (this.preventFocusChangeEventTargetGridList) { if (this.preventFocusChangeEventTargetGridList) {
for (let gridInstance of this.preventFocusChangeEventTargetGridList) { for (var gridInstance of this.preventFocusChangeEventTargetGridList) {
const dataArr = gridInstance.save(); var dataArr = gridInstance.save();
if (dataArr.length > 0) { if (dataArr.length > 0) {
return true; return true;
@ -268,15 +270,7 @@ export default {
} }
}); });
}, },
onMousedown(evt) {
this.handleSelectedRow(evt);
},
focusChangeEvt(e) { 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')
@ -284,7 +278,7 @@ export default {
} }
// console.log('focusChangeEvt2...') // console.log('focusChangeEvt2...')
// cell 선택시 row 선택 method // cell 선택시 row 선택 method
if (e.rowKey > -1) { if (e.rowKey >= 0) {
this.$emit( this.$emit(
'getRowsData', 'getRowsData',
this.gridInstance.invoke('getRow', e.rowKey), this.gridInstance.invoke('getRow', e.rowKey),
@ -617,7 +611,6 @@ export default {
list.map(item => this.gridInstance.invoke('check', item)); list.map(item => this.gridInstance.invoke('check', item));
}, },
refreshLayout() { refreshLayout() {
// console.log("---------DEBUG---refreshLayout: ");
this.gridInstance.invoke('refreshLayout'); this.gridInstance.invoke('refreshLayout');
}, },
refreshGrid(){ refreshGrid(){
@ -627,51 +620,55 @@ export default {
// var containerEl = document.querySelector('.tui-grid-container') // var containerEl = document.querySelector('.tui-grid-container')
var parentEl = containerEl.parentElement; var parentEl = containerEl.parentElement;
// console.log("---------DEBUG---containerEl: ",containerEl);
// console.log('---------DEBUG---parentEl: ', parentEl)
// function refreshLayout(store, containerEl, parentEl) { // console.log("containerEl : ",containerEl);
var dimension = store.dimension; // console.log('parentEl : ', parentEl)
var autoWidth = dimension.autoWidth, fitToParentHeight = dimension.fitToParentHeight; // function refreshLayout(store, containerEl, parentEl) {
var clientHeight = containerEl.clientHeight, clientWidth = containerEl.clientWidth, scrollTop = containerEl.scrollTop, scrollLeft = containerEl.scrollLeft; var dimension = store.dimension;
var _a = containerEl.getBoundingClientRect(), top = _a.top, left = _a.left; var autoWidth = dimension.autoWidth, fitToParentHeight = dimension.fitToParentHeight;
this.setOffsetTop(store, top + scrollTop); var clientHeight = containerEl.clientHeight, clientWidth = containerEl.clientWidth, scrollTop = containerEl.scrollTop, scrollLeft = containerEl.scrollLeft;
// store.dimension.setOffsetTop = top + scrollTop; var _a = containerEl.getBoundingClientRect(), top = _a.top, left = _a.left;
this.setOffsetLeft(store, left + scrollLeft); this.setOffsetTop(store, top + scrollTop);
// store.dimension.headerHeight = left + scrollLeft; // store.dimension.setOffsetTop = top + scrollTop;
this.setWidth(store, clientWidth, autoWidth); this.setOffsetLeft(store, left + scrollLeft);
// store.dimension.autoWidth = autoWidth; // store.dimension.headerHeight = left + scrollLeft;
// store.dimension.width = clientWidth; this.setWidth(store, clientWidth, autoWidth);
// console.log("###",getComputedStyle(parentEl)); // store.dimension.autoWidth = autoWidth;
// console.log("fitToParentHeight : ",fitToParentHeight); // store.dimension.width = clientWidth;
// console.log("parentEl : ",parentEl) // console.log("###",getComputedStyle(parentEl));
// console.log("parentEl.clientHeight" , parentEl.clientHeight) // console.log("fitToParentHeight : ",fitToParentHeight);
// console.log("clientHeight : ",clientHeight); // console.log("parentEl : ",parentEl)
if (parentEl && parentEl.clientHeight !== clientHeight) { // console.log("parentEl.clientHeight" , parentEl.clientHeight)
var _b = getComputedStyle(parentEl), paddingTop = _b.paddingTop, paddingBottom = _b.paddingBottom; // console.log("clientHeight : ",clientHeight);
this.setHeight(store, parentEl.clientHeight - (parseFloat(paddingTop) + parseFloat(paddingBottom))); if (parentEl && parentEl.clientHeight !== clientHeight) {
} var _b = getComputedStyle(parentEl), paddingTop = _b.paddingTop, paddingBottom = _b.paddingBottom;
this.setHeight(store, parentEl.clientHeight - (parseFloat(paddingTop) + parseFloat(paddingBottom)));
}
// } // }
}, },
setOffsetTop(store, offsetTop) { setOffsetTop(store, offsetTop) {
// console.log("---------DEBUG---setOffsetTop: "); // console.log("setOffsetTop");
store.dimension.offsetTop = offsetTop; store.dimension.offsetTop = offsetTop;
}, },
setWidth(_a, width, autoWidth) { setWidth(_a, width, autoWidth) {
// console.log("---------DEBUG---setWidth: "); // console.log("setWidth");
var dimension = _a.dimension; var dimension = _a.dimension;
dimension.autoWidth = autoWidth; dimension.autoWidth = autoWidth;
dimension.width = width; dimension.width = width;
}, },
setHeaderHeight(store, height) { setHeaderHeight(store, height) {
// console.log("---------DEBUG---setHeaderHeight: "); // console.log("setHeaderHeight")
store.dimension.headerHeight = height; store.dimension.headerHeight = height;
}, },
setOffsetLeft(store, offsetLeft) { setOffsetLeft(store, offsetLeft) {
// console.log("---------DEBUG---setOffsetLeft: "); // console.log("setOffsetLeft")
store.dimension.offsetLeft = offsetLeft; store.dimension.offsetLeft = offsetLeft;
}, },
setHeight(_a,height){ setHeight(_a,height){
// console.log("---------DEBUG---setHeight: "); return; // setting auto height
// console.log("setHeight");
var dimension = _a.dimension; var dimension = _a.dimension;
var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth; var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth;
dimension.bodyHeight = height - headerHeight - summaryHeight - tableBorderWidth; dimension.bodyHeight = height - headerHeight - summaryHeight - tableBorderWidth;
@ -702,13 +699,17 @@ export default {
// resetData() { // resetData() {
// // console.log("resetData = ", this.tuigridProps.data); // // console.log("resetData = ", this.tuigridProps.data);
// this.$refs.tuigrid.invoke("resetData", this.tuigridProps.data); // this.$refs.tuigrid.invoke("resetData", this.tuigridProps.data);
// }, // }
}, },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep .tui-grid-container { ::v-deep .tui-grid-container {
// .tui-grid-body-area {
// overflow: hidden !important;
// }
.tui-grid-content-area { .tui-grid-content-area {
.tui-grid-cell-content { .tui-grid-cell-content {
input[type='number'] { input[type='number'] {

View File

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

View File

@ -31,8 +31,8 @@ export default {
this.mode = !this.mode; this.mode = !this.mode;
this.$vuetify.theme.isDark = this.mode; this.$vuetify.theme.isDark = this.mode;
this.setThemeChange(this.mode); this.setThemeChange(this.mode);
// console.log(this.mode) console.log(this.mode)
// console.log(this.$vuetify.theme.isDark) console.log(this.$vuetify.theme.isDark)
}, },
}, },
}; };

View File

@ -1,10 +1,21 @@
<template> <template>
<div class="d-flex justify-center align-center" <div class="d-flex flex-column justify-center align-center">
:class="directionBtn === 'vertically'?'flex-row':'flex-column'" <!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
style="gap: 12px"> <v-icon>mdi-chevron-right</v-icon>
<a-button @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost :icon="icons.remove" > </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>
@ -27,18 +38,8 @@ 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, default, large default: "default", // small, middle, large
} }
}, },
data() { data() {

View File

@ -16,7 +16,6 @@ export default function getLineChartOption({
const color = item.color || defaultColors[index % defaultColors.length]; const color = item.color || defaultColors[index % defaultColors.length];
return { return {
...item, ...item,
showSymbol: true, // Show symbol at each data point
itemStyle: { itemStyle: {
color, color,
}, },
@ -28,9 +27,9 @@ export default function getLineChartOption({
left: '3%', left: '3%',
right: '5%', right: '5%',
top: '25%', top: '25%',
bottom: '0%',
containLabel: true, containLabel: true,
}, },
legend: { legend: {
// data: legendData, // data: legendData,
icon: 'circle', icon: 'circle',
@ -38,7 +37,7 @@ export default function getLineChartOption({
right: '5%', right: '5%',
orient: 'horizontal', orient: 'horizontal',
textStyle: { textStyle: {
color: isDarkMode ? 'white' : '#676A7B', color: isDarkMode ? '#676A7B' : '#676A7B',
}, },
}, },
xAxis: { xAxis: {

View File

@ -125,7 +125,7 @@ export default {
modifyValue(e) { modifyValue(e) {
let val = e.target.value.replace(/[^-.0-9]/g, ''); let val = e.target.value.replace(/[^-.0-9]/g, '');
// console.log('val : ', val); console.log('val : ', val);
if(this.item.min != undefined && parseFloat(val) < this.item.min){ if(this.item.min != undefined && parseFloat(val) < this.item.min){
val = this.item.min; val = this.item.min;
@ -134,7 +134,7 @@ export default {
if(this.item.max != undefined && parseFloat(val) > this.item.max){ if(this.item.max != undefined && parseFloat(val) > this.item.max){
val = this.item.max; val = this.item.max;
} }
// console.log('val2 : ', val); console.log('val2 : ', val);
this.textValue = val; this.textValue = val;
// this.textValue = this.validateNumber(val); // this.textValue = this.validateNumber(val);

View File

@ -17,9 +17,7 @@
:item-text="typeof item.list != 'string' ? 'text' : item.itemText" :item-text="typeof item.list != 'string' ? 'text' : item.itemText"
:item-value="typeof item.list != 'string' ? 'value' : item.itemValue" outlined :hide-details="true" :item-value="typeof item.list != 'string' ? 'value' : item.itemValue" outlined :hide-details="true"
class="v-select__custom" :disabled="item.disabled || false" :readonly="item.readonly || false" class="v-select__custom" :disabled="item.disabled || false" :readonly="item.readonly || false"
:required="item.required || false" @change="modifyValue($event, item.valueNm)" append-icon="" :required="item.required || false" @change="modifyValue($event, item.valueNm)" append-icon="">
:menu-props="{ top: false, offsetY: true }"
>
<template v-slot:append> <template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->

View File

@ -44,7 +44,8 @@
<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-card-text class="pb-4"> <v-divider></v-divider>
<v-card-text>
<v-col> <v-col>
<label for="" class="search-box-label"> <label for="" class="search-box-label">
{{ isPassword }} 비밀번호를 입력하세요 {{ isPassword }} 비밀번호를 입력하세요
@ -72,10 +73,11 @@
></v-text-field> ></v-text-field>
</v-col> </v-col>
</v-card-text> </v-card-text>
<v-card-actions class="pb-4"> <v-divider></v-divider>
<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 class="pr-3"> <div>
<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

@ -152,12 +152,12 @@ export default {
const snarData = this.searchParam.isMulti const snarData = this.searchParam.isMulti
? this.searchParam.snarInfoList ? this.searchParam.snarInfoList
: this.searchParam.snarInfo; : this.searchParam.snarInfo;
// console.log('this.searchParam.isMulti', this.searchParam.isMulti); console.log('this.searchParam.isMulti', this.searchParam.isMulti);
// console.log( console.log(
// 'this.searchParam.snarInfoList', 'this.searchParam.snarInfoList',
// this.searchParam.snarInfoList, this.searchParam.snarInfoList,
// ); );
// console.log('this.searchParam.snarInfo', this.searchParam.snarInfo); console.log('this.searchParam.snarInfo', this.searchParam.snarInfo);
if (Array.isArray(snarData)) { if (Array.isArray(snarData)) {
if (snarData.length > 0) { if (snarData.length > 0) {
for (const item of snarData) { for (const item of snarData) {

View File

@ -394,7 +394,7 @@ export default {
params: {}, params: {},
}, },
}); });
// console.log('statusCd', statusCd); console.log('statusCd', statusCd);
if (statusCd.data.retnCd == 0) { if (statusCd.data.retnCd == 0) {
const params2 = { const params2 = {
simulationId: statusCd.data.dataset.simulId, simulationId: statusCd.data.dataset.simulId,

View File

@ -22,7 +22,6 @@
<span class="custom-title-4">{{ option.modalTitle }}</span> <span class="custom-title-4">{{ option.modalTitle }}</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="px-6 py-4 pt-0"> <div class="px-6 py-4 pt-0">
<v-row align="center"> <v-row align="center">
<v-col :cols="5"> <v-col :cols="5">
@ -47,10 +46,11 @@
v-model="searchWord" @keyup.enter="search"><template v-slot:append> v-model="searchWord" @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon> <v-icon>$icoSearch</v-icon>
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-col :cols="3" class="text-right"> <v-col cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()" <a-button icon="search" type="primary" @click="search()"
class="search-button">조회</a-button> class="search-button">조회</a-button>
<!-- <v-btn :ripple="false" @click="initSearch()"> <!-- <v-btn :ripple="false" @click="initSearch()">
@ -59,32 +59,24 @@
</v-col> </v-col>
</v-row> </v-row>
</v-col> </v-col>
<v-col :cols="12">
<div style="height: 50vh;">
<div ref="modalGridParent" class="h100 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.pyscModalData.egrpPysclQtyPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
</v-col>
</v-row> </v-row>
</div> </div>
<!-- <div style="height: 50vh;"> <div :style="'height: calc(50vh)'">
<div ref="modalGridParent" class="h100 px-6 py-4"> <div ref="modalGridParent" class="h100 px-6 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01" <component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.pyscModalData.egrpPysclQtyPop" :parentPrgmId="parentPrgmId" :dataPath="searchParam.pyscModalData.egrpPysclQtyPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" /> @getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div> </div>
</div> --> </div>
<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)"
<a-button v-if="item.closeBtnFg || false" :ripple="false" type="danger" ghost danger class="mr-2">닫기</a-button>
<a-button v-if="item.closeBtnFg || false" :ripple="false" type="danger" ghost danger
@click="deleteBtnAction($event)" class="mr-2">삭제</a-button> @click="deleteBtnAction($event)" 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>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -156,7 +148,23 @@ export default {
return { return {
dialog: false, dialog: false,
loadGrid: false, loadGrid: true,
dataPathPopExample: {
"rowGrid": {
data: [
{
'calcProc': 'AVG_CNT2',
'argCnt': '2',
'calcDesc': '두개 변수에 대한 평균'
}
],
column: [
{ header: '계산코드', name: 'calcProc', width: 150 },
{ header: '아규먼트갯수', name: 'argCnt', align: 'center', width: 100 },
]
}
},
grid_01: 'grid_01', grid_01: 'grid_01',
myModalKey: 'egrpPysclQtyPop', myModalKey: 'egrpPysclQtyPop',
modalDataKey: 'pyscModalData', modalDataKey: 'pyscModalData',
@ -321,6 +329,13 @@ export default {
this.selectValueList01 = []; this.selectValueList01 = [];
this.selectValue01 = null; this.selectValue01 = null;
} }
// this.selectValueList01 = [
// { label: '냉동기고온', value: '냉동기고온' },
// { label: '냉동기저온', value: '냉동기저온' },
// { label: '공조기', value: '공조기' },
// { label: '보일러', value: '보일러' }
// ];
}, },
search() { search() {
this.getGridData(); this.getGridData();
@ -342,7 +357,7 @@ export default {
modalDataKey: this.modalDataKey, modalDataKey: this.modalDataKey,
value: Object.assign( value: Object.assign(
// Utility.defaultGridOption(this.$refs.modalGridParent.offsetHeight - 60, myOptions), // Utility.defaultGridOption(this.$refs.modalGridParent.offsetHeight - 60, myOptions),
Utility.defaultGridOption(400, myOptions), // Utility.defaultGridOption(100, myOptions),
myOptions, myOptions,
), ),
}); });
@ -400,15 +415,6 @@ export default {
} }
} }
// res = [
// {
// 'pysclQtyId' : 'PYSCL00001',
// 'pysclQtyCd' : 'AMP_1A',
// 'pysclQtyNm' : '회로1 전류A',
// 'pysclQtyTpNm' : 'TAG'
// }
// ]
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,
@ -463,10 +469,10 @@ export default {
this.dialog = flag; this.dialog = flag;
}, },
async dialogOpenCloseEvent(val) { async dialogOpenCloseEvent(val) {
await this.setSelectValueList01(); // await this.setSelectValueList01();
if (!this.myBindingData) { // if (!this.myBindingData) {
return alert('그리드를 먼저 선택해주세요.'); // return alert('그리드를 먼저 선택해주세요.');
} // }
this.dialog = !val; this.dialog = !val;
}, },
deleteBtnAction(v) { deleteBtnAction(v) {

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 : ''" class="pr-3" > <v-col :cols="label ? 3 : ''">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -66,66 +66,41 @@
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 : ''" class="pr-3" > <v-col :cols="label ? 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 : ''" class="pr-3" > <v-col :cols="label ? 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">
<div style="height: 25px"></div> <v-btn
<!-- <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>
@ -335,11 +310,7 @@ 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,
@ -635,11 +606,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: 'left'}, { header: '전력계약구분', name: 'elecContKindNm', align: 'center'},
{ header: '전압구분CD', name: 'voltKind', hidden: true }, { header: '전압구분CD', name: 'voltKind', hidden: true },
{ header: '전압구분', name: 'voltKindNm', align: 'left' }, { header: '전압구분', name: 'voltKindNm', align: 'center' },
{ header: '옵션CD', name: 'optKind', hidden: true }, { header: '옵션CD', name: 'optKind', hidden: true },
{ header: '옵션', name: 'optKindNm', align: 'left' }, { header: '옵션', name: 'optKindNm', align: 'center' },
{ {
header: '기본요금(원/kW)', header: '기본요금(원/kW)',
name: 'baseChrg', name: 'baseChrg',
@ -649,7 +620,7 @@ const myColumns = [
}, },
}, },
{ header: '시간대CD', name: 'peakKind', hidden: true }, { header: '시간대CD', name: 'peakKind', hidden: true },
{ header: '시간대', name: 'peakKindNm', align: 'left' }, { header: '시간대', name: 'peakKindNm', align: 'center' },
{ {
header: '여름철(6~8월)', header: '여름철(6~8월)',
name: 'unitPrcSum', name: 'unitPrcSum',

View File

@ -5,7 +5,7 @@
<v-icon <v-icon
v-if="iconShow" v-if="iconShow"
small small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']" :class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon >$icoBulletPoint</v-icon
> >
{{ option.labelContent }} {{ option.labelContent }}

View File

@ -1,6 +1,6 @@
<template> <template>
<v-row class="search-box" align="center" no-gutters> <v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols" class="mr-2"> <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon v-if="iconShow" small <v-icon v-if="iconShow" small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon> :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
@ -8,70 +8,62 @@
</label> </label>
</v-col> </v-col>
<v-col :cols="textCols"> <v-col :cols="textCols">
<v-text-field <v-text-field readonly append-icon="" :class="['v-input__custom', customClass]"
readonly @click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true" :required="required || false"
v-model="selectValue" :disabled="disabled || false"><template v-slot:append>
append-icon="mdi-magnify"
:class="['v-input__custom', customClass]"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="required || false"
:disabled="disabled || false"
:placeholder="placeholder"
>
<template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon> <v-icon>$icoSearch</v-icon>
</template>
</v-text-field> </template></v-text-field>
</v-col> </v-col>
<v-dialog ref="popModal" v-model="dialog" width="800" scrollable> <v-dialog ref="popModal" v-model="dialog" width="800" overlay-color="#000" overlay-opacity="0.8" scrollable>
<v-card style="height: 90vh;"> <v-card style="height: 100%">
<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-card> --> <v-row align="end">
<v-row align="end" class="searchFilter"> <v-col :cols="3.5">
<v-col> <!-- 설비그룹 -->
<!-- 설비그룹 --> <component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01"
<component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01" :label="'설비그룹'" :disabled="eqpmGrpDisabled"
:label="'설비그룹'" :disabled="eqpmGrpDisabled" @update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12" :iconShow="true" />
:iconShow="true" /> </v-col>
</v-col> <v-col :cols="3.5">
<v-col> <!-- FAB -->
<!-- FAB --> <component :is="'SelectBoxMulti'" :propsValue="selectValue02"
<component :is="'SelectBoxMulti'" :propsValue="selectValue02" :itemList="selectValueList02" :label="'FAB'" :labelCols="12" :multiple="true"
:itemList="selectValueList02" :label="'FAB'" :labelCols="12" :multiple="true" :disabled="fabDisabled" @update:propsValue="selectValue02 = $event" :textCols="12"
:disabled="fabDisabled" @update:propsValue="selectValue02 = $event" :textCols="12" :iconShow="true" />
:iconShow="true" /> </v-col>
</v-col> <v-col :cols="3.5">
<v-col > <v-row>
<v-row> <v-col :cols="12" class="py-0">
<v-col :cols="12" class="py-0"> <label for="" class="search-box-label">
<label for="" class="search-box-label"> <v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon> 설비명
설비명 </label>
</label> </v-col>
</v-col> <v-col :cols="12" class="pt-0">
<v-col :cols="12" class="pt-0"> <v-text-field append-icon="" class="v-input__custom" outlined
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true" v-model="searchWord" @keyup.enter="search"><template
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template v-slot:append>
v-slot:append> <!-- Custom SVG icon -->
<!-- Custom SVG icon --> <v-icon>$icoSearch</v-icon>
<v-icon>$icoSearch</v-icon>
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
</v-row> </v-row>
</v-col> </v-col>
<a-button icon="search" type="primary" @click="search()" class="mb-1 mr-2">조회</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">
@ -85,20 +77,14 @@
: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;">
<v-card-text class="px-2 w100"> <div ref="modalGridParent" class="w100 h100">
<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>
</v-card-text> </div>
<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>
@ -131,11 +117,6 @@ export default {
require: false, require: false,
default: '전력 계약 정보', default: '전력 계약 정보',
}, },
placeholder: {
type: String,
require: false,
default: '',
},
valueNm: { valueNm: {
type: String, type: String,
require: false, require: false,

View File

@ -286,8 +286,8 @@ export default {
// Row selection config // Row selection config
rowSelection: { rowSelection: {
onChange: (selectedRowKeys, selectedRows) => { onChange: (selectedRowKeys, selectedRows) => {
// console.log('Selected Row Keys:', selectedRowKeys); console.log('Selected Row Keys:', selectedRowKeys);
// console.log('Selected Rows:', selectedRows); console.log('Selected Rows:', selectedRows);
}, },
} }
}; };
@ -332,7 +332,7 @@ export default {
// this.getRowGridData(); // this.getRowGridData();
// }, // },
searchFab() { searchFab() {
// console.log('tttttttttttt') console.log('tttttttttttt')
// this.filteredData = this.data.filter(item => { // this.filteredData = this.data.filter(item => {
// const matchGrp = this.eqpmGrpSelected ? item.group === this.eqpmGrpSelected : true; // const matchGrp = this.eqpmGrpSelected ? item.group === this.eqpmGrpSelected : true;
// const matchFab = this.localFabSelected ? item.fab === this.localFabSelected : true; // const matchFab = this.localFabSelected ? item.fab === this.localFabSelected : true;

View File

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

View File

@ -126,7 +126,7 @@ export default {
async chkDialog(val) { async chkDialog(val) {
if (val) { if (val) {
// 열릴 때 // 열릴 때
// console.log('dsfafds'); console.log('dsfafds');
await this.getData(); await this.getData();
// console.log("chkDialog: ", val); // console.log("chkDialog: ", val);
// if(this.searchParam.selecUserList.length > 0){ // if(this.searchParam.selecUserList.length > 0){

View File

@ -22,29 +22,37 @@
outlined outlined
:hide-details="true" :hide-details="true"
> >
<!-- Custom SVG icon -->
<template v-slot:append> <template v-slot:append>
<v-icon>$icoSearch</v-icon> <!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template> </template>
</v-text-field> </v-text-field>
</v-col> </v-col>
<v-dialog v-model="dialog" scrollable width="700px"> <v-dialog v-model="dialog" scrollable width="700px">
<v-card style="height: 100%"> <v-card style="height: 100%">
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between"> <v-card-title class="pa-5 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span> <span class="custom-title-4">{{ option.modalTitle }}</span>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button> <v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
</v-card-title> </v-card-title>
<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="3">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<!-- <v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> --> <v-icon x-small color="primary" class="mr-1"
<v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon> >mdi-record-circle</v-icon
>
검색 검색
</label> </label>
</v-col> </v-col>
<v-col :cols="9"> <v-col :cols="5">
<v-text-field <v-text-field
append-icon="mdi-magnify" append-icon="mdi-magnify"
class="v-input__custom" class="v-input__custom"
@ -55,19 +63,21 @@
></v-text-field> ></v-text-field>
</v-col> </v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-col :cols="3" class="text-right"> <v-col cols="4" class="text-right">
<a-button type="primary" @click="search()" icon="search"> <v-btn :ripple="false" @click="search()">
조회 조회
</a-button> </v-btn>
<a-button @click="initSearch()"> <v-btn :ripple="false" @click="initSearch()">
초기화 초기화
</a-button> </v-btn>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
<!-- <v-divider></v-divider> --> <v-divider></v-divider>
<div style="height: 429px;" class="py-3 px-5"> <!-- <div :style="'height: calc(65vh)'"> -->
<div ref="modalGridParent" class="h100 w100"> <div :style="'height: 429px;'">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 w100 py-3">
<component <component
:is="loadGrid && dialog ? 'Grid' : null" :is="loadGrid && dialog ? 'Grid' : null"
:gridName="grid_01" :gridName="grid_01"
@ -78,9 +88,11 @@
/> />
</div> </div>
</div> </div>
<v-card-actions class="pa-5 d-flex align-center justify-end"> <v-card-actions class="pa-5 d-flex align-center justify-center">
<a-button class="mr-2" @click="dialogOpenCloseEvent(dialog)">닫기</a-button> <v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<a-button type="primary" @click="setUpdate($event)">확인</a-button> <v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -280,40 +292,51 @@ export default {
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,
modalDataKey: this.modalDataKey, modalDataKey: this.modalDataKey,
value: [ value: [{ header: '위치정보', name: 'eccNm' }],
{
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,
@ -372,31 +395,7 @@ var FtnPlcFormPop = {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
// @each $theme in dark, light {
// @include theme($theme);
// .v-application.#{$theme}-mode {
// .v-input--is-readonly {
// border-color: map-deep-get($config,
// #{$theme},
// "v-input-readonly-border-color"
// );
// ::v-deep {
// &:not(.v-input--radio-group, .v-input--checkbox) {
// .v-input__slot {
// background-color: map-deep-get($config,
// #{$theme},
// "v-input-backgroundColor"
// ) !important;
// }
// }
// }
// }
// }
// }
::v-deep { ::v-deep {
.v-dialog { .v-dialog {
overflow-y: hidden !important; overflow-y: hidden !important;
} }
@ -419,4 +418,26 @@ var FtnPlcFormPop = {
} }
} }
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
}
</style> </style>

View File

@ -294,10 +294,10 @@ export default {
if (this.searchParam.energyCd < 0) { if (this.searchParam.energyCd < 0) {
roiIdVal = null; roiIdVal = null;
} else { } else {
// console.log( console.log(
// 'this.searchParam.energyList[this.searchParam.energyCd]', 'this.searchParam.energyList[this.searchParam.energyCd]',
// this.searchParam.energyList[this.searchParam.energyCd], this.searchParam.energyList[this.searchParam.energyCd],
// ); );
roiIdVal = this.searchParam.energyList[this.searchParam.energyCd + 1] roiIdVal = this.searchParam.energyList[this.searchParam.energyCd + 1]
.cd; .cd;
} }

View File

@ -239,13 +239,13 @@ export default {
this.selectedData.eccNm = ''; this.selectedData.eccNm = '';
if (this.bindOption === null) { if (this.bindOption === null) {
// console.log('this.bindOption is null...'); console.log('this.bindOption is null...');
this.setPageData({ this.setPageData({
modalEccId: '', modalEccId: '',
modalEccNm: '', modalEccNm: '',
}); });
} else { } else {
// console.log('this.bindOption is not null...'); console.log('this.bindOption is not null...');
this.setPageData({ this.setPageData({
[this.bindOption.eccId]: '', [this.bindOption.eccId]: '',
[this.bindOption.eccNm]: '', [this.bindOption.eccNm]: '',
@ -296,12 +296,12 @@ export default {
? localStorage.getItem(this.parentPrgmId + 'ModalEccNm') ? localStorage.getItem(this.parentPrgmId + 'ModalEccNm')
: '', : '',
}); });
// console.log( console.log(
// 'localStorage.getItem(this.parentPrgmId + "ModalEccNm") : ', 'localStorage.getItem(this.parentPrgmId + "ModalEccNm") : ',
// localStorage.getItem(this.parentPrgmId + 'ModalEccNm') != null localStorage.getItem(this.parentPrgmId + 'ModalEccNm') != null
// ? localStorage.getItem(this.parentPrgmId + 'ModalEccNm') ? localStorage.getItem(this.parentPrgmId + 'ModalEccNm')
// : '', : '',
// ); );
this.textFieldData = this.textFieldData =
localStorage.getItem(this.parentPrgmId + 'ModalEccNm') != null localStorage.getItem(this.parentPrgmId + 'ModalEccNm') != null
? localStorage.getItem(this.parentPrgmId + 'ModalEccNm') ? localStorage.getItem(this.parentPrgmId + 'ModalEccNm')

View File

@ -43,10 +43,7 @@
</v-col> </v-col>
<v-col :cols="6" class="py-0 pl-2"> <v-col :cols="6" class="py-0 pl-2">
<!-- <DatePicker v-model="strtDt" :parentPrgmId="parentPrgmId"/> --> <!-- <DatePicker v-model="strtDt" :parentPrgmId="parentPrgmId"/> -->
<component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox1" <div class="startpicker-container2">
:propsValue="selectTimeValue1" :itemList="selectTimeValueList1" :minInterval="selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
" @update:propsValue="selectTimeValue1 = $event" />
<!-- <div class="startpicker-container2">
<v-text-field id="startpicker2" ref="startpicker2" v-model="strtDt" <v-text-field id="startpicker2" ref="startpicker2" v-model="strtDt"
:class="'v-input__custom'" :hide-details="true" readonly outlined> :class="'v-input__custom'" :hide-details="true" readonly outlined>
<template #append> <template #append>
@ -56,7 +53,7 @@
<div ref="startpicker-container2" id="startpicker-container2"></div> <div ref="startpicker-container2" id="startpicker-container2"></div>
</template> </template>
</v-text-field> </v-text-field>
</div> --> </div>
</v-col> </v-col>
<!-- <v-col :cols="2"> <!-- <v-col :cols="2">
<vue-numeric-input v-model="strtHh" :min="0" :max="23" controls-type="updown" <vue-numeric-input v-model="strtHh" :min="0" :max="23" controls-type="updown"
@ -94,9 +91,17 @@
</div> </div>
</v-col> </v-col>
<v-col :cols="6" class="pl-2"> <v-col :cols="6" class="pl-2">
<component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox2" <div class="startpicker-container3">
:propsValue="selectTimeValue2" :itemList="selectTimeValueList2" :minInterval="selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1 <v-text-field id="startpicker3" ref="startpicker3" v-model="endDt"
" @update:propsValue="selectTimeValue2 = $event" /> :class="'v-input__custom'" :hide-details="true" readonly outlined>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container3" id="startpicker-container3"></div>
</template>
</v-text-field>
</div>
</v-col> </v-col>
<!-- <v-col :cols="2"> <!-- <v-col :cols="2">
<vue-numeric-input v-model="endHh" :min="0" :max="23" controls-type="updown" <vue-numeric-input v-model="endHh" :min="0" :max="23" controls-type="updown"
@ -181,11 +186,10 @@
</div> </div>
</template> </template>
<v-card-actions class="justify-end"> <v-card-actions class="justify-end">
<a-button :ripple="false" @click="btnAction('close')" class="mr-2">닫기</a-button> <a-button :ripple="false" @click="btnAction('save')" class="mr-2">저장</a-button>
<a-button type="primary" :ripple="false" @click="btnAction('save')" class="mr-2">저장</a-button>
<a-button v-show="popUpAction === 'update'" type="danger" ghost danger :ripple="false" <a-button v-show="popUpAction === 'update'" type="danger" ghost danger :ripple="false"
@click="btnAction('delete')">삭제</a-button> @click="btnAction('delete')" class="mr-2">삭제</a-button>
<a-button :ripple="false" type="primary" @click="btnAction('close')" class="mr-2">닫기</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -206,7 +210,6 @@ import DatePicker from '~/components/common/Datepicker';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import TuiDatepicker from 'tui-date-picker'; import TuiDatepicker from 'tui-date-picker';
import SelectBoxTime from "@/components/common/select/SelectBoxTime";
export default { export default {
mixins: [mixinGlobal], mixins: [mixinGlobal],
@ -234,13 +237,6 @@ export default {
type: String, type: String,
require: false, require: false,
}, },
selectBoxTimeItemList: {
type: Object,
require: false,
default: () => {
return {};
},
},
}, },
components: { components: {
InputText, InputText,
@ -254,7 +250,6 @@ export default {
Utility, Utility,
TuiDatepicker, TuiDatepicker,
VueNumericInput, VueNumericInput,
SelectBoxTime,
}, },
data() { data() {
return { return {
@ -277,23 +272,7 @@ export default {
planSeq: '', planSeq: '',
blocId: '', blocId: '',
addPlanData: { addPlanData: {
}, }
selectTimeValue1:
this.selectBoxTimeItemList.selectTimeValue1 != undefined
? this.selectBoxTimeItemList.selectTimeValue1
: null, // selectBoxTime에 필요한 prop
selectTimeValueList1:
this.selectBoxTimeItemList.selectTimeValueList1 != undefined
? this.selectBoxTimeItemList.selectTimeValueList1
: [], // selectBoxTime에 필요한 prop
selectTimeValue2:
this.selectBoxTimeItemList.selectTimeValue2 != undefined
? this.selectBoxTimeItemList.selectTimeValue2
: null, // selectBoxTime에 필요한 prop
selectTimeValueList2:
this.selectBoxTimeItemList.selectTimeValueList2 != undefined
? this.selectBoxTimeItemList.selectTimeValueList2
: [], // selectBoxTime에 필요한 prop
}; };
}, },
computed: { computed: {
@ -317,29 +296,25 @@ export default {
} }
}, },
strtDt(val) { strtDt(val) {
// console.log('strtDt : ', val); console.log('strtDt : ', val);
this.checkStrtAndEndDateTime('start'); this.checkStrtAndEndDateTime('start');
if (this.startDatepickerInstance3) { if (this.startDatepickerInstance3) {
this.startDatepickerInstance3.setDate(new Date(this.endDt)); this.startDatepickerInstance3.setDate(new Date(this.endDt));
} }
}, },
endDt(val) { endDt(val) {
// console.log('endDt : ', val); console.log('endDt : ', val);
this.checkStrtAndEndDateTime('end'); this.checkStrtAndEndDateTime('end');
if (this.startDatepickerInstance) { if (this.startDatepickerInstance) {
this.startDatepickerInstance.setDate(new Date(this.strtDt)); this.startDatepickerInstance.setDate(new Date(this.strtDt));
} }
}, },
strtHh(val) { strtHh(val) {
// const [hh, mm] = selectTimeValue1.split(':');
// console.log(`Hours: ${hh}, Minutes: ${mm}`);
console.log('strtHh : ', val); console.log('strtHh : ', val);
this.checkStrtAndEndDateTime('start'); this.checkStrtAndEndDateTime('start');
}, },
endHh(val) { endHh(val) {
// console.log('endHh : ', val); console.log('endHh : ', val);
this.checkStrtAndEndDateTime('end'); this.checkStrtAndEndDateTime('end');
}, },
strtMm(val) { strtMm(val) {
@ -348,12 +323,6 @@ export default {
endMm(val) { endMm(val) {
this.checkStrtAndEndDateTime('end'); this.checkStrtAndEndDateTime('end');
}, },
selectTimeValue1(val) {
this.setPageData({ selectTimeValue1: val });
},
selectTimeValue2(val) {
this.setPageData({ selectTimeValue2: val });
}
}, },
methods: { methods: {
...mapMutations({ ...mapMutations({
@ -536,8 +505,10 @@ export default {
let returnData = res[0]; let returnData = res[0];
this.strtDt = Utility.setFormatDate(returnData.strtDt, 'YYYY-MM-DD'); this.strtDt = Utility.setFormatDate(returnData.strtDt, 'YYYY-MM-DD');
this.endDt = Utility.setFormatDate(returnData.endDt, 'YYYY-MM-DD'); this.endDt = Utility.setFormatDate(returnData.endDt, 'YYYY-MM-DD');
this.selectTimeValue1 = returnData.strtHh+' : '+ returnData.strtMm; this.strtHh = returnData.strtHh;
this.selectTimeValue2 = returnData.endHh+' : '+ returnData.endMm; this.strtMm = returnData.strtMm;
this.endHh = returnData.endHh;
this.endMm = returnData.endMm;
this.planTitle = returnData.planTitle; this.planTitle = returnData.planTitle;
this.planCntn = returnData.planCntn; this.planCntn = returnData.planCntn;
this.planColor = returnData.planColor; this.planColor = returnData.planColor;
@ -554,8 +525,10 @@ export default {
if ( if (
this.strtDt === '' || this.strtDt === '' ||
this.endDt === '' || this.endDt === '' ||
this.selectTimeValue1 === '' || this.strtHh === '' ||
this.selectTimeValue2 === '' || this.strtMm === '' ||
this.endHh === '' ||
this.endMm === '' ||
this.planTitle === '' || this.planTitle === '' ||
this.planCntn === '' || this.planCntn === '' ||
this.planColor === '' this.planColor === ''
@ -569,8 +542,10 @@ export default {
if ( if (
this.strtDt == '' || this.strtDt == '' ||
this.endDt == '' || this.endDt == '' ||
this.selectTimeValue1 === '' || this.strtHh == '' ||
this.selectTimeValue2 === '' || this.strtMm == '' ||
this.endHh == '' ||
this.endMm == '' ||
this.planTitle == '' || this.planTitle == '' ||
this.planCntn == '' || this.planCntn == '' ||
this.planColor == '' this.planColor == ''
@ -590,17 +565,13 @@ export default {
//console.log(this); //console.log(this);
}, },
async insertDetail() { async insertDetail() {
const [strtHh, strtMm] = this.selectTimeValue1 ? this.selectTimeValue1.split(':') : '00:00'.split(':');
const [endHh, endMm] = this.selectTimeValue2 ? this.selectTimeValue2.split(':') : '01:00'.split(':');
var params = { var params = {
strtDt: this.strtDt, strtDt: this.strtDt,
endDt: this.endDt, endDt: this.endDt,
strtHh: strtHh.trim().toString(), strtHh: this.strtHh.toString(),
strtMm: strtMm.trim().toString(), strtMm: this.strtMm.toString(),
endHh: endHh.trim().toString(), endHh: this.endHh.toString(),
endMm: endMm.trim().toString(), endMm: this.endMm.toString(),
blocId: this.blocId, blocId: this.blocId,
planTitle: this.planTitle, planTitle: this.planTitle,
planCntn: this.planCntn, planCntn: this.planCntn,
@ -621,16 +592,13 @@ export default {
}); });
}, },
async updateDetail() { async updateDetail() {
const [strtHh, strtMm] = this.selectTimeValue1 ? this.selectTimeValue1.split(':') : '00:00'.split(':');
const [endHh, endMm] = this.selectTimeValue2 ? this.selectTimeValue2.split(':') : '01:00'.split(':');
var params = { var params = {
strtDt: this.strtDt.substr(0, 10), strtDt: this.strtDt.substr(0, 10),
endDt: this.endDt.substr(0, 10), endDt: this.endDt.substr(0, 10),
strtHh: strtHh.trim().toString(), strtHh: this.strtHh.toString(),
strtMm: strtMm.trim().toString(), strtMm: this.strtMm.toString(),
endHh: endHh.trim().toString(), endHh: this.endHh.toString(),
endMm: endMm.trim().toString(), endMm: this.endMm.toString(),
planTitle: this.planTitle, planTitle: this.planTitle,
planCntn: this.planCntn, planCntn: this.planCntn,
planColor: this.planColor, planColor: this.planColor,

View File

@ -253,7 +253,7 @@ export default {
readObjid: this.searchParam.energyCd, readObjid: this.searchParam.energyCd,
}, },
}); });
// console.log('getTreeData : ', res); console.log('getTreeData : ', res);
// this.treeData = res; // this.treeData = res;
// const ROOT = res[0].plcCd; // const ROOT = res[0].plcCd;
const setTreeData = await this.setTree({ const setTreeData = await this.setTree({
@ -327,7 +327,7 @@ export default {
// 공정/설비 트리 row 클릭이벤트 // 공정/설비 트리 row 클릭이벤트
async getRowData(data) { async getRowData(data) {
// console.log("getRowData 시작..."); // console.log("getRowData 시작...");
// console.log('data', data); console.log('data', data);
this.activeRowData = data; this.activeRowData = data;
// if(data.enableFg == 1){ // if(data.enableFg == 1){
// this.activeRowData = data; // this.activeRowData = data;

View File

@ -268,7 +268,7 @@ export default {
header: '', header: '',
name: '', name: '',
align: 'center', align: 'center',
width: 20, width: 50,
formatter: (props) => { formatter: (props) => {
return `<label class="custom-radio"> return `<label class="custom-radio">
<span class="radio-mark"></span> <span class="radio-mark"></span>
@ -278,10 +278,10 @@ export default {
{ {
header: '검침개소명', header: '검침개소명',
name: 'readPlcNm', name: 'readPlcNm',
width: 500, width: 300,
align: 'left', align: 'left',
}, },
{ header: '검침개소', name: 'name', align: 'left', width: 200 }, { header: '검침개소', name: 'name', align: 'center' },
], ],
}); });
}, },
@ -307,9 +307,6 @@ export default {
// console.log("treeData", res) // console.log("treeData", res)
let myOptionsTree = { let myOptionsTree = {
columnOptions: {
resizable: true,
},
treeColumnOptions: { treeColumnOptions: {
name: 'readPlcNm', name: 'readPlcNm',
}, },

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",
// }, },
// ]; ];
let res = await this.postApiReturn({ // 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

@ -9,9 +9,7 @@
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList" <v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList"
item-text="blocNm" item-value="idx" append-icon="" outlined item-text="blocNm" item-value="idx" append-icon="" outlined
:hide-details="true" :class="['v-select__custom', customClass]" :hide-details="true" :class="['v-select__custom', customClass]">
:menu-props="{ top: false, offsetY: true }"
>
<template v-slot:append><v-icon>$icoChevronDown</v-icon></template> <template v-slot:append><v-icon>$icoChevronDown</v-icon></template>
</v-select> </v-select>
</v-col> </v-col>

View File

@ -14,14 +14,12 @@
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<v-select v-model="innerValue" :items="itemList" item-text="text" item-value="value" solo outlined <v-select v-model="innerValue" :items="itemList" item-text="text" item-value="value" solo outlined
:hide-details="true" append-icon="" :class="['v-select__custom', customClass]" :disabled="disabled" :hide-details="true" append-icon="" :class="['v-select__custom', customClass]" :disabled="disabled"
:readonly="readonly" :readonly="readonly"><template v-slot:append>
:menu-props="{ top: false, offsetY: true }"
>
<template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<v-icon>$icoChevronDown</v-icon> <v-icon>$icoChevronDown</v-icon>
</template>
</v-select>
</template></v-select>
<!-- @change="updateBlocCode($event)" --> <!-- @change="updateBlocCode($event)" -->
</v-col> </v-col>
</v-row> </v-row>

View File

@ -24,24 +24,9 @@
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
append-icon="" append-icon=""
:menu-props="{ top: false, offsetY: true }" ><template v-slot:append>
>
<template v-slot:append>
<v-icon>$icoChevronDown</v-icon> <v-icon>$icoChevronDown</v-icon>
</template> </template></v-select>
<template v-slot:item="{item, attrs, on, props}">
<v-list-item v-bind="attrs" v-on="on" >
<v-list-item-content>
<v-list-item-title class="d-flex justify-space-between">
{{item.text}}
<a-icon type="check" ></a-icon>
</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
</v-select>
</v-col> </v-col>
</v-row> </v-row>
</template> </template>
@ -140,4 +125,4 @@ export default {
}; };
</script> </script>
<style scoped lang="scss"></style> <style></style>

View File

@ -22,11 +22,11 @@
outlined outlined
:menu-props="{ auto: true, offsetY: true }" :menu-props="{ auto: true, offsetY: true }"
:hide-details="true" :hide-details="true"
:class="['v-select__custom', customClass]" :class="'v-select__custom select-large'"
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
@click="setDatepickerHide" @click="setDatepickerHide"
style="min-width: 170px;" style="width: 170px; border-radius: 6px !important"
> >
<template v-slot:append> <template v-slot:append>
<a-icon <a-icon
@ -106,10 +106,6 @@ export default {
require: false, require: false,
default: 1, default: 1,
}, },
customClass: {
type: String,
require: false,
},
}, },
emits: ["update:propsValue"], emits: ["update:propsValue"],
data() { data() {

View File

@ -70,7 +70,7 @@ export default {
return this.searchParam[this.parentPrgmId][this.enrgCd]; return this.searchParam[this.parentPrgmId][this.enrgCd];
}, },
set(value) { set(value) {
// console.log('value : ', value); console.log('value : ', value);
return this.setPageData({ [this.enrgCd]: value }); return this.setPageData({ [this.enrgCd]: value });
}, },
}, },

View File

@ -11,9 +11,7 @@
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<v-select v-model="selectValue" :items="searchParam[parentPrgmId][dataKey + 'List']" item-text="commCdNm" <v-select v-model="selectValue" :items="searchParam[parentPrgmId][dataKey + 'List']" item-text="commCdNm"
item-value="commCd" outlined :hide-details="true" append-icon="" item-value="commCd" outlined :hide-details="true" append-icon=""
:class="['v-select__custom', customClass]" :class="['v-select__custom', customClass]">
:menu-props="{ top: false, offsetY: true }"
>
<template v-slot:append> <template v-slot:append>
<v-icon>$icoChevronDown</v-icon> <v-icon>$icoChevronDown</v-icon>
</template> </template>

View File

@ -270,8 +270,8 @@ export default {
filteredData: [], filteredData: [],
rowSelection: { rowSelection: {
onChange: (selectedRowKeys, selectedRows) => { onChange: (selectedRowKeys, selectedRows) => {
// console.log('Selected Row Keys:', selectedRowKeys); console.log('Selected Row Keys:', selectedRowKeys);
// console.log('Selected Rows:', selectedRows); console.log('Selected Rows:', selectedRows);
}, },
} }
}; };

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center" style="min-height: 80px;"> <div class="d-flex justify-space-between align-center" style="min-height: 80px;">
<span class="txt custom-subtitle-tab">Data Set TAG 연결 정보</span> <span class="txt custom-title-4-new">Data Set TAG 연결 정보</span>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
@ -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 { CustomCheckbox } from '~/plugins/gridUtility'; import { CustumChecbox } 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';
@ -213,7 +213,7 @@ export default {
let dataArr = []; let dataArr = [];
switch (action) { switch (action) {
case 'add': case 'add':
// console.log('add this.pageData : '); // , this.pageData); console.log('add this.pageData : '); // , this.pageData);
const defaultRow = { const defaultRow = {
dataSetId: this.pageData.dataSetId, dataSetId: this.pageData.dataSetId,
dataSetNm: this.pageData.dataSetNm, dataSetNm: this.pageData.dataSetNm,
@ -296,7 +296,7 @@ export default {
comId: this.selectedComId, comId: this.selectedComId,
dataSetId: this.selectedDataSetId, dataSetId: this.selectedDataSetId,
}; };
// console.log('data : ', data); console.log('data : ', data);
this.$emit('jamoviClickEvent', 'view1', data); this.$emit('jamoviClickEvent', 'view1', data);
}, },
}, },

View File

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

View File

@ -19,6 +19,7 @@
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
:dataPath="dataPathMock"
/> />
</div> </div>
<div> <div>
@ -59,11 +60,24 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: false, loadGrid: true,
gridName: 'rowEccIaoGrid', gridName: 'rowEccIaoGrid',
inputList_emMapDiv: [], inputList_emMapDiv: [],
inputList_cmInOut: [], inputList_cmInOut: [],
detailList: myDetail, detailList: myDetail,
dataPathMock: {
"rowEccIaoGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
}; };
}, },
computed: { computed: {
@ -502,4 +516,12 @@ const myDetail = [
iconShow: true, iconShow: true,
}, },
]; ];
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
},
]
</script> </script>

View File

@ -69,6 +69,55 @@ export default {
return { return {
loadGrid: false, loadGrid: false,
gridName: 'effcInfoGrid', gridName: 'effcInfoGrid',
// "effcInfoGrid": {
// data:
// [
// {
// "eqpmKindId": "펌프",
// "eqpmGrpId": "냉각수 시스템",
// "totMethNm": "평균값"
// },
// {
// "eqpmKindId": "모터",
// "eqpmGrpId": "공기압 시스템",
// "totMethNm": "최대값"
// },
// {
// "eqpmKindId": "밸브",
// "eqpmGrpId": "스팀 공급",
// "totMethNm": "합계"
// },
// {
// "eqpmKindId": "센서",
// "eqpmGrpId": "온도 제어",
// "totMethNm": "최소값"
// },
// {
// "eqpmKindId": "컴프레서",
// "eqpmGrpId": "에어 시스템",
// "totMethNm": "중앙값"
// }
// ]
// ,
// column: [
// {
// header: '대상설비종류',
// name: 'eqpmKindId',
// },
// {
// header: '대상설비그룹',
// name: 'eqpmGrpId',
// },
// { header: '집계방법', name: 'totMethNm', align: 'center' },
// ]
// }
// },
itemList: [], itemList: [],
tagTpList: [], tagTpList: [],
// detailList: myDetail, // detailList: myDetail,
@ -339,10 +388,10 @@ export default {
}, },
// bodyHeight: gridHeight, // bodyHeight: gridHeight,
// minBodyHeight: gridHeight, // minBodyHeight: gridHeight,
header: { // header: {
height: 37, // height: 28,
}, // },
rowHeight: 37, // rowHeight: 29,
// minRowHeight: 29, // minRowHeight: 29,
// selectionUnit: 'row', // selectionUnit: 'row',
// editingEvent: 'click', // editingEvent: 'click',
@ -387,6 +436,7 @@ export default {
header: '물리량ID', header: '물리량ID',
name: 'pysclQtyId', name: 'pysclQtyId',
width: 200, width: 200,
align: 'center',
hidden: true, hidden: true,
}, },
{ header: '물리량', name: 'pysclQtyCd', hidden: true, minWidth: 200 }, { header: '물리량', name: 'pysclQtyCd', hidden: true, minWidth: 200 },
@ -395,7 +445,7 @@ export default {
{ header: '가이드지표', name: 'gdIdxId', hidden: true }, { header: '가이드지표', name: 'gdIdxId', hidden: true },
{ header: '가이드지표명', name: 'gdIdxNm', hidden: true }, { header: '가이드지표명', name: 'gdIdxNm', hidden: true },
{ header: '집계방법', name: 'totMeth', hidden: true }, { header: '집계방법', name: 'totMeth', hidden: true },
{ header: '집계방법', name: 'totMethNm',}, { header: '집계방법', name: 'totMethNm', align: 'center' },
]; ];
if (this.selectValue01 == 'PYSCL') { if (this.selectValue01 == 'PYSCL') {

View File

@ -1,14 +1,17 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center my-5" > <div
<span class="txt custom-subtitle-tab">설비 추가 정보</span> class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt custom-title-4-new">설비 추가 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div ref="gridParent" class="w100" style="height: calc(100vh - 520px);"> <div ref="gridParent" style="height: calc(100vh - 520px);">
<Grid <Grid
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
@ -55,9 +58,9 @@ export default {
dataPathMock: { dataPathMock: {
'rowDetailGrid' : { 'rowDetailGrid' : {
column: [ column: [
{ header: '추가 정보', name: 'id', headerAlign: 'left', align: 'left', }, { header: '추가 정보', name: 'id', headerAlign: 'left' },
{ header: 'Data 구분', name: 'lable', headerAlign: 'left', align: 'left' }, { header: 'Data 구분', name: 'lable', headerAlign: 'left' },
{ header: '추가 정보 값', name: 'type', headerAlign: 'left', align: 'right' }, { header: '추가 정보 값', name: 'type', headerAlign: 'left' },
// { header: '비고', name: 'note', headerAlign: 'left' } // { header: '비고', name: 'note', headerAlign: 'left' }
], ],
data: dataPathDataExample, data: dataPathDataExample,
@ -296,7 +299,7 @@ export default {
{ {
header: '추가 정보 값', header: '추가 정보 값',
name: 'addInfoVal', name: 'addInfoVal',
align: 'left', align: 'center',
renderer: { renderer: {
type: CustomRenderer, type: CustomRenderer,
}, },

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center my-5" > <div class="d-flex justify-space-between align-center" style="height: 80px;">
<span class="txt custom-subtitle-tab">설비 상수 정보</span> <span class="txt custom-title-4-new">설비 상수 정보</span>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" /> <Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div> </div>
<div ref="gridParent" style="min-height: calc(100vh - 800px);"> <div ref="gridParent" style="min-height: calc(100vh - 800px);">
@ -96,20 +96,20 @@ export default {
watch: { watch: {
selectedEqpmKindId(val) { selectedEqpmKindId(val) {
if (val) { if (val) {
this.detailList[1].eqpmKindId = val; this.detailList[2].eqpmKindId = val;
} }
}, },
selectedEqpmGrpId(val) { selectedEqpmGrpId(val) {
// if(!val){ // if(!val){
// this.detailList[1].eqpmGrpId = ''; // this.detailList[2].eqpmGrpId = '';
// }else{ // }else{
// this.detailList[1].eqpmGrpId = val; // this.detailList[2].eqpmGrpId = val;
// } // }
// if(val){ // if(val){
// this.detailList[1].eqpmGrpId = val; // this.detailList[2].eqpmGrpId = val;
// } // }
// else if(val == null || val == ''){ // else if(val == null || val == ''){
// this.detailList[1].eqpmGrpId = ''; // this.detailList[2].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[1].disabled = false; this.detailList[2].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
} else { } else {
this.detailList[1].disabled = true; this.detailList[2].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[1].disabled = false; this.detailList[2].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
break; break;
case 'remove': case 'remove':
this.detailList[1].disabled = true; this.detailList[2].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.$refs[this.gridName].removeRow(); this.$refs[this.gridName].removeRow();
break; break;
@ -291,8 +291,8 @@ export default {
dataArr.map(item => { dataArr.map(item => {
for (var key of Object.keys(item)) { for (var key of Object.keys(item)) {
// console.log('key : ', key); console.log('key : ', key);
// console.log('item[key] : ', item[key]); console.log('item[key] : ', item[key]);
if (!item[key] && requiredKeyList.includes(key)) { if (!item[key] && requiredKeyList.includes(key)) {
validCheck = false; validCheck = false;
} }
@ -358,6 +358,7 @@ 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',
@ -370,7 +371,6 @@ 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: true, disabled: false,
required: true, required: true,
openMode: 'CONST', openMode: 'CONST',
cols: 6, cols: 6,
@ -413,7 +413,6 @@ const myEqpmConstDetail = [
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
}, },
// ------------
{ {
type: 'InputText', type: 'InputText',
label: '물리량 값', label: '물리량 값',

View File

@ -1,24 +1,27 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center my-5" > <div
<span class="txt custom-subtitle-tab">설비 입출력 정보</span> class="d-flex justify-space-between align-center"
style="height: 80px;"
>
<span class="txt custom-title-4-new">설비 입출력 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div ref="gridParent" style="height: calc(100vh - 700px);"> <div ref="gridParent" style="min-height: calc(100vh - 800px);" >
<!-- :is="loadGrid ? 'Grid' : null" -->
<Grid <Grid
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName" :gridName="gridName"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
/> />
</div> </div>
<div style="height: 60vh;" class="mt-5"> <div style="min-height: calc(100vh - 900px);" class="mt-4">
<component <component
:is="'Form'" :is="'Form'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -62,6 +65,22 @@ export default {
inputList_emMapDiv: [], inputList_emMapDiv: [],
inputList_cmInOut: [], inputList_cmInOut: [],
dataPathMock: {
'rowEqpmIaoGrid' : {
column: [
{ header: '대상항목', name: 'id', headerAlign: 'left' },
{ header: '에너지원 명', name: 'lable', headerAlign: 'left' },
{ header: '대상 유형', name: 'type', headerAlign: 'left' },
{ header: '물리량', name: 'note', headerAlign: 'left' },
{ header: '계산여부', name: 'field1', headerAlign: 'left' },
{ header: '분배율', name: 'field2', headerAlign: 'left' }
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
}; };
}, },
computed: { computed: {
@ -108,24 +127,18 @@ 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[2].class = 'py-2 d-none';
this.detailList[1].class = 'py-3 d-none'; this.detailList[3].class = 'py-2 d-none';
this.detailList[2].class = 'py-3 d-none'; this.detailList[4].class = 'py-2';
this.detailList[3].class = 'py-3 pl-4 pt-1 d-none'; this.detailList[5].class = 'py-2';
this.detailList[4].class = 'py-3 pl-4';
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[1].class = 'py-3 pl-4'; this.detailList[5].class = 'py-2 d-none';
this.detailList[2].class = 'py-3'; this.detailList[4].class = 'py-2 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-0'; this.detailList[3].class = 'py-2';
this.detailList[2].class = 'py-2';
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) {
@ -158,7 +171,7 @@ export default {
}, },
}, },
mounted() { mounted() {
this.init(); // this.init();
}, },
methods: { methods: {
...mapMutations({ ...mapMutations({
@ -230,7 +243,7 @@ export default {
{ {
header: '대상 유형', header: '대상 유형',
name: 'objKind', name: 'objKind',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
var retVal = ''; var retVal = '';
@ -261,7 +274,7 @@ export default {
{ {
header: '계산여부', header: '계산여부',
name: 'calcFg', name: 'calcFg',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
@ -283,18 +296,20 @@ export default {
value: myColumns, value: myColumns,
}); });
this.loadGrid = true; this.$nextTick(() => {
this.loadGrid = true;
});
}, },
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[1].disabled = false; this.detailList[2].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[1].disabled = true; this.detailList[2].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;
@ -312,7 +327,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[1].disabled = false; this.detailList[2].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;
@ -321,7 +336,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[1].disabled = true; this.detailList[2].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;
@ -341,7 +356,7 @@ export default {
} }
if (dataArr.length > 0) { if (dataArr.length > 0) {
// console.log('dataArr : ', dataArr); console.log('dataArr : ', dataArr);
var requiredKeyList = this.detailList var requiredKeyList = this.detailList
.filter(item => { .filter(item => {
@ -402,7 +417,6 @@ export default {
}, },
}; };
function checkDuplicate(data, targetKey) { function checkDuplicate(data, targetKey) {
var duplicateFlag = false; var duplicateFlag = false;
var set = new Set(); var set = new Set();
@ -442,10 +456,10 @@ const myEqpmIaoDetail = [
type: 'ReadPlcPop', type: 'ReadPlcPop',
label: '대상 항목', label: '대상 항목',
valueNm: 'objId', valueNm: 'objId',
cols: 6,
class: 'py-3 pl-4 pb-0',
required: true,
disabled: true, disabled: true,
cols: 6,
class: 'py-3 pl-4',
required: true,
bindNm: 'objNm', bindNm: 'objNm',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
@ -466,39 +480,30 @@ const myEqpmIaoDetail = [
readonly: true, readonly: true,
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-3 pl-4 pt-0', class: 'py-3 pl-4 pt-1',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// ============
{ {
type: 'EvtObjPop', type: 'EvtObjPop',
labelContent: '대상 항목', labelContent: '대상 항목 111',
valueNm: 'objId', valueNm: 'objId',
valueNm2: 'objNm', valueNm2: 'objNm',
bindNm: 'objNm', bindNm: 'objNm',
disabled: true, disabled: true,
required: true, required: true,
cols: 6, cols: 6,
class: 'py-3 pl-4 d-none', class: 'py-3 d-none',
disableContent: true, disableContent: true,
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
{
type: 'Label',
cols: 6,
class: 'py-3 d-none',
disabled: true,
textCols: 12,
labelCols: 12,
},
{ {
type: 'InputText', type: 'InputText',
cols: 6, cols: 5,
class: 'py-3 pl-4 d-none', class: 'py-3 d-none',
valueNm: 'objNm', valueNm: 'objNm',
readonly: true, readonly: true,
disabled: true, disabled: true,
@ -506,7 +511,6 @@ const myEqpmIaoDetail = [
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// --------------------------------------------
{ {
type: 'SelectBox', type: 'SelectBox',
label: '에너지원', label: '에너지원',
@ -611,11 +615,13 @@ const myEqpmIaoDetail = [
iconShow: true iconShow: true
}, },
]; ];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
id: 'INCHEON.HVAC.EQP_HT_CH001.UT_CH101.CHI_AMP_1A_PV',
lable: 'INCHEON 고온 냉동기 101호기 - 호로1',
type: '사용', note: '-',
field1: '1111',
field2: '2222',
});
</script> </script>
<style lang="scss" scoped >
::v-deep {
.tui-grid-layer-state {
top: 40px !important;
}
}
</style>

View File

@ -20,12 +20,6 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<!-- Create the line between date picker and form -->
<v-row class="my-5" no-gutters>
<v-col>
<div style="height: 1px; background-color: #ccc;"></div>
</v-col>
</v-row>
<v-row class="search-box" align="center" no-gutters style="height: 44px;"> <v-row class="search-box" align="center" no-gutters style="height: 44px;">
<v-col :cols="4"> <v-col :cols="4">
<label for="" class="search-box-label"> <label for="" class="search-box-label">

View File

@ -200,6 +200,7 @@ export default {
{ {
header: 'Data 구분', header: 'Data 구분',
name: 'addInfoDataKind', name: 'addInfoDataKind',
align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = addInfoDataKindList.filter( const newValue = addInfoDataKindList.filter(

View File

@ -7,7 +7,7 @@
</div> </div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);"> <div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData" <Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" /> :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div ref="formParent" style="height: calc((100vh - 400px) /2);"> <div ref="formParent" style="height: calc((100vh - 400px) /2);">
@ -101,9 +101,9 @@ export default {
// bodyHeight: gridHeight, // bodyHeight: gridHeight,
// minBodyHeight: gridHeight, // minBodyHeight: gridHeight,
header: { header: {
height: 37, height: 28,
}, },
rowHeight: 37, // rowHeight: 29,
// minRowHeight: 29, // minRowHeight: 29,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
@ -124,12 +124,13 @@ export default {
const myColumns = [ const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ header: '검침개소 번호', name: 'readPlcId', hidden: true }, { header: '검침개소 번호', name: 'readPlcId', hidden: true },
{ header: '대상 검침개소 번호', name: 'objReadPlcId'}, { header: '대상 검침개소 번호', name: 'objReadPlcId', align: 'center' },
{ header: '대상 검침개소명', name: 'objReadPlcNm', align: 'left' }, { header: '대상 검침개소명', name: 'objReadPlcNm', align: 'left' },
{ header: '분배율(1~100)', name: 'distRt', align: 'right' }, { header: '분배율(1~100)', name: 'distRt', align: 'right' },
{ {
header: '가감유형', header: '가감유형',
name: 'ddctKind', name: 'ddctKind',
align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = ddctKindList.filter(item => item.value == value); const newValue = ddctKindList.filter(item => item.value == value);

View File

@ -6,23 +6,12 @@
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);"> <div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid <Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:ref="gridName" :innerTabGridInfo="innerTabGridInfo" />
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo"
/>
</div> </div>
<div ref="formParent" style="height: calc((100vh - 400px) /2);"> <div class="mt-3" ref="formParent" style="height: calc((100vh - 400px) /2);">
<component <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
:is="'Form'" :detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" />
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
:detailList="detailReadPlcTagList"
@gridEditingFinish="gridEditingFinish"
/>
</div> </div>
</div> </div>
</template> </template>
@ -30,7 +19,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 { CustomCheckbox } from '~/plugins/gridUtility'; import { CustumChecbox } 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';
@ -110,9 +99,9 @@ export default {
// bodyHeight: gridHeight, // bodyHeight: gridHeight,
// minBodyHeight: gridHeight, // minBodyHeight: gridHeight,
header: { header: {
height: 37, height: 28,
}, },
rowHeight: 37, rowHeight: 29,
minRowHeight: 29, minRowHeight: 29,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
@ -153,6 +142,7 @@ export default {
{ {
header: '에너지원', header: '에너지원',
name: 'ercId', name: 'ercId',
align: 'center',
width: 100, width: 100,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -181,9 +171,10 @@ export default {
{ {
header: '대표 TAG 여부', header: '대표 TAG 여부',
name: 'reprTagFg', name: 'reprTagFg',
align: 'center',
width: 100, width: 100,
// renderer: { // renderer: {
// type: CustomCheckbox, // type: CustumChecbox,
// options: { // options: {
// onlyone: true, // onlyone: true,
// // disabled: true // // disabled: true
@ -196,6 +187,7 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'center',
width: 100, width: 100,
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
@ -211,7 +203,7 @@ export default {
// } // }
// } // }
}, },
{ header: '비고', name: 'rmrk', width: 100 }, { header: '비고', name: 'rmrk', align: 'left', width: 100 },
{ header: '등록 사용자', name: 'regUserNo', hidden: true }, { header: '등록 사용자', name: 'regUserNo', hidden: true },
{ header: '등록 일자', name: 'regDttm', hidden: true }, { header: '등록 일자', name: 'regDttm', hidden: true },
{ header: '수정 사용자', name: 'procUserNo', hidden: true }, { header: '수정 사용자', name: 'procUserNo', hidden: true },

View File

@ -1,7 +1,7 @@
<template> <template>
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="d-flex justify-space-between align-end"> <v-card-title class="d-flex justify-space-between align-end">
<span style="color:#000000A6" class="tit custom-title-4-new">TAG 추가 정보</span> <span class="tit ft-size_20 ft-weight_600">TAG 추가 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"
@ -107,7 +107,8 @@ export default {
header: { header: {
height: 38, height: 38,
}, },
rowHeight: 22,
minRowHeight: 22,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
}; };
@ -268,7 +269,7 @@ export default {
{ {
header: 'Data 구분', header: 'Data 구분',
name: 'addInfoDataKind', name: 'addInfoDataKind',
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = addInfoDataKindList.filter( const newValue = addInfoDataKindList.filter(

View File

@ -9,6 +9,7 @@
<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>
@ -39,16 +40,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> -->
@ -61,10 +62,10 @@
</v-list-item> </v-list-item>
</v-list> </v-list>
</v-menu> </v-menu>
<a-button id="removeBm" class="btn-header" @click="removeBookMark" v-if="bookmarkBtn == 1"> <a-button id="refresh" 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="addBm" class="btn-header" :style="{ <a-button id="refresh" 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>
@ -87,12 +88,32 @@
</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">
@ -109,16 +130,14 @@
: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"> <span v-if="item.url">{{ item.menuNm }}
{{ 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>
@ -373,6 +392,7 @@ export default {
deep: true, deep: true,
handler(value) { handler(value) {
if (value) { if (value) {
console.log(value)
const prgmId = value.prgmId; const prgmId = value.prgmId;
let thisPrgmId = this.$route.query.prgmId; let thisPrgmId = this.$route.query.prgmId;
var tmp = 0; var tmp = 0;
@ -786,7 +806,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' ], modules: ['@nuxtjs/axios', '@nuxtjs/dayjs', '@nuxtjs/style-resources','@nuxtjs/google-fonts'],
styleResources: { styleResources: {
scss: ['./assets/scss/*.scss'], scss: ['./assets/scss/*.scss'],
}, },

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<common-page-title /> <v-row ref="searchFilter">
<v-row ref="searchFilter" class="mt-2">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
@ -35,7 +34,7 @@
<div class="h100 px-4" style="height:calc(100% - 70px)"> <div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="treeGridParent" class="w100 h100"> <div ref="treeGridParent" class="w100 h100">
<component :ref="gridName + myPrgmId" :is="loadTree ? 'Grid' : null" :gridName="gridName" <component :ref="gridName + myPrgmId" :is="loadTree ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
</div> </div>
</v-card> </v-card>
@ -92,9 +91,21 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'treeGrid', gridName: 'treeGrid',
loadTree: false, loadTree: true,
detailList: myDetail, detailList: myDetail,
addRowFg: false, addRowFg: false,
dataPathExample: {
"treeGrid": {
data: sampleData,
column: [
{ header: '메뉴명', name: 'menuNm' },
{ header: 'prgmId ', name: 'prgmId', hidden: true },
{ header: 'sysDivCd ', name: 'sysDivCd', hidden: true },
],
option: myOptions,
}
}
}; };
}, },
computed: { computed: {
@ -151,17 +162,10 @@ export default {
gridInit() { gridInit() {
const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 30; const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 30;
const myOptionsTree = { const myOptionsTree = {
columnOptions: {
resizable: true,
},
treeColumnOptions: { treeColumnOptions: {
name: 'menuNm', name: 'menuNm',
}, },
scrollX: false, scrollX: false,
header: {
height: 37,
},
rowHeight: 37,
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -174,17 +178,6 @@ export default {
this.setGridColumn({ this.setGridColumn({
gridKey: this.gridName, gridKey: this.gridName,
value: [ value: [
{
header: '',
name: '',
align: 'center',
width: 20,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{ header: '메뉴명', name: 'menuNm' }, { header: '메뉴명', name: 'menuNm' },
{ header: 'prgmId ', name: 'prgmId', hidden: true }, { header: 'prgmId ', name: 'prgmId', hidden: true },
{ header: 'sysDivCd ', name: 'sysDivCd', hidden: true }, { header: 'sysDivCd ', name: 'sysDivCd', hidden: true },

View File

@ -5,12 +5,22 @@
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row algin="end" no-gutters> <v-row algin="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<InputText :parentPrgmId="myPrgmId" label="역할ID" valueNm="roleId" :searchOption="true" <InputText
customClass="input-large" /> :parentPrgmId="myPrgmId"
label="역할ID"
valueNm="roleId"
:searchOption="true"
customClass="input-large"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText :parentPrgmId="myPrgmId" label="역할명" valueNm="roleNm" :searchOption="true" <InputText
customClass="input-large" /> :parentPrgmId="myPrgmId"
label="역할명"
valueNm="roleNm"
:searchOption="true"
customClass="input-large"
/>
</v-col> </v-col>
<v-col class="text-right d-flex justify-end align-end mr-3"> <v-col class="text-right d-flex justify-end align-end mr-3">
<BtnSearch size="large" /> <BtnSearch size="large" />
@ -20,66 +30,102 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents" >
<v-col cols="12" lg="3"> <v-col cols="12" lg="2" >
<v-card> <v-card>
<v-card-title> <v-card-title>
<span class="custom-title-4">역할 리스트</span> <span class="custom-title-4">역할 리스트</span>
</v-card-title> </v-card-title>
<div ref="gridParent" class="px-5" style="height: 60vh;"> <div class="px-5" style="height:calc(100% - 100px)">
<component :is="loadGrid ? 'Grid' : null" :ref="gridName + myPrgmId" :gridName="gridName" <div
:parentPrgmId="myPrgmId" @getRowsData="getRowData" /> ref="gridParent"
class="w100 h100"
>
<component
:is="loadGrid ? 'Grid' : null"
:ref="gridName + myPrgmId"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
</div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" lg="9"> <v-col cols="12" lg="10" >
<v-card> <v-card>
<v-card-title> <v-card-title>
<span class="custom-title-4">역할 메뉴별 권한</span> <span class="custom-title-4">역할 메뉴별 권한</span>
</v-card-title> </v-card-title>
<v-row align="center" no-gutters :style="{ height: 'calc(100% - 62px)' }" class="px-5"> <v-row
<v-col class="h100" style="max-width: 400px;"> align="center"
<span class="body-1 font-weight-bold d-flex align-center" no-gutters
:style="{ minHeight: '36px' }">[미배정]메뉴리스트</span> :style="{ height: 'calc(100% - 62px)' }"
<div ref="treeGridParent" class="px-0 mt-2" style="height: 60vh;"> class="px-5"
<!-- <div >
<v-col :cols="4" class="h100">
<span
class="body-1 font-weight-bold d-flex align-center"
:style="{ minHeight: '36px' }"
>[미배정]메뉴리스트</span
>
<div class="px-0 mt-2" style="height:calc(100% - 64px)">
<div
ref="treeGridParent" ref="treeGridParent"
class="w100 h100" class="w100 h100"
> >
</div> --> <component
<component :is="loadTreeGrid ? 'Grid' : null" :ref="gridName2 + myPrgmId" :is="loadTreeGrid ? 'Grid' : null"
:gridName="gridName2" :parentPrgmId="myPrgmId" @getRowsData="getUnAsgnRowData" /> :ref="gridName2 + myPrgmId"
:gridName="gridName2"
:parentPrgmId="myPrgmId"
@getRowsData="getUnAsgnRowData"
/>
</div>
</div> </div>
</v-col> </v-col>
<!-- <v-col :cols="1.5"> <v-col :cols="1">
<ActionButtons :parentPrgmId="myPrgmId" :leftGridName="gridName2" :rightGridName="gridName3" <ActionButtons
:btnActionsFnc="dualGridBtnActions" /> :parentPrgmId="myPrgmId"
</v-col> --> :leftGridName="gridName2"
<div class="pr-2"> :rightGridName="gridName3"
<ActionButtons :parentPrgmId="myPrgmId" :leftGridName="gridName2" :rightGridName="gridName3" :btnActionsFnc="dualGridBtnActions"
:btnActionsFnc="dualGridBtnActions" /> />
</div> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100">
<v-row justify="space-between" align="center" no-gutters class="px-5"> <v-row
justify="space-between"
align="center"
no-gutters
class="px-5"
>
<v-col :cols="11"> <v-col :cols="11">
<span class="body-1 font-weight-bold d-flex align-center" <span class="body-1 font-weight-bold"
:style="{ minHeight: '36px' }">[배정]메뉴별권한 리스트</span> >[배정]메뉴별권한 리스트</span
<!-- <span class="body-1 font-weight-bold">[배정]메뉴별권한 리스트</span> --> >
</v-col> </v-col>
<v-col :cols="1" class="text-right"> <v-col :cols="1" class="text-right">
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName3" <Buttons
:btnActionsFnc="btnActions" /> :parentPrgmId="myPrgmId"
:bindingData="gridName3"
:btnActionsFnc="btnActions"
/>
</v-col> </v-col>
</v-row> </v-row>
<div ref="treeGridParent2" class="px-0 mt-2" style="height: 60vh;"> <div class="px-0 mt-2" style="height:calc(100% - 64px)">
<!-- <div <div
ref="treeGridParent2" ref="treeGridParent2"
class="w100 h100" class="w100 h100"
> >
</div> --> <component
<component :is="loadTreeGrid2 ? 'Grid' : null" :ref="gridName3 + myPrgmId" :is="loadTreeGrid2 ? 'Grid' : null"
:gridName="gridName3" :parentPrgmId="myPrgmId" :editorGrid="true" :ref="gridName3 + myPrgmId"
@getRowsData="getAsgnRowData" /> :gridName="gridName3"
:parentPrgmId="myPrgmId"
:editorGrid="true"
@getRowsData="getAsgnRowData"
/>
</div>
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -245,8 +291,8 @@ export default {
async gridInit() { async gridInit() {
//---------------------gridOption 설정 시작---------------------------- //---------------------gridOption 설정 시작----------------------------
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 50; const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 30;
const treeGridHeight2 = this.$refs.treeGridParent2.offsetHeight - 50; const treeGridHeight2 = this.$refs.treeGridParent2.offsetHeight - 30;
// const gridHeight = this.$refs.contents.offsetHeight - 30; // const gridHeight = this.$refs.contents.offsetHeight - 30;
const myOptions = { const myOptions = {
@ -275,10 +321,8 @@ export default {
treeColumnOptions: { treeColumnOptions: {
name: 'menuNm', name: 'menuNm',
}, },
rowHeight: 37, scrollX: false,
minRowHeight: 37, // scrollY: false,
scrollX: true,
scrollY: true,
}; };
this.setGridOption({ this.setGridOption({
@ -303,14 +347,11 @@ export default {
//---------------------gridOption 설정 끝---------------------------- //---------------------gridOption 설정 끝----------------------------
//---------------------gridName3의 체크박스 설정 시작---------------------------- //---------------------gridName3의 체크박스 설정 시작----------------------------
class CustomCheckbox { class CustumChecbox {
constructor(props) { constructor(props) {
const el = document.createElement('input'); const el = document.createElement('input');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
el.type = 'checkbox'; el.type = 'checkbox';
$(el).css('width', '16px');
$(el).css('height', '16px');
$(el).css('accent-color', '#1677FF');
el.value = props.value; el.value = props.value;
this.el = el; this.el = el;
@ -344,12 +385,12 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{ header: '역할ID', name: 'roleId', align: 'left', minWidth: 70,width:120 }, { header: '역할ID', name: 'roleId', align: 'center', minWidth: 70 },
{ header: '역할명', name: 'roleNm', minWidth: 70, align: 'left',width:120 }, { header: '역할명', name: 'roleNm', minWidth: 70 },
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'left', align: 'center',
minWidth: 84, minWidth: 84,
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
@ -362,17 +403,19 @@ 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"><span class="radio-mark"></span></span>`; return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
} }
}, },
{ {
header: '메뉴명', header: '메뉴명',
name: 'menuNm', name: 'menuNm',
maxWidth: 120,
validation: { validation: {
dataType: 'string', dataType: 'string',
validatorFn: (value, row) => { validatorFn: (value, row) => {
@ -383,11 +426,14 @@ 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"><span class="radio-mark"></span></span>`; return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
} }
}, },
{ header: '역할ID', name: 'roleId', hidden: true }, { header: '역할ID', name: 'roleId', hidden: true },
@ -398,7 +444,7 @@ export default {
name: 'useFg', name: 'useFg',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -406,7 +452,7 @@ export default {
name: 'authCd1', name: 'authCd1',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -414,7 +460,7 @@ export default {
name: 'authCd2', name: 'authCd2',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -422,7 +468,7 @@ export default {
name: 'authCd3', name: 'authCd3',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -430,7 +476,7 @@ export default {
name: 'authCd4', name: 'authCd4',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -438,7 +484,7 @@ export default {
name: 'authCd5', name: 'authCd5',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
{ {
@ -446,7 +492,7 @@ export default {
name: 'authCd6', name: 'authCd6',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustomCheckbox, type: CustumChecbox,
}, },
}, },
]; ];
@ -514,12 +560,12 @@ export default {
//rowKey: 0, //rowKey: 0,
rowKey: rowKey:
this.pageData.rowGridSelectKey == '' || this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null this.pageData.rowGridSelectKey == null
? 0 ? 0
: this.pageData.rowGridSelectKey == : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName + this.myPrgmId].getData().length - 1 this.$refs[this.gridName + this.myPrgmId].getData().length - 1
? this.pageData.rowGridSelectKey ? this.pageData.rowGridSelectKey
: 0, : 0,
columnName: 'roleId', columnName: 'roleId',
setScroll: true, setScroll: true,
}); });
@ -527,7 +573,6 @@ export default {
}); });
}, },
async getRowData(data) { async getRowData(data) {
await this.setPageData({ await this.setPageData({
rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectData: { rowGridSelectData: {
@ -574,8 +619,8 @@ export default {
item.upMenuId && item.upMenuId != '0' item.upMenuId && item.upMenuId != '0'
? item.upMenuId ? item.upMenuId
: item.upMenuId == '0' : item.upMenuId == '0'
? '00' ? '00'
: 'ROOT', : 'ROOT',
}; };
return newItem; return newItem;
}); });
@ -614,8 +659,8 @@ export default {
item.upMenuId && item.upMenuId != '0' item.upMenuId && item.upMenuId != '0'
? item.upMenuId ? item.upMenuId
: item.upMenuId == '0' : item.upMenuId == '0'
? '00' ? '00'
: 'ROOT', : 'ROOT',
}; };
return newItem; return newItem;
}); });

View File

@ -81,6 +81,7 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -127,13 +128,13 @@
<!-- 역할수정 --> <!-- 역할수정 -->
<template v-else-if="item.id == 'AsgnRoleByUser'"> <template v-else-if="item.id == 'AsgnRoleByUser'">
<v-col :cols="12" class="overflow-y-scroll grid-toggle-section"> <v-col :cols="3" class="h100">
<v-card-title <v-card-title
class="pa-0 custom-subtitle-tab" class="pa-0 custom-title-4"
style="min-height:36px;" style="min-height:36px;"
>역할리스트</v-card-title >역할리스트</v-card-title
> >
<div class="py-5"> <div style="height:calc(100% - 36px)" class="py-5">
<component <component
class="w100" class="w100"
:is="loadGridTab2 ? 'Grid' : null" :is="loadGridTab2 ? 'Grid' : null"
@ -145,18 +146,17 @@
/> />
</div> </div>
</v-col> </v-col>
<v-col :cols="12" class="d-flex justify-center"> <v-col :cols="1" 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="12" class="h100"> <v-col :cols="8" 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-title-4">
사용자 역할</v-card-title 사용자 역할</v-card-title
> >
<div> <div>
@ -309,10 +309,12 @@ export default {
}, },
methods: { methods: {
async init() { async init() {
await this.gridInit(); this.gridInit();
}, },
// 사용자 리스트 그리드 세팅 // 사용자 리스트 그리드 세팅
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 90; const gridHeight = this.$refs.gridParent.offsetHeight - 90;
const myOptions = { const myOptions = {
@ -895,7 +897,6 @@ 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' },
@ -911,17 +912,6 @@ 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 },
@ -931,7 +921,6 @@ const unAsgnRoleByUserColumns = [
]; ];
const asgnRoleByUserColumns = [ const asgnRoleByUserColumns = [
{ header: '역할ID', name: 'roleId', align: 'center' }, { header: '역할ID', name: 'roleId', align: 'center' },
{ header: '역할명', name: 'roleNm' }, { header: '역할명', name: 'roleNm' },
{ {
@ -945,19 +934,7 @@ const asgnRoleByUserColumns = [
{ header: 'comId', name: 'comId', hidden: true }, { header: 'comId', name: 'comId', hidden: true },
]; ];
const asgnMenuByUserColumns = [ const asgnMenuByUserColumns = [{ header: '메뉴명', name: 'menuNm' }];
{
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 [
@ -982,7 +959,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pl-4', class: 'py-2 pr-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -1006,7 +983,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pl-4', class: 'py-2 pr-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -1032,7 +1009,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pl-4', class: 'py-2 pr-4',
iconShow: true, iconShow: true,
}, },
{ {
@ -1055,7 +1032,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pl-4', class: 'py-2 pr-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
@ -1079,7 +1056,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pl-4', class: 'py-2 pr-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
@ -1097,4 +1074,67 @@ function sha512(str) {
.update(str) .update(str)
.digest('hex'); .digest('hex');
} }
const dataMockExample = [
{
userNo: 1,
userNm: '홍길동',
userLoginId: 'hong123',
userPswd: 'password123',
blocId: 'B001',
email: 'hong@example.com',
regUserNo: 100,
regDttm: '2025-07-01 10:00:00',
procUserNo: 101,
procDttm: '2025-07-15 14:30:00',
comId: 'C001',
deptId: 'D001'
},
{
userNo: 2,
userNm: '김영희',
userLoginId: 'kimyh',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
},
{
userNo: 3,
userNm: '관리자',
userLoginId: 'user',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
},
{
userNo: 4,
userNm: '사용자',
userLoginId: 'admin',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
}
];
</script> </script>

View File

@ -11,6 +11,7 @@
label="배치ID" label="배치ID"
valueNm="batchId" valueNm="batchId"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large" customClass="input-large"
/> />
</v-col> </v-col>
@ -20,6 +21,7 @@
label="배치명" label="배치명"
valueNm="batchNm" valueNm="batchNm"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large" customClass="input-large"
/> />
</v-col> </v-col>
@ -31,6 +33,7 @@
:dataKey="'execRsltCd'" :dataKey="'execRsltCd'"
:sendParam="{ commGrpCd: 'CO_BATCH_EXEC_RSLT', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_BATCH_EXEC_RSLT', useFg: '1' }"
:addAll="true" :addAll="true"
:iconShow="true"
customClass="select-large" customClass="select-large"
/> />
</v-col> </v-col>
@ -39,13 +42,13 @@
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'조회기간'" :label="'조회기간'"
customClass="datepicker-large" :customClass="'input-large'"
/> />
</v-col> </v-col>
<div class="text-right d-flex align-end justify-end pl-9" style="gap: 8px"> <v-col :cols="2" class="text-right d-flex align-end justify-end ga-1" style="gap: 4px">
<BtnSearch /> <BtnSearch size="large" />
<BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" size="large" /> <BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" size="large" />
</div> </v-col>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
@ -138,7 +141,7 @@ export default {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
loadGrid: false, loadGrid: false,
gridName: 'rowGrid', gridName: 'rowGrid',
// rowGridOrigin: [], rowGridOrigin: [],
detailList: myDetail, detailList: myDetail,
}; };
}, },
@ -294,7 +297,7 @@ export default {
// 엑셀 다운로드용 데이터 재정렬 // 엑셀 다운로드용 데이터 재정렬
this.xlsDataBind(res); this.xlsDataBind(res);
// this.rowGridOrigin = Utility.copyObj(newRes); this.rowGridOrigin = Utility.copyObj(newRes);
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<!-- 조회조견 --> <!-- 조회조견 -->
<common-page-title /> <v-row ref="searchFilter">
<v-row ref="searchFilter" class="mt-2">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
@ -25,7 +24,7 @@
:customClass="'select-large'" :customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="2.5" class="pr-4"> <v-col :cols="2.5">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -35,7 +34,7 @@
:customClass="'select-large'" :customClass="'select-large'"
/> />
</v-col> </v-col>
<BtnSearch size="large" class="mr-2" /> <BtnSearch size="large" />
</v-row> </v-row>
</v-card> </v-card>
@ -58,7 +57,7 @@
<div class="px-4"> <div class="px-4">
<div ref="gridParent" class="h100 w100"> <div ref="gridParent" class="h100 w100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :parentPrgmId="myPrgmId"
:gridName="gridName" @getRowsData="getRowData" /> :gridName="gridName" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
<!-- </v-card-actions> --> <!-- </v-card-actions> -->
</div> </div>
@ -78,7 +77,7 @@
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</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="700" overlay-color="#000" overlay-opacity="0.8" scrollable>
<v-card style="height: 100%"> <v-card style="height: 100%">
<v-card-title class="v-card__title d-flex align-center justify-space-between"> <v-card-title class="v-card__title d-flex align-center justify-space-between">
<span class="custom-title-4">DB 프로시져 파라메터 설정</span> <span class="custom-title-4">DB 프로시져 파라메터 설정</span>
@ -92,6 +91,7 @@
<v-col cols="12" class="text-right"> </v-col> <v-col cols="12" class="text-right"> </v-col>
</v-row> </v-row>
</div> </div>
<v-divider></v-divider>
<v-card-text style="height: 300px;"> <v-card-text style="height: 300px;">
<div id="gridParent" class="mt-6" style="height:calc(100% - 36px);"> <div id="gridParent" class="mt-6" style="height:calc(100% - 36px);">
<div style="height:calc(100% - 36px);"> <div style="height:calc(100% - 36px);">
@ -101,6 +101,7 @@
</div> </div>
</div> </div>
</v-card-text> </v-card-text>
<v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn color="primary" dark @click="setParamChangeData()">확인</v-btn> <v-btn color="primary" dark @click="setParamChangeData()">확인</v-btn>
@ -154,16 +155,76 @@ export default {
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
loadGrid: false, loadGrid: true,
gridName: 'rowGrid', gridName: 'rowGrid',
dataPathExample: {
"rowGrid": {
data: [
{
"batchId": "BATCH001",
"batchNm": "일일 데이터 백업",
"batchExecTp": "자동 실행",
"batchDupExecFg": "N",
"useFg": "사용"
},
{
"batchId": "BATCH002",
"batchNm": "월간 리포트 생성",
"batchExecTp": "수동 실행",
"batchDupExecFg": "Y",
"useFg": "사용"
},
{
"batchId": "BATCH003",
"batchNm": "로그 정리 작업",
"batchExecTp": "자동 실행",
"batchDupExecFg": "N",
"useFg": "미사용"
},
{
"batchId": "BATCH004",
"batchNm": "사용자 통계 수집",
"batchExecTp": "예약 실행",
"batchDupExecFg": "Y",
"useFg": "사용"
},
{
"batchId": "BATCH005",
"batchNm": "서버 상태 점검",
"batchExecTp": "수동 실행",
"batchDupExecFg": "N",
"useFg": "미사용"
}
]
,
column: [
{ header: '배치ID', name: 'batchId', align: 'center', width: 100 },
{ header: '배치명', name: 'batchNm', minWidth: 200 },
{
header: '배치 실행 구분',
name: 'batchExecTp',
align: 'left',
minWidth: 190,
},
{ header: '배치 중복 여부', name: 'batchDupExecFg', hidden: true },
{
header: '사용여부',
name: 'useFg',
align: 'center',
width: 145,
},
],
}
},
// rowGridOrigin: [], // rowGridOrigin: [],
detailList: myDetail, detailList: myDetail,
// 파라메터 셋팅용 변수 // 파라메터 셋팅용 변수
dialog: false, dialog: false,
gridNameParam: 'paramGrid', gridNameParam: 'paramGrid',
paramLoadGrid: false, paramLoadGrid: true,
selectedGridNameParamRow: null, selectedGridNameParamRow: null,
}; };
}, },
@ -231,7 +292,7 @@ export default {
}), }),
init() { init() {
// this.layoutInit(); // this.layoutInit();
this.gridInit(); // this.gridInit();
this.gridParamInit(); this.gridParamInit();
}, },
// layoutInit() { // layoutInit() {
@ -248,10 +309,6 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 37,
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -327,7 +384,7 @@ export default {
}, },
async search() { async search() {
// console.log("search"); // console.log("search");
await this.getRowGridData(); // await this.getRowGridData();
await this.setPageData({ await this.setPageData({
isFind: false, isFind: false,
}); });
@ -572,20 +629,20 @@ export default {
gridKey: this.gridNameParam, gridKey: this.gridNameParam,
value: myOptions, value: myOptions,
}); });
setTimeout(() => { }); // setTimeout(() => { });
let modeList = []; // let modeList = [];
const modeIn = { text: 'IN', value: 'IN' }; // const modeIn = { text: 'IN', value: 'IN' };
const modeOut = { text: 'OUT', value: 'OUT' }; // const modeOut = { text: 'OUT', value: 'OUT' };
modeList.push(modeIn); // modeList.push(modeIn);
modeList.push(modeOut); // modeList.push(modeOut);
let typeList = []; // let typeList = [];
const typeInt = { text: 'INT', value: 'int' }; // const typeInt = { text: 'INT', value: 'int' };
const typeStr = { text: 'STRING', value: 'str' }; // const typeStr = { text: 'STRING', value: 'str' };
const typeFunc = { text: 'FUNCTION', value: 'function' }; // const typeFunc = { text: 'FUNCTION', value: 'function' };
typeList.push(typeInt); // typeList.push(typeInt);
typeList.push(typeStr); // typeList.push(typeStr);
typeList.push(typeFunc); // typeList.push(typeFunc);
const myColumns = [ const myColumns = [
{ header: 'ID', name: 'id', editor: 'text' }, { header: 'ID', name: 'id', editor: 'text' },
@ -607,27 +664,27 @@ export default {
header: 'Type', header: 'Type',
name: 'type', name: 'type',
align: 'center', align: 'center',
formatter({ value }) { // formatter({ value }) {
let retVal = ''; // let retVal = '';
switch (value) { // switch (value) {
case 'int': // case 'int':
retVal = 'INT'; // retVal = 'INT';
break; // break;
case 'str': // case 'str':
retVal = 'STRING'; // retVal = 'STRING';
break; // break;
case 'function': // case 'function':
retVal = 'FUNCTION'; // retVal = 'FUNCTION';
break; // break;
} // }
return retVal; // return retVal;
}, // },
editor: { // editor: {
type: 'select', // type: 'select',
options: { // options: {
listItems: typeList, // listItems: typeList,
}, // },
}, // },
}, },
{ header: '값', name: 'val', editor: 'text' }, { header: '값', name: 'val', editor: 'text' },
{ header: 'rowStat', name: 'rowStat', hidden: true }, { header: 'rowStat', name: 'rowStat', hidden: true },
@ -646,49 +703,86 @@ export default {
// /* this.pageData.paramStrData 처리 */ // /* this.pageData.paramStrData 처리 */
// // console.log("this.pageData.paramStrData : ", JSON.parse(this.pageData.paramStrData)); // // console.log("this.pageData.paramStrData : ", JSON.parse(this.pageData.paramStrData));
let rowData = {}; // let rowData = {};
if ( // if (
this.pageData.paramStrData.startsWith('{') && // this.pageData.paramStrData.startsWith('{') &&
this.pageData.paramStrData.endsWith('}') // this.pageData.paramStrData.endsWith('}')
) { // ) {
rowData = JSON.parse(this.pageData.paramStrData); // rowData = JSON.parse(this.pageData.paramStrData);
} // }
var keys = Object.keys(rowData); //키를 가져옵니다. 이때, keys 는 반복가능한 객체가 됩니다. // var keys = Object.keys(rowData); //키를 가져옵니다. 이때, keys 는 반복가능한 객체가 됩니다.
for (var i = 0; i < keys.length; i++) { // for (var i = 0; i < keys.length; i++) {
var key = keys[i]; // var key = keys[i];
res.push(rowData[key]); // res.push(rowData[key]);
} // }
const newRes = res.map(item => { // const newRes = res.map(item => {
const newObj = { // const newObj = {
...item, // ...item,
rowStat: null, // rowStat: null,
id: item.id || '', // id: item.id || '',
mode: item.mode || 'in', // mode: item.mode || 'in',
type: item.type || 'str', // type: item.type || 'str',
val: item.val || '', // val: item.val || '',
}; // };
return newObj; // return newObj;
}); // });
const newRes = [
{
"id": "VAR001",
"mode": "OUT",
"type": "int",
"val": "100",
"rowStat": "C"
},
{
"id": "VAR002",
"mode": "IN",
"type": "str",
"val": "Hello World",
"rowStat": "U"
},
{
"id": "FUNC001",
"mode": "out",
"type": "function",
"val": "calculateSum()",
"rowStat": "C"
},
{
"id": "VAR003",
"mode": "IN",
"type": "int",
"val": "42",
"rowStat": "D"
},
{
"id": "VAR004",
"mode": "OUT",
"type": "str",
"val": "Sample Text",
"rowStat": "C"
}
];
this.setGridData({ this.setGridData({
gridKey: this.gridNameParam, gridKey: this.gridNameParam,
value: newRes, value: newRes,
}); });
this.$nextTick(() => { // this.$nextTick(() => {
if (newRes.length > 0) { // if (newRes.length > 0) {
try { // try {
this.$refs[this.gridNameParam].focus({ // this.$refs[this.gridNameParam].focus({
//rowKey: 0, // //rowKey: 0,
rowKey: 0, // rowKey: 0,
setScroll: true, // setScroll: true,
}); // });
} catch (error) { // } catch (error) {
console.log('error[nextTick grid] : ', error); // console.log('error[nextTick grid] : ', error);
} // }
} // }
}); // });
this.paramLoadGrid = true; this.paramLoadGrid = true;
}, },
xlsDataBind(res) { xlsDataBind(res) {
@ -718,21 +812,21 @@ export default {
inputClick(event, item, valueNm) { inputClick(event, item, valueNm) {
if (valueNm == 'refVal1') { if (valueNm == 'refVal1') {
this.dialog = true; this.dialog = true;
const rowIdxKey = this.$refs[this.gridName].gridInstance.invoke( // const rowIdxKey = this.$refs[this.gridName].gridInstance.invoke(
'getFocusedCell', // 'getFocusedCell',
).rowKey; // ).rowKey;
const selectRowData = this.$refs[this.gridName].gridInstance.invoke( // const selectRowData = this.$refs[this.gridName].gridInstance.invoke(
'getRow', // 'getRow',
rowIdxKey, // rowIdxKey,
); // );
if (selectRowData.batchExecTp == 'DP') { // if (selectRowData.batchExecTp == 'DP') {
// 여기에 팝업 레이어 띠우기 기능 추가 // // 여기에 팝업 레이어 띠우기 기능 추가
this.pageData.paramStrData = event.target.value; // this.pageData.paramStrData = event.target.value;
this.pageData.paramChangeDataTarget = event.target; // this.pageData.paramChangeDataTarget = event.target;
this.getRowParamData(); // this.getRowParamData();
this.dialog = true; // this.dialog = true;
} // }
} }
}, },
setParamChangeData() { setParamChangeData() {

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<common-page-title /> <v-row ref="searchFilter">
<v-row ref="searchFilter" class="mt-2">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
@ -11,7 +10,7 @@
</v-col> </v-col>
<v-col cols="3"> <v-col cols="3">
<!-- <component :is="'SelectDateSolo'" :parentPrgmId="myPrgmId" /> --> <!-- <component :is="'SelectDateSolo'" :parentPrgmId="myPrgmId" /> -->
<DatePicker :parentPrgmId="myPrgmId" customClass="datepicker-large" :label="'조회연월'" /> <DatePicker :parentPrgmId="myPrgmId" :label="'조회연월'" />
</v-col> </v-col>
<v-col cols="6" class="text-right"> <v-col cols="6" class="text-right">
<BtnSearch @click="search()" size="large" /> <BtnSearch @click="search()" size="large" />
@ -21,29 +20,28 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" id="CalendarMngContent" class="mt-4"> <v-row ref="contents" id="CalendarMngContent" class="mt-4">
<v-col cols="12" lg="4" class=" pr-2"> <v-col cols="12" lg="4" class="h100 pr-2">
<v-card class="w100"> <v-card class="w100">
<v-card-title class="d-flex justify-space-between align-center"> <v-card-title class="d-flex justify-space-between align-center">
<span class="custom-title-4">캘린더 리스트</span> <span class="custom-title-4">캘린더 리스트</span>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" /> <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</v-card-title> </v-card-title>
<v-card-actions class="pt-0 px-5 pb-5" :style="{ height: 'calc(100% - 10px)' }"> <v-card-actions class="pt-0 px-5 pb-5" :style="{ height: 'calc(100% - 72.56px)' }">
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component class="w100" :ref="gridName + myPrgmId" :is="loadGrid ? 'Grid' : null" <component class="w100" :ref="gridName + myPrgmId" :is="loadGrid ? 'Grid' : null"
:gridName="gridName" :parentPrgmId="myPrgmId" :editorGrid="true" :gridName="gridName" :parentPrgmId="myPrgmId" :editorGrid="true"
@getRowsData="getRowData" /> @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" lg="8" class=" pl-3"> <v-col cols="12" lg="8" class="h100 pl-3">
<v-card> <v-card>
<v-card-title> <v-card-title>
<span class="custom-title-4">캘린더 미리보기</span> <span class="custom-title-4">캘린더 미리보기</span>
</v-card-title> </v-card-title>
<v-card-actions class="px-5 d-block" > <v-card-actions class="px-5 d-block" :style="{ height: 'calc(100% - 62px)' }">
<Calendar :parentPrgmId="myPrgmId" :gridName="gridName" :headerVisible="false" <Calendar :parentPrgmId="myPrgmId" :gridName="gridName" :headerVisible="false" />
:showTitle="false" />
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
@ -96,7 +94,81 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: false, loadGrid: true,
dataPathExample: {
"rowGrid": {
data: [
{
"hldyFg": "평일",
"hldyNm": ""
},
{
"dt": "2025-07-23",
"dtNm": "수요일",
"dt": "2025-07-21",
"dtNm": "월요일",
"hldyFg": "평일",
"hldyNm": ""
},
{
"dt": "2025-07-22",
"dtNm": "화요일",
"hldyFg": "평일",
"hldyNm": ""
},
{
"dt": "2025-07-24",
"dtNm": "목요일",
"hldyFg": "평일",
"hldyNm": ""
},
{
"dt": "2025-07-25",
"dtNm": "금요일",
"hldyFg": "평일",
"hldyNm": ""
},
{
"dt": "2025-07-26",
"dtNm": "토요일",
"hldyFg": "주말",
"hldyNm": ""
},
{
"dt": "2025-07-27",
"dtNm": "일요일",
"hldyFg": "휴일",
"hldyNm": "정기휴일"
}
],
column: [
{
header: '일자',
name: 'dt',
align: 'center',
// formatter({ value }) {
// return value.split(' ')[0];
// },
},
{
header: '요일',
name: 'dtNm',
align: 'center',
// formatter({ value }) {
// return value + '요일';
// },
},
{
header: '구분',
name: 'hldyFg',
align: 'center',
essential: true,
},
{ header: '휴일명', name: 'hldyNm', editor: 'text' },
],
}
},
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
}; };
@ -169,19 +241,16 @@ export default {
await this.gridInit(); await this.gridInit();
}, },
async search() { async search() {
await this.getRowGridData(); // await this.getRowGridData();
}, },
async gridInit() { async gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30; // const gridHeight = this.$refs.gridParent.offsetHeight - 30;
this.setGridOption({ // this.setGridOption({
gridKey: this.gridName, // gridKey: this.gridName,
value: Object.assign(Utility.defaultGridOption(gridHeight), { // value: Object.assign(Utility.defaultGridOption(gridHeight), {
scrollX: false, header: { // scrollX: false,
height: 37, // }),
}, // });
rowHeight: 37,
}),
});
// this.getRowGridData(); // this.getRowGridData();
}, },
@ -281,86 +350,86 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = await this.postApiReturn({ // let res = await this.postApiReturn({
apiKey: 'selectWorkCald', // apiKey: 'selectWorkCald',
resKey: 'workcaldData', // resKey: 'workcaldData',
sendParam: { // sendParam: {
blocId: this.pageData.blocMstrList[this.chkBlocCd].blocId, // blocId: this.pageData.blocMstrList[this.chkBlocCd].blocId,
yymm: this.chkFromDt, // yymm: this.chkFromDt,
comId: this.comId, // comId: this.comId,
}, // },
}); // });
let res2 = await this.postApiReturn({ // let res2 = await this.postApiReturn({
apiKey: 'selectWorkCaldDetl', // apiKey: 'selectWorkCaldDetl',
resKey: 'workcaldDetlData', // resKey: 'workcaldDetlData',
sendParam: { // sendParam: {
blocId: this.pageData.blocMstrList[this.chkBlocCd].blocId, // blocId: this.pageData.blocMstrList[this.chkBlocCd].blocId,
yymm: this.chkFromDt, // yymm: this.chkFromDt,
comId: this.comId, // comId: this.comId,
}, // },
}); // });
for (var i = 0; i < res2.length; i++) { // for (var i = 0; i < res2.length; i++) {
if ( // if (
!( // !(
res2[i].hldyNm == null || // res2[i].hldyNm == null ||
res2[i].hldyNm == '토요일' || // res2[i].hldyNm == '토요일' ||
res2[i].hldyNm == '일요일' // res2[i].hldyNm == '일요일'
) // )
) { // ) {
for (var j = i + 1; j < res2.length; j++) { // for (var j = i + 1; j < res2.length; j++) {
if (res2[i].hldyNm == res2[j].hldyNm) { // if (res2[i].hldyNm == res2[j].hldyNm) {
res2[i].hldyNm = ''; // res2[i].hldyNm = '';
} // }
} // }
} // }
} // }
res = res.map(item => { // res = res.map(item => {
const dt = this.$dayjs(item.dt.split(' ')[0]); // YYYY-MM-DD // const dt = this.$dayjs(item.dt.split(' ')[0]); // YYYY-MM-DD
const dtNm = dt.format('ddd'); // 요일 // const dtNm = dt.format('ddd'); // 요일
const newItem = { // const newItem = {
...item, // ...item,
dtNm: dtNm, // dtNm: dtNm,
hldyNm: item.hldyNm ? item.hldyNm : '', // hldyNm: item.hldyNm ? item.hldyNm : '',
rowStat: null, // rowStat: null,
}; // };
return newItem; // return newItem;
}); // });
this.loadGrid = true; // this.loadGrid = true;
this.setPageData({ isFind: false }); // this.setPageData({ isFind: false });
this.setGridColumn({ // this.setGridColumn({
gridKey: this.gridName, // gridKey: this.gridName,
value: myColumns, // value: myColumns,
}); // });
this.setGridData({ // this.setGridData({
gridKey: this.gridName, // gridKey: this.gridName,
value: res, // value: res,
}); // });
this.setPageData({ planData: res2 }); // this.setPageData({ planData: res2 });
// 첫번째 row 선택상태 // // 첫번째 row 선택상태
this.$nextTick(() => { // this.$nextTick(() => {
this.$refs[this.gridName + this.myPrgmId].focus({ // this.$refs[this.gridName + this.myPrgmId].focus({
//rowKey: 0, // //rowKey: 0,
rowKey: // rowKey:
this.pageData.rowGridSelectKey == '' || // this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null // this.pageData.rowGridSelectKey == null
? 0 // ? 0
: this.pageData.rowGridSelectKey == // : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName + this.myPrgmId].getData().length - 1 // this.$refs[this.gridName + this.myPrgmId].getData().length - 1
? this.pageData.rowGridSelectKey // ? this.pageData.rowGridSelectKey
: 0, // : 0,
columnName: 'dt', // columnName: 'dt',
setScroll: true, // setScroll: true,
}); // });
this.setPageData({ isFind: false }); // this.setPageData({ isFind: false });
}); // });
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
this.setGridSelectData({ this.setGridSelectData({
@ -535,17 +604,4 @@ select.selectbox {
border-width: 0px; border-width: 0px;
// box-sizing: border-box; // box-sizing: border-box;
} }
::v-deep {
.custom-vc-calender {
.vc-header {
display: none;
}
.vc-weeks {
padding: 0;
}
}
}
</style> </style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle/> <PageTitle text="공통코드" />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -56,7 +56,7 @@
</v-col> </v-col>
<v-col :cols="12" class="text-right"> <v-col :cols="12" class="text-right">
<BtnSearch style="margin-top:20px" @click="search" size="large" /> <BtnSearch style="margin-top:20px" @click="search" />
</v-col> </v-col>
</v-row> </v-row>
<!-- <v-row align="center" no-gutters> <!-- <v-row align="center" no-gutters>
@ -363,7 +363,7 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,
}); });
this.loadGrid = true; this.loadGrid = true;
this.$nextTick(() => { this.$nextTick(() => {
if (newRes.length > 0) { if (newRes.length > 0) {
this.$refs[this.gridName].focus({ this.$refs[this.gridName].focus({

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" @click="listPageButtonGroupClickEvent('write')" :ripple="false" <a-button type="primary" size="large" @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" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" /> @getRowsData="getRowData" />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -27,23 +27,22 @@
</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" <a-button @click="viewPageButtonGroupClickEvent('list')" type="primary" :ripple="false" class="mr-1"
class="mr-1" icon="unordered-list">목록</a-button> icon="unordered-list">목록</a-button>
<a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false" <a-button @click="viewPageButtonGroupClickEvent('reply')" type="primary" :ripple="false" class="mr-1"
class="mr-1" icon="send-outlined"> 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" <a-button @click="viewPageButtonGroupClickEvent('update')" type="primary" :ripple="false" class="mr-1"
class="mr-1" icon="edit">수정</a-button> icon="edit">수정</a-button>
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost <a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button>
icon="delete">삭제</a-button>
</div> </div>
</v-col> </v-col>
<v-col :cols="12" class="mt-5"> <v-col :cols="12" class="mt-5">
@ -58,12 +57,13 @@
<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" :key="fileData.apndFileId" class="file-item"> <div v-for="fileData in viewActionData.fileData"
: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 + '.' + <span class="file-item-name ml-2">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span>
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>
@ -92,27 +92,33 @@
<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 v-for="(fileData, index) in writeActionData.fileData" :key="fileData.apndFileId" <div
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" <a-icon type="delete" class="v-icon pointer" @click="writeActionData.fileData.splice(index, 1)" />
@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 ref="writeInputFile" v-model="writeActionData.fileData" multiple outlined <v-file-input
hide-input class="d-none" prepend-icon="mdi-tray-arrow-up"></v-file-input> ref="writeInputFile"
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" <a-button @click="writePageButtonGroupClickEvent('cancel')" :ripple="false" class="mr-2">취소</a-button>
class="mr-2">취소</a-button> <a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false" type="primary">등록</a-button>
<a-button @click="writePageButtonGroupClickEvent('write')" :ripple="false"
type="primary">등록</a-button>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
@ -120,7 +126,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="">
@ -128,7 +134,8 @@
</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 hide-details> <v-text-field v-model="replyActionData.title" class="v-input__custom" outlined
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">
@ -137,73 +144,72 @@
<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 v-for="(fileData, index) in replyActionData.fileData" :key="fileData.apndFileId" <div
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" <a-icon type="delete" class="v-icon pointer" @click="replyActionData.fileData.splice(index, 1)" />
@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" <v-file-input ref="replyInputFile" multiple show-size v-model="replyActionData.fileData" hide-details="true" class="d-none">
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" <a-button @click="replyPageButtonGroupClickEvent('reply')" :ripple="false" type="primary">등록</a-button>
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 <v-text-field v-model="updateActionData.title" class="v-input__custom" hide-details outlined>
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 v-for="(fileData, index) in updateActionData.fileData" :key="fileData.apndFileId" <div
class="file-item d-flex justify-space-between"> v-for="(fileData, index) in updateActionData.fileData"
<div class="file-item-detail"> :key="fileData.apndFileId"
<v-icon>mdi-paperclip</v-icon> class="file-item d-flex justify-space-between">
<span href="#" class="file-item-name">{{ fileData.name }}</span> <div class="file-item-detail">
<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>
</div> <a-button class="mt-2" icon="upload" @click="$refs.updateInputFile.$refs.input.click()" >
<a-button class="mt-2" icon="upload" @click="$refs.updateInputFile.$refs.input.click()"> 업로드
업로드 </a-button>
</a-button> <v-file-input ref="updateInputFile" multiple show-size v-model="updateActionData.fileData"
<v-file-input ref="updateInputFile" multiple show-size v-model="updateActionData.fileData" hide-details="true" class="d-none">
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="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>
@ -289,6 +295,8 @@ export default {
postGrpOrd: null, postGrpOrd: null,
postOrgNo: null, postOrgNo: null,
}, },
dataPathMock: {},
}; };
}, },
computed: { computed: {
@ -333,7 +341,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() {
@ -392,11 +400,7 @@ 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),
@ -417,7 +421,7 @@ export default {
align: 'center', align: 'center',
hidden: true, hidden: true,
}, },
{ header: '번호', name: 'postNo', width: 150, align: 'right' }, { header: '번호', name: 'postNo', width: 150, align: 'center' },
{ {
header: '원글번호', header: '원글번호',
name: 'postOrgNo', name: 'postOrgNo',
@ -447,9 +451,9 @@ export default {
hidden: true, hidden: true,
}, },
{ header: '제목', name: 'title', align: 'left' }, { header: '제목', name: 'title', align: 'left' },
{ header: '작성자', name: 'regUserNo', width: 250, align: 'right' }, { header: '작성자', name: 'regUserNo', width: 250, align: 'center' },
{ header: '작성일', name: 'regDttm', width: 250, align: 'center' }, { header: '작성일', name: 'regDttm', width: 250, align: 'center' },
{ header: '조회수', name: 'viewCnt', width: 150, align: 'right' }, { header: '조회수', name: 'viewCnt', width: 150, align: 'center' },
// {header: "파일아이디", name:"apndFileUuid", width:150, align:"center"}, // 수정필요 // {header: "파일아이디", name:"apndFileUuid", width:150, align:"center"}, // 수정필요
]; ];
@ -1016,6 +1020,15 @@ 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>
@ -1029,41 +1042,23 @@ const defaultData = {
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,21 +1,33 @@
<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="end" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'사용여부'" <component
:dataKey="'selectUseFg'" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :is="'selectCodeList'"
:addAll="true" customClass="select-large" /> :parentPrgmId="myPrgmId"
:label="'사용여부'"
:dataKey="'selectUseFg'"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
customClass="select-large"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="4">
<InputText :parentPrgmId="myPrgmId" label="프로그램명" valueNm="prgmNm" :searchOption="true" <InputText
:labelCols="12" :textCols="12" customClass="input-large" /> :parentPrgmId="myPrgmId"
label="프로그램명"
valueNm="prgmNm"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col> </v-col>
<v-col :cols="6" class="text-right"> <v-col :cols="5" class="text-right">
<BtnSearch size="large" /> <BtnSearch size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -25,32 +37,47 @@
<v-row ref="contents"> <v-row ref="contents">
<!-- 프로그램 리스트 --> <!-- 프로그램 리스트 -->
<v-col :cols="5"> <v-col :cols="5" >
<v-card class="pa-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0">프로그램 리스트</v-card-title> <v-card-title class="pa-0">프로그램 리스트</v-card-title>
<div> <div>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons
:btnActionsFnc="btnActions" /> :parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
</div> </div>
</div> </div>
<div ref="gridParent" class="pt-5" style="height: 60vh"> <div style="min-height: 60vh">
<!-- <div ref="gridParent" class="px-5 h100"> <div ref="gridParent" class="px-5 h100">
</div> --> <component
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :parentPrgmId="myPrgmId" :ref="gridName"
:gridName="gridName" @getRowsData="getRowData" /> :is="loadGrid ? 'Grid' : null"
:parentPrgmId="myPrgmId"
:gridName="gridName"
@getRowsData="getRowData"
:dataPath="dataPathMock"
/>
</div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<!-- 프로그램 상세 --> <!-- 프로그램 상세 -->
<v-col :cols="7"> <v-col :cols="7" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0">프로그램 상세</v-card-title> <v-card-title class="pa-0">프로그램 상세</v-card-title>
</div> </div>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<component :is="'Form'" :parentPrgmId="myPrgmId" :bindingData="gridName" <component
:detailList="detailList" @gridEditingFinish="gridEditingFinish" /> :is="'Form'"
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
<!-- <div class="w100"> <!-- <div class="w100">
</div> --> </div> -->
</div> </div>
@ -105,19 +132,21 @@ export default {
detailList: myDetail, detailList: myDetail,
dataPathMock: { dataPathMock: {
'rowGrid': { 'rowGrid': {
column: [ column: [
{ header: '프로그램ID', name: 'field1', align: 'left' }, { header: '프로그램ID', name: 'field1', align: 'left' },
{ header: '프로그램덤', name: 'field2', align: 'left' }, { header: '프로그램덤', name: 'field2', align: 'left' },
{ header: '타임', name: 'field3', align: 'left' }, { header: '타임', name: 'field3', align: 'left' },
{ header: '사용여부', name: 'field4', align: 'left' } { header: '사용여부', name: 'field4', align: 'left' }
], ],
option: { data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {
scrollY: false, scrollY: false,
scrollX: false, scrollX: false,
} }
} }
}, },
}; };
}, },
computed: { computed: {
@ -233,6 +262,8 @@ export default {
}); });
// this.getRowGridData(); // this.getRowGridData();
this.loadGrid = true;
}, },
async search() { async search() {
await this.getRowGridData(); await this.getRowGridData();
@ -265,7 +296,6 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,
}); });
this.loadGrid = true;
this.$nextTick(() => { this.$nextTick(() => {
if (newRes.length > 0) { if (newRes.length > 0) {
@ -274,23 +304,18 @@ export default {
//rowKey: this.chkRowGridSelectKey || 0, //rowKey: this.chkRowGridSelectKey || 0,
rowKey: rowKey:
this.pageData.rowGridSelectKey == '' || this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null this.pageData.rowGridSelectKey == null
? 0 ? 0
: this.pageData.rowGridSelectKey == : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1 this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey ? this.pageData.rowGridSelectKey
: 0, : 0,
setScroll: true, setScroll: true,
}); });
} }
}); });
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
// gridKey: gridName,
// gridSelect: true,
// rowGridSelectKey: data.rowKey,
// rowGridSelectData: data,
// });
this.setGridSelectData({ this.setGridSelectData({
gridKey: gridName, gridKey: gridName,
gridSelect: true, gridSelect: true,
@ -302,7 +327,6 @@ export default {
rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectData: data, rowGridSelectData: data,
}); });
}, },
compareData(type, newDt) { compareData(type, newDt) {
if (this.selectedCommCdData[type] == newDt) { if (this.selectedCommCdData[type] == newDt) {
@ -458,7 +482,7 @@ const myDetail = [
valueNm: 'prgmTpCd', valueNm: 'prgmTpCd',
essential: true, essential: true,
cols: 6, cols: 6,
class: 'py-2 pt-5', class: 'py-2',
list: [ list: [
{ text: '프로그램', value: '1' }, { text: '프로그램', value: '1' },
{ text: '팝업', value: '2' }, { text: '팝업', value: '2' },
@ -473,11 +497,10 @@ const myDetail = [
essential: true, essential: true,
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2 pt-13', class: 'py-2',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: true, required: true,
textCols: 12, textCols: 12,
labelCols:12,
iconShow: true iconShow: true
}, },
{ {
@ -486,7 +509,7 @@ const myDetail = [
valueNm: 'url', valueNm: 'url',
disabled: false, disabled: false,
cols: 12, cols: 12,
class: 'py-2 pt-4', class: 'py-2',
required: true, required: true,
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -497,7 +520,7 @@ const myDetail = [
valueNm: 'regUserNo', valueNm: 'regUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2 pt-5', class: 'py-2',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -508,7 +531,7 @@ const myDetail = [
valueNm: 'regDttm', valueNm: 'regDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2 pt-5', class: 'py-2',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -519,7 +542,7 @@ const myDetail = [
valueNm: 'procUserNo', valueNm: 'procUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2 pt-5', class: 'py-2',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -530,10 +553,19 @@ const myDetail = [
valueNm: 'procDttm', valueNm: 'procDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2 pt-5', class: 'py-2',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
}, },
]; ];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
field1: 'PRG0001',
field2: '대시보드',
field3: '프로그램',
field4: '사용'
});
</script> </script>

View File

@ -336,8 +336,7 @@ export default {
this.search(); this.search();
}, },
async search() { async search() {
//process this.loadGrid = false;
this.loadGrid = true;
await this.getRowGridData(); await this.getRowGridData();
await this.setPageData({ await this.setPageData({
isFind: false, isFind: false,
@ -628,3 +627,6 @@ const myDetail = [
}, },
]; ];
</script> </script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle/> <!-- <h1 class="h1-title">대시보드</h1> -->
<PageTitle text="대시보드" />
<!-- <CheckBox <!-- <CheckBox
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="사용여부" label="사용여부"
@ -599,7 +600,7 @@ export default {
this.getEnrgUsage(); this.getEnrgUsage();
}, },
isDarkMode(newVal) { isDarkMode(newVal) {
// Update color of dark mode or light mode into each charts // let chartOption = this.getGuageChartOption2(this.chart_01);
let chartOption = getGaugeChartOption({ let chartOption = getGaugeChartOption({
title: this.chart_01, title: this.chart_01,
isDarkMode: this.isDarkMode, isDarkMode: this.isDarkMode,
@ -609,6 +610,7 @@ export default {
]?.series?.[0]?.data?.[0]?.value; ]?.series?.[0]?.data?.[0]?.value;
this.$store.state.pageData[myPrgmId][this.chart_01] = chartOption; this.$store.state.pageData[myPrgmId][this.chart_01] = chartOption;
// let chartOption3 = this.getGuageChartOption2(this.chart_03);
let chartOption3 = getGaugeChartOption({ let chartOption3 = getGaugeChartOption({
title: this.chart_03, title: this.chart_03,
isDarkMode: this.isDarkMode, isDarkMode: this.isDarkMode,
@ -618,24 +620,12 @@ export default {
]?.series?.[0]?.data?.[0]?.value; ]?.series?.[0]?.data?.[0]?.value;
this.$store.state.pageData[myPrgmId][this.chart_03] = chartOption3; this.$store.state.pageData[myPrgmId][this.chart_03] = chartOption3;
let mockres = this.$store.state.pageData[myPrgmId][this.chart_04];
this.setChart04Data(mockres);
let chart04Dat = this.$store.state.pageData[myPrgmId]['chart04Data']; this.setChart02Data("test");
this.setChart04Data(chart04Dat);
let chartOption2 = getLineChartOption({
xAxisData: this.$store.state.pageData[myPrgmId][this.chart_02].xAxisData,
seriesData: this.$store.state.pageData[myPrgmId][this.chart_02].seriesData,
isDarkMode: this.isDarkMode,
});
this.$store.state.pageData[myPrgmId][this.chart_02] = chartOption2
let chartOption5 = getLineChartOption({
xAxisData: this.$store.state.pageData[myPrgmId][this.chart_05].xAxisData,
seriesData: this.$store.state.pageData[myPrgmId][this.chart_05].seriesData,
isDarkMode: this.isDarkMode,
});
this.$store.state.pageData[myPrgmId][this.chart_05] = chartOption5
this.setChart05Data("test");
}, },
// beforeDestroy() { // beforeDestroy() {
// this.cancelAutoUpdate(); // this.cancelAutoUpdate();
@ -803,7 +793,7 @@ export default {
header: "NO", header: "NO",
name: "rowNum", name: "rowNum",
width: 70, width: 70,
align: "right", align: "center",
// hidden: true, // hidden: true,
}, },
{ {
@ -1179,7 +1169,6 @@ export default {
chartKey: "compareEqpmTGdChart", chartKey: "compareEqpmTGdChart",
value: chartOption, value: chartOption,
}); });
this.$store.state.pageData[myPrgmId][this.chart_05] = chartOption
}, },
async setChart04Data(data) { async setChart04Data(data) {
if (this.$store.state.pageData[this.myPrgmId].todayNgTopTen != undefined) { if (this.$store.state.pageData[this.myPrgmId].todayNgTopTen != undefined) {
@ -1279,7 +1268,6 @@ export default {
}, },
series: seriesData, series: seriesData,
}; };
await this.$nextTick(() => {}); await this.$nextTick(() => {});
this.setChartOption({ chartKey: "todayNgTopTen", value: chartOption }); this.setChartOption({ chartKey: "todayNgTopTen", value: chartOption });
}, },
@ -1413,7 +1401,6 @@ export default {
chartKey: "compareEqpmTotChart", chartKey: "compareEqpmTotChart",
value: chartOption, value: chartOption,
}); });
this.$store.state.pageData[myPrgmId][this.chart_02] = chartOption
}, },
getGuageChartOption(chartName) { getGuageChartOption(chartName) {
const gaugeColors = [ const gaugeColors = [
@ -1723,7 +1710,7 @@ export default {
let chartData = this.pageData.chart04Data; let chartData = this.pageData.chart04Data;
// let chartData = this.$store.state.pageData[myPrgmId][this.chart_04]['series'][0]['data'] // let chartData = this.$store.state.pageData[myPrgmId][this.chart_04]['series'][0]['data']
let selectedChartData = chartData.filter((item) => { let selectedChartData = chartData.filter((item) => {
return item.eqpmId == event["data"]["name"]; return item.eqpmId == event["data"]["groupId"];
}); });
var data = { var data = {
cmCycle: "CYC_DAY", cmCycle: "CYC_DAY",

View File

@ -18,7 +18,7 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="pt-2"> <v-row ref="contents" class="pt-2">
<v-col :cols="5" class="pr-2"> <v-col :cols="5" style="height:100%" class="pr-2">
<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 pa-4">
<v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title>
@ -33,11 +33,11 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="pl-2"> <v-col :cols="7" style="height:100%" class="pl-2">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세 <v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세
</v-card-title> </v-card-title>
<div class="px-4" > <div class="px-4" style="height:calc(100% - 76px)">
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.id" :disabled="(item.id == 'EffcIdxAddInfoTab' <v-tab v-for="item in items" :key="item.id" :disabled="(item.id == 'EffcIdxAddInfoTab'
? isInfoTabDisabled ? isInfoTabDisabled
@ -162,7 +162,7 @@ import EffcIdxAddInfoTab from '@/components/pages/ems/EffcIdxInfo/EffcIdxAddInfo
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import SelectBox from '@/components/common/select/SelectBox'; import SelectBox from '@/components/common/select/SelectBox';
import CheckBox from '~/components/common/CheckBox'; import CheckBox from '~/components/common/checkbox/CheckBox';
import EqpmCalcPop from '~/components/common/modal/EqpmCalcPop'; import EqpmCalcPop from '~/components/common/modal/EqpmCalcPop';
import TextArea from '@/components/common/form/TextArea'; import TextArea from '@/components/common/form/TextArea';
@ -214,6 +214,64 @@ export default {
}, },
], ],
loadGrid: false, loadGrid: false,
// "effcIdxGrid": {
// data: [
// {
// "effcIdxId": "E001",
// "effcIdxNm": "에너지 소비 효율",
// "effcKind": "환경"
// },
// {
// "effcIdxId": "E002",
// "effcIdxNm": "작업 시간 대비 생산량",
// "effcKind": "생산성"
// },
// {
// "effcIdxId": "E003",
// "effcIdxNm": "장비 가동률",
// "effcKind": "운영"
// },
// {
// "effcIdxId": "E004",
// "effcIdxNm": "불량률",
// "effcKind": "품질"
// },
// {
// "effcIdxId": "E005",
// "effcIdxNm": "재고 회전율",
// "effcKind": "물류"
// }
// ]
// ,
// column: [
// {
// header: '효율지표 ID',
// name: 'effcIdxId',
// align: 'center',
// // hidden:true
// },
// {
// header: '효율지표명',
// name: 'effcIdxNm',
// align: 'left',
// minWidth: 150,
// // hidden:true
// },
// {
// header: '효율지표종류',
// name: 'effcKind',
// align: 'left',
// // hidden: true,
// },
// // { header: '등록 사용자', name: 'regUserNo', hidden: true },
// // { header: '등록 일자', name: 'regDttm', hidden: true },
// // { header: '수정 사용자', name: 'procUserNo', hidden: true },
// // { header: '수정 일자', name: 'procDttm', hidden: true },
// ],
// }
// },
initFlag: false, initFlag: false,
selectValueList01: [], selectValueList01: [],
selectValueList02: [], selectValueList02: [],
@ -861,6 +919,7 @@ export default {
{ {
header: '효율지표 ID', header: '효율지표 ID',
name: 'effcIdxId', name: 'effcIdxId',
align: 'center',
// hidden:true // hidden:true
}, },
{ {

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="center" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -12,6 +12,8 @@
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">
@ -22,10 +24,12 @@
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'"
@ -42,6 +46,8 @@
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">
@ -49,17 +55,14 @@
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="공정명" label="공정명"
valueNm="eccNm" valueNm="eccNm"
:labelCols="2" :labelCols="12"
:textCols="9" :textCols="12"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large"
/> />
</v-col> </v-col>
<v-col class="text-right"> <BtnSearch @click="search" size="large" />
<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>
@ -76,8 +79,8 @@
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div class="px-5" style="height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100 pb-2">
<component <component
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
@ -86,6 +89,7 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -192,13 +196,15 @@ 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: {
@ -314,11 +320,23 @@ 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',
}), }),
@ -333,7 +351,41 @@ 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;
@ -352,17 +404,6 @@ 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: '공정 명',
@ -557,6 +598,16 @@ 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({
@ -572,6 +623,9 @@ 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({
@ -1016,4 +1070,142 @@ const myDetail = [
value: { '1': true, '0': false }, value: { '1': true, '0': false },
}, },
]; ];
const dataMockExample = [
{
eccId: 'ECC000001',
eccNm: 'EGP_HVAC_LT_CH001',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000002',
eccNm: 'B01',
status: '대기',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000005',
eccNm: 'B01-1',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-1-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000006',
eccNm: 'B01-2',
status: '점검중',
eccKind: '공정',
useFg: '0',
_children: [
{
eccId: 'ECC0000013',
eccNm: 'B01-2-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000014',
eccNm: 'B01-1-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000015',
eccNm: 'B01-1-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
{
eccId: 'ECC000007',
eccNm: 'B01-3',
status: '운영중',
eccKind: '공정',
useFg: '1',
_children: [
{
eccId: 'ECC000009',
eccNm: 'B01-3-1',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000010',
eccNm: 'B01-3-2',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
{
eccId: 'ECC0000011',
eccNm: 'B01-3-3',
status: '운영중',
eccKind: '공정',
useFg: '1'
},
]
},
],
},
{
eccId: 'ECC000003',
eccNm: 'B02',
status: '운영중',
eccKind: '공정',
useFg: '1',
},
{
eccId: 'ECC000004',
eccNm: 'B03',
status: '점검중',
eccKind: '공정',
useFg: '0',
},
],
},
];
const gridOptions = {
treeColumnOptions: {
name: 'eccNm', // Showing tree table
useIcon: false, // Not using icon
indentWidth: 10,// spacing when showing children
},
header: {
height: 40,
},
rowHeight: 35,
showCheckbox: false,
};
</script> </script>

View File

@ -25,7 +25,7 @@
:textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" /> :textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" />
</v-col> </v-col>
<BtnSearch @click="search" size="large" class="mr-2" /> <BtnSearch @click="search" size="large" />
</v-row> </v-row>
</v-card> </v-card>
@ -43,7 +43,8 @@
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" /> @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
/>
</div> </div>
</div> </div>
</v-card> </v-card>
@ -307,22 +308,12 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{
header: '',
name: '',
align: 'center',
formatter: (props) => {
return `<span class="custom-radio">
<span class="radio-mark"></span>
</span>`;
}
},
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ {
header: '검침개소명', header: '검침개소명',
name: 'readPlcNm', name: 'readPlcNm',
align: 'left', align: 'left',
minWidth: 350, minWidth: 400,
}, },
{ {
header: '검침개소 ID', header: '검침개소 ID',
@ -342,6 +333,7 @@ export default {
header: '개소 종류', header: '개소 종류',
name: 'plcKind', name: 'plcKind',
minWidth: 100, minWidth: 100,
align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.plcKindList.filter( const newValue = _this.pageData.plcKindList.filter(
@ -391,6 +383,7 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
minWidth: 100, minWidth: 100,
align: 'center',
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
@ -477,12 +470,12 @@ export default {
this.$refs[this.gridName].focus({ this.$refs[this.gridName].focus({
rowKey: rowKey:
this.pageData.rowGridSelectKey == '' || this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null this.pageData.rowGridSelectKey == null
? 0 ? 0
: this.pageData.rowGridSelectKey == : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1 this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey ? this.pageData.rowGridSelectKey
: 0, : 0,
columnName: 'readPlcNm', columnName: 'readPlcNm',
setScroll: true, setScroll: true,
}); });
@ -500,7 +493,7 @@ export default {
if (this.tab == 2) { if (this.tab == 2) {
this.tab = 0; this.tab = 0;
} }
this.isImgTabDisabled = true; this.isImgTabDisabled = false;
} else { } else {
this.isImgTabDisabled = false; this.isImgTabDisabled = false;
} }
@ -924,47 +917,47 @@ const defaultData = {
}; };
const sampleData = [ const sampleData = [
{ {
readPlcNm: '서울 본사', readPlcNm: '서울 본사',
plcKind: '본사', plcKind: '본사',
useFg: '사용', useFg: '사용',
_children: [ _children: [
{ {
readPlcNm: '서울 본사 - 1층', readPlcNm: '서울 본사 - 1층',
plcKind: '층', plcKind: '층',
useFg: '사용', useFg: '사용',
}, },
{ {
readPlcNm: '서울 본사 - 2층', readPlcNm: '서울 본사 - 2층',
plcKind: '층', plcKind: '층',
useFg: '미사용', useFg: '미사용',
}, },
], ],
}, },
{ {
readPlcNm: '부산 지사', readPlcNm: '부산 지사',
plcKind: '지사', plcKind: '지사',
useFg: '사용', useFg: '사용',
_children: [ _children: [
{ {
readPlcNm: '부산 지사 - A동', readPlcNm: '부산 지사 - A동',
plcKind: '건물', plcKind: '건물',
useFg: '사용', useFg: '사용',
_children: [ _children: [
{ {
readPlcNm: '부산 지사 - A동 1층', readPlcNm: '부산 지사 - A동 1층',
plcKind: '층', plcKind: '층',
useFg: '사용', useFg: '사용',
}, },
], ],
}, },
], ],
}, },
{ {
readPlcNm: '대전 창고', readPlcNm: '대전 창고',
plcKind: '창고', plcKind: '창고',
useFg: '미사용', useFg: '미사용',
}, },
]; ];

View File

@ -1,6 +1,5 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -84,7 +83,7 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row > <v-row ref="contents" style="height: calc(100vh - 400px)">
<v-col :cols="5" class="h100"> <v-col :cols="5" class="h100">
<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">
@ -114,7 +113,7 @@
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title>에너지원 상세</v-card-title> <v-card-title>에너지원 상세</v-card-title>
<div class="px-5" style="min-height: auto;"> <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" v-for="item in items"
@ -126,21 +125,21 @@
</v-tabs> </v-tabs>
<v-tabs-items <v-tabs-items
v-model="tab" v-model="tab"
style="height: calc(100% - 65px);"
class="py-6" class="py-6"
style="min-height: auto;"
> >
<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 == 'ercInfoTab'" v-if="item.id == 'ercInfoTab'"
:is="'Form'" :is="'Form'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:detailList="detailList" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" @gridEditingFinish="gridEditingFinish"
/> />
<ErcChrgInfoTab <ErcChrgInfoTab
v-if="item.id == 'ercChrgInfoTab'" v-if="item.id == 'ercChrgInfoTab'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" :innerTabGridInfo="{ tab, idx }"
/> />
</v-tab-item> </v-tab-item>
</v-tabs-items> </v-tabs-items>

View File

@ -31,7 +31,7 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="mt-3"> <v-row ref="contents" class="mt-3">
<v-col :cols="5" class="pr-2"> <v-col :cols="5" class="h100 pr-2">
<v-card class="pb-5"> <v-card class="pb-5">
<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">
물리량 리스트 물리량 리스트
@ -50,7 +50,7 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="pl-2"> <v-col :cols="7" class="h100 pl-2">
<v-card class="pb-5 px-4"> <v-card class="pb-5 px-4">
<v-card-title class="px-0">물리량 상세</v-card-title> <v-card-title class="px-0">물리량 상세</v-card-title>
<v-row no-gutters> <v-row no-gutters>
@ -114,7 +114,7 @@
<component :is="'TextArea'" :parentPrgmId="myPrgmId" ref="TextArea" :item="calcDescItem" /> <component :is="'TextArea'" :parentPrgmId="myPrgmId" ref="TextArea" :item="calcDescItem" />
</v-col> </v-col>
</v-row> </v-row>
<v-row no-gutters v-show="argContentShowFlag" align="end" > <v-row no-gutters v-show="argContentShowFlag">
<v-col :cols="12" class="py-2"> <v-col :cols="12" class="py-2">
<label for=""> <label for="">
<v-icon small <v-icon small
@ -122,13 +122,13 @@
계산Argument 계산Argument
</label> </label>
</v-col> </v-col>
<v-col :cols="6" class="py-2 pr-4"> <v-col :cols="6" class="py-2">
<InputText :parentPrgmId="myPrgmId" label="ARG갯수" valueNm="argCnt" :labelCols="12" <InputText :parentPrgmId="myPrgmId" label="ARG갯수" valueNm="argCnt" :labelCols="12"
:textCols="12" :iconShow="false" :required="requiredValueList[7]" :textCols="12" :iconShow="true" :required="requiredValueList[7]"
:disabled="disabledValueList[7]" :readonly="readOnlyValueList[7]" /> :disabled="disabledValueList[7]" :readonly="readOnlyValueList[7]" />
</v-col> </v-col>
<!-- <v-col :cols="4"> </v-col> --> <v-col :cols="4"> </v-col>
<v-col :cols="6" class="py-2" align="right"> <v-col :cols="12" class="py-2" align="right">
<a-button type="primary" @click="btnAction('add')" class="v-btn-add-text mr-1" icon="plus">추가</a-button> <a-button type="primary" @click="btnAction('add')" class="v-btn-add-text mr-1" icon="plus">추가</a-button>
<a-button type="danger" @click="btnAction('remove')" ghost danger icon="delete">삭제</a-button> <a-button type="danger" @click="btnAction('remove')" ghost danger icon="delete">삭제</a-button>
</v-col> </v-col>
@ -225,6 +225,61 @@ export default {
formatterSelectList02: [], formatterSelectList02: [],
loadGrid: false, loadGrid: false,
dataPathExample: {
"rowGrid": {
data: [
{
"pysclQtyId": "001",
"pysclQtyCd": "TEMP001",
"pysclQtyNm": "온도",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "002",
"pysclQtyCd": "PRESS001",
"pysclQtyNm": "압력",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "003",
"pysclQtyCd": "FLOW001",
"pysclQtyNm": "유량",
"pysclQtyTp": "정수"
},
{
"pysclQtyId": "004",
"pysclQtyCd": "HUMID001",
"pysclQtyNm": "습도",
"pysclQtyTp": "실수"
},
{
"pysclQtyId": "005",
"pysclQtyCd": "VOLT001",
"pysclQtyNm": "전압",
"pysclQtyTp": "실수"
}
]
,
column: [
{
header: '물리량 ID',
name: 'pysclQtyId',
width: 100,
align: 'center',
},
{ header: '물리량코드', name: 'pysclQtyCd', minWidth: 255 },
{ header: '물리량명', name: 'pysclQtyNm', width: 150 },
{
header: '물리량타입',
name: 'pysclQtyTp',
width: 80,
},
],
}
},
loadGrid2: false, loadGrid2: false,
detailList: myDetail, detailList: myDetail,
@ -899,8 +954,6 @@ export default {
height: 37, height: 37,
}, },
rowHeight: 'auto', rowHeight: 'auto',
scrollX: true,
scrollY: true,
}; };
this.setGridOption({ this.setGridOption({
@ -914,7 +967,7 @@ export default {
header: '물리량 ID', header: '물리량 ID',
name: 'pysclQtyId', name: 'pysclQtyId',
width: 100, width: 100,
align: 'left', align: 'center',
}, },
{ header: '설비그룹 ID', name: 'eqpmGrpId', hidden: true }, { header: '설비그룹 ID', name: 'eqpmGrpId', hidden: true },
{ header: 'argCnt', name: 'argCnt', hidden: true }, { header: 'argCnt', name: 'argCnt', hidden: true },
@ -980,7 +1033,7 @@ export default {
var columnList = [ var columnList = [
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ header: '물리량 ID', name: 'pysclQtyId', hidden: true }, { header: '물리량 ID', name: 'pysclQtyId', hidden: true },
{ header: '순번', name: 'argSeq', editor: 'text', align: 'right' }, { header: '순번', name: 'argSeq', editor: 'text' },
{ header: '물리량 ID', name: 'argPysclQtyId' }, { header: '물리량 ID', name: 'argPysclQtyId' },
{ {
header: '설비그룹', header: '설비그룹',

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<CommonPageTitle/> <PageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -167,7 +167,7 @@ export default {
header: '설비종류ID', header: '설비종류ID',
name: 'eqpmKindId', name: 'eqpmKindId',
width: gridWidth * 0.5, width: gridWidth * 0.5,
align: 'left', align: 'center',
}, },
{ {
header: '설비종류명', header: '설비종류명',
@ -359,7 +359,7 @@ const myDetail = [
label: '설비종류 ID', label: '설비종류 ID',
valueNm: 'eqpmKindId', valueNm: 'eqpmKindId',
cols: 6, cols: 6,
class: 'py-2 pr-4 pt-1', class: 'py-2 pr-4',
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 pt-1', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
required: true, required: true,
labelCols: 12, labelCols: 12,

View File

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

View File

@ -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 pb-1" >설비 상세</v-card-title> <v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<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">
@ -382,7 +382,7 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
width: 100, width: 100,
align: 'left', align: 'center',
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value, item => item.commCd == value,
@ -969,7 +969,7 @@ const myDetail = [
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
class: 'py-3 pr-4 pb-2', class: 'py-3 pr-4',
}, },
{ {
type: 'CheckBox', type: 'CheckBox',

View File

@ -9,7 +9,7 @@
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" <component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'" :iconShow="true" :itemList="selectValueList01" :label="'설비종류'" :iconShow="true"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12" @update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" /> :customClass="'select-large'" />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" <component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
@ -19,11 +19,10 @@
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm" <InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm"
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'" /> :searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'"/>
</v-col> </v-col>
<v-col :cols="3" class="text-right"> <v-col :cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()" class="search-button" <a-button icon="search" type="primary" @click="search()" class="search-button" size="large">조회</a-button>
size="large">조회</a-button>
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -39,13 +38,13 @@
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div class="h100 px-4" style="height:calc(100% - 70px)"> <div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" style="height: 26%"> <div ref="gridParent" style="height: 30%">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
<div class="d-flex py-4 mt-4"> <div class="d-flex py-4 mt-4" >
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList" <component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" /> @gridEditingFinish="gridEditingFinish" />
</div> </div>
</div> </div>
@ -120,6 +119,109 @@ export default {
selectValueList01: [], selectValueList01: [],
selectValue02: null, selectValue02: null,
selectValueList02: [], selectValueList02: [],
// pyscPopupValueChkList: 'pyscPopupValueChkList',
// pyscListChk: {
// pysclQtyId1 : null,
// pysclQtyId2 : null,
// pysclQtyId3 : null,
// pysclQtyId4 : null
// }
// dataPathExample: {
// "rowGrid": {
// data: [
// {
// gdIdxId: 'GD001',
// gdIdxNm: '온도 가이드',
// eqpmGrpId: 'EQ001',
// upTotMeth: 'AVG',
// careStndVal: 50,
// warnStndVal: 70,
// alrmMsg: '온도가 기준치를 초과했습니다.',
// },
// {
// gdIdxId: 'GD002',
// gdIdxNm: '습도 가이드',
// eqpmGrpId: 'EQ002',
// upTotMeth: 'MAX',
// careStndVal: 30,
// warnStndVal: 60,
// alrmMsg: '습도가 기준치를 초과했습니다.',
// },
// {
// gdIdxId: 'GD003',
// gdIdxNm: '압력 가이드',
// eqpmGrpId: 'EQ003',
// upTotMeth: 'SUM',
// careStndVal: 100,
// warnStndVal: 150,
// alrmMsg: '압력이 기준치를 초과했습니다.',
// }
// ],
// column: [
// {
// header: '가이드',
// name: 'gdIdxId',
// width: 100,
// align: 'center',
// },
// {
// header: '가이드명',
// name: 'gdIdxNm',
// width: 210,
// align: 'left',
// },
// {
// header: '설비그룹ID',
// name: 'eqpmGrpId',
// width: 100,
// align: 'center',
// // formatter({ value }) {
// // let retVal = '';
// // const newValue = _this.pageData.eqpmGrpList.filter(item => item.value == value);
// // if (newValue.length > 0) {
// // retVal = newValue[0].text;
// // }
// // return retVal;
// // },
// },
// {
// header: '상위집계방법',
// name: 'upTotMeth',
// width: 100,
// align: 'center',
// // formatter({ value }) {
// // let retVal = '';
// // const newValue = _this.pageData.upTotMethList.filter(item => item.commCd == value);
// // if (newValue.length > 0) {
// // retVal = newValue[0].commCdNm;
// // }
// // return retVal;
// // },
// },
// {
// header: '주의기준',
// name: 'careStndVal',
// width: 100,
// align: 'right',
// },
// {
// header: '경고기준',
// name: 'warnStndVal',
// width: 100,
// align: 'right',
// },
// {
// header: '알람메세지',
// name: 'alrmMsg',
// minWidth: 860,
// align: 'left',
// }
// ]
// }
// }
}; };
}, },
computed: { computed: {
@ -327,12 +429,14 @@ export default {
header: 'COM ID', header: 'COM ID',
name: 'comId', name: 'comId',
width: 100, width: 100,
aling: 'center',
hidden: true, hidden: true,
}, },
{ {
header: '가이드', header: '가이드',
name: 'gdIdxId', name: 'gdIdxId',
width: 100, width: 100,
align: 'center',
}, },
{ {
header: '가이드명', header: '가이드명',
@ -344,6 +448,7 @@ export default {
header: '설비그룹ID', header: '설비그룹ID',
name: 'eqpmGrpId', name: 'eqpmGrpId',
width: 100, width: 100,
align: 'center',
// hidden: true, // hidden: true,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -360,6 +465,7 @@ export default {
header: '상위집계방법', header: '상위집계방법',
name: 'upTotMeth', name: 'upTotMeth',
width: 100, width: 100,
align: 'center',
// hidden: true, // hidden: true,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -521,6 +627,58 @@ export default {
async getRowGridData() { async getRowGridData() {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
// const newRes = [
// {
// comId: 'COM001',
// gdIdxId: 'GD001',
// gdIdxNm: '온도 가이드',
// eqpmGrpId: 'EQ001',
// upTotMeth: 'AVG',
// sortSeq: 1,
// pysclQtyId1: 'TEMP',
// pysclQtyId2: null,
// pysclQtyId3: null,
// pysclQtyId4: null,
// ctgr1: '환경',
// ctgr2: '내부',
// careStndVal: 50,
// warnStndVal: 70,
// gdMeth: '자동',
// useFg: '1',
// alrmMsg: '온도가 기준치를 초과했습니다.',
// calcProc: 'PROC001',
// calcDesc: '평균 계산',
// calcMeth: '(A+B)/2',
// unit: 'C',
// argCnt: 2,
// rowStat: null,
// },
// {
// comId: 'COM002',
// gdIdxId: 'GD002',
// gdIdxNm: '습도 가이드',
// eqpmGrpId: 'EQ002',
// upTotMeth: 'MAX',
// sortSeq: 2,
// pysclQtyId1: 'HUMID',
// pysclQtyId2: null,
// pysclQtyId3: null,
// pysclQtyId4: null,
// ctgr1: '환경',
// ctgr2: '외부',
// careStndVal: 30,
// warnStndVal: 60,
// gdMeth: '수동',
// useFg: '0',
// alrmMsg: '습도가 기준치를 초과했습니다.',
// calcProc: 'PROC002',
// calcDesc: '최대값 계산',
// calcMeth: 'MAX(A,B)',
// unit: '%',
// argCnt: 2,
// rowStat: null,
// },
// ];
res = await this.postApiReturn({ res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxDataList', apiKey: 'selectEqpmGdIdxDataList',
@ -1119,7 +1277,14 @@ const myDetail = [
required: true, required: true,
iconShow: true iconShow: true
}, },
// {
// // 공백 처리
// type: 'Label',
// cols: 3,
// class: 'py-2',
// // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
// disabled: false,
// },
// { // {
// type: 'CheckBox', // type: 'CheckBox',
// label: '설비기준적용', // label: '설비기준적용',
@ -1185,8 +1350,7 @@ const myDetail = [
// required: true, // required: true,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
iconShow: true, iconShow: true
inputType: 'number',
}, },
// { // {
// // 공백 처리 // // 공백 처리
@ -1234,15 +1398,7 @@ const myDetail = [
{ {
// 공백 처리 // 공백 처리
type: 'Label', type: 'Label',
cols: 3, cols: 9,
class: 'py-2',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-3', class: 'py-3',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.", // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false, disabled: false,
@ -1297,7 +1453,7 @@ const myDetail = [
class: 'pa-3', class: 'pa-3',
// required: true, // required: true,
openMode: 'ALL', openMode: 'ALL',
disabled: true, disabled: false,
eqpmKindId: '', eqpmKindId: '',
eqpmGrpId: '', eqpmGrpId: '',
closeBtnFg: true, closeBtnFg: true,
@ -1441,3 +1597,9 @@ const myDetail = [
}, },
]; ];
</script> </script>
<style lang="scss" scoped>
.searchFilter {
border-radius: 6px;
box-shadow: none;
}
</style>

View File

@ -33,11 +33,11 @@
<v-row ref="contents" class="mt-3"> <v-row ref="contents" class="mt-3">
<v-col :cols="12" style="height: 100%"> <v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> --> <!-- <v-card class="py-5"> -->
<v-card style="height: auto;"> <v-card style="height: 60%">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">가이드 정보</v-card-title> <v-card-title class="pa-0 custom-title-4">가이드 정보</v-card-title>
</div> </div>
<div class="d-flex align-end justify-space-between px-4 py-2 pb-4"> <div class="d-flex align-end justify-space-between px-4 py-2">
<v-row :cols="12" class="align-end"> <v-row :cols="12" class="align-end">
<!-- 가이드 설비그룹 라인 시작 --> <!-- 가이드 설비그룹 라인 시작 -->
<v-col :cols="3" class="pa-2"> <v-col :cols="3" class="pa-2">
@ -116,9 +116,9 @@
</v-card> </v-card>
<v-row class="mt-3" > <v-row style="height: 40%" class="mt-3">
<v-col :cols="6" class="pr-2"> <v-col :cols="6" style="height: 100%" class="pr-2">
<v-card > <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 pa-4">
<v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" /> <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
@ -132,8 +132,8 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="6" class="pl-2"> <v-col :cols="6" style="height: 100%" class="pl-2">
<v-card > <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 pa-4">
<v-card-title class="pa-0 custom-title-4">설비가이드 기준 정보</v-card-title> <v-card-title class="pa-0 custom-title-4">설비가이드 기준 정보</v-card-title>
</div> </div>

View File

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

View File

@ -405,8 +405,6 @@ export default {
value: myColumns, value: myColumns,
}); });
this.loadGrid = true;
this.search(); this.search();
}, },
async getRowGridData() { async getRowGridData() {
@ -435,8 +433,9 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,
}); });
console.log('-------DEBUG-----newRes: ', newRes);
this.$nextTick(() => { this.$nextTick(() => {
this.loadGrid = true;
if (newRes.length > 0) { if (newRes.length > 0) {
try { try {
this.$refs[this.gridName].focus({ this.$refs[this.gridName].focus({

View File

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

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle/> <PageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -58,7 +58,7 @@
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" /> @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" />
</div> </div>
</v-card-actions> </v-card-actions>
<div class="d-flex align-center justify-space-between"> <!-- <div class="d-flex align-center justify-space-between">
<pagination <pagination
id="pagination" id="pagination"
:total-count="totalCount" :total-count="totalCount"
@ -66,10 +66,10 @@
:limit="limit" :limit="limit"
@loadData="changeGrid" @loadData="changeGrid"
/> />
</div> </div> -->
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class=""> <v-col :cols="7" class="h100">
<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)">
@ -107,6 +107,7 @@ import TagAddInfoTab from '@/components/pages/ems/TagInfo/TagAddInfoTab';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import pagination from '~/components/Pagination'; import pagination from '~/components/Pagination';
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
// const myPrgmId = "PRG0051"; // const myPrgmId = "PRG0051";
@ -139,12 +140,13 @@ export default {
TagAddInfoTab, TagAddInfoTab,
Grid, Grid,
pagination, pagination,
PageTitle
}, },
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: false, loadGrid: true,
tab: null, tab: null,
items: [ items: [
{ name: 'TAG 정보', id: 'tagBaseInfoTab', disabledFlag: false }, { name: 'TAG 정보', id: 'tagBaseInfoTab', disabledFlag: false },
@ -273,12 +275,16 @@ export default {
this.gridInit(); this.gridInit();
}, },
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 16; const gridHeight = this.$refs.gridParent.offsetHeight - 180;
const myOptions = { const myOptions = {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
pageOptions: {
useClient: true,
perPage: 10,
},
scrollX: true, scrollX: true,
header: { header: {
height: 38, height: 38,
@ -521,16 +527,16 @@ export default {
//rowKey: 0, //rowKey: 0,
rowKey: rowKey:
this.pageData.rowGridSelectKey == '' || this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null this.pageData.rowGridSelectKey == null
? 0 ? 0
: this.pageData.rowGridSelectKey == : this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1 this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey ? this.pageData.rowGridSelectKey
: 0, : 0,
columnName: 'tagId', columnName: 'tagId',
setScroll: true, setScroll: true,
}); });
} catch (error) {} } catch (error) { }
// this.$refs[this.gridName].focus({ // this.$refs[this.gridName].focus({
// rowKey: 0, // rowKey: 0,
// columnName: "tagId", // columnName: "tagId",
@ -767,7 +773,7 @@ export default {
gridEditingFinish(data) { gridEditingFinish(data) {
this.$refs[this.gridName].editingFinish(data); this.$refs[this.gridName].editingFinish(data);
}, },
changeGrid: async function(pageNum, limit) { changeGrid: async function (pageNum, limit) {
this.page = pageNum; this.page = pageNum;
this.limit = limit; this.limit = limit;
@ -811,9 +817,9 @@ function isValidAlrmVal(obj) {
if (Number(obj[keyList[i]]) >= Number(obj[keyList[j]])) { if (Number(obj[keyList[i]]) >= Number(obj[keyList[j]])) {
alert( alert(
nameList[j] + nameList[j] +
'값은 ' + '값은 ' +
nameList[i] + nameList[i] +
'값보다 큰 숫자를 입력해야 합니다.', '값보다 큰 숫자를 입력해야 합니다.',
); );
return false; return false;
} }

View File

@ -27,7 +27,7 @@
</v-col> </v-col>
<v-col class="text-right d-flex align-end align-self-end justify-end"> <v-col class="text-right d-flex align-end align-self-end justify-end">
<a-button @click="jamoviClickEvent('view')" type="primary" :ripple="false" class="mr-1" <a-button @click="jamoviClickEvent('view')" type="primary" :ripple="false" class="mr-1"
depressed size="large">JAMOVI</a-button> depressed size="large">Jamovi</a-button>
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -283,7 +283,7 @@ export default {
{ {
header: '모델링 DataSet ID', header: '모델링 DataSet ID',
name: 'dataSetId', name: 'dataSetId',
align: 'left', align: 'center',
width: 180, width: 180,
}, },
{ {

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<common-page-title /> <v-row ref="searchFilter">
<v-row ref="searchFilter" class="mt-2">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
@ -49,7 +48,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="'datepicker-large'" /> :textCols="12" :customClass="'input-large'" />
</v-col> </v-col>
<v-col :cols="3" class="text-right"> <v-col :cols="3" class="text-right">
<!-- 조회버튼 --> <!-- 조회버튼 -->
@ -556,7 +555,7 @@ export default {
header: { header: {
height: 37, height: 37,
}, },
rowHeight: 37, rowHeight: 'auto',
// pageOptions: { // pageOptions: {

View File

@ -1,6 +1,5 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -26,7 +25,7 @@
<component <component
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:customClass="'datepicker-large'" :customClass="'select-large'"
:label="'대상일'" :label="'대상일'"
:labelCols="3" :labelCols="3"
/> />
@ -100,6 +99,7 @@ export default {
async asyncData(context) { async asyncData(context) {
const myState = context.store.state; const myState = context.store.state;
myPrgmId = context.route.query.prgmId; myPrgmId = context.route.query.prgmId;
console.log("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,7 +319,8 @@ export default {
}, },
}; };
data.map((item) => { console.log("data : ", data);
data.map((item) => {
xAxisData.push(item.fabNm); xAxisData.push(item.fabNm);
}); });
@ -373,6 +374,8 @@ 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="3"> <v-col :cols="4">
<!-- 차트목록 --> <!-- 차트목록 -->
<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="3"> <v-col :cols="4">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" />
</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,6 +245,7 @@ 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

@ -21,21 +21,22 @@
:itemList="selectValueList03" :label="'FAB'" :multiple="fabMultiple" :itemList="selectValueList03" :label="'FAB'" :multiple="fabMultiple"
@update:propsValue="selectValue03 = $event" :labelCols="12" :textCols="12" customClass="select-large" /> @update:propsValue="selectValue03 = $event" :labelCols="12" :textCols="12" customClass="select-large" />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 효율지표 --> <!-- 효율지표 -->
<component ref="effcIdxSelect" :is="'SelectBoxMulti'" :propsValue="selectValue04" <component ref="effcIdxSelect" :is="'SelectBoxMulti'" :propsValue="selectValue04"
:itemList="selectValueList04" :label="'효율지표'" :multiple="effcIdxMultiple" :itemList="selectValueList04" :label="'효율지표'" :multiple="effcIdxMultiple"
@update:propsValue="selectValue04 = $event" :labelCols="12" :textCols="12" customClass="select-large" /> @update:propsValue="selectValue04 = $event" :labelCols="12" :textCols="12" customClass="select-large" />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" />
</v-col> </v-col>
<v-col :cols="6.5" 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">
<!-- 조회버튼 --> <!-- 조회버튼 -->
<a-button icon="file-excel" class="d-inline-flex-1 mr-1" size="large" @click="createExcel()">엑셀</a-button> <a-button type="primary" class="d-inline-flex-1 mr-1" size="large" @click="createExcel()">엑셀</a-button>
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -61,23 +62,15 @@
<v-col :cols="3"> <v-col :cols="3">
<v-card-title class="pa-0">설비별 효율지표 Trend</v-card-title> <v-card-title class="pa-0">설비별 효율지표 Trend</v-card-title>
</v-col> </v-col>
<!-- <v-col :cols="5"></v-col> -->
<v-col :cols="4" class="d-flex justify-space-end" > <v-col :cols="4" class="d-flex justify-space-end" >
<component <component class="text-right mr-2" ref="EqpmSelectPop" :is="'EqpmSelectPop'" :label="''" :labelCols="1"
class="text-right mr-2" :textCols="12" :valueNm="'eqpmId'" :parentPrgmId="myPrgmId" :eqpmGrpDisabled="true"
ref="EqpmSelectPop" :fabDisabled="true" :isMulti="true" />
label=""
placeholder="설비..."
is="EqpmSelectPop"
valueNm="eqpmId"
:textCols="12"
:parentPrgmId="myPrgmId"
:eqpmGrpDisabled="true"
:fabDisabled="true"
:iconShow="false"
:isMulti="true"
/>
<a-button @click="getEqpmData()" type="primary" >조회</a-button> <a-button @click="getEqpmData()" type="primary" >조회</a-button>
</v-col> </v-col>
<!-- <v-col :cols="1">
</v-col> -->
</v-row> </v-row>
</div> </div>
<div ref="chartParent" style="height: 100%"> <div ref="chartParent" style="height: 100%">
@ -106,8 +99,6 @@ 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;
@ -273,6 +264,9 @@ 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;
}, },
@ -293,7 +287,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:냉동기전력당',
@ -323,7 +317,6 @@ export default {
legend: { legend: {
icon: 'circle', icon: 'circle',
top: 'top', top: 'top',
size: '8'
}, },
grid: { grid: {
top: '10%', top: '10%',
@ -774,14 +767,22 @@ export default {
]; ];
} }
const chartOption = getLineChartOption({ var chartOption = {
xAxisData: xAxisData, legend: {
seriesData: seriesData, top: 'top',
},
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 });
@ -866,13 +867,22 @@ export default {
]; ];
} }
const chartOption = getLineChartOption({ var chartOption = {
xAxisData: xAxisData, legend: {
seriesData: seriesData, top: 'top',
},
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});

File diff suppressed because it is too large Load Diff

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="'조회연도'" customClass="datepicker-large"/> <DatePicker :parentPrgmId="myPrgmId" :label="'조회연도'" />
</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="true" customClass="select-large" /> :label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" 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="true" customClass="select-large"/> :label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="false" 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="true" customClass="select-large" /> :label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" 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 py-4 px-4"> <div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" /> <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div> </div>
@ -44,6 +44,8 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
</template> </template>
<script> <script>
@ -104,6 +106,9 @@ export default {
fromDt: new Date().getFullYear(), fromDt: new Date().getFullYear(),
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
dataPathMock: {
// "grid01": {}
},
// gridName: 'rowGrid', // gridName: 'rowGrid',
}; };
}, },
@ -161,8 +166,12 @@ 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;
}, },
@ -175,6 +184,122 @@ 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();
@ -291,7 +416,7 @@ export default {
}, },
}; };
class CustomButton { class CustumButton {
constructor(props) { constructor(props) {
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -304,14 +429,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 = '편집하다'; el2.innerText = 'Edit';
elDiv.appendChild(el2); elDiv.appendChild(el2);
this.el = elDiv; this.el = elDiv;
if (!this.disabled) { if (!this.disabled) {
// click 이벤트 // click 이벤트
this.el.addEventListener('click', function(event) { el2.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 => {
@ -352,7 +477,7 @@ export default {
header: 'NO', header: 'NO',
name: 'rowNum', name: 'rowNum',
width: 40, width: 40,
align: 'right', align: 'center',
// hidden: true, // hidden: true,
}, },
{ {
@ -389,7 +514,7 @@ export default {
// `; // `;
// } // }
renderer: { renderer: {
type: CustomButton, type: CustumButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },
@ -402,7 +527,7 @@ export default {
align: 'center', align: 'center',
hidden: true, hidden: true,
renderer: { renderer: {
type: CustomButton, type: CustumButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },
@ -475,7 +600,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,
}); });
@ -674,8 +799,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);
} }
} }
@ -817,18 +942,110 @@ 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( background-color: map-deep-get($config,
$config,
#{$theme}, #{$theme},
'tui-grid-cell-backgroundColor' 'tui-grid-cell-backgroundColor'
) !important; ) !important;
@ -838,10 +1055,10 @@ const defaultData = {
} }
} }
} }
&-cell { &-cell {
&.row-selected.colrowspan { &.row-selected.colrowspan {
background-color: map-deep-get( background-color: map-deep-get($config,
$config,
#{$theme}, #{$theme},
'tui-grid-cell-backgroundColor' 'tui-grid-cell-backgroundColor'
) !important; ) !important;

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<CommonPageTitle /> <PageTitle text="냉동기" />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -24,7 +24,6 @@
: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>
@ -181,7 +180,7 @@ export default {
contentData: {}, contentData: {},
loadChart: false, loadChart: false,
testFlag: false, testFlag: true,
}; };
}, },
computed: { computed: {
@ -271,14 +270,15 @@ export default {
} }
}, },
async getEnrgUseTotSummData() { async getEnrgUseTotSummData() {
var res = await this.postApiReturn({ // var res = await this.postApiReturn({
apiKey: "selectEnrgUseTotSumm", // apiKey: "selectEnrgUseTotSumm",
resKey: "data", // resKey: "data",
sendParam: { // sendParam: {
fromDt: this.pageData.fromDt, // fromDt: this.pageData.fromDt,
eqpmKind: this.selectValue01, // eqpmKind: this.selectValue01,
}, // },
}); // });
let res = [];
if (this.testFlag == true) { if (this.testFlag == true) {
res = [ res = [
@ -430,6 +430,9 @@ 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

@ -4,7 +4,7 @@
<v-avatar size="12" :style="{ backgroundColor: 'currentColor' }"></v-avatar> <v-avatar size="12" :style="{ backgroundColor: 'currentColor' }"></v-avatar>
에너지 사용량 실적 에너지 사용량 실적
</h1> --> </h1> -->
<CommonPageTitle /> <PageTitle text="에너지 사용량 실적" />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -71,7 +71,6 @@
: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>
@ -104,6 +103,7 @@
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@dblClick="gridDoubleClickEvent"
/> />
<!-- <!--
<component <component
@ -142,6 +142,7 @@ import SelectBox from "@/components/common/select/SelectBox";
import SelectCmCycle from "@/components/common/select/SelectCmCycle"; import SelectCmCycle from "@/components/common/select/SelectCmCycle";
import DatePicker from "@/components/common/Datepicker"; import DatePicker from "@/components/common/Datepicker";
import Grid from "~/components/common/Grid"; import Grid from "~/components/common/Grid";
import PageTitle from "@/components/common/PageTitle";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -168,6 +169,7 @@ export default {
SelectCmCycle, SelectCmCycle,
DatePicker, DatePicker,
Grid, Grid,
PageTitle,
}, },
data() { data() {
return { return {
@ -201,7 +203,6 @@ export default {
computed: { computed: {
...mapState({ ...mapState({
pageData: (state) => state.pageData[myPrgmId], pageData: (state) => state.pageData[myPrgmId],
isDarkMode: "isDarkMode",
}), }),
fromDt() { fromDt() {
return this.pageData.fromDt; return this.pageData.fromDt;
@ -235,16 +236,6 @@ export default {
await this.search(); await this.search();
} }
}, },
isDarkMode(newVal) {
// Switch mode for 10 tooltips
for (let i = 0; i < 10; i++) {
const tooltipEl = document.getElementById(`tooltipElement_${i}`);
if (tooltipEl) {
tooltipEl.classList.remove("light-mode", "dark-mode");
tooltipEl.classList.add(newVal ? "dark-mode" : "light-mode");
}
}
},
}, },
async beforeCreate() { async beforeCreate() {
myPrgmId = this.$route.query.prgmId; myPrgmId = this.$route.query.prgmId;
@ -264,8 +255,9 @@ export default {
}, },
methods: { methods: {
async init() { async init() {
await this.getSelectValueList(); // await this.getSelectValueList();
await this.setQueryParams();
// await this.setQueryParams();
this.gridInit(); this.gridInit();
await this.getGridData(); await this.getGridData();
@ -365,79 +357,13 @@ export default {
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const _this = this; const _this = this;
// Define custom button
class CustomButton {
constructor(props,pageData) {
const { grid, rowKey, columnInfo } = props;
const gridData = grid.store.data.rawData;
const value = gridData[rowKey][columnInfo.name];
const onClickCallback = columnInfo.renderer.options.onClick;
this.disabled = columnInfo.renderer.options.disabled || false;
const elDiv = document.createElement('div');
elDiv.innerHTML = `<span>${value}</span>`;
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text');
el2.innerText = '보기';
elDiv.appendChild(el2);
this.el = elDiv;
if (!this.disabled && typeof onClickCallback === 'function') {
// click 이벤트
this.el.addEventListener('click', function(event) {
onClickCallback(rowKey);
});
}
}
getElement() {
return this.el;
}
getValue() {
// return this.el.value;
}
mounted() {
// this.el.focus();
}
}
var columnList = [ var columnList = [
{ header: "NO", name: "no", align: "right", width: 80 }, { header: "NO", name: "no", align: "right", width: 80 },
{ header: "fabId", name: "fabId", hidden: true }, { header: "fabId", name: "fabId", hidden: true },
{ header: "FAB", name: "fabNm", align: "left" }, { header: "FAB", name: "fabNm", align: "left" },
{ header: "eqpmGrpId", name: "eqpmGrpId", hidden: true }, { header: "eqpmGrpId", name: "eqpmGrpId", hidden: true },
{ header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200, { header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200 },
// Render custom button to switch page instead of double click on row
renderer: {
type: CustomButton,
options: {
value: '보기',
onClick: (rowKey) => {
const gridInstance = this.$refs[this.gridName].gridInstance;
const eventRowData = gridInstance.invoke("getRow", rowKey);
const data = {
cmCycle: this.pageData.cmCycle,
fromDt: this.pageData.fromDt,
fabId: this.selectValue01,
eqpmKindId: this.selectValue02,
eqpmGrpId: this.selectValue03,
eqpmId: eventRowData.eqpmId,
};
const key = "tick_" + Math.random();
this.$router.push({
name: "ems-effc-EnrgUseEqpmDetlMntrPage",
query: {
prgmId: "PRG0082",
},
params: {
...data,
key: key,
},
});
}
}
}
},
{ header: "eqpmId", name: "eqpmId", hidden: true }, { header: "eqpmId", name: "eqpmId", hidden: true },
{ header: "설비명", name: "eqpmNm", align: "left", width: 200 }, { header: "설비명", name: "eqpmNm", align: "left", width: 200 },
{ {
@ -546,10 +472,6 @@ export default {
}, },
], ],
}, },
pageOptions: {
useClient: true,
perPage: 3,
}
}; };
this.setGridOption({ this.setGridOption({
@ -566,41 +488,131 @@ export default {
this.loadGrid = false; this.loadGrid = false;
this.enrgUseMainIdxDesc = []; this.enrgUseMainIdxDesc = [];
var apiKey = null; var apiKey = null;
var params = { // var params = {
fabId: this.selectValue01, // fabId: this.selectValue01,
eqpmKindId: this.selectValue02, // eqpmKindId: this.selectValue02,
eqpmGrpId: this.selectValue03, // eqpmGrpId: this.selectValue03,
fromDt: this.pageData.fromDt, // fromDt: this.pageData.fromDt,
}; // };
if (this.pageData.cmCycle == "CYC_DAY") { // if (this.pageData.cmCycle == "CYC_DAY") {
params["fromDtMm"] = String(this.pageData.fromDt).substring(0, 6); // params["fromDtMm"] = String(this.pageData.fromDt).substring(0, 6);
apiKey = "selectDailyEnrgUseMainIdx"; // apiKey = "selectDailyEnrgUseMainIdx";
} else if (this.pageData.cmCycle == "CYC_MONTH") { // } else if (this.pageData.cmCycle == "CYC_MONTH") {
apiKey = "selectMonthlyEnrgUseMainIdx"; // apiKey = "selectMonthlyEnrgUseMainIdx";
} // }
var res = await this.postApiReturn({ // var res = await this.postApiReturn({
apiKey: apiKey, // apiKey: apiKey,
resKey: "eqpmIndMntrData", // resKey: "eqpmIndMntrData",
sendParam: params, // sendParam: params,
}); // });
this.enrgUseMainIdxDesc = await this.postApiReturn({ // this.enrgUseMainIdxDesc = await this.postApiReturn({
apiKey: "selectEnrgUseMainIdxDesc", // apiKey: "selectEnrgUseMainIdxDesc",
resKey: "eqpmIndMntrData", // resKey: "eqpmIndMntrData",
sendParam: { // sendParam: {
eqpmGrpId: this.selectValue03, // eqpmGrpId: this.selectValue03,
// },
// });
var newRes = [
{
no: 1,
fabId: "FAB001",
fabNm: "서울FAB",
eqpmGrpId: "GRP01",
eqpmGrpNm: "조립라인",
eqpmId: "EQ001",
eqpmNm: "설비A",
planVal: 1000,
usedVal: 950,
effcRt: "95%",
gd01: 88,
gd02: 90,
gd03: 85,
gd04: 87,
gd05: 89,
gd06: 86,
gd07: 90,
gd08: 88,
gd09: 87,
gd10: 89,
}, },
}); {
no: 2,
fabId: "FAB002",
fabNm: "부산FAB",
eqpmGrpId: "GRP02",
eqpmGrpNm: "검사라인",
eqpmId: "EQ002",
eqpmNm: "설비B",
planVal: 1200,
usedVal: 1100,
effcRt: "91.7%",
gd01: 85,
gd02: 84,
gd03: 86,
gd04: 83,
gd05: 82,
gd06: 84,
gd07: 85,
gd08: 86,
gd09: 87,
gd10: 88,
},
{
no: 3,
fabId: "FAB003",
fabNm: "대전FAB",
eqpmGrpId: "GRP03",
eqpmGrpNm: "포장라인",
eqpmId: "EQ003",
eqpmNm: "설비C",
planVal: 900,
usedVal: 870,
effcRt: "96.7%",
gd01: 90,
gd02: 91,
gd03: 89,
gd04: 88,
gd05: 90,
gd06: 91,
gd07: 92,
gd08: 90,
gd09: 89,
gd10: 91,
},
{
no: 4,
fabId: "FAB004",
fabNm: "광주FAB",
eqpmGrpId: "GRP04",
eqpmGrpNm: "테스트라인",
eqpmId: "EQ004",
eqpmNm: "설비D",
planVal: 1100,
usedVal: 1050,
effcRt: "95.5%",
gd01: 87,
gd02: 88,
gd03: 86,
gd04: 85,
gd05: 86,
gd06: 87,
gd07: 88,
gd08: 89,
gd09: 90,
gd10: 91,
},
];
var newRes = []; // for (var i = 0; i < res.length; i++) {
for (var i = 0; i < res.length; i++) { // newRes.push({
newRes.push({ // ...res[i],
...res[i], // no: i + 1,
no: i + 1, // });
}); // }
}
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
@ -740,9 +752,141 @@ const defaultData = {
}, },
fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일 fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일
grid01: { grid01: {
data: [], data: [
column: [], {
option: {}, no: 1,
fabId: "FAB001",
fabNm: "서울FAB",
eqpmGrpId: "GRP01",
eqpmGrpNm: "조립라인",
eqpmId: "EQ001",
eqpmNm: "설비A",
planVal: 1000,
usedVal: 950,
effcRt: "95%",
gd01: 88,
gd02: 90,
gd03: 85,
gd04: 87,
gd05: 89,
gd06: 86,
gd07: 90,
gd08: 88,
gd09: 87,
gd10: 89,
},
{
no: 2,
fabId: "FAB002",
fabNm: "부산FAB",
eqpmGrpId: "GRP02",
eqpmGrpNm: "검사라인",
eqpmId: "EQ002",
eqpmNm: "설비B",
planVal: 1200,
usedVal: 1100,
effcRt: "91.7%",
gd01: 85,
gd02: 84,
gd03: 86,
gd04: 83,
gd05: 82,
gd06: 84,
gd07: 85,
gd08: 86,
gd09: 87,
gd10: 88,
},
{
no: 3,
fabId: "FAB003",
fabNm: "대전FAB",
eqpmGrpId: "GRP03",
eqpmGrpNm: "포장라인",
eqpmId: "EQ003",
eqpmNm: "설비C",
planVal: 900,
usedVal: 870,
effcRt: "96.7%",
gd01: 90,
gd02: 91,
gd03: 89,
gd04: 88,
gd05: 90,
gd06: 91,
gd07: 92,
gd08: 90,
gd09: 89,
gd10: 91,
},
{
no: 4,
fabId: "FAB004",
fabNm: "광주FAB",
eqpmGrpId: "GRP04",
eqpmGrpNm: "테스트라인",
eqpmId: "EQ004",
eqpmNm: "설비D",
planVal: 1100,
usedVal: 1050,
effcRt: "95.5%",
gd01: 87,
gd02: 88,
gd03: 86,
gd04: 85,
gd05: 86,
gd06: 87,
gd07: 88,
gd08: 89,
gd09: 90,
gd10: 91,
},
],
column: [
{ header: "NO", name: "no", align: "center" },
{ header: "fabId", name: "fabId", hidden: true },
{ header: "FAB", name: "fabNm", align: "left" },
{ header: "eqpmGrpId", name: "eqpmGrpId", hidden: true },
{ header: "설비그룹", name: "eqpmGrpNm", align: "left" },
{ header: "eqpmId", name: "eqpmId", hidden: true },
{ header: "설비명", name: "eqpmNm", align: "left" },
{ header: "계획량", name: "planVal", align: "right" },
{ header: "사용량", name: "usedVal", align: "right" },
{ header: "KPI", name: "effcRt", align: "right" },
{ header: "지표1", name: "gd01", align: "right" },
{ header: "지표2", name: "gd02", align: "right" },
{ header: "지표3", name: "gd03", align: "right" },
{ header: "지표4", name: "gd04", align: "right" },
{ header: "지표5", name: "gd05", align: "right" },
{ header: "지표6", name: "gd06", align: "right" },
{ header: "지표7", name: "gd07", align: "right" },
{ header: "지표8", name: "gd08", align: "right" },
{ header: "지표9", name: "gd09", align: "right" },
{ header: "지표10", name: "gd10", align: "right" },
],
option: {
header: {
height: 65,
complexColumns: [
{
header: "주요지표",
name: "complexColumn01",
childNames: [
"gd01",
"gd02",
"gd03",
"gd04",
"gd05",
"gd06",
"gd07",
"gd08",
"gd09",
"gd10",
],
},
],
},
},
}, },
}; };
@ -771,83 +915,53 @@ function numberFormatter({ value }) {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep { @for $i from 0 through 9 {
@for $i from 0 through 9 { #gridParent > * {
#gridParent > * { // .tui-grid-content-area{
// .tui-grid-content-area{ background-color: red;
background-color: red; color: red;
color: red; overflow: visible;
overflow: visible; position: relative;
position: relative; }
} #tooltipTargetElement_#{$i} {
#tooltipTargetElement_#{$i} { overflow: visible;
overflow: visible; position: relative; // 테스트3번쨰
position: relative; // 테스트3번쨰 white-space: nowrap; // 테스트3번쨰
white-space: nowrap; // 테스트3번쨰 }
} #tooltipElement_#{$i} {
#tooltipElement_#{$i} { display: none;
display: none; overflow: visible;
overflow: visible; position: relative;
position: relative; }
} #tooltipTargetElement_#{$i}:hover #tooltipElement_#{$i} {
#tooltipTargetElement_#{$i}:hover #tooltipElement_#{$i} { display: block;
display: block; position: absolute;
position: absolute; min-width: 100%;
min-width: 100%; bottom: 30px;
bottom: 40px; z-index: 1000000000;
z-index: 1000000000; align: "center";
align: "center"; color: #f2f2f2;
color: #f2f2f2; background-color: #7f7f7f;
background-color: #000000d9; // width : 77px;
// width : 77px; width: 200%;
width: 200%; left: -50%;
left: -50%; border-radius: 3px;
border-radius: 4px; word-break: keep-all;
padding: 6px 0px; white-space: pre-wrap;
word-break: keep-all; }
white-space: pre-wrap; .tui-grid-rside-area {
// Light mode display: none;
&.light-mode { overflow: visible;
background-color: #000000d9; overflow-x: visible;
} overflow-y: visible;
// Dark mode }
&.dark-mode { .tui-grid-header-area {
background-color: #424242; border-style: solid;
} border-width: 0 0 1px;
position: relative;
&::after { overflow: visible;
content: ""; overflow-x: visible;
position: absolute; overflow-y: visible;
top: 100%;
left: 50%;
margin-left: -6px;
border-width: 6px;
border-style: solid;
}
&.light-mode::after {
border-color: #000000d9 transparent transparent transparent;
}
&.dark-mode::after {
border-color: #424242 transparent transparent transparent;
}
}
.tui-grid-rside-area {
display: none;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
}
.tui-grid-header-area {
border-style: solid;
border-width: 0 0 1px;
position: relative;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
}
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@ -115,7 +115,7 @@ export class CustomCalcNumberEditor {
} }
} }
export class CustomCheckbox { export class CustumChecbox {
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 CustomCheckbox {
} }
} }
export class CustomButton { export class CustumButton {
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,9 +253,8 @@ export class NewCustomRenderer {
} else { } else {
el.type = 'text'; el.type = 'text';
$(el).addClass('tui-grid-cell-content w100'); $(el).addClass('tui-grid-cell-content');
$(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){
@ -315,8 +314,6 @@ 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'
@ -367,19 +364,15 @@ 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.divEl; return this.el;
} }
getValue() { getValue() {
@ -396,9 +389,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();
} }
} }

View File

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