Compare commits

...

58 Commits

Author SHA1 Message Date
dev
44077048e6 Merge pull request 'dev-trungvq7-0729' (#26) from dev-trungvq7-0729 into dev
Reviewed-on: #26
2025-07-31 14:43:43 +09:00
dev
e32f03c9ae Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-07-31 11:33:52 +09:00
dev
58bb7f915c Update screen 30, 13, 22 2025-07-31 11:31:53 +09:00
dev
a85f9f98f6 Merge pull request 'fix style grid' (#25) from dev-dungtv44-0730 into dev
Reviewed-on: #25
2025-07-31 10:49:24 +09:00
dev
791b291c30 Merge pull request 'dev-luannv24-s32s17' (#24) from dev-luannv24-s32s17 into dev
Reviewed-on: #24
2025-07-30 19:18:37 +09:00
e6e1703942 update date pickker 2025-07-30 19:16:42 +09:00
719e7cee69 fix style grid 2025-07-30 17:09:09 +07:00
9b89a5625b update code fix bug and revert screen 2 2025-07-30 18:34:46 +09:00
e600089f7e fix bug 2025-07-30 18:15:08 +09:00
adbf220770 merge file 2025-07-30 18:14:21 +09:00
dev
51b59bf4c9 Merge pull request 'dev-dungtv44-0730' (#23) from dev-dungtv44-0730 into dev
Reviewed-on: #23
2025-07-30 17:41:07 +09:00
b2e50837fd update code 2025-07-30 16:21:52 +09:00
88b59f5f33 update code merge 2025-07-30 16:19:54 +09:00
a2e7e8d74e pull dev 2025-07-30 14:07:08 +07:00
dev
d37f23512a Merge pull request 'Update s14 s29 + Fix bugs s1 + Update datepicker height' (#22) from dev-nghiantt-s1s29 into dev
Reviewed-on: #22
2025-07-30 16:05:38 +09:00
1a23077421 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv44-0730 2025-07-30 14:04:11 +07:00
9603353ab3 update screen 33, 44, 20, fix bug Grid 2025-07-30 14:03:41 +07:00
6077dddb74 Remove mockdata screen 5 2025-07-30 15:35:41 +09:00
2338bbf2ec Remove log + fix click chart top 10 2025-07-30 15:01:44 +09:00
c2e2c10a8a Update s14 s29 + Fix bugs s1 + Update datepicker height 2025-07-30 12:35:12 +09:00
dev
d790249743 Merge pull request 'fix ui EvtObjPop' (#21) from dev-manhph1-fixbug-18-19-21-28 into dev
Reviewed-on: #21
2025-07-30 11:43:21 +09:00
205821fc11 fix ui EvtObjPop 2025-07-30 11:39:45 +09:00
dev
fade079b06 Merge pull request 'dev-manhph1-fixbug-18-19-21-28' (#18) from dev-manhph1-fixbug-18-19-21-28 into dev
Reviewed-on: #18
2025-07-30 11:24:55 +09:00
dev
98c26a156e Merge pull request 'update screen 34, fix bug grid - select item' (#20) from dev-dungtv44-0730 into dev
Reviewed-on: #20
2025-07-30 11:22:38 +09:00
b4f8e41c7e update screen 34, fix bug grid - select item 2025-07-30 09:15:11 +07:00
dev
e9bdd80f14 Merge pull request 'update screen 34, 20' (#19) from dev-dungtv44-0730 into dev
Reviewed-on: #19
2025-07-30 10:35:21 +09:00
eeadcd254d remove console log 2025-07-30 08:32:27 +07:00
b56bd12bb7 update screen 34, 20 2025-07-30 08:23:13 +07:00
bea1e0889b dev-manhph1-add-pagination-28 2025-07-29 18:30:19 +09:00
dev
0f66d84b48 Merge pull request 'hotfix grid' (#17) from dev-dungtv-fix-grid into dev
Reviewed-on: #17
2025-07-29 17:45:00 +09:00
34d03b2546 dev-manhph1-fixbug-18-19-21-28 2025-07-29 17:18:41 +09:00
8f83e1d60c hotfix grid 2025-07-29 14:58:37 +07:00
dev
1faf49056d Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-07-29 15:59:34 +09:00
dev
e9ab3faa51 update 2025-07-29 15:59:32 +09:00
dev
54220aa4eb Merge pull request 'update screen 12, 20' (#15) from dev-dungtv-0729 into dev
Reviewed-on: #15
2025-07-29 15:39:16 +09:00
315aafc528 update screen 12, 20 2025-07-29 13:20:29 +07:00
8963a92475 update screen15-screen31 2025-07-29 12:06:11 +09:00
d66a03626b updatenew-code-new 2025-07-29 12:04:09 +09:00
dev
665a178f82 Merge pull request 'update screen 2, 8, 9, 10, 27, 33, 34' (#12) from dev-dungtv-0728 into dev
Reviewed-on: #12
2025-07-29 11:52:11 +09:00
7e2383efda update-subtitle-screen15 2025-07-29 11:39:05 +09:00
13cedc7337 resolve conflict 2025-07-29 09:36:40 +07:00
dev
e128375aeb Merge pull request 'Update Screen 16, 22' (#13) from dev-trungvq7-2207 into dev
Reviewed-on: #13
2025-07-29 11:30:56 +09:00
dev
710714116e Remove inline style 2025-07-29 11:30:05 +09:00
dev
33dbe93290 Merge pull request '- Update screen 14 29 - Remove mock data dashboard' (#11) from dev-nghiantt-s14 into dev
Reviewed-on: #11
2025-07-29 11:25:51 +09:00
708b648080 updatecode 2025-07-29 11:20:59 +09:00
dev
2845672723 Update 16, 22 2025-07-29 10:51:49 +09:00
bbaf26af86 Fix comment 2025-07-28 18:34:29 +09:00
c3d01c998c update screen 2, 8, 9, 10, 27, 33, 34 2025-07-28 16:12:24 +07:00
aec9353ab2 - Update screen 14 29 - Remove mock data dashboard 2025-07-28 17:22:38 +09:00
dev
2dd0c6a72c Merge pull request 'dev-trungvq7-2207' (#10) from dev-trungvq7-2207 into dev
Reviewed-on: #10
2025-07-28 14:39:36 +09:00
dev
631637a8e1 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-2207 2025-07-28 14:31:49 +09:00
dev
3ff87852e5 Update 2507 2025-07-28 14:31:41 +09:00
dev
117e0adeb9 Merge pull request 'dev-dungtv-0725' (#9) from dev-dungtv-0725 into dev
Reviewed-on: #9
2025-07-28 10:59:55 +09:00
402b09440f fix code comment 2025-07-28 08:59:17 +07:00
71f7cf4d30 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv-0725 2025-07-28 08:45:04 +07:00
d3984182e8 update screen 8, 10 2025-07-28 08:44:51 +07:00
dev
933d4b751f Merge pull request 'dev-luannv27-2407' (#7) from dev-luannv27-2407 into dev
Reviewed-on: #7
2025-07-28 10:35:21 +09:00
dev
d45d141c3c Update 2507 2025-07-25 17:59:38 +09:00
98 changed files with 3734 additions and 7404 deletions

View File

@ -12,8 +12,7 @@
html, html,
body { body {
overflow: auto; // overflow: auto;
} }
a { a {
@ -119,7 +118,7 @@ a {
.v-main, .v-main,
.v-main__wrap, .v-main__wrap,
.container { .container {
height: 100%; // height: 100%;
} }
.v-main__wrap>.container { .v-main__wrap>.container {
@ -144,7 +143,9 @@ a {
} }
& .router-tab__container { & .router-tab__container {
min-height: calc(100% - 72px); overflow-y: auto;
height: calc(100vh - 105px);
max-height: calc(100vh - 105px);
padding: 20px; padding: 20px;
} }
@ -484,6 +485,11 @@ 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 {
height:calc(100vh - 60px);
overflow-y: auto;
}
} }
.v-icon { .v-icon {
@ -529,8 +535,6 @@ a {
} }
} }
.router-tab { .router-tab {
.router-tab__header { .router-tab__header {
background-color: map-deep-get($config, #{$theme}, "router-header"); background-color: map-deep-get($config, #{$theme}, "router-header");
@ -947,15 +951,24 @@ 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($color, "week", "sun"); // color: map-deep-get($config,
// #{$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($color, "week", "sat"); // color: map-deep-get($config,
} // #{$theme},
// "v-calendar-is-sat"
// );
// }
} }
>.vc-day { >.vc-day {
@ -964,22 +977,33 @@ a {
.day-hldyNm, .day-hldyNm,
.day-label.is-holiday { .day-label.is-holiday {
color: map-deep-get($color, "week", "sun"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sun"
);
} }
&.weekday-1 { &.weekday-1 {
.day-label, .day-label,
.day-hldyNm { .day-hldyNm {
color: map-deep-get($color, "week", "sun"); color: map-deep-get($config,
#{$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($color, "week", "sat"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sat"
);
} }
} }
@ -1181,11 +1205,17 @@ a {
} }
th.tui-sun { th.tui-sun {
color: map-deep-get($color, "week", "sun"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sun"
);
} }
th.tui-sat { th.tui-sat {
color: map-deep-get($color, "week", "sat"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sat"
);
} }
} }
@ -1201,11 +1231,17 @@ a {
} }
td.tui-calendar-sun { td.tui-calendar-sun {
color: map-deep-get($color, "week", "sun"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sun"
);
} }
td.tui-calendar-sat { td.tui-calendar-sat {
color: map-deep-get($color, "week", "sat"); color: map-deep-get($config,
#{$theme},
"v-calendar-is-sat"
);
} }
} }
} }
@ -1259,19 +1295,11 @@ a {
opacity: 0; opacity: 0;
} }
.v-list-item__content {
background-color: currentColor;
}
.v-list-item__title { .v-list-item__title {
color: map-deep-get($config, color: map-deep-get($config,
#{$theme}, #{$theme},
"tui-datepicker-calendar-color" "tui-datepicker-calendar-color"
); );
@if $theme ==light {
color: #fff !important;
}
} }
} }
} }
@ -1327,6 +1355,7 @@ 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;

View File

@ -92,9 +92,12 @@
background: map-deep-get($config, #{$theme}, "basic-button-background"); background: map-deep-get($config, #{$theme}, "basic-button-background");
} }
.searchFilter{
.search-button { .search-button {
height: 40px;
color: map-deep-get($config, #{$theme}, "search-btn-color"); color: map-deep-get($config, #{$theme}, "search-btn-color");
} }
}
.v-dialog { .v-dialog {
.ant-btn-icon-only { .ant-btn-icon-only {
@ -118,6 +121,9 @@
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color"); color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
&.ant-btn-background-ghost{
color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
}
} }
&.ant-btn-default { &.ant-btn-default {
@ -132,6 +138,15 @@
background: map-deep-get($config, #{$theme}, "ant-btn-danger-bg") !important; background: map-deep-get($config, #{$theme}, "ant-btn-danger-bg") !important;
} }
} }
&.expand-btn {
.v-icon {
color: map-deep-get($config, #{$theme}, "basic-button-color");
svg {
fill: map-deep-get($config, #{$theme}, "basic-button-color");
}
}
}
} }
} }
} }
@ -159,3 +174,12 @@
background:none; background:none;
} }
} }
.ant-btn {
&.expand-btn {
.v-icon {
span {
margin-right: 8px;
}
}
}
}

View File

@ -98,6 +98,17 @@
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.grid-title {
font-weight: 600;
font-size: 16px;
line-height: 24px;
letter-spacing: 0;
color: map-deep-get($config,
#{$theme},
"tui-grid-title-color"
);
}
.tui-grid { .tui-grid {
&-table { &-table {
border: 1px solid; border: 1px solid;
@ -123,11 +134,11 @@
} }
&-body-container{ &-body-container{
border-right: 1px solid; border-right: 0;
border-right-color: map-deep-get($config, // border-right-color: map-deep-get($config,
#{$theme}, // #{$theme},
"tui-grid-cell-borderColor" // "tui-grid-cell-borderColor"
); // );
width: auto !important; width: auto !important;
} }
@ -140,24 +151,27 @@
width: $scrollbar-width !important; width: $scrollbar-width !important;
height: $scrollbar-width !important; height: $scrollbar-width !important;
-webkit-appearance: initial; -webkit-appearance: initial;
background-color: map-deep-get($config, // background-color: map-deep-get($config,
#{$theme}, // #{$theme},
"scrollbar-track" // "tui-grid-cell-borderColor"
) !important; // ) !important;
background-color: rgba(0, 0, 0, 0) !important;
border-radius: 3px !important; border-radius: 3px !important;
} }
& ::-webkit-scrollbar-track { & ::-webkit-scrollbar-track {
background-color: map-deep-get($config, // background-color: map-deep-get($config,
#{$theme}, // #{$theme},
"scrollbar-track" // "tui-grid-cell-borderColor"
) !important; // ) !important;
background-color: rgba(0, 0, 0, 0) !important;
} }
& ::-webkit-scrollbar-thumb { & ::-webkit-scrollbar-thumb {
width: 50px !important; width: 50px !important;
height: 50px !important; height: 50px !important;
background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb"); background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb");
// background-color: rgba(0, 0, 0, 0);
border-radius: 3px; border-radius: 3px;
} }
@ -184,6 +198,7 @@
&-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},
@ -210,12 +225,13 @@
width: $scrollbar-width !important; width: $scrollbar-width !important;
height: $scrollbar-width !important; height: $scrollbar-width !important;
// display: none !important; // display: none !important;
border-color: map-deep-get($config, #{$theme}, "scrollbar-track"); border-color: map-deep-get($config, #{$theme}, "cardBackground");
background-color: map-deep-get($config, #{$theme}, "scrollbar-track"); background-color: map-deep-get($config, #{$theme}, "cardBackground");
// border: none !important; // border: none !important;
// bottom: -1px; // bottom: -1px;
// right: -2px; // right: -2px;
box-sizing: border-box; box-sizing: border-box;
// display: none;
} }
&-scrollbar-frozen-border, &-scrollbar-frozen-border,
@ -225,13 +241,9 @@
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,
@ -243,12 +255,23 @@
"tui-grid-border-vertical-color" "tui-grid-border-vertical-color"
); );
&-current-row{ // &-current-row{
td { // }
td.row-selected {
.custom-radio { .custom-radio {
background-color: map-deep-get($config,
#{$theme},
"ant-btn-primary-color"
);
.radio-mark{ .radio-mark{
border-color: #1677ff; border-color: map-deep-get($config,
background-color: #fff; #{$theme},
"arow-line-color"
);
background-color: map-deep-get($config,
#{$theme},
"arow-line-btn-bg-color"
);
&::after { &::after {
content: ""; content: "";
position: absolute; position: absolute;
@ -258,8 +281,10 @@
height: 11px; height: 11px;
width: 11px; width: 11px;
border-radius: 50%; border-radius: 50%;
background-color: #1677ff; background-color: map-deep-get($config,
} #{$theme},
"arow-line-color"
);
} }
} }
} }
@ -291,8 +316,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"
@ -309,8 +334,13 @@
} }
&-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"
);
} }
&-row-odd, &-row-odd,

View File

@ -1,4 +1,6 @@
.v-select__custom { .v-select__custom {
padding: 0.125rem;
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot { &.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none; box-shadow: none;
} }
@ -42,6 +44,10 @@
legend { legend {
width: 0; width: 0;
} }
.v-select-list {
padding: 0 1rem;
}
} }
.v-input__custom { .v-input__custom {
@ -182,7 +188,7 @@
transform: translateY(-50%); transform: translateY(-50%);
height: 18px; height: 18px;
width: 18px; width: 18px;
background-color: white; // background-color: white;
border: 2px solid #ccc; border: 2px solid #ccc;
border-radius: 50%; border-radius: 50%;
transition: all 0.2s ease; transition: all 0.2s ease;
@ -257,9 +263,6 @@
"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,
@ -366,6 +369,17 @@
} }
} }
} }
.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 {

View File

@ -63,6 +63,12 @@
line-height: 1.25 !important; line-height: 1.25 !important;
} }
.custom-title-7 {
font-size: 0.875rem !important;
font-weight: 400 !important;
line-height: 22px !important;
}
.custom-title-8 { .custom-title-8 {
font-size: 0.75rem !important; font-size: 0.75rem !important;
font-weight: 700 !important; font-weight: 700 !important;
@ -76,15 +82,15 @@
.custom-text-2 { .custom-text-2 {
opacity: 0.6; opacity: 0.6;
font-family: SpoqaHanSansNeo;
font-size: 14px; font-size: 14px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 2.17; line-height: 2.17;
letter-spacing: normal; // font-weight: normal;
text-align: right; // font-stretch: normal;
color: #fff; // font-style: normal;
// letter-spacing: normal;
// text-align: right;
// color: #fff;
// font-family: SpoqaHanSansNeo;
} }
.text-color--white-0 { .text-color--white-0 {
@ -113,6 +119,14 @@
color: map-deep-get($config, #{$theme}, "h1-title"); color: map-deep-get($config, #{$theme}, "h1-title");
} }
.custom-subtitle-tab {
font-size: 1.25rem !important;
font-weight: 600 !important;
line-height: 1.25 !important;
color: map-deep-get($config, #{$theme}, "subtitle-tab");
}
.v-dialog { .v-dialog {
.custom-title-4 { .custom-title-4 {
font-size: 16px !important; font-size: 16px !important;

View File

@ -14,10 +14,13 @@
position: relative; position: relative;
border-radius: 6px; border-radius: 6px;
border: solid 1px; border: solid 1px;
height: 40px; height: 32px;
// border-color: #424242; // border-color: #424242;
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": #fb5a83, "week": ("sun": #FF4D4F,
"sat": #2d8cf6) "sat": #597EF7)
); );
$config: ( $config: (
@ -96,16 +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: #383f5d, v-calendar-weekday-backgroundColor: #FFFFFF0A,
v-calendar-weekday-color: #fff, v-calendar-weekday-color: #FFFFFFD9,
v-calendar-weekday-border-color: rgba(255, 255, 255, 0.1), v-calendar-weekday-border-color: #FFFFFF0F,
v-calendar-day-color: #fff, v-calendar-day-color: #FFFFFFD9,
v-calendar-day-in-not-month-color: rgba(255, 255, 255, 0.05), v-calendar-day-in-not-month-color: #FFFFFF14,
v-calendar-is-today-background-color: #2d4571, v-calendar-is-today-background-color: #0A224F,
v-calendar-is-sat: #263EA0,
v-calendar-is-sun:#A61D24,
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: #212224, tui-grid-border-vertical-color: #FFFFFF0F,
tui-grid-cell-backgroundColor: #212224, tui-grid-cell-backgroundColor: #212224,
tui-grid-cell-color: #fff, tui-grid-cell-color: #fff,
tui-grid-cell-insert-color: #13636c, tui-grid-cell-insert-color: #13636c,
@ -170,6 +173,7 @@ $config: (
ant-btn-default-border-outlined:#424242, ant-btn-default-border-outlined:#424242,
btn-header-select-bg: #1F1F1F, btn-header-select-bg: #1F1F1F,
btn-header-select-color:#FFFFFFD9, btn-header-select-color:#FFFFFFD9,
subtitle-tab: #FFFFFFA6,
), ),
light: (w-g5: $--color-gray_555, light: (w-g5: $--color-gray_555,
g5-w: $--color-white, g5-w: $--color-white,
@ -232,12 +236,15 @@ $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: #e0e0e0, v-calendar-weekday-backgroundColor: #00000005,
v-calendar-weekday-color: #111, v-calendar-weekday-color: #000000E0,
v-calendar-weekday-border-color: #d4d4d4, v-calendar-weekday-border-color: #0000000F,
v-calendar-day-color: #111, v-calendar-day-color: #000000E0,
v-calendar-day-in-not-month-color: #f8f8f8, v-calendar-day-in-not-month-color: #0000000A,
v-calendar-is-today-background-color: #e3eaf3, v-calendar-is-today-background-color: #E6F4FF,
v-calendar-is-sat: #597EF7,
v-calendar-is-sun:#FF4D4F,
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),
tui-grid-border-horziontal-color: #e0e0e0, tui-grid-border-horziontal-color: #e0e0e0,
@ -304,5 +311,6 @@ $config: (
ant-btn-default-border-outlined:#D9D9D9, ant-btn-default-border-outlined:#D9D9D9,
btn-header-select-color:#1F1F1F, btn-header-select-color:#1F1F1F,
btn-header-select-bg:#FFFFFF, btn-header-select-bg:#FFFFFF,
subtitle-tab: #000000A6,
), ),
); );

View File

@ -3,45 +3,28 @@
<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 <vc-calendar locale="ko-KR" ref="myCalendar" :attributes="calendarAttributes" class="custom-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 <span :class="['day-label', { 'is-holiday': hldyValues(day.day) }]"
:class="['day-label', { 'is-holiday': hldyValues(day.day) }]" @click="addPlan(day.year, day.month, day.day)">{{ day.day }}</span>
@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 <p v-for="attr in attributes" :key="attr.key" :class="attr.customData.planColor"
v-for="attr in attributes" @click="updatePlan(attr.customData.planSeq)">
: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 <component ref="planPop" :is="'PlanPop'" v-show="false" :detailList="detailList" :label="planLabel"
ref="planPop" :parentPrgmId="parentPrgmId" />
:is="'PlanPop'"
v-show="false"
:detailList="detailList"
:label="planLabel"
:parentPrgmId="parentPrgmId"
/>
</div> </div>
</template> </template>
<script> <script>
@ -63,6 +46,10 @@ export default {
type: Boolean, type: Boolean,
default: true, default: true,
}, },
showTitle: {
type: Boolean,
default: false,
},
}, },
computed: { computed: {
...mapState({ ...mapState({
@ -170,11 +157,10 @@ export default {
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) {
@ -196,36 +182,44 @@ 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;
@ -233,6 +227,7 @@ 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;
@ -241,6 +236,7 @@ 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;
@ -258,18 +254,20 @@ const myDetail = [];
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: rgba(229,62,62,var(--bg-opacity)); background-color: #FF4D4F !important;
background-color: #e53e3e !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -277,9 +275,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.blue { .blue {
//background-color: rgba(66,153,225,var(--bg-opacity)); background-color: #597EF7 !important;
background-color: #4299e1 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -287,9 +285,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.puple { .puple {
//background-color: rgba(102,126,234,var(--bg-opacity)); background-color: #9254DE !important;
background-color: #667eea !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -297,9 +295,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.green { .green {
//background-color: rgba(56,178,172,var(--bg-opacity)); background-color: #73D13D !important;
background-color: #38b2ac !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -308,9 +306,9 @@ const myDetail = [];
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
width: 90%; width: 90%;
} }
.orange { .orange {
//background-color: rgba(237,137,54,var(--bg-opacity)); background-color: #FFA940 !important;
background-color: #ed8936 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -318,9 +316,9 @@ const myDetail = [];
text-align: left; text-align: left;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
} }
.pink { .pink {
//background-color: rgba(237,100,166,var(--bg-opacity)); background-color: #F759AB !important;
background-color: #ed64a6 !important;
color: #fff; color: #fff;
border-radius: 0.125rem; border-radius: 0.125rem;
font-size: 0.75rem; font-size: 0.75rem;
@ -328,8 +326,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

@ -351,25 +351,25 @@ export default {
tmpChrtOp.color = light_Col; tmpChrtOp.color = light_Col;
} }
} }
console.log('ops11:',tmpChrtOp) // console.log('ops11:',tmpChrtOp)
return tmpChrtOp; return tmpChrtOp;
}, },
}), }),
}, },
created() { created() {
console.log('wd data:',this.widgetData) // console.log('wd data:',this.widgetData)
}, },
methods: { methods: {
onClick(event, instance, ECharts) { onClick(event, instance, ECharts) {
console.log('onClick : ', event); // console.log('onClick : ', event);
this.$emit('click', event); this.$emit('click', event);
}, },
onDblClick(event, instance, ECharts) { onDblClick(event, instance, ECharts) {
console.log('onDblClick : ', event); // console.log('onDblClick : ', event);
this.$emit('dblclick', event); this.$emit('dblclick', event);
}, },
onRightClick(event, instance, ECharts) { onRightClick(event, instance, ECharts) {
console.log('onRightClick : ', event); // console.log('onRightClick : ', event);
this.$emit('rclick', event); this.$emit('rclick', event);
}, },
onLegendSelect(params) { onLegendSelect(params) {

View File

@ -9,7 +9,7 @@
</label> </label>
</v-col> </v-col>
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<div class="datepicker-container" > <div :class="['datepicker-container', customClass]" >
<v-text-field <v-text-field
id="startpicker" id="startpicker"
ref="startpicker" ref="startpicker"
@ -30,7 +30,7 @@
<img :src="arrowIcon" alt=""> <img :src="arrowIcon" alt="">
</div> </div>
<v-text-field <v-text-field
v-if="isRange" v-show="isRange"
id="endpicker" id="endpicker"
ref="endpicker" ref="endpicker"
v-model="toDtValue" v-model="toDtValue"
@ -47,9 +47,6 @@
</template> </template>
</v-text-field> </v-text-field>
</div> </div>
<!-- test -->
<!-- <a-button @click="onOpenDatepicker()">Open</a-button> -->
<!-- end test -->
</v-col> </v-col>
</v-row> </v-row>
</template> </template>
@ -96,7 +93,12 @@ 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

@ -4,12 +4,13 @@
:data="chkGridData" :data="chkGridData"
:columns="chkGridColumns" :columns="chkGridColumns"
:options="chkGridOptions" :options="chkGridOptions"
@focusChange="focusChangeEvt" @mousedown="onMousedown"
@click="startEditing" @click="startEditing"
@editingFinish="editingFinish" @editingFinish="editingFinish"
@dblclick="dblClick" @dblclick="dblClick"
@mouseover="mouseoverEvent" @mouseover="mouseoverEvent"
@mouseout="mouseoutEvent" @mouseout="mouseoutEvent"
@focusChange="focusChangeEvt"
/> />
</template> </template>
<script> <script>
@ -107,16 +108,13 @@ 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() {
@ -163,7 +161,7 @@ export default {
}, },
created() {}, created() {},
async mounted() { async mounted() {
console.log('--------------DEBUG----gridData: ', this.gridData); // console.log(this.dataPath);
if (this.gridName) { if (this.gridName) {
this.gridInstance = this.$refs['tuigrid' + this.gridName]; this.gridInstance = this.$refs['tuigrid' + this.gridName];
@ -186,13 +184,13 @@ export default {
}), }),
// true : 현재 행 혹은 연결된 그리드가 수정중인 상태 // true : 현재 행 혹은 연결된 그리드가 수정중인 상태
checkGridState() { checkGridState() {
var rowStatList = ['I', 'U', 'D']; const rowStatList = ['I', 'U', 'D'];
var row = this.gridInstance.invoke('getFocusedCell'); const row = this.gridInstance.invoke('getFocusedCell');
if (row) { if (row) {
var rowData = this.gridInstance.invoke('getRow', row.rowKey); const rowData = this.gridInstance.invoke('getRow', row.rowKey);
if (rowData) { if (rowData) {
var rowStat = rowData['rowStat']; const rowStat = rowData['rowStat'];
if (rowStatList.includes(rowStat)) { if (rowStatList.includes(rowStat)) {
return true; return true;
} }
@ -200,8 +198,8 @@ export default {
} }
if (this.preventFocusChangeEventTargetGridList) { if (this.preventFocusChangeEventTargetGridList) {
for (var gridInstance of this.preventFocusChangeEventTargetGridList) { for (let gridInstance of this.preventFocusChangeEventTargetGridList) {
var dataArr = gridInstance.save(); const dataArr = gridInstance.save();
if (dataArr.length > 0) { if (dataArr.length > 0) {
return true; return true;
@ -253,9 +251,11 @@ export default {
this.gridInstance.invoke('check', rowData.rowKey, instance); this.gridInstance.invoke('check', rowData.rowKey, instance);
}, },
setSelectionRange(rowKey) { setSelectionRange(rowKey) {
// console.log("------------------DEBUG-------setSelectionRange:", rowKey);
const rowDatas = this.gridInstance.invoke('getData'); const rowDatas = this.gridInstance.invoke('getData');
rowDatas.forEach(item => { rowDatas.forEach(item => {
if (item.rowKey == rowKey) { if (item.rowKey == rowKey) {
// console.log("------------------DEBUG-------setSelectionRange---item:", item);
this.gridInstance.invoke( this.gridInstance.invoke(
'addRowClassName', 'addRowClassName',
item.rowKey, item.rowKey,
@ -270,7 +270,12 @@ export default {
} }
}); });
}, },
onMousedown(evt) {
// console.log("------------------DEBUG-------onMousedown:", evt);
this.focusChangeEvt(evt);
},
focusChangeEvt(e) { focusChangeEvt(e) {
// console.log("------------------DEBUG-------focusChangeEvt:", e);
// console.log('focusChangeEvt1...') // console.log('focusChangeEvt1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent focusChangeEvt') // console.log('prevent focusChangeEvt')
@ -291,6 +296,7 @@ export default {
this.sendSelectedRowData(e.rowKey); this.sendSelectedRowData(e.rowKey);
}, },
startEditing(e) { startEditing(e) {
// console.log("------------------DEBUG-------startEditing:", e);
// console.log('startEditing1...') // console.log('startEditing1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent startEditing') // console.log('prevent startEditing')
@ -317,6 +323,7 @@ export default {
} }
}, },
async editingFinish(e) { async editingFinish(e) {
// console.log('------------------DEBUG-------editingFinish:', e);
// console.log("Editing END E::", e); // console.log("Editing END E::", e);
// editor 간 이동시 수정되는 문제 수정 // editor 간 이동시 수정되는 문제 수정
// e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg // e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg
@ -678,6 +685,7 @@ export default {
? this.gridInstance.invoke('getFocusedCell').rowKey ? this.gridInstance.invoke('getFocusedCell').rowKey
: eventRowKey; : eventRowKey;
var rowData = this.gridInstance.invoke('getRow', rowKey); var rowData = this.gridInstance.invoke('getRow', rowKey);
// console.log('------------------DEBUG-------sendSelectedRowData:', {eventRowKey, rowKey});
this.$emit('sendSelectedRowStatInfo', rowData); this.$emit('sendSelectedRowStatInfo', rowData);
} }
}, },
@ -703,11 +711,6 @@ export default {
</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,7 +2,9 @@
<v-row class="search-box" align="center" no-gutters> <v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols"> <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> <v-icon small color="primary"
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon>
{{ label }} {{ label }}
</label> </label>
</v-col> </v-col>
@ -18,13 +20,15 @@
outlined outlined
> >
<template #append > <template #append >
<v-icon size="20">$icoCalendar</v-icon> <v-icon size="20" v-show="!isRange">$icoCalendar</v-icon>
</template> </template>
<template #append-outer> <template #append-outer>
<div ref="startpicker-container" id="startpicker-container"></div> <div ref="startpicker-container" id="startpicker-container"></div>
</template> </template>
</v-text-field> </v-text-field>
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div> <div v-if="isRange" class="mx-3" :style="{ lineHeight: 0 }">
<img :src="arrowIcon" alt="">
</div>
<v-text-field <v-text-field
v-show="isRange" v-show="isRange"
id="endpicker" id="endpicker"
@ -129,6 +133,12 @@ export default {
this.defaultRange === 'no limite' this.defaultRange === 'no limite'
); );
}, },
arrowIcon() {
if(this.isDarkMode){
return require('@/assets/images/arrow_datepicker_dm.png');
}
return require('@/assets/images/arrow_datepicker.png');
}
}, },
watch: { watch: {
myCmCycle() { myCmCycle() {

View File

@ -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

@ -3,8 +3,7 @@
<!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')"> <!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
<v-icon>mdi-chevron-right</v-icon> <v-icon>mdi-chevron-right</v-icon>
</v-btn> --> </v-btn> -->
<a-button type="default" @click="btnActionsFnc('addLeftToRight')"> <a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost icon="right" >
<RightOutlines/>
</a-button> </a-button>
<!--<v-btn <!--<v-btn
@ -16,8 +15,7 @@
> >
<v-icon>mdi-chevron-left</v-icon> <v-icon>mdi-chevron-left</v-icon>
</v-btn> --> </v-btn> -->
<a-button class="mt-2" type="default" @click="btnActionsFnc('removeRightToLeft')"> <a-button class="mt-2" @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost icon="left">
<LeftOutlines/>
</a-button> </a-button>
</div> </div>
</template> </template>

View File

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

View File

@ -1,5 +1,5 @@
// Gauge chart options // Gauge chart options
export default function getGaugeChartOption({ title, value, min = 0, max = 160, unit = '%', isDarkMode = false, backgroundRadius = 97 }) { export default function getGaugeChartOption({ title, min = 0, max = 160, unit = '%', isDarkMode = false, backgroundRadius = 97 }) {
const colorRanges = isDarkMode const colorRanges = isDarkMode
? [ ? [
[0.375, '#49AA19'], // Dark Green [0.375, '#49AA19'], // Dark Green

View File

@ -2,7 +2,7 @@
export default function getLineChartOption({ export default function getLineChartOption({
xAxisData = [], xAxisData = [],
seriesData = [], seriesData = [],
legendData = [], // legendData = [],
isDarkMode = false, isDarkMode = false,
}) { }) {
@ -16,6 +16,7 @@ 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,
}, },
@ -27,17 +28,17 @@ 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',
top: '0%', top: '0%',
right: '5%', right: '5%',
orient: 'horizontal', orient: 'horizontal',
textStyle: { textStyle: {
color: isDarkMode ? '#676A7B' : '#676A7B', color: isDarkMode ? 'white' : '#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

@ -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,6 +22,7 @@
<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">
@ -46,11 +47,10 @@
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,26 +59,32 @@
</v-col> </v-col>
</v-row> </v-row>
</v-col> </v-col>
</v-row> <v-col :cols="12">
<div style="height: 50vh;">
</div> <div ref="modalGridParent" class="h100 py-4">
<div :style="'height: calc(50vh)'">
<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-col>
</v-row>
</div>
<!-- <div style="height: 50vh;">
<div ref="modalGridParent" class="h100 px-6 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-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">
<!-- <v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</v-btn> --> <a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button>
<!-- <v-btn v-if="item.closeBtnFg || false" :ripple="false" @click="deleteBtnAction($event)">삭제</v-btn> --> <a-button v-if="item.closeBtnFg || false" :ripple="false" type="danger" ghost danger
<a-button :ripple="false" @click="setUpdate($event)" class="mr-2">확인</a-button> @click="deleteBtnAction($event)" class="mr-2">삭제</a-button>
<a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)" <a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
class="mr-2">닫기</a-button>
<a-button v-if="item.closeBtnFg || false" :ripple="false" icon="delete" type="danger" ghost danger
@click="deleteBtnAction($event)">삭제</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -150,23 +156,7 @@ export default {
return { return {
dialog: false, dialog: false,
loadGrid: true, loadGrid: false,
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',
@ -298,46 +288,39 @@ export default {
}, },
async setSelectValueList01() { async setSelectValueList01() {
// form으로 popup 사용할 때 인자로 eqpmKindId, eqpmGrpId 보내줘야한다. // form으로 popup 사용할 때 인자로 eqpmKindId, eqpmGrpId 보내줘야한다.
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: 'selectEqpmGrpCodeList', apiKey: 'selectEqpmGrpCodeList',
// resKey: 'eqpmGrpCodeLists', resKey: 'eqpmGrpCodeLists',
// sendParam: { sendParam: {
// eqpmKindId: eqpmKindId:
// this.item.eqpmKindId != undefined this.item.eqpmKindId != undefined
// ? this.item.eqpmKindId ? this.item.eqpmKindId
// : this.searchParam.eqpmKindId, : this.searchParam.eqpmKindId,
// }, },
// // form을 통해 popup을 사용할 경우 -> this.item.eqpmKindId 사용 // form을 통해 popup을 사용할 경우 -> this.item.eqpmKindId 사용
// // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다. // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다.
// }); });
// if (res.length > 0) { if (res.length > 0) {
// this.selectValueList01 = await res.map(obj => { this.selectValueList01 = await res.map(obj => {
// return { return {
// text: obj.eqpmGrpNm, text: obj.eqpmGrpNm,
// value: obj.eqpmGrpId, value: obj.eqpmGrpId,
// }; };
// }); });
// // form을 통해 popup을 사용할 경우 -> this.item.eqpmGrpId 사용 // form을 통해 popup을 사용할 경우 -> this.item.eqpmGrpId 사용
// // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택 // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택
// // console.log('this.item.eqpmGrpId : ', this.item.eqpmGrpId); // console.log('this.item.eqpmGrpId : ', this.item.eqpmGrpId);
// // console.log('this.searchParam.eqpmGrpId : ', this.searchParam.eqpmGrpId); // console.log('this.searchParam.eqpmGrpId : ', this.searchParam.eqpmGrpId);
// this.selectValue01 = this.selectValue01 =
// this.item.eqpmGrpId != undefined this.item.eqpmGrpId != undefined
// ? this.item.eqpmGrpId ? this.item.eqpmGrpId
// : this.searchParam.eqpmGrpId != undefined : this.searchParam.eqpmGrpId != undefined
// ? this.searchParam.eqpmGrpId ? this.searchParam.eqpmGrpId
// : this.selectValueList01[0].value; : this.selectValueList01[0].value;
// } else { } else {
// 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();
@ -359,7 +342,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(100, myOptions), Utility.defaultGridOption(400, myOptions),
myOptions, myOptions,
), ),
}); });
@ -388,44 +371,44 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: 'selectEgrpPysclQtyPop', apiKey: 'selectEgrpPysclQtyPop',
// resKey: 'egrpPysclQtyData', resKey: 'egrpPysclQtyData',
// sendParam: { sendParam: {
// searchWord: this.searchWord, searchWord: this.searchWord,
// eqpmGrpId: this.selectValue01, eqpmGrpId: this.selectValue01,
// openMode: this.item.openMode, openMode: this.item.openMode,
// }, },
// }); });
// let newRes = []; let newRes = [];
// let tempTagList = this.pyscPopVal.split('/*wq2a/'); let tempTagList = this.pyscPopVal.split('/*wq2a/');
// let tagList = tempTagList.filter(item => item != ''); let tagList = tempTagList.filter(item => item != '');
// if (tagList.length > 0) { if (tagList.length > 0) {
// newRes = res.filter(item => { newRes = res.filter(item => {
// return !tagList.includes(item.pysclQtyId); return !tagList.includes(item.pysclQtyId);
// }); });
// res = newRes; res = newRes;
// }
// //이미 선택된 값들 제거(배열)
// if (this.item.dataList) {
// if (this.item.dataList.length > 0) {
// newRes = res.filter(item => {
// return !this.item.dataList.includes(item.pysclQtyId);
// });
// res = newRes;
// }
// }
res = [
{
'pysclQtyId': 'PYSCL00001',
'pysclQtyCd': 'AMP_1A',
'pysclQtyNm': '회로1 전류A',
'pysclQtyTpNm': 'TAG'
} }
]
//이미 선택된 값들 제거(배열)
if (this.item.dataList) {
if (this.item.dataList.length > 0) {
newRes = res.filter(item => {
return !this.item.dataList.includes(item.pysclQtyId);
});
res = newRes;
}
}
// 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,
@ -480,10 +463,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

@ -318,7 +318,7 @@ export default {
// } // }
}, },
mounted(){ mounted(){
this.initTest(); return; // this.initTest(); return;
}, },
methods: { methods: {
...mapMutations({ ...mapMutations({
@ -478,10 +478,6 @@ export default {
// }) // })
}, },
async setChart(){ async setChart(){
// test
this.initTestChart(); return;
// end test
this.loadChart = false; this.loadChart = false;
let xAxisData = []; let xAxisData = [];
let seriesData = []; let seriesData = [];

View File

@ -2,12 +2,8 @@
<v-row class="search-box" 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-icon v-if="item.iconShow" small
v-if="item.iconShow" :class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ option.labelContent }} {{ option.labelContent }}
</label> </label>
</v-col> </v-col>
@ -30,9 +26,9 @@
<div class="pa-6 pt-0"> <div class="pa-6 pt-0">
<v-row align="center"> <v-row align="center">
<v-col :cols="5"> <v-col :cols="5">
<component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12" :iconShow="true" <component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12"
:propsValue="selectValue01" :itemList="selectValueList01" :label="'설비그룹'" :iconShow="true" :propsValue="selectValue01" :itemList="selectValueList01"
@update:propsValue="selectValue01 = $event" :readonly="item.openMode == undefined :label="'설비그룹'" @update:propsValue="selectValue01 = $event" :readonly="item.openMode == undefined
? openMode ? openMode
: item.openMode == 'ALL' : item.openMode == 'ALL'
? false ? false
@ -47,9 +43,9 @@
물리량명 물리량명
</label> </label>
</v-col> </v-col>
<v-col :cols="9"> <v-text-field append-icon="" class="v-input__custom" <v-col :cols="9"> <v-text-field append-icon="" class="v-input__custom" outlined
outlined :hide-details="true" v-model="searchWord" :hide-details="true" v-model="searchWord" @keyup.enter="search"><template
@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>
@ -76,9 +72,9 @@
</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="setUpdate($event)" class="mr-2">확인</a-button> <a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)" <a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
class="mr-2">닫기</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -274,36 +270,30 @@ export default {
this.gridInit(); this.gridInit();
}, },
async setSelectValueList01() { async setSelectValueList01() {
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: 'selectEqpmGrpCodeList', apiKey: 'selectEqpmGrpCodeList',
// resKey: 'eqpmGrpCodeLists', resKey: 'eqpmGrpCodeLists',
// sendParam: { eqpmKindId: this.searchParam.eqpmKindId }, sendParam: { eqpmKindId: this.searchParam.eqpmKindId },
// // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다. // 부모 페이지에서 설비종류인 eqpmKindId 값을 꼭 가져와야한다.
// }); });
// if (res.length > 0) { if (res.length > 0) {
// this.selectValueList01 = await res.map(obj => { this.selectValueList01 = await res.map(obj => {
// return { return {
// text: obj.eqpmGrpNm, text: obj.eqpmGrpNm,
// value: obj.eqpmGrpId, value: obj.eqpmGrpId,
// }; };
// }); });
// // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택 // 부모 페이지에서 설비그룹을 선택한 값이 있다면(eqpmGrpId) 그 값으로 바인딩 아닐 경우 조회한 데이터의 첫번째 값으로 선택
// this.selectValue01 = this.selectValue01 =
// this.searchParam.eqpmGrpId != undefined this.searchParam.eqpmGrpId != undefined
// ? this.searchParam.eqpmGrpId ? this.searchParam.eqpmGrpId
// : this.selectValueList01[0].value; : this.selectValueList01[0].value;
// // this.selectValue01 = this.selectValueList01[0].value; // this.selectValue01 = this.selectValueList01[0].value;
// } else { } else {
// 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();
@ -341,33 +331,25 @@ export default {
}, },
async getGridData() { async getGridData() {
this.loadGrid = false; this.loadGrid = false;
// let res = [];
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmBaseInfoPop',
// resKey: 'epqmBaseInfoData',
// sendParam: {
// eqpmGrpId: this.selectValue01,
// searchWord: this.searchWord,
// // openMode : this.item.openMode == undefined ? this.openMode : this.item.openMode
// },
// });
// // grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 시작
// let newRes = [];
// if (this.bindingGridEqpmIdList.length > 0) {
// newRes = res.filter(item => {
// return !this.bindingGridEqpmIdList.includes(item.eqpmId);
// });
// res = newRes;
// }
// grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 끝
const res = [
{
'eqpmId': 'PYSCL00001',
'eqpmNm': 'AMP_1A',
let res = await this.postApiReturn({
apiKey: 'selectEqpmBaseInfoPop',
resKey: 'epqmBaseInfoData',
sendParam: {
eqpmGrpId: this.selectValue01,
searchWord: this.searchWord,
// openMode : this.item.openMode == undefined ? this.openMode : this.item.openMode
},
});
// grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 시작
let newRes = [];
if (this.bindingGridEqpmIdList.length > 0) {
newRes = res.filter(item => {
return !this.bindingGridEqpmIdList.includes(item.eqpmId);
});
res = newRes;
} }
] // grid와 popup eqpmId 값 중복되는 것 제거하는 로직 - 끝
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
@ -441,9 +423,9 @@ export default {
// this.dialog = false; // this.dialog = false;
// return; // return;
// } // }
// if (this.myBindingData.length <= 0) { if (this.myBindingData.length <= 0) {
// return alert('설비상세 리스트를 먼저 선택해주세요.'); return alert('설비상세 리스트를 먼저 선택해주세요.');
// } }
this.dialog = !val; this.dialog = !val;
}, },
}, },

View File

@ -5,7 +5,7 @@
<v-icon <v-icon
v-if="iconShow" v-if="iconShow"
small small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']" :class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon >$icoBulletPoint</v-icon
> >
{{ option.labelContent }} {{ option.labelContent }}
@ -36,7 +36,7 @@
계산설명 계산설명
</label> </label>
</v-col> </v-col>
<v-col :cols="10" class="mr-4 py-0" > <v-col :cols="11" class="pr-8 py-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 v-slot:append> :hide-details="true" v-model="searchWord" @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
@ -45,7 +45,7 @@
</template></v-text-field> </template></v-text-field>
</v-col> </v-col>
<v-col cols="1" class="py-0"> <v-col cols="1" class="py-0" style="display: flex; justify-content: flex-end;">
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button> <a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
<!-- <v-btn :ripple="false" @click="initSearch()"> <!-- <v-btn :ripple="false" @click="initSearch()">
초기화 초기화
@ -63,10 +63,8 @@
</div> </div>
</div> </div>
<v-card-actions class="pa-5 d-flex align-center justify-end"> <v-card-actions class="pa-5 d-flex align-center justify-end">
<!-- <v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn> <a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</v-btn> --> <a-button :ripple="false" type="primary" @click="setUpdate($event)" >확인</a-button>
<a-button :ripple="false" @click="setUpdate($event)" class="mr-2">확인</a-button>
<a-button :ripple="false" type="primary" @click="dialogOpenCloseEvent(dialog)">닫기</a-button>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -306,38 +304,22 @@ export default {
}, },
async getGridData() { async getGridData() {
this.loadGrid = false; this.loadGrid = false;
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: 'selectEqpmCalcPop', apiKey: 'selectEqpmCalcPop',
// resKey: 'eqpmCalcPopData', resKey: 'eqpmCalcPopData',
// sendParam: { sendParam: {
// calcDescLike: this.searchWord, calcDescLike: this.searchWord,
// openMode: this.item.openMode != undefined ? this.item.openMode : this.openMode openMode: this.item.openMode != undefined ? this.item.openMode : this.openMode
// },
// });
// if (this.myBindingData['calcProc'] != '' || this.myBindingData['calcProc'] != null || this.myBindingData['calcProc'] != undefined) {
// let newRes = [];
// newRes = res.filter(item => {
// return item.calcProc != this.myBindingData['calcProc']
// });
// res = newRes;
// }
const res = [
{
'calcProc': 'AVG_CNT2',
'argCnt': '2',
'calcDesc': '두개 변수에 대한 평균'
}, },
});
if (this.myBindingData['calcProc'] != '' || this.myBindingData['calcProc'] != null || this.myBindingData['calcProc'] != undefined) {
let newRes = [];
newRes = res.filter(item => {
return item.calcProc != this.myBindingData['calcProc']
});
res = newRes;
}
{ 'calcProc': 'PROC001', argCnt: 2, 'calcDesc': '덧셈 연산' },
{ 'calcProc': 'PROC002', argCnt: 1, 'calcDesc': '제곱 연산' },
{ 'calcProc': 'PROC003', argCnt: 2, 'calcDesc': '곱셈 연산' },
{ 'calcProc': 'PROC004', argCnt: 1, 'calcDesc': '루트 연산' },
{ 'calcProc': 'PROC005', argCnt: 3, 'calcDesc': '최대값 계산' },
{ 'calcProc': 'PROC006', argCnt: 3, 'calcDesc': '최소값 계산' },
]
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,

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" align="center"> <v-row class="search-box no-gutters" align="center">
<v-col :cols="option.labelCols" class="py-0"> <v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon v-if="item.iconShow" small <v-icon v-if="item.iconShow" small
@ -7,12 +7,13 @@
{{ option.labelContent }} {{ option.labelContent }}
</label> </label>
</v-col> </v-col>
<v-col :cols="option.textCols"> <v-col :cols="option.textCols" class="py-0">
<v-text-field readonly v-model="selectValue" append-icon="mdi-magnify" <v-text-field readonly append-icon="" :class="['v-select__custom', customClass]" outlined :hide-details="true"
:class="['v-select__custom', customClass]" v-model="selectValue" @keyup.enter="typeEnterKey" @click="dialogOpenCloseEvent(dialog)" style="padding: 0;"
@click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true" :required="item.required || false"><template v-slot:append>
:required="item.required || false"></v-text-field> <!-- Custom SVG icon -->
<!-- :disabled="item.disabled || false" --> <v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col> </v-col>
<v-dialog v-model="dialog" scrollable width="1000px"> <v-dialog v-model="dialog" scrollable width="1000px">
@ -21,10 +22,10 @@
<span class="custom-title-4">{{ option.modalTitle }}</span> <span class="custom-title-4">{{ option.modalTitle }}</span>
<v-icon @click="dialogOpenCloseEvent(dialog)">mdi-close</v-icon> <v-icon @click="dialogOpenCloseEvent(dialog)">mdi-close</v-icon>
</v-card-title> </v-card-title>
<v-row align="end" class="pa-5" no-gutters> <v-row align="end" class="px-5 pb-3" no-gutters>
<v-col :cols="2.5" class="mr-2"> <v-col :cols="2.5" class="mr-2">
<v-row> <v-row>
<v-col :cols="2"> <v-col :cols="12" class="py-0">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<!-- <v-icon small <!-- <v-icon small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']" :class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
@ -32,28 +33,28 @@
검색 검색
</label> </label>
</v-col> </v-col>
<v-col :cols="12"> <v-col :cols="11" class="py-0 pr-3">
<v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined :hide-details="true" <v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined
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>
<a-button icon="search" :ripple="false" type="primary" @click="search()"
class="search-button">조회</a-button>
</v-row> </v-row>
</v-col> </v-col>
<a-button type="primary" :ripple="false" @click="search()">
조회
</a-button>
</v-row> </v-row>
<!-- <div :style="'height: calc(65vh)'"> --> <!-- <div :style="'height: calc(65vh)'"> -->
<div :style="'height: 600px'"> <div :style="'height: 600px'" class="px-5">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> --> <!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 py-3"> <div ref="modalGridParent" class="h100 py-3">
<!-- :is="loadGrid && dialog ? 'Grid' : null" --> <!-- :is="loadGrid && dialog ? 'Grid' : null" -->
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01" <component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.modalData2.evtObjPop" :parentPrgmId="parentPrgmId" @getRowsData="getRowData" :dataPath="searchParam.modalData2.evtObjPop" :parentPrgmId="parentPrgmId"
@dblClick="setUpdate($event)" /> @getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div> </div>
</div> </div>
<v-card-actions class="pa-5 d-flex align-center justify-end"> <v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button type="default" class="mr-2" :ripple="false" @click="dialogOpenCloseEvent(dialog)">닫기</a-button> <a-button type="default" class="mr-2" :ripple="false"
@click="dialogOpenCloseEvent(dialog)">닫기</a-button>
<a-button type="primary" class="mr-2" :ripple="false" @click="setUpdate('init')">초기화</a-button> <a-button type="primary" class="mr-2" :ripple="false" @click="setUpdate('init')">초기화</a-button>
<a-button type="primary" :ripple="false" @click="setUpdate($event)">확인</a-button> <a-button type="primary" :ripple="false" @click="setUpdate($event)">확인</a-button>
</v-card-actions> </v-card-actions>

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,8 +22,8 @@
outlined outlined
:hide-details="true" :hide-details="true"
> >
<template v-slot:append>
<!-- Custom SVG icon --> <!-- Custom SVG icon -->
<template v-slot:append>
<v-icon>$icoSearch</v-icon> <v-icon>$icoSearch</v-icon>
</template> </template>
</v-text-field> </v-text-field>
@ -31,28 +31,20 @@
<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="pa-5 d-flex align-center justify-space-between"> <v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span> <span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn <a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
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="3"> <v-col :cols="12">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1" <!-- <v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> -->
>mdi-record-circle</v-icon <v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon>
>
검색 검색
</label> </label>
</v-col> </v-col>
<v-col :cols="5"> <v-col :cols="9">
<v-text-field <v-text-field
append-icon="mdi-magnify" append-icon="mdi-magnify"
class="v-input__custom" class="v-input__custom"
@ -63,21 +55,19 @@
></v-text-field> ></v-text-field>
</v-col> </v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-col cols="4" class="text-right"> <v-col :cols="3" class="text-right">
<v-btn :ripple="false" @click="search()"> <a-button type="primary" @click="search()" icon="search">
조회 조회
</v-btn> </a-button>
<v-btn :ripple="false" @click="initSearch()"> <a-button @click="initSearch()">
초기화 초기화
</v-btn> </a-button>
</v-col> </v-col>
</v-row> </v-row>
</div> </div>
<v-divider></v-divider> <!-- <v-divider></v-divider> -->
<!-- <div :style="'height: calc(65vh)'"> --> <div style="height: 429px;" class="py-3 px-5">
<div :style="'height: 429px;'"> <div ref="modalGridParent" class="h100 w100">
<!-- <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"
@ -88,11 +78,9 @@
/> />
</div> </div>
</div> </div>
<v-card-actions class="pa-5 d-flex align-center justify-center"> <v-card-actions class="pa-5 d-flex align-center justify-end">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn> <a-button class="mr-2" @click="dialogOpenCloseEvent(dialog)">닫기</a-button>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)" <a-button type="primary" @click="setUpdate($event)">확인</a-button>
>닫기</v-btn
>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -336,7 +324,7 @@ export default {
})) }))
}; };
console.log(res); // console.log(res);
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,
@ -395,7 +383,31 @@ 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;
} }
@ -418,26 +430,4 @@ 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,7 +43,10 @@
</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"/> -->
<div class="startpicker-container2"> <component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox1"
: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>
@ -53,7 +56,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"
@ -91,17 +94,9 @@
</div> </div>
</v-col> </v-col>
<v-col :cols="6" class="pl-2"> <v-col :cols="6" class="pl-2">
<div class="startpicker-container3"> <component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox2"
<v-text-field id="startpicker3" ref="startpicker3" v-model="endDt" :propsValue="selectTimeValue2" :itemList="selectTimeValueList2" :minInterval="selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
:class="'v-input__custom'" :hide-details="true" readonly outlined> " @update:propsValue="selectTimeValue2 = $event" />
<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"
@ -186,10 +181,11 @@
</div> </div>
</template> </template>
<v-card-actions class="justify-end"> <v-card-actions class="justify-end">
<a-button :ripple="false" @click="btnAction('save')" class="mr-2">저장</a-button> <a-button :ripple="false" @click="btnAction('close')" 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')" class="mr-2">삭제</a-button> @click="btnAction('delete')">삭제</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>
@ -210,6 +206,7 @@ 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],
@ -237,6 +234,13 @@ export default {
type: String, type: String,
require: false, require: false,
}, },
selectBoxTimeItemList: {
type: Object,
require: false,
default: () => {
return {};
},
},
}, },
components: { components: {
InputText, InputText,
@ -250,6 +254,7 @@ export default {
Utility, Utility,
TuiDatepicker, TuiDatepicker,
VueNumericInput, VueNumericInput,
SelectBoxTime,
}, },
data() { data() {
return { return {
@ -272,7 +277,23 @@ 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: {
@ -296,25 +317,29 @@ 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) {
@ -323,6 +348,12 @@ 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({
@ -505,10 +536,8 @@ 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.strtHh = returnData.strtHh; this.selectTimeValue1 = returnData.strtHh+' : '+ returnData.strtMm;
this.strtMm = returnData.strtMm; this.selectTimeValue2 = returnData.endHh+' : '+ returnData.endMm;
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;
@ -525,10 +554,8 @@ export default {
if ( if (
this.strtDt === '' || this.strtDt === '' ||
this.endDt === '' || this.endDt === '' ||
this.strtHh === '' || this.selectTimeValue1 === '' ||
this.strtMm === '' || this.selectTimeValue2 === '' ||
this.endHh === '' ||
this.endMm === '' ||
this.planTitle === '' || this.planTitle === '' ||
this.planCntn === '' || this.planCntn === '' ||
this.planColor === '' this.planColor === ''
@ -542,10 +569,8 @@ export default {
if ( if (
this.strtDt == '' || this.strtDt == '' ||
this.endDt == '' || this.endDt == '' ||
this.strtHh == '' || this.selectTimeValue1 === '' ||
this.strtMm == '' || this.selectTimeValue2 === '' ||
this.endHh == '' ||
this.endMm == '' ||
this.planTitle == '' || this.planTitle == '' ||
this.planCntn == '' || this.planCntn == '' ||
this.planColor == '' this.planColor == ''
@ -565,13 +590,17 @@ 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: this.strtHh.toString(), strtHh: strtHh.trim().toString(),
strtMm: this.strtMm.toString(), strtMm: strtMm.trim().toString(),
endHh: this.endHh.toString(), endHh: endHh.trim().toString(),
endMm: this.endMm.toString(), endMm: endMm.trim().toString(),
blocId: this.blocId, blocId: this.blocId,
planTitle: this.planTitle, planTitle: this.planTitle,
planCntn: this.planCntn, planCntn: this.planCntn,
@ -592,13 +621,16 @@ 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: this.strtHh.toString(), strtHh: strtHh.trim().toString(),
strtMm: this.strtMm.toString(), strtMm: strtMm.trim().toString(),
endHh: this.endHh.toString(), endHh: endHh.trim().toString(),
endMm: this.endMm.toString(), endMm: endMm.trim().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

@ -37,12 +37,11 @@
<v-row align="center"> <v-row align="center">
<v-col v-if="label" cols="12" class="py-0"> <v-col v-if="label" cols="12" class="py-0">
<label for="" class="search-box-label"> <label for="" class="search-box-label">
<v-icon small <v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
:class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
{{ item.label }} {{ item.label }}
</label> </label>
</v-col> </v-col>
<v-col :cols="label ? 6 : ''" class="py-0"> <v-col :cols="label ? 8 : ''" class="py-0">
<!-- :value="textfield" --> <!-- :value="textfield" -->
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true" <v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true"
v-model="searchWord" @keyup.enter="typeEnterKey"><template v-slot:append> v-model="searchWord" @keyup.enter="typeEnterKey"><template v-slot:append>
@ -52,13 +51,10 @@
</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="2" class="text-right">
<v-btn :ripple="false" icon tile @click="btnTreeExpand()"> <a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
<!-- {{ treeExpand }} -->
<v-icon size="30"
v-text="treeExpandAll ? 'mdi-chevron-up' : 'mdi-chevron-down'"></v-icon>
</v-btn>
<!-- <v-btn color="primary" dark>펼치기</v-btn> --> <!-- <v-btn color="primary" dark>펼치기</v-btn> -->
<!-- <v-btn color="primary" dark>접기</v-btn> --> <!-- <v-btn color="primary" dark>접기</v-btn> -->
<!-- <v-btn :ripple="false">초기화</v-btn> --> <!-- <v-btn :ripple="false">초기화</v-btn> -->
@ -66,6 +62,10 @@
<v-btn v-if="!searchParam.isMulti" :ripple="false" @click="search()">검색</v-btn> --> <v-btn v-if="!searchParam.isMulti" :ripple="false" @click="search()">검색</v-btn> -->
<!-- as-is 봐도 초기화가 하는 기능을 모르겠음.. --> <!-- as-is 봐도 초기화가 하는 기능을 모르겠음.. -->
</v-col> </v-col>
<v-col cols="2" class="text-right"><a-button class="expand-btn" :ripple="false" @click="btnTreeExpand()">
<v-icon small>$icoExpandAlt</v-icon>
Expand All
</a-button></v-col>
</v-row> </v-row>
<!-- <v-btn color="primary" dark @click="btnTreeExpand()">{{ <!-- <v-btn color="primary" dark @click="btnTreeExpand()">{{
@ -78,7 +78,7 @@
</div> </div>
<v-card-text> <v-card-text>
<div ref="treeGridParent" style="height: 500px"> <div ref="treeGridParent" style="height: 450px">
<component :ref="'treeGrid' + parentPrgmId" :is="loadGrid && dialog ? 'Grid' : null" <component :ref="'treeGrid' + parentPrgmId" :is="loadGrid && dialog ? 'Grid' : null"
:gridName="gridNameTree" :dataPath="searchParam.modalData.selectReadObjListTree" :gridName="gridNameTree" :dataPath="searchParam.modalData.selectReadObjListTree"
:parentPrgmId="parentPrgmId" :bindingData="bindingData" @getRowsData="getRowData" :parentPrgmId="parentPrgmId" :bindingData="bindingData" @getRowsData="getRowData"
@ -89,10 +89,10 @@
:tree-data="ftnPlcListTreeData" :tree-data="ftnPlcListTreeData"
/> --> /> -->
</v-card-text> </v-card-text>
<v-divider></v-divider>
<v-card-actions class="px-6 py-4 d-flex align-center justify-end"> <v-card-actions class="px-6 py-4 d-flex align-center justify-end">
<a-button :ripple="false" @click="setUpdate()" class="mr-2">확인</a-button> <a-button :ripple="false" @click="dialog = false" class="mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="dialog = false" class="mr-2">닫기</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>
@ -155,7 +155,7 @@ export default {
myModalKey: 'selectReadObjListTree', myModalKey: 'selectReadObjListTree',
gridNameTree: 'treeGrid', gridNameTree: 'treeGrid',
loadGrid: true, loadGrid: false,
dialog: false, dialog: false,
treeData: [], // 리턴받은 원본 트리 데이터 treeData: [], // 리턴받은 원본 트리 데이터
@ -278,7 +278,7 @@ export default {
{ {
header: '검침개소명', header: '검침개소명',
name: 'readPlcNm', name: 'readPlcNm',
width: 370, width: 300,
align: 'left', align: 'left',
}, },
{ header: '검침개소', name: 'name', align: 'center' }, { header: '검침개소', name: 'name', align: 'center' },
@ -289,73 +289,31 @@ export default {
async getTreeData() { async getTreeData() {
this.loadGrid = false; this.loadGrid = false;
// const res = await this.postApiReturn({ const res = await this.postApiReturn({
// apiKey: 'selectReadPlcBaseInfo', apiKey: 'selectReadPlcBaseInfo',
// resKey: 'readPlcBaseInfoData', resKey: 'readPlcBaseInfoData',
// sendParam: { sendParam: {
// blocId: blocId:
// this.searchParam.blocMstrList.length > 0 this.searchParam.blocMstrList.length > 0
// ? this.searchParam.blocMstrList[this.searchParam.blocId].blocId ? this.searchParam.blocMstrList[this.searchParam.blocId].blocId
// : this.searchParam.blocId, //"BL0001", : this.searchParam.blocId, //"BL0001",
// // readObjId: this.searchParam.readObj, // "MTT00001" // 전력 코드 고정 // readObjId: this.searchParam.readObj, // "MTT00001" // 전력 코드 고정
// readObjId: this.searchParam.searchReadObj, // "MTT00001" // 전력 코드 고정 readObjId: this.searchParam.searchReadObj, // "MTT00001" // 전력 코드 고정
// useFg: '1', useFg: '1',
// readPlcNmLike: this.searchWord, readPlcNmLike: this.searchWord,
// }, },
// }); });
const treeData = [ // console.log("treeData", res)
{
readPlcNm: '서울 본사',
name: '본사',
_children: [
{
readPlcNm: '서울 본사 - 1층',
name: '1층',
},
{
readPlcNm: '서울 본사 - 2층',
name: '2층',
},
],
},
{
readPlcNm: '부산 지사',
name: '지사',
_children: [
{
readPlcNm: '부산 지사 - A동',
name: 'A동',
_children: [
{
readPlcNm: '부산 지사 - A동 1층',
name: '1층',
},
{
readPlcNm: '부산 지사 - A동 2층',
name: '2층',
},
],
},
{
readPlcNm: '부산 지사 - B동',
name: 'B동',
},
],
},
{
readPlcNm: '대전 창고',
name: '창고',
},
];
// // console.log("treeData", res)
let myOptionsTree = { let myOptionsTree = {
treeColumnOptions: { treeColumnOptions: {
name: 'readPlcNm', name: 'readPlcNm',
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
if (this.searchParam.isMulti) { if (this.searchParam.isMulti) {
myOptionsTree['rowHeaders'] = [{ type: 'checkbox' }]; myOptionsTree['rowHeaders'] = [{ type: 'checkbox' }];
@ -373,26 +331,26 @@ export default {
// this.treeData = res; // this.treeData = res;
// const ROOT = res[0].plcCd; // const ROOT = res[0].plcCd;
// const setTreeData = await this.setTree({ const setTreeData = await this.setTree({
// gridKey: this.gridNameTree, gridKey: this.gridNameTree,
// treeKey: 'READ_PLC_ID', treeKey: 'READ_PLC_ID',
// value: res.map(item => ({ value: res.map(item => ({
// ...item, ...item,
// rowStat: null, rowStat: null,
// readPlcId: item.readPlcId, readPlcId: item.readPlcId,
// readPlcIdNm: item.readPlcId, readPlcIdNm: item.readPlcId,
// upReadPlcId: upReadPlcId:
// item.upReadPlcId == null || item.upReadPlcId == '' item.upReadPlcId == null || item.upReadPlcId == ''
// ? '' ? ''
// : item.upReadPlcId, : item.upReadPlcId,
// upReadPlcNm: upReadPlcNm:
// item.upReadPlcNm == null || item.upReadPlcNm == '' item.upReadPlcNm == null || item.upReadPlcNm == ''
// ? '' ? ''
// : item.upReadPlcNm, : item.upReadPlcNm,
// blocId: item.blocId, blocId: item.blocId,
// useFg: item.useFg === '1' ? true : false, useFg: item.useFg === '1' ? true : false,
// })), })),
// }); });
// this.treeData = setTreeData; // this.treeData = setTreeData;
@ -400,7 +358,7 @@ export default {
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.gridNameTree, gridKey: this.gridNameTree,
modalDataKey: this.modalDataKey, modalDataKey: this.modalDataKey,
value: treeData, value: setTreeData.ROOT || [],
}); });
this.loadGrid = true; this.loadGrid = true;
@ -540,22 +498,4 @@ const selectReadObjListTree = {
} }
} }
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
@if $theme ==dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
}
}
}
}
}
}
</style> </style>

View File

@ -2,22 +2,15 @@
<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-icon v-if="iconShow" small :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }} {{ label }}
</label> </label>
</v-col> </v-col>
<v-col :cols="label ? textCols : ''"> <v-col :cols="label ? textCols : ''">
<v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList" label="사업장을 선택하세요" <v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList"
item-text="blocNm" item-value="idx" append-icon="" class="v-select__custom" 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]">
<template v-slot:append> <template v-slot:append><v-icon>$icoChevronDown</v-icon></template>
    <v-icon>$icoChevronDown</v-icon>
  </template>
</v-select> </v-select>
</v-col> </v-col>
</v-row> </v-row>

View File

@ -20,10 +20,10 @@
outlined outlined
:multiple="multiple" :multiple="multiple"
:hide-details="true" :hide-details="true"
append-icon=""
:class="['v-select__custom', customClass]" :class="['v-select__custom', customClass]"
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
append-icon=""
><template v-slot:append> ><template v-slot:append>
<v-icon>$icoChevronDown</v-icon> <v-icon>$icoChevronDown</v-icon>
</template></v-select> </template></v-select>

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 select-large'" :class="'v-select__custom'"
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
@click="setDatepickerHide" @click="setDatepickerHide"
style="width: 170px; border-radius: 6px !important" style="min-width: 170px;"
> >
<template v-slot:append> <template v-slot:append>
<a-icon <a-icon

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

@ -85,6 +85,11 @@ export default {
type: String, type: String,
require: false, require: false,
}, },
required: {
type: Boolean,
require: false,
default: false
},
}, },
data() { data() {
return { return {

View File

@ -11,9 +11,11 @@
<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]"><template v-slot:append> :class="['v-select__custom', customClass]">
<template v-slot:append>
<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

@ -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

@ -0,0 +1,6 @@
<template>
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" class="v-icon" xmlns="http://www.w3.org/2000/svg">
<path
d="M14.1248 1.71225L10.7462 2.13189C10.6283 2.14617 10.5801 2.28903 10.6623 2.37296L11.6391 3.34975L8.89799 6.09082C8.8714 6.11767 8.85649 6.15392 8.85649 6.19171C8.85649 6.2295 8.8714 6.26575 8.89799 6.2926L9.70335 7.09796C9.7587 7.15332 9.84977 7.15332 9.90513 7.09796L12.648 4.3551L13.6248 5.33189C13.6436 5.35072 13.6674 5.36387 13.6934 5.36981C13.7193 5.37576 13.7465 5.37427 13.7716 5.36551C13.7968 5.35675 13.819 5.34107 13.8356 5.32028C13.8523 5.29949 13.8628 5.27443 13.8658 5.24796L14.2837 1.87117C14.2867 1.84961 14.2846 1.82765 14.2776 1.80702C14.2707 1.78639 14.2591 1.76765 14.2437 1.75226C14.2283 1.73687 14.2096 1.72524 14.1889 1.7183C14.1683 1.71136 14.1463 1.70929 14.1248 1.71225ZM6.2962 8.89439C6.26935 8.8678 6.23309 8.85289 6.19531 8.85289C6.15752 8.85289 6.12127 8.8678 6.09442 8.89439L3.35334 11.6372L2.37656 10.6605C2.35771 10.6416 2.33394 10.6285 2.30797 10.6225C2.282 10.6166 2.25487 10.6181 2.22971 10.6268C2.20455 10.6356 2.18236 10.6513 2.16569 10.6721C2.14903 10.6929 2.13856 10.7179 2.13549 10.7444L1.71584 14.1212C1.70513 14.214 1.78192 14.2908 1.87477 14.2801L5.25335 13.8605C5.3712 13.8462 5.41942 13.7033 5.33727 13.6194L4.36049 12.6426L7.10334 9.89974C7.1587 9.84439 7.1587 9.75332 7.10334 9.69796L6.2962 8.89439Z" />
</svg>
</template>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="pb-5 h100"> <div class="pb-5 h100">
<div class="d-flex align-center justify-space-between"> <div class="d-flex align-center justify-space-between">
<span class="text-h6">공통그룹코드</span> <span class="grid-title">공통그룹코드</span>
<div> <div>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -126,7 +126,7 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value, item => item.commCd == value,

View File

@ -5,9 +5,9 @@
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div ref="gridParent"> <div ref="gridParent" style="min-height: 30vh;">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId" <Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" /> @getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div ref="formParent" class="mt-4"> <div ref="formParent" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
@ -66,7 +66,7 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowDataSetTagRelGrid', gridName: 'rowDataSetTagRelGrid',
detailDataSetTagList: myDataSetTagDetail, detailDataSetTagList: myDataSetTagDetail,
dataPathMock: { dataPathMock: {
@ -128,8 +128,6 @@ export default {
const gridHeight = this.$refs['gridParent'].offsetHeight - 36; const gridHeight = this.$refs['gridParent'].offsetHeight - 36;
const myOptions = { const myOptions = {
// bodyHeight: gridHeight,
// minBodyHeight: gridHeight,
header: { header: {
height: 28, height: 28,
}, },
@ -137,14 +135,9 @@ export default {
minRowHeight: 29, minRowHeight: 29,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
// columnOptions: {
// resizable: true,
// minWidth: 100
// }
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
// value: myOptions
value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions), value: Object.assign(Utility.defaultGridOption(gridHeight), myOptions),
}); });
@ -204,16 +197,11 @@ export default {
value: myColumns, value: myColumns,
}); });
this.$nextTick(() => {
this.loadGrid = true; this.loadGrid = true;
})
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
// if (data.rowStat === 'I') {
// this.detailDataSetTagList[0].disabled = false;
// this.detailDataSetTagList[1].disabled = false;
// } else {
// this.detailDataSetTagList[0].disabled = true;
// this.detailDataSetTagList[1].disabled = true;
// }
this.setGridSelectData({ this.setGridSelectData({
gridKey: gridName, gridKey: gridName,
gridSelect: true, gridSelect: true,
@ -225,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,
@ -308,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,7 +20,6 @@
:editorGrid="true" :editorGrid="true"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -54,22 +53,10 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
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: {
@ -444,22 +431,4 @@ export default {
}, },
}, },
}; };
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
}
]
</script> </script>

View File

@ -19,7 +19,6 @@
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
:dataPath="dataPathMock"
/> />
</div> </div>
<div> <div>
@ -60,24 +59,11 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
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: {
@ -516,12 +502,4 @@ const myDetail = [
iconShow: true, iconShow: true,
}, },
]; ];
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
},
]
</script> </script>

View File

@ -1,10 +1,7 @@
<template> <template>
<div> <div>
<div <div class="d-flex justify-space-between align-center my-5" >
class="d-flex justify-space-between align-center" <span class="txt custom-subtitle-tab">설비 추가 정보</span>
style="height: 80px;"
>
<span class="txt custom-title-4-new">설비 추가 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"
@ -20,7 +17,6 @@
:editorGrid="true" :editorGrid="true"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -52,7 +48,7 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowDetailGrid', gridName: 'rowDetailGrid',
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
@ -343,7 +339,9 @@ export default {
value: myColumns, value: myColumns,
}); });
this.$nextTick(() => {
this.loadGrid = true; this.loadGrid = true;
});
}, },
async btnActions(action) { async btnActions(action) {
let dataArr = []; let dataArr = [];

View File

@ -1,12 +1,12 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center" style="height: 80px;"> <div class="d-flex justify-space-between align-center my-5" >
<span class="txt custom-title-4-new">설비 상수 정보</span> <span class="txt custom-subtitle-tab">설비 상수 정보</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);">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId" <Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" /> @getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div style="min-height: calc(100vh - 900px);" class="mt-4"> <div style="min-height: calc(100vh - 900px);" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailList" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailList"
@ -41,7 +41,7 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowEqpmConstGrid', gridName: 'rowEqpmConstGrid',
detailList: myEqpmConstDetail, detailList: myEqpmConstDetail,
@ -232,7 +232,9 @@ export default {
value: myColumns, value: myColumns,
}); });
this.$nextTick(() => {
this.loadGrid = true; this.loadGrid = true;
});
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
if (data.rowStat === 'I') { if (data.rowStat === 'I') {
@ -289,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;
} }

View File

@ -1,28 +1,24 @@
<template> <template>
<div> <div>
<div <div class="d-flex justify-space-between align-center my-5" >
class="d-flex justify-space-between align-center" <span class="txt custom-subtitle-tab">설비 입출력 정보</span>
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="min-height: calc(100vh - 800px);" > <div ref="gridParent" style="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"
:dataPath="dataPathMock"
/> />
</div> </div>
<div style="min-height: calc(100vh - 900px);" class="mt-4"> <div style="min-height: calc(100vh - 900px);">
<component <component
:is="'Form'" :is="'Form'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -60,28 +56,12 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowEqpmIaoGrid', gridName: 'rowEqpmIaoGrid',
detailList: myEqpmIaoDetail, detailList: myEqpmIaoDetail,
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: {
@ -128,18 +108,18 @@ export default {
}, },
watch: { watch: {
selectedObjId(val) { selectedObjId(val) {
console.log('selectedObjId : ', val); // console.log('selectedObjId : ', val);
if (val === 'TAG') { if (val === 'TAG') {
this.detailList[2].class = 'py-2 d-none'; this.detailList[2].class = 'py-3 d-none';
this.detailList[3].class = 'py-2 d-none'; this.detailList[3].class = 'py-3 pl-4 pt-1 d-none';
this.detailList[4].class = 'py-2'; this.detailList[4].class = 'py-3';
this.detailList[5].class = 'py-2'; this.detailList[5].class = 'py-3';
} else { } else {
// }else if(val==="READ_PLC"){ // }else if(val==="READ_PLC"){
this.detailList[5].class = 'py-2 d-none'; this.detailList[5].class = 'py-3 d-none';
this.detailList[4].class = 'py-2 d-none'; this.detailList[4].class = 'py-3 d-none';
this.detailList[3].class = 'py-2'; this.detailList[3].class = 'py-3 pl-4 pt-1';
this.detailList[2].class = 'py-2'; this.detailList[2].class = 'py-3';
} }
}, },
selectedCalcFg(val) { selectedCalcFg(val) {
@ -172,7 +152,7 @@ export default {
}, },
}, },
mounted() { mounted() {
// this.init(); this.init();
}, },
methods: { methods: {
...mapMutations({ ...mapMutations({
@ -355,7 +335,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 => {
@ -416,6 +396,7 @@ export default {
}, },
}; };
function checkDuplicate(data, targetKey) { function checkDuplicate(data, targetKey) {
var duplicateFlag = false; var duplicateFlag = false;
var set = new Set(); var set = new Set();
@ -486,7 +467,7 @@ const myEqpmIaoDetail = [
}, },
{ {
type: 'EvtObjPop', type: 'EvtObjPop',
labelContent: '대상 항목 111', labelContent: '대상 항목',
valueNm: 'objId', valueNm: 'objId',
valueNm2: 'objNm', valueNm2: 'objNm',
bindNm: 'objNm', bindNm: 'objNm',
@ -501,7 +482,7 @@ const myEqpmIaoDetail = [
}, },
{ {
type: 'InputText', type: 'InputText',
cols: 5, cols: 6,
class: 'py-3 d-none', class: 'py-3 d-none',
valueNm: 'objNm', valueNm: 'objNm',
readonly: true, readonly: true,
@ -614,13 +595,4 @@ 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>

View File

@ -271,63 +271,6 @@ export default {
value: myColumns, value: myColumns,
}); });
const res = [
{
"comId": "COM001",
"ercId": "ERC001",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 120.5,
"peakPow": 450,
"baseChrg": 30000,
"notiChrg": 32500,
"rmrk": "Standard summer rate",
"blocId": "BLOC001",
"regUserNo": "USER001",
"regDttm": "2025-07-01T09:00:00",
"procUserNo": "USER002",
"procDttm": "2025-07-15T14:30:00"
},
{
"comId": "COM002",
"ercId": "ERC002",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 98.75,
"peakPow": 300,
"baseChrg": 25000,
"notiChrg": 27000,
"rmrk": "Reduced rate for solar",
"blocId": "BLOC002",
"regUserNo": "USER003",
"regDttm": "2025-07-02T10:15:00",
"procUserNo": "USER004",
"procDttm": "2025-07-16T11:45:00"
},
{
"comId": "COM003",
"ercId": "ERC003",
"objMm": "202507",
"objYm": "2025-07",
"unitPrce": 110.0,
"peakPow": 400,
"baseChrg": 28000,
"notiChrg": 29500,
"rmrk": "Geothermal adjustment",
"blocId": "BLOC003",
"regUserNo": "USER005",
"regDttm": "2025-07-03T08:45:00",
"procUserNo": "USER006",
"procDttm": "2025-07-17T13:20:00"
}
]
this.setGridData({
gridKey: this.gridName,
value: res,
});
this.loadGrid = true; this.loadGrid = true;
}, },
async btnActions(action) { async btnActions(action) {

View File

@ -4,7 +4,7 @@
class="d-flex justify-space-between align-center" class="d-flex justify-space-between align-center"
style="height: 80px;" style="height: 80px;"
> >
<span class="txt">검침 대상 추가 정보</span> <span class="txt custom-subtitle-tab">검침 대상 추가 정보</span>
<Buttons <Buttons
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
:bindingData="gridName" :bindingData="gridName"
@ -20,8 +20,6 @@
:editorGrid="true" :editorGrid="true"
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
@getRowsData="getRowData" @getRowsData="getRowData"
:selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -55,23 +53,10 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowDetailGrid', gridName: 'rowDetailGrid',
rowKey: null, rowKey: null,
edtingFinishFlag: 'Y', edtingFinishFlag: 'Y',
dataPathMock: {
"rowDetailGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
}; };
}, },
computed: { computed: {
@ -461,25 +446,4 @@ export default {
search() {}, search() {},
}, },
}; };
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
grpCd: 'GRP02',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
grpCd: 'GRP01',
}
];
</script> </script>

View File

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

View File

@ -8,9 +8,9 @@
<div ref="gridParent" style="height: calc((100vh - 520px) /2);"> <div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData" <Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :dataPath="imgInfoTabData" /> :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div ref="formParent"> <div ref="formParent" style="height: calc((100vh - 400px) /2);">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
:detailList="detailReadPlcImgList" @gridEditingFinish="gridEditingFinish" /> :detailList="detailReadPlcImgList" @gridEditingFinish="gridEditingFinish" />
</div> </div>
@ -44,26 +44,9 @@ export default {
}, },
data() { data() {
return { return {
loadGrid: true, loadGrid: false,
gridName: 'rowReadPlcImgGrid', gridName: 'rowReadPlcImgGrid',
detailReadPlcImgList: myReadPlcImgDetail, detailReadPlcImgList: myReadPlcImgDetail,
imgInfoTabData: {
"rowReadPlcImgGrid": {
data:
[
{ "objReadPlcId": "1001", "objReadPlcNm": "서울역", "distRt": 12 },
{ "objReadPlcId": "1002", "objReadPlcNm": "강남역", "distRt": 8 },
{ "objReadPlcId": "1003", "objReadPlcNm": "잠실역", "distRt": 15 },
]
,
column: [
{ header: '대상 검침개소 번호', name: 'objReadPlcId', align: 'center' },
{ header: '대상 검침개소명', name: 'objReadPlcNm', align: 'left' },
{ header: '분배율(1~100)', name: 'distRt', align: 'right' },
]
}
}
}; };
}, },
computed: { computed: {
@ -120,10 +103,11 @@ export default {
header: { header: {
height: 28, height: 28,
}, },
rowHeight: 29, // rowHeight: 29,
minRowHeight: 29, // minRowHeight: 29,
selectionUnit: 'row', selectionUnit: 'row',
editingEvent: 'click', editingEvent: 'click',
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,

View File

@ -7,9 +7,9 @@
</div> </div>
<div ref="gridParent" style="height: calc((100vh - 520px) /2);"> <div ref="gridParent" style="height: calc((100vh - 520px) /2);">
<Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData" <Grid :ref="gridName" :gridName="gridName" :parentPrgmId="parentPrgmId" @getRowsData="getRowData"
:innerTabGridInfo="innerTabGridInfo" :dataPath="tagRelTabData" /> :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div ref="formParent" > <div class="mt-3" ref="formParent" style="height: calc((100vh - 400px) /2);">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName"
:detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" /> :detailList="detailReadPlcTagList" @gridEditingFinish="gridEditingFinish" />
</div> </div>
@ -46,78 +46,7 @@ export default {
loadGrid: false, loadGrid: false,
gridName: 'rowReadPlcTagRelGrid', gridName: 'rowReadPlcTagRelGrid',
detailReadPlcTagList: myReadPlcTagDetail, detailReadPlcTagList: myReadPlcTagDetail,
tagRelTabData: {
"rowReadPlcTagRelGrid": {
data:
[
{
"tagNm": "TAG_001",
"ercId": "전기",
"distRt": 10,
"reprTagFg": "1",
"useFg": "Y",
"rmrk": "기본 설정",
"tagId": "TAG_001"
},
{
"tagNm": "TAG_002",
"ercId": "가스",
"distRt": 15,
"reprTagFg": "0",
"useFg": "Y",
"rmrk": "",
"tagId": "TAG_002"
},
{
"tagNm": "TAG_003",
"ercId": "수도",
"distRt": 8,
"reprTagFg": "0",
"useFg": "N",
"rmrk": "테스트용",
"tagId": "TAG_003"
},
]
,
column: [
{ header: 'TAG 명', name: 'tagNm', align: 'left' },
{
header: '에너지원',
name: 'ercId',
align: 'center',
width: 100,
},
{
header: '분배율(1~100)',
name: 'distRt',
align: 'right',
width: 100,
},
{
header: '대표 TAG 여부',
name: 'reprTagFg',
align: 'center',
width: 100,
formatter({ value }) {
return value == '1' ? '예' : '아니오';
},
},
{
header: '사용여부',
name: 'useFg',
align: 'center',
width: 100,
},
{ header: '비고', name: 'rmrk', align: 'left', width: 100 },
{ header: 'TAG ID', name: 'tagId', align: 'center', hidden: true },
]
}
}
}; };
}, },
computed: { computed: {

View File

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

View File

@ -112,13 +112,6 @@
}" /> }" />
<!-- <router-view :key="$route.fullPath"/> --> <!-- <router-view :key="$route.fullPath"/> -->
</div> </div>
<!--
v-model="treeValue"
return-object
@input="treeModel"
@update:active="clkTab"
-->
<AdminMenu :miniVariant="miniVariant" :userNm="this.userInfo.userNm" :comId="this.userInfo.comId" v-if="false" /> <AdminMenu :miniVariant="miniVariant" :userNm="this.userInfo.userNm" :comId="this.userInfo.comId" v-if="false" />
<component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" /> <component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" />
@ -148,14 +141,6 @@
</button> </button>
</template> </template>
</v-treeview> </v-treeview>
<!-- <template #append>
<p
class="text-caption"
:style="{ letterSpacing: '-0.2px !important' }"
>
&copy; 2022. SK C&C all rights reserved.
</p>
</template> -->
</v-navigation-drawer> </v-navigation-drawer>
</div> </div>
@ -322,19 +307,6 @@
</div> </div>
</div> </div>
</v-main> </v-main>
<!-- <v-footer
:absolute="!fixed"
app
:class="
drawer
? miniVariant
? 'drawerFooter miniFooter'
: 'drawerFooter'
: 'full-size'
"
>
<span>&copy; 2022. SK C&C all rights reserved.</span>
</v-footer> -->
</fullscreen> </fullscreen>
</v-app> </v-app>
</template> </template>

View File

@ -1,809 +0,0 @@
<template>
<v-app :class="`${isDarkMode ? 'dark-mode' : 'light-mode'}`">
<!-- <v-app :class="'light-mode'"> -->
<fullscreen :fullscreen.sync="fullscreen">
<v-navigation-drawer
ref="navigationdrawer"
:value="drawer"
:mini-variant="miniVariant"
:clipped="clipped"
:absolute="true"
mini-variant-width="60"
fixed
app
>
<div class="d-flex align-center justify-space-between py-4 px-3">
<router-link class="home" :to="myHome.root">
<div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
<img v-else src="@/assets/images/logo_lm.png" />
</div>
<!-- <div class="lnb-logo">FEMS</div>-->
</router-link>
<v-app-bar-nav-icon
ref="appbarnavicon"
id="appbarnavicon"
@click.stop="miniVariant = !miniVariant"
@click="updateTreeview"
:style="{
backgroundColor: 'transparent',
color: isDarkMode ? '#fff' : '#111',
}"
/>
<!-- <router-view :key="$route.fullPath"/> -->
</div>
<!--
v-model="treeValue"
return-object
@input="treeModel"
@update:active="clkTab"
-->
<AdminMenu
:miniVariant="miniVariant"
:userNm="this.userInfo.userNm"
:comId="this.userInfo.comId"
/>
<component
ref="changePswdPop"
:is="'ChangePswdPop'"
v-show="false"
:comId="this.userInfo.comId"
/>
<v-treeview
ref="treeview"
:active.sync="activeTree"
active-class="v-treeview-node--active"
:items="treevieItems"
activatable
hoverable
color="#3896ff"
open-on-click
@update:open="openNode"
>
<template slot="label" slot-scope="{ item }">
<button
:class="{ 'justify-center': miniVariant }"
@mouseover="doMouseOver"
>
<v-icon
v-if="item.lvl === 1 && menuIconKeys.includes(item.menuId)"
v-text="menuIconById[item.menuId]"
:class="{ 'mr-2': !miniVariant }"
size="20"
></v-icon>
<v-icon
v-else-if="
item.lvl === 1 && !menuIconKeys.includes(item.menuId)
"
:class="{ 'mr-2': !miniVariant }"
size="20"
>mdi-package-variant-closed</v-icon
>
<v-icon
v-else-if="item.lvl === 2"
:class="{ 'mr-2': !miniVariant }"
size="10"
>
mdi-checkbox-blank
</v-icon>
<v-icon
v-else-if="
item.lvl >= 3 && item.childeVo.length === 0 && item.url
"
:class="miniVariant === false ? 'mr-2' : ''"
size="9"
>
$depth3rdBulletDark
</v-icon>
<span v-if="item.url"
>{{ item.menuNm }}
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
</span>
<span v-else-if="!item.url">{{ item.menuNm }}</span>
<v-icon
v-if="item.lvl >= 1 && item.childeVo.length > 0 && !item.url"
>
mdi-chevron-down
</v-icon>
</button>
</template>
</v-treeview>
<!-- <template #append>
<p
class="text-caption"
:style="{ letterSpacing: '-0.2px !important' }"
>
&copy; 2022. SK C&C all rights reserved.
</p>
</template> -->
</v-navigation-drawer>
<v-main>
<v-container fluid>
<router-tab
ref="routerTab"
:tabs="treevieItems"
:keep-last-tab="false"
:contextmenu="false"
>
<template slot-scope="{ title, closable, to }">
<span>{{ title }}</span>
<v-icon
size="18"
class="ml-2"
v-if="closable"
@click.stop="onCloseTab(to)"
>mdi-close-circle</v-icon
>
</template>
<template #end>
<!--<ThemeSwitch />-->
<v-menu offset-y>
<template v-slot:activator="{ on, attrs }">
<v-btn
:ripple="false"
tile
class="btn-close"
v-bind="attrs"
v-on="on"
>
<span class="body-2">닫기</span>
<v-icon size="20">mdi-chevron-down</v-icon>
</v-btn>
</template>
<v-list
class="py-2 btn-close-menu-list"
:style="{
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}"
>
<v-list-item class="px-2">
<v-list-item-title @click="delAllTabsData()" class="body-2"
>전체 닫기</v-list-item-title
>
</v-list-item>
<v-list-item class="px-2">
<v-list-item-title
@click="deleteSblingsTab()"
class="body-2"
>나머지 닫기</v-list-item-title
>
</v-list-item>
</v-list>
</v-menu>
<v-menu offset-y>
<template v-slot:activator="{ on, attrs }">
<v-btn
:ripple="false"
tile
class="btn-close"
v-bind="attrs"
v-on="on"
style="width:100px;"
>
<span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon>
</v-btn>
</template>
<v-list
v-if="myMenuList.length > 0"
class="py-2 btn-close-menu-list"
:style="{
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}"
>
<v-list-item
v-for="item in myMenuList"
:key="item.menuId"
class="px-2"
style="cursor:pointer;"
>
<v-list-item-title
@click="moveToMyMenu(item.url, item.menuId, item.prgmId)"
class="body-2"
>{{ item.menuNm }}</v-list-item-title
>
</v-list-item>
</v-list>
</v-menu>
<v-btn
icon
tile
:ripple="false"
@click="removeBookMark()"
v-if="bookmarkBtn == 1"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle;"
>star</span
>
</v-btn>
<v-btn
icon
tile
:ripple="false"
@click="addBookMark()"
v-if="bookmarkBtn == 0"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle;"
>star_border</span
>
</v-btn>
<v-btn
id="refresh"
icon
tile
:ripple="false"
@click="refreshTab()"
>
<v-icon>mdi-refresh</v-icon>
</v-btn>
<v-btn icon tile :ripple="false" @click="setDrawer()">
<v-icon>mdi-crop-free</v-icon>
</v-btn>
<!-- <v-btn icon tile :ripple="false" @click="toggle()">
<v-icon v-if="!fullscreen">mdi-arrow-expand-all</v-icon>
<v-icon v-else>mdi-arrow-collapse-all</v-icon>
</v-btn> -->
</template>
</router-tab>
</v-container>
<div v-if="loadingStackCnt > 0" class="loading-container">
<div class="loading">
<Fade-loader />
</div>
</div>
</v-main>
<!-- <v-footer
:absolute="!fixed"
app
:class="
drawer
? miniVariant
? 'drawerFooter miniFooter'
: 'drawerFooter'
: 'full-size'
"
>
<span>&copy; 2022. SK C&C all rights reserved.</span>
</v-footer> -->
</fullscreen>
</v-app>
</template>
<script>
import { mapState, mapActions, mapMutations } from 'vuex'; // , mapActions
import ThemeSwitch from '@/components/common/ThemeSwitch';
import AdminMenu from '@/components/common/AdminMenu';
import FadeLoader from 'vue-spinner/src/FadeLoader.vue';
import ChangePswdPop from '~/components/common/modal/ChangePswdPop';
export default {
components: {
ThemeSwitch,
AdminMenu,
FadeLoader,
ChangePswdPop,
},
data() {
return {
fullscreen: false,
activeTree: [],
clipped: false,
fixed: false,
miniVariant: false,
// activeTabIdx: "",
routerTabInstance: null,
// programIdObj: null,
myPrgmId: null,
treeValue: [],
menuIconById: {
// MNU0003: 'mdi-chart-line',
// MNU0004: 'mdi-alarm-light',
// MNU0005: 'mdi-pencil-box-outline',
// MNU0006: 'mdi-cog-outline',
MNU0002: 'mdi-monitor',
MNU0091: 'mdi-chart-box',
MNU0102: 'mdi-human-male-board-poll',
MNU0103: 'mdi-file-chart-outline',
MNU0104: 'mdi-chart-sankey-variant',
MNU0106: 'mdi-database-edit-outline',
MNU0105: 'mdi-chart-bell-curve',
MNU0006: 'mdi-bulletin-board',
MNU0007: 'mdi-cog',
menu2: 'mdi-monitor',
menu3: 'mdi-chart-box',
menu4: 'mdi-human-male-board-poll',
menu5: 'mdi-file-chart-outline',
menu6: 'mdi-chart-sankey-variant',
menu7: 'mdi-database-edit-outline',
menu8: 'mdi-bulletin-board',
},
isLoading: false,
loadingStackCnt: 0,
bookmarkBtn: 0,
myMenuList: [],
prgmIdList: [],
initPageData: {},
obj: {},
newObj: {},
};
},
computed: {
...mapState({
myHome: 'myHome',
myHomeTabItems: 'myHomeTabItems',
indexRoot: 'indexRoot',
treevieItems: 'treevieItems',
menuData: 'menuData',
menuLink: state => state.modules.menu,
activeMenuId: state => state.activeMenuInfo.menuId,
isDarkMode: 'isDarkMode',
drawer: state => state.drawer,
userInfo: state => state.userInfo,
pageData: 'pageData',
}),
activeTabs() {
if (this.routerTabInstance) {
return this.routerTabInstance.activeTab;
} else {
return this.myHome.root;
}
},
menuIconKeys() {
return Object.keys(this.menuIconById);
},
},
watch: {
activeTabs: {
// 탭 클릭시 좌측 treeview 싱크 맞추가
deep: true,
handler(value) {
if (value) {
const prgmId = value.prgmId;
let thisPrgmId = this.$route.query.prgmId;
var tmp = 0;
for (var i = 0; i < this.myMenuList.length; i++) {
if (this.myMenuList[i].prgmId == thisPrgmId) {
tmp = 1;
}
}
this.bookmarkBtn = tmp;
//if (thisPrgmId && this.myPrgmId && this.myPrgmId != thisPrgmId) {
this.myPrgmId = prgmId;
this.activeTree.pop(); // 기존 황성화 트리 값 삭제
this.activeTree.push(thisPrgmId); // 인덱스가 아닐 경우 새로 넣어줌
// this.$set(this.activeTree, 0, prgmId); // treeview activetree 새로 셋팅 <= 위 pop() 과 push() 로 대체
//}
}
},
},
activeTree: {
deep: true,
handler(newVal, oldVal) {
var _this = this;
const nv = newVal[0];
const ov = oldVal[0];
if (nv !== ov) {
if (!nv) {
// 중복클릭 시 발생 상황 기존 값을 다시 넣어줌
this.activeTree.push(ov);
} else {
this.myPrgmId = nv;
if (this.menuData[nv].url) {
const menuUrl = this.menuData[nv].url;
const menuId = this.menuData[nv].menuId;
const isCommMenu = menuUrl.indexOf('comm/');
const isEmsMenu = menuUrl.indexOf('ems/');
const isCmmsMenu = menuUrl.indexOf('cmms/');
// console.log('activeTree...');
if (isCommMenu > -1 || isEmsMenu > -1 || isCmmsMenu > -1) {
// console.log('activeTree if stmt1');
// console.log('this.isLoading : ', this.isLoading);
// if(this.isLoading == true){
// console.log('if isLoading stmt1');
// return;
// }
this.$router.push({
path: `${this.menuData[nv].url}?prgmId=${nv}`,
});
// this.$router.beforeEach((to, from, next) => {
// if(_this.isLoading == true){
// next(false);
// }
// if (!to.matched.length) {
// next(false);
// } else {
// next();
// }
// });
var tmp = 0;
for (var i = 0; i < this.myMenuList.length; i++) {
if (this.myMenuList[i].menuId == menuId) {
tmp = 1;
}
}
this.bookmarkBtn = tmp;
} else {
// console.log('activeTree if stmt2');
// console.log('this.isLoading : ', this.isLoading);
// if(this.isLoading == true){
// console.log('if isLoading stmt2');
// return;
// }
this.$refs.routerTab.openIframe(
encodeURI(
`http://localhost:9999${this.menuData[nv].url}?prgmId=${nv}`,
),
this.menuData[nv].menuNm,
);
}
this.$axios.get(`${this.menuData[nv].url}?$menuId=${menuId}`);
} else alert('지정된 페이지 경로가 없습니다.');
}
}
},
},
menuData: {
deep: true,
handler(newVal, oldVal) {},
},
pageData: {
deep: true,
handler(newVal, oldVal) {
localStorage.setItem('pageData', JSON.stringify(this.pageData));
//console.log("localPageData", this.pageData);
},
},
// menuLink: {
// deep: true,
// handler() {
// let prgmIdList = Object.keys(this.menuData);
// let initPageData = {};
// prgmIdList.forEach(item => {
// let newObj = {
// [item] : {}
// };
// initPageData = Object.assign(initPageData, newObj)
// });
// }
// }
},
created() {},
beforeUnmount() {
//window.removeEventListener('beforeunload', this.unLoadEvent);
},
async mounted() {
//window.addEventListener('beforeunload', this.unLoadEvent);
const _this = this;
await this.getMenu({});
await this.initPageDataFunc();
await this.selectMyMenuFunc();
this.routerTabInstance = this.$refs.routerTab;
if (this.$route.fullPath == '/') {
this.routerTabInstance.reset();
this.$router.replace(this.myHome.root);
} else if (this.$route.fullPath != this.myHome.root) {
this.$refs.routerTab.items.unshift(this.myHomeTabItems);
} else {
this.refreshTab();
}
// this.$router.beforeEach((to, from, next) => {
// _this.isLoading = true;
// // console.log('$router.beforeEach...');
// // console.log('_this.isLoading[beforeEach] : ', _this.isLoading);
// // console.log('_this.loadingStackCnt : ', _this.loadingStackCnt);
// if(_this.loadingStackCnt > 0 && _this.isLoading){
// next(false);
// // return;
// }else if (!to.matched.length){
// next(false);
// }else{
// next();
// }
// });
// this.$router.afterEach((to, from, failure) => {
// });
// 요청 인터셉터
this.$axios.interceptors.request.use(
function(config) {
//alert(1)
_this.isLoading = true;
if(config.url.search('Page')<0){
// _this.loadingStackCnt++;
}
return config;
},
function(error) {
// 에라 나면 로딩 끄기
//alert(2)
_this.isLoading = false;
// if(error.url.search('Page')<0){
// _this.loadingStackCnt--;
// }
return Promise.reject(error);
},
);
// 응답 인터셉터
this.$axios.interceptors.response.use(
function(response) {
_this.isLoading = false;
if(response.config.url.search('Page')<0){
_this.loadingStackCnt--;
}
//alert(3)
return response;
},
function(error) {
// 응답 에러 시에도 로딩 끄기
//alert(4 )
_this.isLoading = false;
// if(error.url.search('Page')<0){
// _this.loadingStackCnt--;
// }
return Promise.reject(error);
},
);
},
methods: {
...mapMutations({
setDrawer: 'setDrawer', // 사이드메뉴 접고 펼치기
setPageDataInit: 'setPageDataInit',
}),
...mapActions({
getMenu: 'modules/menu/getMenu', // 트리메뉴 가져오기
chkOpenTabList: 'chkOpenTabList', // 트리메뉴 클릭 시 해당 pprgmId push
postUpdateApi: 'modules/list/postUpdateApi',
postApiReturn: 'modules/list/postApiReturn',
}),
// // tabActive(id) {},
// clkTab(itemArr) {
// console.log(itemArr[0]);
// if (!itemArr[0].to) return;
// this.$router.push({
// path: itemArr[0].to
// });
// },
toggle() {
this.fullscreen = !this.fullscreen;
},
refreshTab() {
// console.log("현재 탭 새로고침");
//this.routerTabInstance.refresh();
this.$nuxt.refresh();
this.routerTabInstance.refresh();
},
delAllTabsData() {
// console.log("탭 전체 닫기");
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
// const diffTo = this.routerTabInstance.items[i].to;
// if (diffTo != this.myHome.root) {
// this.routerTabInstance.items.splice(i, 1);
// }
// }
//if(this.$router.currentRoute.fullPath != this.myHome.root){
if (this.routerTabInstance.items.length > 0) {
this.routerTabInstance.reset();
}
this.$router.replace(this.myHome.root);
//}
},
deleteSblingsTab() {
// console.log("탭 나머지 닫기");
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
// const activeTo = this.routerTabInstance.activeTab.to;
// const diffTo = this.routerTabInstance.items[i].to;
// if (activeTo != diffTo && diffTo != this.myHome.root) {
// this.routerTabInstance.items.splice(i, 1);
// }
// }
if (this.routerTabInstance.items.length > 1) {
for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
const activeTo = this.routerTabInstance.activeTab.to;
const diffTo = this.routerTabInstance.items[i].to;
if (activeTo != diffTo && diffTo != this.myHome.root) {
this.routerTabInstance.close(diffTo);
}
}
}
},
tabScrollMove(dir) {
const scrollTab = this.routerTabInstance.$refs.scroll;
const scrollWidth =
scrollTab.scrollData.scrollWidth - scrollTab.scrollData.clientWidth;
const scrollLeft = scrollTab.scrollData.scrollLeft;
const xAxis = this.calcScroll(scrollLeft, scrollWidth, dir);
scrollTab.scrollTo(xAxis, 0);
},
updateTreeview() {
if (this.miniVariant) {
// sidebar 접혀져 있을 때
this.$refs.treeview.updateAll();
} else {
// sidebar 펼쳐져 있을 때
}
},
// 열려있는 노드의 key 값 리턴(선택된 값이 아님)
openNode(node) {
//console.log('onOpen');
if (this.miniVariant) {
// sidebar 접혀져 있을 때
if (event.currentTarget.id !== this.$refs.appbarnavicon.$refs.link.id) {
this.$refs.appbarnavicon.click(event);
}
} else {
// sidebar 펼쳐져 있을 때
}
},
doMouseOver: function(event) {
//console.log(event);
},
calcScroll(sl, sw, dir) {
const deScrW = 60;
let returnSl = 0;
switch (dir) {
case 'prev':
returnSl = sl - deScrW <= 0 ? 0 : sl - deScrW;
break;
case 'next':
returnSl = sl + deScrW >= sw ? sw : sl + deScrW;
break;
default:
break;
}
return returnSl;
},
initPageDataFunc() {
const _this = this;
this.prgmIdList = Object.keys(this.menuData);
this.initPageData = {};
this.prgmIdList.forEach(item => {
_this.obj = {};
if (_this.pageData[item]) {
_this.obj = _this.pageData[item];
}
_this.newObj = {};
_this.newObj = {
[item]: _this.obj,
};
_this.initPageData = Object.assign(
{},
_this.initPageData,
_this.newObj,
);
});
localStorage.setItem('pageData', JSON.stringify(this.initPageData));
this.setPageDataInit(this.initPageData);
},
onCloseTab(to) {
const findIndex = this.$tabs.items.findIndex(v => v.to === to);
const { to: next } = this.$tabs.items[findIndex - 1];
this.$tabs.close(to, null);
if (this.$router.currentRoute.fullPath != next) {
this.$router.replace(next);
}
},
async addBookMark() {
var params = {
menuId: this.activeMenuId,
};
await this.postUpdateApi({
apiKey: 'saveBookmark',
sendParam: {
datas: {
bookmarkDt: [params],
},
params: {},
},
});
const res = await this.postApiReturn({
apiKey: 'selectMyMenu',
resKey: 'menuData',
sendParam: {},
});
this.myMenuList = res;
this.bookmarkBtn = 1;
},
async removeBookMark() {
var params = {
menuId: this.activeMenuId,
};
await this.postUpdateApi({
apiKey: 'deleteBookmark',
sendParam: {
datas: {
bookmarkDt: [params],
},
params: {},
},
});
const res = await this.postApiReturn({
apiKey: 'selectMyMenu',
resKey: 'menuData',
sendParam: {},
});
this.myMenuList = res;
this.bookmarkBtn = 0;
},
moveToMyMenu(url, menuId, prgmId) {
// console.log('moveToMyMenu...');
// if(this.isLoading == true){
// console.log('if isLoading stmt3');
// return;
// }
this.$router.push({
path: url + '?prgmId=' + prgmId,
});
},
async selectMyMenuFunc() {
const headers = {
headers: {
'X-Fems-MenuId': 'MNU0001',
},
};
const params = { params: {} };
const res = await this.$axios.post(
'/comm/base/MenuMngCtr/selectMyMenu',
params,
headers,
);
this.myMenuList = res.data.dataset.menuData;
},
// unLoadEvent: function (event) {
// //if (this.isLeaveSite) return;
// //this.delAllTabsData();
// this.$router.push({
// path: this.myHome.root
// });
// console.log("event", event)
// event.preventDefault();
// event.returnValue = '';
// },
// treeModel(obj) {
// console.log(">>> treeModel::obj = ", obj);
// this.treeValue[0] = obj;
// this.$refs.treeview.updateAll();
// // console.log(this.$refs.treeview);
// // this.$refs.treeview.activeCache = obj.id;
// }
},
};
</script>
<style lang="scss" scoped>
.loading {
z-index: 99;
position: fixed;
top: 50%;
left: 50%;
width: 100%;
height: 100%;
transform: translate(-50%, -50%);
background-color: rgba(0, 0, 0, 0.4);
//box-shadow: rgba(68, 67, 67, 0.9) 0 0 0 9999px;
}
.v-spinner {
top: 50%;
left: 50%;
}
</style>

View File

@ -1,928 +0,0 @@
<template>
<v-app :class="`${isDarkMode ? 'dark-mode' : 'light-mode'}`">
<!-- <v-app :class="'light-mode'"> -->
<fullscreen :fullscreen.sync="fullscreen">
<v-navigation-drawer
ref="navigationdrawer"
:value="drawer"
:mini-variant="miniVariant"
:clipped="clipped"
:absolute="true"
mini-variant-width="60"
fixed
app
>
<div class="d-flex align-center justify-space-between py-4 px-3">
<router-link class="home" :to="myHome.root">
<div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
<img v-else src="@/assets/images/logo_lm.png" />
</div>
<!-- <div class="lnb-logo">FEMS</div>-->
</router-link>
<v-app-bar-nav-icon
ref="appbarnavicon"
id="appbarnavicon"
@click.stop="miniVariant = !miniVariant"
@click="updateTreeview"
:style="{
backgroundColor: 'transparent',
color: isDarkMode ? '#fff' : '#111',
}"
/>
<!-- <router-view :key="$route.fullPath"/> -->
</div>
<!--
v-model="treeValue"
return-object
@input="treeModel"
@update:active="clkTab"
-->
<AdminMenu
:miniVariant="miniVariant"
:userNm="this.userInfo.userNm"
:comId="this.userInfo.comId"
/>
<component
ref="changePswdPop"
:is="'ChangePswdPop'"
v-show="false"
:comId="this.userInfo.comId"
/>
<v-treeview
ref="treeview"
:active.sync="activeTree"
active-class="v-treeview-node--active"
:items="treevieItems"
activatable
hoverable
color="#3896ff"
open-on-click
@update:open="openNode"
>
<template slot="label" slot-scope="{ item }">
<button :class="{ 'justify-center': miniVariant }" @mouseover="doMouseOver">
<v-icon
v-if="item.lvl === 1 && menuIconKeys.includes(item.menuId)"
v-text="menuIconById[item.menuId]"
:class="{ 'mr-2': !miniVariant }"
size="20"
></v-icon>
<v-icon
v-else-if="item.lvl === 1 && !menuIconKeys.includes(item.menuId)"
:class="{ 'mr-2': !miniVariant }"
size="20"
>mdi-package-variant-closed</v-icon
>
<v-icon
v-else-if="item.lvl === 2"
:class="{ 'mr-2': !miniVariant }"
size="10"
>
mdi-checkbox-blank
</v-icon>
<v-icon
v-else-if="item.lvl >= 3 && item.childeVo.length === 0 && item.url"
:class="miniVariant === false ? 'mr-2' : ''"
size="9"
>
$depth3rdBulletDark
</v-icon>
<span v-if="item.url"
>{{ item.menuNm }}
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
</span>
<span v-else-if="!item.url">{{ item.menuNm }}</span>
<v-icon v-if="item.lvl >= 1 && item.childeVo.length > 0 && !item.url">
mdi-chevron-down
</v-icon>
</button>
</template>
</v-treeview>
<!-- <template #append>
<p
class="text-caption"
:style="{ letterSpacing: '-0.2px !important' }"
>
&copy; 2022. SK C&C all rights reserved.
</p>
</template> -->
</v-navigation-drawer>
<v-main>
<v-container fluid>
<router-tab
ref="routerTab"
:tabs="treevieItems"
:keep-last-tab="false"
:contextmenu="false"
>
<template slot-scope="{ title, closable, to }">
<span>{{ title }}</span>
<v-icon size="18" class="ml-2" v-if="closable" @click.stop="onCloseTab(to)"
>mdi-close-circle</v-icon
>
</template>
<template #end>
<ThemeSwitch style="margin-right: 20px" />
<v-menu offset-y>
<template v-slot:activator="{ on, attrs }">
<!-- <v-btn :ripple="false" tile class="btn-close" v-bind="attrs" v-on="on">
<span class="body-2">닫기</span>
<v-icon size="20">mdi-chevron-down</v-icon>
</v-btn> -->
<a-button style="width: 80px; height: 36px" class="btn-close">
<span class="body-2">닫기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button
>
</template>
<v-list
class="py-2 btn-close-menu-list"
:style="{
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}"
>
<v-list-item class="px-2">
<v-list-item-title @click="delAllTabsData()" class="body-2"
>전체 닫기</v-list-item-title
>
</v-list-item>
<v-list-item class="px-2">
<v-list-item-title @click="deleteSblingsTab()" class="body-2"
>나머지 닫기</v-list-item-title
>
</v-list-item>
</v-list>
</v-menu>
<v-menu offset-y>
<template v-slot:activator="{ on, attrs }">
<!-- <v-btn
:ripple="false"
tile
class="btn-close"
v-bind="attrs"
v-on="on"
style="width: 100px"
>
<span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon>
</v-btn> -->
<a-button style="width: 100px; height: 36px" class="btn-close">
<span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button
>
</template>
<v-list
v-if="myMenuList.length > 0"
class="py-2 btn-close-menu-list"
:style="{
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}"
>
<v-list-item
v-for="item in myMenuList"
:key="item.menuId"
class="px-2"
style="cursor: pointer"
>
<v-list-item-title
@click="moveToMyMenu(item.url, item.menuId, item.prgmId)"
class="body-2"
>{{ item.menuNm }}</v-list-item-title
>
</v-list-item>
</v-list>
</v-menu>
<!-- <v-btn
icon
tile
:ripple="false"
@click="removeBookMark()"
v-if="bookmarkBtn == 1"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle"
>star</span
>
</v-btn> -->
<a-button
id="refresh"
:style="{
padding: '0',
width: '36px',
height: '36px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '4px', // square corners
}"
type="text"
@click="removeBookMark"
v-if="bookmarkBtn == 1"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle"
>star</span
>
</a-button>
<!-- <v-btn
icon
tile
:ripple="false"
@click="addBookMark()"
v-if="bookmarkBtn == 0"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle"
>star_border</span
>
</v-btn> -->
<a-button
id="refresh"
:style="{
padding: '0',
width: '36px',
height: '36px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '4px', // square corners
}"
type="text"
@click="addBookMark"
v-if="bookmarkBtn == 0"
>
<span
class="material-icons"
style="font-size: 17px; vertical-align: middle"
>star_border</span
>
</a-button>
<v-btn
style="
background-color: white;
color: #fff;
border: 0.2px solid rgb(217, 217, 217);
"
id="refresh"
icon
tile
:ripple="false"
@click="refreshTab()"
>
<v-icon style="color: rgba(0, 0, 0, 0.54)">mdi-refresh</v-icon>
</v-btn>
<!-- <a-button
id="refresh"
:style="{
padding: '0',
width: '36px',
height: '36px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '4px', // square corners
}"
type="text"
@click="refreshTab"
>
<v-icon >mdi-refresh</v-icon>
</a-button> -->
<!-- <a-button id="refresh" type="text" @click="setDrawer" class="icon-button">
    <i class="mdi mdi-crop-free" style="font-size: 20px"></i>  
</a-button>
 
<a-button type="text" @click="setDrawer" class="icon-button">
    <i class="mdi mdi-crop-free" style="font-size: 20px"></i>  
</a-button> -->
<!-- <a-button
:style="{
padding: '0',
width: '36px',
height: '36px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
borderRadius: '4px', // square corners
}"
type="text"
@click="toggle"
>
<v-icon v-if="!fullscreen">mdi-arrow-expand-all</v-icon>  
<v-icon v-else>mdi-arrow-collapse-all</v-icon>
</a-button> -->
<v-btn
style="
background-color: white;
color: #fff;
border: 0.2px solid rgb(217, 217, 217);
"
icon
tile
:ripple="false"
@click="toggle()"
>
<v-icon style="color: rgba(0, 0, 0, 0.54)" v-if="!fullscreen"
>mdi-arrow-expand-all</v-icon
>
<v-icon style="color: rgba(0, 0, 0, 0.54)" v-else
>mdi-arrow-collapse-all</v-icon
>
</v-btn>
</template>
</router-tab>
</v-container>
<div v-if="loadingStackCnt > 0" class="loading-container">
<div class="loading">
<Fade-loader />
</div>
</div>
</v-main>
<!-- <v-footer
:absolute="!fixed"
app
:class="
drawer
? miniVariant
? 'drawerFooter miniFooter'
: 'drawerFooter'
: 'full-size'
"
>
<span>&copy; 2022. SK C&C all rights reserved.</span>
</v-footer> -->
</fullscreen>
</v-app>
</template>
<script>
import { mapState, mapActions, mapMutations } from "vuex"; // , mapActions
import ThemeSwitch from "@/components/common/ThemeSwitch";
import AdminMenu from "@/components/common/AdminMenu";
import FadeLoader from "vue-spinner/src/FadeLoader.vue";
import ChangePswdPop from "~/components/common/modal/ChangePswdPop";
export default {
components: {
ThemeSwitch,
AdminMenu,
FadeLoader,
ChangePswdPop,
},
data() {
return {
fullscreen: false,
activeTree: [],
clipped: false,
fixed: false,
miniVariant: false,
// activeTabIdx: "",
routerTabInstance: null,
// programIdObj: null,
myPrgmId: null,
treeValue: [],
menuIconById: {
// MNU0003: 'mdi-chart-line',
// MNU0004: 'mdi-alarm-light',
// MNU0005: 'mdi-pencil-box-outline',
// MNU0006: 'mdi-cog-outline',
MNU0002: "mdi-monitor",
MNU0091: "mdi-chart-box",
MNU0102: "mdi-human-male-board-poll",
MNU0103: "mdi-file-chart-outline",
MNU0104: "mdi-chart-sankey-variant",
MNU0106: "mdi-database-edit-outline",
MNU0105: "mdi-chart-bell-curve",
MNU0006: "mdi-bulletin-board",
MNU0007: "mdi-cog",
},
isLoading: false,
loadingStackCnt: 0,
bookmarkBtn: 0,
myMenuList: [],
prgmIdList: [],
initPageData: {},
obj: {},
newObj: {},
};
},
computed: {
...mapState({
myHome: "myHome",
myHomeTabItems: "myHomeTabItems",
indexRoot: "indexRoot",
treevieItems: "treevieItems",
menuData: "menuData",
menuLink: (state) => state.modules.menu,
activeMenuId: (state) => state.activeMenuInfo.menuId,
isDarkMode: "isDarkMode",
drawer: (state) => state.drawer,
userInfo: (state) => state.userInfo,
pageData: "pageData",
}),
activeTabs() {
if (this.routerTabInstance) {
return this.routerTabInstance.activeTab;
} else {
return this.myHome.root;
}
},
menuIconKeys() {
return Object.keys(this.menuIconById);
},
},
watch: {
activeTabs: {
// 탭 클릭시 좌측 treeview 싱크 맞추가
deep: true,
handler(value) {
if (value) {
const prgmId = value.prgmId;
let thisPrgmId = this.$route.query.prgmId;
var tmp = 0;
for (var i = 0; i < this.myMenuList.length; i++) {
if (this.myMenuList[i].prgmId == thisPrgmId) {
tmp = 1;
}
}
this.bookmarkBtn = tmp;
//if (thisPrgmId && this.myPrgmId && this.myPrgmId != thisPrgmId) {
this.myPrgmId = prgmId;
this.activeTree.pop(); // 기존 황성화 트리 값 삭제
this.activeTree.push(thisPrgmId); // 인덱스가 아닐 경우 새로 넣어줌
// this.$set(this.activeTree, 0, prgmId); // treeview activetree 새로 셋팅 <= 위 pop() 과 push() 로 대체
//}
}
},
},
activeTree: {
deep: true,
handler(newVal, oldVal) {
var _this = this;
const nv = newVal[0];
const ov = oldVal[0];
if (nv !== ov) {
if (!nv) {
// 중복클릭 시 발생 상황 기존 값을 다시 넣어줌
this.activeTree.push(ov);
} else {
this.myPrgmId = nv;
console.log("menu:", this.menuData);
if (this.menuData[nv].url) {
const menuUrl = this.menuData[nv].url;
const menuId = this.menuData[nv].menuId;
const isCommMenu = menuUrl.indexOf("comm/");
const isEmsMenu = menuUrl.indexOf("ems/");
const isCmmsMenu = menuUrl.indexOf("cmms/");
// console.log('activeTree...');
console.log(isEmsMenu);
if (isCommMenu > -1 || isEmsMenu > -1 || isCmmsMenu > -1) {
// console.log('activeTree if stmt1');
// console.log('this.isLoading : ', this.isLoading);
// if(this.isLoading == true){
// console.log('if isLoading stmt1');
// return;
// }
// this.$router.push({
// path: `${this.menuData[nv].url}?prgmId=${nv}`,
// });
this.$router.replace("/").then(() => {
this.$router.push({
path: `${this.menuData[nv].url}?prgmId=${nv}`,
});
});
// this.$router.beforeEach((to, from, next) => {
// if(_this.isLoading == true){
// next(false);
// }
// if (!to.matched.length) {
// next(false);
// } else {
// next();
// }
// });
var tmp = 0;
for (var i = 0; i < this.myMenuList.length; i++) {
if (this.myMenuList[i].menuId == menuId) {
tmp = 1;
}
}
this.bookmarkBtn = tmp;
} else {
// console.log('activeTree if stmt2');
// console.log('this.isLoading : ', this.isLoading);
// if(this.isLoading == true){
// console.log('if isLoading stmt2');
// return;
// }
this.$refs.routerTab.openIframe(
encodeURI(`http://localhost:9999${this.menuData[nv].url}?prgmId=${nv}`),
this.menuData[nv].menuNm
);
}
this.$axios.get(`${this.menuData[nv].url}?$menuId=${menuId}`);
} else alert("지정된 페이지 경로가 없습니다.");
}
}
},
},
menuData: {
deep: true,
handler(newVal, oldVal) {},
},
pageData: {
deep: true,
handler(newVal, oldVal) {
localStorage.setItem("pageData", JSON.stringify(this.pageData));
//console.log("localPageData", this.pageData);
},
},
// menuLink: {
// deep: true,
// handler() {
// let prgmIdList = Object.keys(this.menuData);
// let initPageData = {};
// prgmIdList.forEach(item => {
// let newObj = {
// [item] : {}
// };
// initPageData = Object.assign(initPageData, newObj)
// });
// }
// }
},
created() {
this.$vuetify.theme.isDark = false;
this.setThemeChange(false);
},
beforeUnmount() {
//window.removeEventListener('beforeunload', this.unLoadEvent);
},
async mounted() {
//window.addEventListener('beforeunload', this.unLoadEvent);
const _this = this;
await this.getMenu({});
await this.initPageDataFunc();
await this.selectMyMenuFunc();
this.routerTabInstance = this.$refs.routerTab;
if (this.$route.fullPath == "/") {
this.routerTabInstance.reset();
this.$router.replace(this.myHome.root);
} else if (this.$route.fullPath != this.myHome.root) {
this.$refs.routerTab.items.unshift(this.myHomeTabItems);
} else {
this.refreshTab();
}
this.$router.beforeEach((to, from, next) => {
_this.isLoading = true;
// console.log('$router.beforeEach...');
// console.log('state : ', _this.$store.state)
// console.log('activeActionCnt : ', _this.$store.state.activeActionCnt)
// console.log('_this.isLoading[beforeEach] : ', _this.isLoading);
// console.log('_this.loadingStackCnt : ', _this.loadingStackCnt);
// if(_this.loadingStackCnt > 0 && _this.isLoading && _this.$store.state.activeActionCnt > 0){
if (_this.loadingStackCnt > 0 && _this.isLoading) {
next(false);
// return;
} else if (!to.matched.length) {
next(false);
} else {
next();
}
});
this.$router.afterEach((to, from, failure) => {});
// 요청 인터셉터
this.$axios.interceptors.request.use(
function (config) {
//alert(1)
_this.isLoading = true;
if (config.url.search("Page") < 0) {
_this.loadingStackCnt++;
}
return config;
},
function (error) {
// 에라 나면 로딩 끄기
//alert(2)
_this.isLoading = false;
// if(error.url.search('Page')<0){
// _this.loadingStackCnt--;
// }
return Promise.reject(error);
}
);
// 응답 인터셉터
this.$axios.interceptors.response.use(
function (response) {
_this.isLoading = false;
if (response.config.url.search("Page") < 0) {
_this.loadingStackCnt--;
}
//alert(3)
return response;
},
function (error) {
// 응답 에러 시에도 로딩 끄기
//alert(4 )
_this.isLoading = false;
// if(error.url.search('Page')<0){
// _this.loadingStackCnt--;
// }
return Promise.reject(error);
}
);
},
methods: {
...mapMutations({
setDrawer: "setDrawer", // 사이드메뉴 접고 펼치기
setPageDataInit: "setPageDataInit",
setThemeChange: "setThemeChange",
}),
...mapActions({
getMenu: "modules/menu/getMenu", // 트리메뉴 가져오기
chkOpenTabList: "chkOpenTabList", // 트리메뉴 클릭 시 해당 pprgmId push
postUpdateApi: "modules/list/postUpdateApi",
postApiReturn: "modules/list/postApiReturn",
}),
// // tabActive(id) {},
// clkTab(itemArr) {
// console.log(itemArr[0]);
// if (!itemArr[0].to) return;
// this.$router.push({
// path: itemArr[0].to
// });
// },
toggle() {
this.fullscreen = !this.fullscreen;
},
refreshTab() {
// console.log("현재 탭 새로고침");
//this.routerTabInstance.refresh();
this.$nuxt.refresh();
this.routerTabInstance.refresh();
},
delAllTabsData() {
// console.log("탭 전체 닫기");
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
// const diffTo = this.routerTabInstance.items[i].to;
// if (diffTo != this.myHome.root) {
// this.routerTabInstance.items.splice(i, 1);
// }
// }
//if(this.$router.currentRoute.fullPath != this.myHome.root){
if (this.routerTabInstance.items.length > 0) {
this.routerTabInstance.reset();
}
this.$router.replace(this.myHome.root);
//}
},
deleteSblingsTab() {
// console.log("탭 나머지 닫기");
// for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
// const activeTo = this.routerTabInstance.activeTab.to;
// const diffTo = this.routerTabInstance.items[i].to;
// if (activeTo != diffTo && diffTo != this.myHome.root) {
// this.routerTabInstance.items.splice(i, 1);
// }
// }
if (this.routerTabInstance.items.length > 1) {
for (let i = this.routerTabInstance.items.length - 1; i > -1; --i) {
const activeTo = this.routerTabInstance.activeTab.to;
const diffTo = this.routerTabInstance.items[i].to;
if (activeTo != diffTo && diffTo != this.myHome.root) {
this.routerTabInstance.close(diffTo);
}
}
}
},
tabScrollMove(dir) {
const scrollTab = this.routerTabInstance.$refs.scroll;
const scrollWidth =
scrollTab.scrollData.scrollWidth - scrollTab.scrollData.clientWidth;
const scrollLeft = scrollTab.scrollData.scrollLeft;
const xAxis = this.calcScroll(scrollLeft, scrollWidth, dir);
scrollTab.scrollTo(xAxis, 0);
},
updateTreeview() {
if (this.miniVariant) {
// sidebar 접혀져 있을 때
this.$refs.treeview.updateAll();
} else {
// sidebar 펼쳐져 있을 때
}
},
// 열려있는 노드의 key 값 리턴(선택된 값이 아님)
openNode(node) {
//console.log('onOpen');
if (this.miniVariant) {
// sidebar 접혀져 있을 때
if (event.currentTarget.id !== this.$refs.appbarnavicon.$refs.link.id) {
this.$refs.appbarnavicon.click(event);
}
} else {
// sidebar 펼쳐져 있을 때
}
},
doMouseOver: function (event) {
//console.log(event);
},
calcScroll(sl, sw, dir) {
const deScrW = 60;
let returnSl = 0;
switch (dir) {
case "prev":
returnSl = sl - deScrW <= 0 ? 0 : sl - deScrW;
break;
case "next":
returnSl = sl + deScrW >= sw ? sw : sl + deScrW;
break;
default:
break;
}
return returnSl;
},
initPageDataFunc() {
const _this = this;
this.prgmIdList = Object.keys(this.menuData);
this.initPageData = {};
this.prgmIdList.forEach((item) => {
_this.obj = {};
if (_this.pageData[item]) {
_this.obj = _this.pageData[item];
}
_this.newObj = {};
_this.newObj = {
[item]: _this.obj,
};
_this.initPageData = Object.assign({}, _this.initPageData, _this.newObj);
});
localStorage.setItem("pageData", JSON.stringify(this.initPageData));
this.setPageDataInit(this.initPageData);
},
onCloseTab(to) {
const findIndex = this.$tabs.items.findIndex((v) => v.to === to);
const { to: next } = this.$tabs.items[findIndex - 1];
this.$tabs.close(to, null);
if (this.$router.currentRoute.fullPath != next) {
this.$router.replace(next);
}
},
async addBookMark() {
var params = {
menuId: this.activeMenuId,
};
await this.postUpdateApi({
apiKey: "saveBookmark",
sendParam: {
datas: {
bookmarkDt: [params],
},
params: {},
},
});
const res = await this.postApiReturn({
apiKey: "selectMyMenu",
resKey: "menuData",
sendParam: {},
});
// const res = [
// {
// comId: "abc",
// upMenuId: "abc",
// menuId: "dashboard",
// menuNm: "abc",
// url: "DashboardPage",
// authCd: "yes",
// lvl: 9999,
// prgmId: "PRG0001",
// },
// {
// comId: "abc",
// upMenuId: "dashboard",
// menuId: "test",
// menuNm: "test",
// url: "DashboardPage",
// authCd: "yes",
// lvl: 666,
// prgmId: "PRG0002",
// },
// ];
this.myMenuList = res;
this.bookmarkBtn = 1;
},
async removeBookMark() {
var params = {
menuId: this.activeMenuId,
};
await this.postUpdateApi({
apiKey: "deleteBookmark",
sendParam: {
datas: {
bookmarkDt: [params],
},
params: {},
},
});
const res = await this.postApiReturn({
apiKey: "selectMyMenu",
resKey: "menuData",
sendParam: {},
});
this.myMenuList = res;
this.bookmarkBtn = 0;
},
moveToMyMenu(url, menuId, prgmId) {
// console.log('moveToMyMenu...');
// if(this.isLoading == true){
// console.log('if isLoading stmt3');
// return;
// }
alert("move to", url);
this.$router.push({
path: url + "?prgmId=" + prgmId,
});
},
async selectMyMenuFunc() {
const headers = {
headers: {
"X-Fems-MenuId": "MNU0001",
},
};
const params = { params: {} };
const res = await this.$axios.post(
"/comm/base/MenuMngCtr/selectMyMenu",
params,
headers
);
this.myMenuList = res.data.dataset.menuData;
},
// unLoadEvent: function (event) {
// //if (this.isLeaveSite) return;
// //this.delAllTabsData();
// this.$router.push({
// path: this.myHome.root
// });
// console.log("event", event)
// event.preventDefault();
// event.returnValue = '';
// },
// treeModel(obj) {
// console.log(">>> treeModel::obj = ", obj);
// this.treeValue[0] = obj;
// this.$refs.treeview.updateAll();
// // console.log(this.$refs.treeview);
// // this.$refs.treeview.activeCache = obj.id;
// }
},
};
</script>
<style lang="scss" scoped>
.loading {
z-index: 99;
position: fixed;
top: 50%;
left: 50%;
width: 100%;
height: 100%;
transform: translate(-50%, -50%);
background-color: rgba(0, 0, 0, 0.4);
//box-shadow: rgba(68, 67, 67, 0.9) 0 0 0 9999px;
}
.v-spinner {
top: 50%;
left: 50%;
}
</style>

View File

@ -58,7 +58,7 @@ export default {
layoutInit() { layoutInit() {
if (this.$refs.searchFilter) { if (this.$refs.searchFilter) {
const searchFilterHeight = this.$refs.searchFilter.offsetHeight; const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
this.$refs.contents.style.height = `calc(100% - ${searchFilterHeight}px)`; this.$refs.contents.style.height = `calc(100% - ${searchFilterHeight + 20}px)`;
} }
}, },
//init() {} //init() {}

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<v-row ref="searchFilter"> <common-page-title />
<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>
@ -34,7 +35,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" :dataPath="dataPathExample" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" />
</div> </div>
</div> </div>
</v-card> </v-card>
@ -91,21 +92,9 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'treeGrid', gridName: 'treeGrid',
loadTree: true, loadTree: false,
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: {
@ -166,6 +155,10 @@ export default {
name: 'menuNm', name: 'menuNm',
}, },
scrollX: false, scrollX: false,
header: {
height: 37,
},
rowHeight: 37,
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,

View File

@ -22,8 +22,7 @@
customClass="input-large" customClass="input-large"
/> />
</v-col> </v-col>
<v-col :cols="6" class="text-right"> <v-col class="text-right d-flex justify-end align-end mr-3">
<!-- <v-btn @click="test = !test">WWW</v-btn> -->
<BtnSearch size="large" /> <BtnSearch size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -31,17 +30,13 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" style="height: 100vh;"> <v-row ref="contents" >
<v-col cols="12" lg="2" class="h100"> <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 class="px-5" style="height:calc(100% - 100px)"> <div ref="gridParent" class="px-5" style="height: 60vh;">
<div
ref="gridParent"
class="w100 h100"
>
<component <component
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:ref="gridName + myPrgmId" :ref="gridName + myPrgmId"
@ -50,10 +45,9 @@
@getRowsData="getRowData" @getRowsData="getRowData"
/> />
</div> </div>
</div>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" lg="10" class="h100"> <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>
@ -70,11 +64,12 @@
:style="{ minHeight: '36px' }" :style="{ minHeight: '36px' }"
>[미배정]메뉴리스트</span >[미배정]메뉴리스트</span
> >
<div class="px-5" style="height:calc(100% - 64px)"> <div ref="treeGridParent" class="px-0 mt-2" style="height: 60vh;">
<div <!-- <div
ref="treeGridParent" ref="treeGridParent"
class="w100 h100" class="w100 h100"
> >
</div> -->
<component <component
:is="loadTreeGrid ? 'Grid' : null" :is="loadTreeGrid ? 'Grid' : null"
:ref="gridName2 + myPrgmId" :ref="gridName2 + myPrgmId"
@ -83,7 +78,6 @@
@getRowsData="getUnAsgnRowData" @getRowsData="getUnAsgnRowData"
/> />
</div> </div>
</div>
</v-col> </v-col>
<v-col :cols="1"> <v-col :cols="1">
<ActionButtons <ActionButtons
@ -113,11 +107,12 @@
/> />
</v-col> </v-col>
</v-row> </v-row>
<div class="px-5" style="height:calc(100% - 64px)"> <div ref="treeGridParent2" class="px-0 mt-2" style="height: 60vh;">
<div <!-- <div
ref="treeGridParent2" ref="treeGridParent2"
class="w100 h100" class="w100 h100"
> >
</div> -->
<component <component
:is="loadTreeGrid2 ? 'Grid' : null" :is="loadTreeGrid2 ? 'Grid' : null"
:ref="gridName3 + myPrgmId" :ref="gridName3 + myPrgmId"
@ -127,7 +122,6 @@
@getRowsData="getAsgnRowData" @getRowsData="getAsgnRowData"
/> />
</div> </div>
</div>
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -403,6 +397,17 @@ export default {
]; ];
const myTreeColumns = [ const myTreeColumns = [
{
header: '',
name: '',
align: 'center',
width: 30,
formatter: (props) => {
return `<span class="custom-radio">
<span class="radio-mark"></span>
</span>`;
}
},
{ {
header: '메뉴명', header: '메뉴명',
name: 'menuNm', name: 'menuNm',
@ -415,6 +420,17 @@ export default {
}, },
]; ];
const myTreeColumns2 = [ const myTreeColumns2 = [
{
header: '',
name: '',
align: 'center',
width: 30,
formatter: (props) => {
return `<span class="custom-radio">
<span class="radio-mark"></span>
</span>`;
}
},
{ header: '역할ID', name: 'roleId', hidden: true }, { header: '역할ID', name: 'roleId', hidden: true },
{ header: '메뉴ID', name: 'menuId', hidden: true }, { header: '메뉴ID', name: 'menuId', hidden: true },
{ header: '메뉴명', name: 'menuNm', minWidth: '235' }, { header: '메뉴명', name: 'menuNm', minWidth: '235' },
@ -552,6 +568,7 @@ export default {
}); });
}, },
async getRowData(data) { async getRowData(data) {
await this.setPageData({ await this.setPageData({
rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectData: { rowGridSelectData: {
@ -657,6 +674,8 @@ export default {
}, },
getUnAsgnRowData(data) { getUnAsgnRowData(data) {
console.log("------------------DEBUG-------getUnAsgnRowData:", data);
const getRowData = data; const getRowData = data;
this.leftSelectRowData = Object.assign({}, getRowData); this.leftSelectRowData = Object.assign({}, getRowData);
}, },

View File

@ -67,7 +67,6 @@
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -132,22 +131,8 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
detailList: myDetail, detailList: myDetail,
dataPathMock : {
rowGrid: {
column: [
{ header: '추가 정보 그룹', name: 'addGrpId', align: 'left' },
{ header: '추가 정보 ID', name: 'addInfoId', align: 'left' },
{ header: '추가 정보 명', name: 'addInfoNm', align: 'left' },
{ header: 'Data 형식', name: 'addInfoDataKind', align: 'center' },
{ header: '사용여부', name: 'useFg', align: 'center' },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {},
},
},
}; };
}, },
computed: { computed: {
@ -518,43 +503,4 @@ const myDetail = [
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
]; ];
const dataMockExample = [
{
addGrpId: 'GRP001',
addInfoId: 'INFO001',
addInfoNm: '온도 센서',
addInfoDataKind: 'DATA01',
useFg: true,
},
{
addGrpId: 'GRP002',
addInfoId: 'INFO002',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA02',
useFg: false,
},
{
addGrpId: 'GRP003',
addInfoId: 'INFO003',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA03',
useFg: false,
},
{
addGrpId: 'GRP004',
addInfoId: 'INFO004',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA04',
useFg: false,
},
{
addGrpId: 'GRP005',
addInfoId: 'INFO005',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA05',
useFg: false,
},
];
</script> </script>

View File

@ -12,6 +12,8 @@
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:sendParam="{ comId }" :sendParam="{ comId }"
customClass="select-large" customClass="select-large"
labelCols="12"
textCols="12"
/> />
<!-- <component <!-- <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -79,7 +81,6 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -128,7 +129,7 @@
<template v-else-if="item.id == 'AsgnRoleByUser'"> <template v-else-if="item.id == 'AsgnRoleByUser'">
<v-col :cols="3" class="h100"> <v-col :cols="3" class="h100">
<v-card-title <v-card-title
class="pa-0 custom-title-4" class="pa-0 custom-subtitle-tab"
style="min-height:36px;" style="min-height:36px;"
>역할리스트</v-card-title >역할리스트</v-card-title
> >
@ -154,7 +155,7 @@
</v-col> </v-col>
<v-col :cols="8" 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-title-4"> <v-card-title class="pa-0 custom-subtitle-tab">
사용자 역할</v-card-title 사용자 역할</v-card-title
> >
<div> <div>
@ -307,40 +308,10 @@ export default {
}, },
methods: { methods: {
async init() { async init() {
this.gridInit(); await this.gridInit();
}, },
gridInitTest() {
const rowGrid = {
column: [
{ header: '사용자No', name: 'userNo', align: 'center', hidden: true },
{ header: '사용자명', name: 'userNm' },
{ header: '사용자ID', name: 'userLoginId' },
{ header: '사용자비밀번호', name: 'userPswd', hidden: true },
{ header: '사업장', name: 'blocId', hidden: true },
{ header: 'email', name: 'email', hidden: true },
{ header: '등록자NO', name: 'regUserNo', hidden: true },
{ header: '등록일시', name: 'regDttm', hidden: true },
{ header: '수정자NO', name: 'procUserNo', hidden: true },
{ header: '수정일시', name: 'procDttm', hidden: true },
{ header: 'comId', name: 'comId', hidden: true },
{ header: 'deptId', name: 'deptId', hidden: true },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: [],
}
this.dataPathMock = {rowGrid};
this.$nextTick(() => {
this.loadGrid = true;
});
},
// 사용자 리스트 그리드 세팅 // 사용자 리스트 그리드 세팅
gridInit() { gridInit() {
// this.gridInitTest(); return
const gridHeight = this.$refs.gridParent.offsetHeight - 90; const gridHeight = this.$refs.gridParent.offsetHeight - 90;
const myOptions = { const myOptions = {
@ -1100,67 +1071,4 @@ 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

@ -5,13 +5,13 @@
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
<div></div>
<v-col :cols="2.5"> <v-col :cols="2.5">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="배치ID" label="배치ID"
valueNm="batchId" valueNm="batchId"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large" customClass="input-large"
/> />
</v-col> </v-col>
@ -21,7 +21,6 @@
label="배치명" label="배치명"
valueNm="batchNm" valueNm="batchNm"
:searchOption="true" :searchOption="true"
:iconShow="true"
customClass="input-large" customClass="input-large"
/> />
</v-col> </v-col>
@ -33,7 +32,6 @@
: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>
@ -42,13 +40,13 @@
:is="'Datepicker'" :is="'Datepicker'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'조회기간'" :label="'조회기간'"
:customClass="'input-large'" customClass="datepicker-large"
/> />
</v-col> </v-col>
<v-col :cols="2" class="text-right d-flex align-end justify-end ga-1" style="gap: 4px"> <div class="text-right d-flex align-end justify-end pl-9" style="gap: 8px">
<BtnSearch size="large" /> <BtnSearch />
<BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" size="large" /> <BtnExcelDownload :parentPrgmId="myPrgmId" :gridName="gridName" size="large" />
</v-col> </div>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
@ -63,11 +61,10 @@
<div ref="gridParent" class="px-5 h100"> <div ref="gridParent" class="px-5 h100">
<component <component
:ref="gridName" :ref="gridName"
:is=" 'Grid' " :is="loadGrid ? 'Grid' : null"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:gridName="gridName" :gridName="gridName"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -140,56 +137,10 @@ export default {
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
loadGrid: true, loadGrid: false,
gridName: 'rowGrid', gridName: 'rowGrid',
// rowGridOrigin: [], // rowGridOrigin: [],
detailList: myDetail, detailList: myDetail,
dataPathMock : {
'rowGrid': {
column: [
{ header: 'No.', name: 'batchLogSeq', align: 'center', width: 100 },
{ header: '배치ID', name: 'batchId', align: 'center', width: 100 },
{ header: '배치명', name: 'batchNm', align: 'left', width: 150 },
{ header: '실행 일자', name: 'execDt', align: 'center', width: 80 },
{
header: '실행 결과',
name: 'execRsltCd',
align: 'center',
width: 80,
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.execRsltCdList.filter(
// item => item.commCd == value,
// );
// if (newValue.length > 0) {
// retVal = newValue[0].commCdNm;
// }
// return retVal;
// },
}, // "1": 프로그램, "2": 팝업
{ header: '실행 로그', name: 'execLogCont', minWidth: 150 },
{
header: '배치 시작 일시',
name: 'batchStrtDttm',
align: 'center',
width: 160,
},
{
header: '배치 종료 일시',
name: 'batchEndDttm',
align: 'center',
width: 160,
},
{ header: '등록자NO', name: 'regUserNo', width: 120 },
{ header: '등록일시', name: 'regDttm', align: 'center', width: 160 },
{ header: '수정자NO', name: 'procUserNo', width: 120 },
{ header: '수정일시', name: 'procDttm', align: 'center', width: 160 },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {},
},
},
}; };
}, },
computed: { computed: {
@ -248,14 +199,6 @@ export default {
init() { init() {
// this.layoutInit(); // this.layoutInit();
this.gridInit(); this.gridInit();
// _this.pageData = {
// execRsltCdList: [
// { commCd: '1', commCdNm: '성공' },
// { commCd: '2', commCdNm: '실패' },
// ],
// };
}, },
// layoutInit() { // layoutInit() {
// const searchFilterHeight = this.$refs.searchFilter.offsetHeight; // const searchFilterHeight = this.$refs.searchFilter.offsetHeight;
@ -368,13 +311,10 @@ export default {
} }
}); });
}, },
// async getRowData(data) { async getRowData(data) {
async getRowData() {
console.log("something")
this.setPageData({ this.setPageData({
// rowGridSelectKey: data.rowKey, rowGridSelectKey: data.rowKey,
rowGridSelectKey: 1, rowGridSelectData: data,
rowGridSelectData: fakeRowData,
}); });
}, },
compareData(type, newDt) { compareData(type, newDt) {
@ -481,86 +421,13 @@ const defaultData = {
}, },
}; };
const dataMockExample = [
{
batchLogSeq: 1,
batchId: 'BATCH001',
batchNm: '일일 데이터 백업',
execDt: '2025-07-15',
execRsltCd: '1', // sẽ được formatter thành "성공" hoặc tương tự
execLogCont: '백업 완료. 오류 없음.',
batchStrtDttm: '2025-07-15 01:00:00',
batchEndDttm: '2025-07-15 01:30:00',
regUserNo: 'admin01',
regDttm: '2025-07-15 01:00:00',
procUserNo: 'admin02',
procDttm: '2025-07-15 01:35:00',
},
{
batchLogSeq: 2,
batchId: 'BATCH002',
batchNm: '월간 리포트 생성',
execDt: '2025-07-01',
execRsltCd: '2',
execLogCont: '리포트 생성 중 오류 발생: 파일 접근 실패.',
batchStrtDttm: '2025-07-01 03:00:00',
batchEndDttm: '2025-07-01 03:10:00',
regUserNo: 'reportUser',
regDttm: '2025-07-01 03:00:00',
procUserNo: 'admin03',
procDttm: '2025-07-01 03:15:00',
},
{
batchLogSeq: 3,
batchId: 'BATCH003',
batchNm: '사용자 통계 갱신',
execDt: '2025-07-14',
execRsltCd: '1',
execLogCont: '통계 갱신 완료.',
batchStrtDttm: '2025-07-14 23:00:00',
batchEndDttm: '2025-07-14 23:20:00',
regUserNo: 'statUser',
regDttm: '2025-07-14 23:00:00',
procUserNo: 'admin01',
procDttm: '2025-07-14 23:25:00',
},
];
const fakeRowData = {
rowKey: 1,
batchLogSeq: 1,
batchId: 'BATCH001',
batchNm: '일일 데이터 백업',
execDt: '2025-07-15',
execRsltCd: '1',
execLogCont: JSON.stringify({
session: {
userNo: 'admin01',
userNm: '관리자',
comId: 'SKCC',
locale: 'ko_KR',
},
batch: {
comId: 'SKCC',
totStdDt: '20230110',
},
}),
batchStrtDttm: '2025-07-15 01:00:00',
batchEndDttm: '2025-07-15 01:30:00',
regUserNo: 'admin01',
regDttm: '2025-07-15 01:00:00',
procUserNo: 'admin02',
procDttm: '2025-07-15 01:35:00',
};
const myDetail = [ const myDetail = [
{ {
type: 'TextArea', type: 'TextArea',
valueNm: 'execLogCont', valueNm: 'execLogCont',
readonly: true, readonly: true,
cols: 12, cols: 12,
class: 'py-2 transparent', class: 'py-2',
}, },
]; ];
</script> </script>

View File

@ -1,7 +1,8 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<!-- 조회조견 --> <!-- 조회조견 -->
<v-row ref="searchFilter"> <common-page-title />
<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>
@ -24,7 +25,7 @@
:customClass="'select-large'" :customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5" class="pr-4">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -34,7 +35,7 @@
:customClass="'select-large'" :customClass="'select-large'"
/> />
</v-col> </v-col>
<BtnSearch size="large" /> <BtnSearch size="large" class="mr-2" />
</v-row> </v-row>
</v-card> </v-card>
@ -57,7 +58,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" :dataPath="dataPathExample" /> :gridName="gridName" @getRowsData="getRowData" />
</div> </div>
<!-- </v-card-actions> --> <!-- </v-card-actions> -->
</div> </div>
@ -77,7 +78,7 @@
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
<v-dialog ref="popModal" v-model="dialog" width="700" overlay-color="#000" overlay-opacity="0.8" scrollable> <v-dialog ref="popModal" v-model="dialog" width="800" 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>
@ -91,7 +92,6 @@
<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,7 +101,6 @@
</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>
@ -155,76 +154,16 @@ export default {
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
loadGrid: true, loadGrid: false,
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: true, paramLoadGrid: false,
selectedGridNameParamRow: null, selectedGridNameParamRow: null,
}; };
}, },
@ -292,7 +231,7 @@ export default {
}), }),
init() { init() {
// this.layoutInit(); // this.layoutInit();
// this.gridInit(); this.gridInit();
this.gridParamInit(); this.gridParamInit();
}, },
// layoutInit() { // layoutInit() {
@ -309,6 +248,10 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 37,
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -384,7 +327,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,
}); });
@ -629,20 +572,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' },
@ -664,27 +607,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 },
@ -703,86 +646,49 @@ 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 는 반복가능한 객체가 됩니다.
// for (var i = 0; i < keys.length; i++) {
// var key = keys[i];
// res.push(rowData[key]);
// }
// const newRes = res.map(item => {
// const newObj = {
// ...item,
// rowStat: null,
// id: item.id || '',
// mode: item.mode || 'in',
// type: item.type || 'str',
// val: item.val || '',
// };
// 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"
} }
]; var keys = Object.keys(rowData); //키를 가져옵니다. 이때, keys 는 반복가능한 객체가 됩니다.
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
res.push(rowData[key]);
}
const newRes = res.map(item => {
const newObj = {
...item,
rowStat: null,
id: item.id || '',
mode: item.mode || 'in',
type: item.type || 'str',
val: item.val || '',
};
return newObj;
});
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,
// setScroll: true, rowKey: 0,
// }); setScroll: true,
// } catch (error) { });
// console.log('error[nextTick grid] : ', error); } catch (error) {
// } console.log('error[nextTick grid] : ', error);
// } }
// }); }
});
this.paramLoadGrid = true; this.paramLoadGrid = true;
}, },
xlsDataBind(res) { xlsDataBind(res) {
@ -812,21 +718,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,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<v-row ref="searchFilter"> <common-page-title />
<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>
@ -10,7 +11,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" :label="'조회연월'" /> <DatePicker :parentPrgmId="myPrgmId" customClass="datepicker-large" :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" />
@ -20,28 +21,29 @@
</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="h100 pr-2"> <v-col cols="12" lg="4" class=" 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% - 72.56px)' }"> <v-card-actions class="pt-0 px-5 pb-5" :style="{ height: 'calc(100% - 10px)' }">
<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" :dataPath="dataPathExample" /> @getRowsData="getRowData" />
</div> </div>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" lg="8" class="h100 pl-3"> <v-col cols="12" lg="8" class=" 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" :style="{ height: 'calc(100% - 62px)' }"> <v-card-actions class="px-5 d-block" >
<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>
@ -94,81 +96,7 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
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',
}; };
@ -241,16 +169,19 @@ 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, scrollX: false, header: {
// }), height: 37,
// }); },
rowHeight: 37,
}),
});
// this.getRowGridData(); // this.getRowGridData();
}, },
@ -350,86 +281,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({
@ -604,4 +535,17 @@ 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,33 +1,65 @@
<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="4"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'시스템구분'" :label="'시스템구분'"
dataKey="sysDivCd" dataKey="sysDivCd"
:labelCols="12"
:textCols="12"
:sendParam="{ commGrpCd: 'CO_SYSDIV', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_SYSDIV', useFg: '1' }"
:addAll="true" :addAll="true"
customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="4"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:label="'사용여부'" :label="'사용여부'"
:labelCols="12"
:textCols="12"
:dataKey="'useFg'" :dataKey="'useFg'"
customClass="select-large"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
/> />
</v-col> </v-col>
<v-col :cols="4" class="text-right"> <v-col :cols="3">
<BtnSearch @click="search" /> <InputText
:parentPrgmId="myPrgmId"
label="그룹코드"
valueNm="commGrpCd"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="그룹코드명"
valueNm="commGrpCdNm"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col>
<v-col :cols="12" class="text-right">
<BtnSearch style="margin-top:20px" @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
<v-row align="center" no-gutters> <!-- <v-row align="center" no-gutters>
<v-col :cols="4"> <v-col :cols="4">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -48,7 +80,7 @@
:textCols="8" :textCols="8"
/> />
</v-col> </v-col>
</v-row> </v-row> -->
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
@ -85,7 +117,7 @@
<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="height:calc(100% - 70px)"> <div class="px-5" style="height:calc(100% - 70px)">
<v-tabs v-model="tab" :hide-slider="true"> <v-tabs v-model="tab" >
<v-tab <v-tab
v-for="item in items" v-for="item in items"
:key="item.id" :key="item.id"
@ -132,6 +164,7 @@ import Form from '~/components/common/form/Form';
import CommCdTab from '@/components/pages/comm/CommCdTab'; import CommCdTab from '@/components/pages/comm/CommCdTab';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility'; import Utility from '~/plugins/utility';
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -158,6 +191,7 @@ export default {
Form, Form,
CommCdTab, CommCdTab,
Grid, Grid,
PageTitle
}, },
data() { data() {
return { return {
@ -229,6 +263,9 @@ export default {
const myOptions = { const myOptions = {
scrollX: false, scrollX: false,
header: {
height: 38,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -241,7 +278,7 @@ export default {
{ {
header: '시스템구분', header: '시스템구분',
name: 'sysDivCd', name: 'sysDivCd',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let commCdNm = ''; let commCdNm = '';
if (sysCdList.length > 0) { if (sysCdList.length > 0) {
@ -278,7 +315,7 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
item => item.commCd == value, item => item.commCd == value,
@ -554,7 +591,10 @@ const myDetail = [
valueNm: 'commGrpCd', valueNm: 'commGrpCd',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-2',
required: true, required: true,
}, },
{ {
@ -563,7 +603,10 @@ const myDetail = [
valueNm: 'commGrpNm', valueNm: 'commGrpNm',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-2',
required: true, required: true,
}, },
{ {
@ -572,7 +615,10 @@ const myDetail = [
valueNm: 'sysDivCd', valueNm: 'sysDivCd',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-2 mt-3',
list: 'sysDivCdList', list: 'sysDivCdList',
itemText: 'commCdNm', itemText: 'commCdNm',
itemValue: 'commCd', itemValue: 'commCd',
@ -584,7 +630,10 @@ const myDetail = [
valueNm: 'useFg', valueNm: 'useFg',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pl-2 mt-10',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: true, required: true,
}, },
@ -594,7 +643,10 @@ const myDetail = [
valueNm: 'rmrk', valueNm: 'rmrk',
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
iconShow: true,
class: 'py-2 pr-2 mt-3',
}, },
]; ];
</script> </script>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<!-- 리스트 페이지 시작 --> <!-- 리스트 페이지 시작 -->
<div v-if="pageActionFlag == 'list'" class="h1001"> <div v-if="pageActionFlag == 'list'" class="h1001">
<v-card class="" > <v-card class="" >
@ -14,10 +15,10 @@
<!-- <v-btn @click="listPageButtonGroupClickEvent('delete')" :ripple="false">삭제</v-btn> --> <!-- <v-btn @click="listPageButtonGroupClickEvent('delete')" :ripple="false">삭제</v-btn> -->
</div> </div>
</v-col> </v-col>
<v-col :cols="12" ref="contents" class="mt-5"> <v-col :cols="12" ref="contents" class="mt-5" style="min-height: calc(100% - 76px);">
<div ref="gridParent" class="h100 px-50"> <div ref="gridParent" class="px-50" style="min-height: 70vh;">
<component :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
ref="noticeMngGrid" @getRowsData="getRowData" :dataPath="dataPathMock" /> @getRowsData="getRowData" />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -26,7 +27,7 @@
</div> </div>
<!-- 리스트 페이지 --> <!-- 리스트 페이지 -->
<!-- 상세보기 페이지 시작 --> <!-- 상세보기 페이지 시작 -->
<div v-if="pageActionFlag == 'view'" class="h1001"> <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 ">
@ -44,25 +45,25 @@
<a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button> <a-button @click="viewPageButtonGroupClickEvent('delete')" type="danger" ghost icon="delete">삭제</a-button>
</div> </div>
</v-col> </v-col>
<v-col :cols="12"> <v-col :cols="12" class="mt-5">
<p class="custom-title-3 mb-2"> 제목 </p> <v-card-title class="custom-title-6 pa-0">{{ viewActionData.title }}</v-card-title>
<v-text-field v-model="viewActionData.title" class="v-input__custom" hide-details :readonly="true">
</v-text-field>
</v-col> </v-col>
<v-col :cols="12" style="min-height:calc(90vh - 218px);" class="pa-5"> <v-col :cols="12" style="min-height: 30vh;" class="pa-0">
<viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit" <viewer v-if="viewActionData.viewerFlag" ref="tuiViewer" height="inherit"
:initialValue="viewActionData.content" theme="white" :initialValue="viewActionData.content" theme="white"
:class="isDarkMode ? 'theme--white' : 'theme--black'" /> :class="[isDarkMode ? 'theme--white' : 'theme--black', 'custom-view pa-3']" />
</v-col> </v-col>
<v-col :cols="6"> <v-col :cols="6" class="mt-5">
<p class="custom-title-3 mb-2">파일목록</p> <v-card-title class="custom-title-7 pa-0">
파일목록
</v-card-title>
<div v-for="fileData in viewActionData.fileData" <div v-for="fileData in viewActionData.fileData"
:key="fileData.apndFileId" :key="fileData.apndFileId"
class="file-item"> class="file-item">
<a @click.prevent="downloadFile(fileData)"> <a @click.prevent="downloadFile(fileData)">
<div class="d-flex justify-space-between 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">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span> <span class="file-item-name ml-2">{{ fileData.apndFileNm + '.' + fileData.apndFileExt }}</span>
</div> </div>
</a> </a>
</div> </div>
@ -72,28 +73,24 @@
</div> </div>
<!-- 상세보기 페이지 --> <!-- 상세보기 페이지 -->
<!-- 작성 페이지 시작 --> <!-- 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'write'" class="h1001"> <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="custom-title-4-new mt-4"> <v-col :cols="12" class="mt-4">
<p class="custom-title-3 mb-2">제목</p> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
<v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined> <v-text-field v-model="writeActionData.title" class="v-input__custom" hide-details outlined>
</v-text-field> </v-text-field>
</v-col> </v-col>
<v-col :cols="12" style="min-height: calc(90vh - 270px);"> <v-col :cols="12" style="min-height: calc(100vh - 450px);">
<editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" /> <editor ref="tuiEditor" height="100%" initialEditType="wysiwyg" />
</v-col> </v-col>
<v-col :cols="12" class="mt-2"> <v-col :cols="6" class="mt-5">
<p class="custom-title-3 mb-2"> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
파일첨부
</p>
</v-col>
<v-col :cols="6">
<div class="" v-if="writeActionData.fileData"> <div class="" v-if="writeActionData.fileData">
<div <div
v-for="(fileData, index) in writeActionData.fileData" v-for="(fileData, index) in writeActionData.fileData"
@ -129,25 +126,23 @@
</div> </div>
<!-- 작성 페이지 --> <!-- 작성 페이지 -->
<!-- 답글 작성 페이지 시작 --> <!-- 답글 작성 페이지 시작 -->
<div v-if="pageActionFlag == 'reply'" class="h1001"> <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="">
<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"> <v-col :cols="12" class="mt-4">
<p class="custom-title-3 mb-2">제목</p> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
<v-text-field v-model="replyActionData.title" class="v-input__custom" placeholder="제목" outlined <v-text-field v-model="replyActionData.title" class="v-input__custom" outlined
hide-details> hide-details>
</v-text-field> </v-text-field>
</v-col> </v-col>
<v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-2"> <v-col :cols="12" style="height: calc(100vh - 270px);" class="mt-2">
<editor ref="tuiReplyEditor" height="100%" initialEditType="wysiwyg" /> <editor ref="tuiReplyEditor" height="100%" initialEditType="wysiwyg" />
</v-col> </v-col>
<v-col :cols="6" class="mt-4"> <v-col :cols="6" class="mt-5">
<p class="custom-title-3 mb-2"> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
파일첨부
</p>
<div class="" v-if="replyActionData.fileData"> <div class="" v-if="replyActionData.fileData">
<div <div
v-for="(fileData, index) in replyActionData.fileData" v-for="(fileData, index) in replyActionData.fileData"
@ -175,7 +170,7 @@
</div> </div>
<!-- 답글 작성 페이지 --> <!-- 답글 작성 페이지 -->
<!-- 수정 페이지 시작 --> <!-- 수정 페이지 시작 -->
<div v-if="pageActionFlag == 'update'" class="h1001"> <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>
@ -183,16 +178,16 @@
<v-card-title class="custom-title-4 pa-0">공지사항</v-card-title> <v-card-title class="custom-title-4 pa-0">공지사항</v-card-title>
</v-col> </v-col>
<v-col :cols="12" class="mt-4"> <v-col :cols="12" class="mt-4">
<p class="custom-title-3 mb-2">제목</p> <v-card-title class="custom-title-7 pa-0">제목</v-card-title>
<v-text-field v-model="updateActionData.title" class="v-input__custom" placeholder="" hide-details outlined> <v-text-field v-model="updateActionData.title" class="v-input__custom" hide-details outlined>
</v-text-field> </v-text-field>
</v-col> </v-col>
<v-col :cols="12" style="height: calc(90vh - 270px);" class="mt-4" > <v-col :cols="12" style="height: calc(90vh - 270px);" class="mt-4" >
<editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg" <editor ref="tuiUpdateEditor" height="100%" initialEditType="wysiwyg"
:initialValue="updateActionData.content" /> :initialValue="updateActionData.content" />
</v-col> </v-col>
<v-col :cols="6"> <v-col :cols="6" class="mt-5">
<p class="pa-0 mb-2 custom-title-4-new-1">파일첨부</p> <v-card-title class="custom-title-7 pa-0">파일첨부</v-card-title>
<div class="" v-if="updateActionData.fileData"> <div class="" v-if="updateActionData.fileData">
<div <div
v-for="(fileData, index) in updateActionData.fileData" v-for="(fileData, index) in updateActionData.fileData"
@ -266,7 +261,8 @@ export default {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
//comId: "SEMPIO", //comId: "SEMPIO",
//comId: this.userInfo.comId, //comId: this.userInfo.comId,
comId: this.$store.state.userInfo.comId, // comId: this.$store.state.userInfo.comId,
bordNo: null, bordNo: null,
pageActionFlag: 'list', pageActionFlag: 'list',
gridName: 'noticeMngGrid', gridName: 'noticeMngGrid',
@ -402,7 +398,6 @@ export default {
this.getGridData(); this.getGridData();
}, },
gridInit() { gridInit() {
this.loadGrid = false;
const gridHeight = this.$refs.contents.offsetHeight - 76; const gridHeight = this.$refs.contents.offsetHeight - 76;
const myOptions = {}; const myOptions = {};
@ -466,13 +461,6 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: columnList, value: columnList,
}); });
// -----------------------TEST------------------
this.dataPathMock[this.gridName] = {
column: columnList,
data: dataPathDataExample,
}
// -----------------------END TEST--------------
this.getGridData(); this.getGridData();
}, },
async getGridData() { async getGridData() {
@ -481,22 +469,12 @@ export default {
}; };
this.loadGrid = false; this.loadGrid = false;
let res = null;
try { const res = await this.postApiReturn({
res = await this.postApiReturn({
apiKey: 'selectPostList', apiKey: 'selectPostList',
resKey: 'postData', resKey: 'postData',
sendParam: params, sendParam: params,
}); });
}
catch (err) { }
finally {
// -----Test mock data-------------
if (null === res) {
res = dataPathDataExample;
}
// -----End test
}
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
@ -1068,4 +1046,19 @@ const dataPathDataExample = getPathDataExample({
color: #1677FF; color: #1677FF;
} }
} }
::v-deep {
.v-input__slot {
padding-left: 8px;
padding-right: 8px;
}
.custom-view {
border: 1px solid;
border-radius: 6px;
height: 100%;
@each $theme in dark, light {
@include theme($theme);
border-color: map-deep-get($config, #{$theme}, "v-input-textarea-border");;
}
}
}
</style> </style>

View File

@ -16,7 +16,7 @@
customClass="select-large" customClass="select-large"
/> />
</v-col> </v-col>
<v-col :cols="4"> <v-col :cols="3">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="프로그램명" label="프로그램명"
@ -37,7 +37,7 @@
<v-row ref="contents"> <v-row ref="contents">
<!-- 프로그램 리스트 --> <!-- 프로그램 리스트 -->
<v-col :cols="5" class="h100"> <v-col :cols="5" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0">프로그램 리스트</v-card-title> <v-card-title class="pa-0">프로그램 리스트</v-card-title>
@ -50,22 +50,21 @@
/> />
</div> </div>
</div> </div>
<div style="min-height:calc(100% - 70px)"> <div ref="gridParent" style="height: 60vh">
<div ref="gridParent" class="px-5 h100"> <!-- <div ref="gridParent" class="px-5 h100">
</div> -->
<component <component
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:gridName="gridName" :gridName="gridName"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div>
</v-card> </v-card>
</v-col> </v-col>
<!-- 프로그램 상세 --> <!-- 프로그램 상세 -->
<v-col :cols="7" class="h100"> <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>
@ -262,8 +261,6 @@ export default {
}); });
// this.getRowGridData(); // this.getRowGridData();
this.loadGrid = true;
}, },
async search() { async search() {
await this.getRowGridData(); await this.getRowGridData();
@ -296,6 +293,7 @@ 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) {
@ -316,6 +314,12 @@ export default {
}); });
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
// console.log("-----------------------DEBUG--getRowData--------------", {
// gridKey: gridName,
// gridSelect: true,
// rowGridSelectKey: data.rowKey,
// rowGridSelectData: data,
// });
this.setGridSelectData({ this.setGridSelectData({
gridKey: gridName, gridKey: gridName,
gridSelect: true, gridSelect: true,
@ -327,6 +331,7 @@ 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) {

View File

@ -64,7 +64,6 @@
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @getRowsData="getRowData"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -137,24 +136,10 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
tab: null, tab: null,
detailList: myDetail, detailList: myDetail,
initedFlag: false, initedFlag: false,
dataPathMock : {
'rowGrid': {
column: [
{ header: '추가 정보 그룹', name: 'addGrpId', align: 'left' },
{ header: '추가 정보 ID', name: 'addInfoId', align: 'left' },
{ header: '추가 정보 명', name: 'addInfoNm', align: 'left' },
{ header: 'Data 형식', name: 'addInfoDataKind', align: 'center' },
{ header: '사용여부', name: 'useFg', align: 'center' },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: {},
},
},
}; };
}, },
computed: { computed: {
@ -642,43 +627,4 @@ const myDetail = [
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
]; ];
const dataMockExample = [
{
addGrpId: 'GRP001',
addInfoId: 'INFO001',
addInfoNm: '온도 센서',
addInfoDataKind: 'DATA01',
useFg: true,
},
{
addGrpId: 'GRP002',
addInfoId: 'INFO002',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA02',
useFg: false,
},
{
addGrpId: 'GRP003',
addInfoId: 'INFO003',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA03',
useFg: false,
},
{
addGrpId: 'GRP004',
addInfoId: 'INFO004',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA04',
useFg: false,
},
{
addGrpId: 'GRP005',
addInfoId: 'INFO005',
addInfoNm: '압력 센서',
addInfoDataKind: 'DATA05',
useFg: false,
},
];
</script> </script>

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<v-row ref="searchFilter"> <CommonPageTitle />
<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>
@ -16,8 +17,8 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents" class="pt-2">
<v-col :cols="5" style="height:100%"> <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>
@ -32,7 +33,7 @@
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" style="height:100%"> <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>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<v-row ref="searchFilter"> <CommonPageTitle />
<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>
@ -19,36 +20,36 @@
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :labelCols="12" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :addAll="true" :labelCols="12"
:textCols="12" :customClass="'select-large'" :iconShow="true" /> :textCols="12" :customClass="'select-large'" :iconShow="true" />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5" class="pr-4">
<InputText :parentPrgmId="myPrgmId" label="검침개소명" valueNm="readPlcNm" :labelCols="12" <InputText :parentPrgmId="myPrgmId" label="검침개소명" valueNm="readPlcNm" :labelCols="12"
:textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" /> :textCols="12" :searchOption="true" :customClass="'input-large'" :iconShow="true" />
</v-col> </v-col>
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" class="mr-2" />
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="mt-4"> <v-row ref="contents" class="mt-3">
<v-col :cols="5" class="h100"> <v-col :cols="5" class="h100 pr-2">
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4 pb-6"> <div class="d-flex align-center justify-space-between pa-4 pb-6">
<v-card-title class="pa-0 custom-title-4">검침개소 정보</v-card-title> <v-card-title class="pa-0 custom-title-4">검침개소 정보</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div class="px-4"> <div class="px-4" style="height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
:dataPath="dataPathExample" /> />
</div> </div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100 pl-2">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4 pb-1 pa-4">검침개소 상세 <v-card-title class="custom-title-4 pb-1 pa-4">검침개소 상세
</v-card-title> </v-card-title>
@ -134,7 +135,7 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
tab: null, tab: null,
isImgTabDisabled: false, isImgTabDisabled: false,
items: [ items: [
@ -157,47 +158,6 @@ export default {
], ],
detailList: myDetail, detailList: myDetail,
defaultUseFg: 1, defaultUseFg: 1,
dataPathExample: {
"rowGrid": {
data: sampleData,
column: [
{
header: '',
name: '',
align: 'center',
width: 50,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{
header: '검침개소명',
name: 'readPlcNm',
align: 'left',
minWidth: 400,
},
{
header: '개소 종류',
name: 'plcKind',
minWidth: 100,
align: 'center',
},
{
header: '사용 여부',
name: 'useFg',
minWidth: 100,
align: 'center',
},
],
option: myOptions,
}
}
// loadTree: false // loadTree: false
}; };
}, },
@ -312,18 +272,18 @@ export default {
}, },
async initData() { async initData() {
let ercList = []; let ercList = [];
// const res = await this.postApiReturn({ const res = await this.postApiReturn({
// apiKey: 'selectErcInfo', apiKey: 'selectErcInfo',
// resKey: 'ercInfoData', resKey: 'ercInfoData',
// sendParam: { sendParam: {
// blocId: this.userInfo.blocId, blocId: this.userInfo.blocId,
// }, },
// }); });
// res.forEach(item => { res.forEach(item => {
// const it = { text: item.ercNm, value: item.ercId }; const it = { text: item.ercNm, value: item.ercId };
// ercList.push(it); ercList.push(it);
// }); });
// this.setPageData({ ercNmList: ercList }); this.setPageData({ ercNmList: ercList });
}, },
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
@ -334,10 +294,12 @@ export default {
resizable: true, resizable: true,
}, },
treeColumnOptions: { treeColumnOptions: {
name: 'eccNm',       // Showing tree table name: 'readPlcNm',
useIcon: false,      // Not using icon
indentWidth: 10,
}, },
header: {
height: 37,
},
rowHeight: 37,
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -531,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;
} }
@ -999,18 +961,6 @@ const sampleData = [
]; ];
const myOptions = {
columnOptions: {
resizable: true,
},
treeColumnOptions: {
name: 'readPlcNm',       // Showing tree table
useIcon: false,      // Not using icon
indentWidth: 10,
},
}
const myDetail = [ const myDetail = [
{ {
type: 'InputText', type: 'InputText',

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle/>
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -12,6 +13,7 @@
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -22,6 +24,7 @@
dataKey="searchErcKind" dataKey="searchErcKind"
:sendParam="{ commGrpCd: 'EM_ERCKIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_ERCKIND', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -34,13 +37,9 @@
:addAll="true" :addAll="true"
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -49,8 +48,11 @@
dataKey="searchChrgKind" dataKey="searchChrgKind"
:sendParam="{ commGrpCd: 'EM_ENGCHAGKIND', useFg: '1' }" :sendParam="{ commGrpCd: 'EM_ENGCHAGKIND', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -59,6 +61,7 @@
dataKey="useFg" dataKey="useFg"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true" :addAll="true"
:customClass="'select-large'"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -69,13 +72,19 @@
:textCols="12" :textCols="12"
:labelCols="12" :labelCols="12"
:searchOption="true" :searchOption="true"
:customClass="'input-large'"
/> />
</v-col> </v-col>
<v-col :cols="3">
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch :size="'default'" @click="search" />
</v-col>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" style="height: calc(100vh - 400px)"> <v-row >
<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">
@ -105,7 +114,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="height:calc(100% - 70px)"> <div class="px-5" style="min-height: auto;">
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab <v-tab
v-for="item in items" v-for="item in items"
@ -117,8 +126,8 @@
</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
@ -323,6 +332,9 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 38,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -332,12 +344,12 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ header: '에너지원ID', name: 'ercId', width: 120, align: 'center' }, { header: '에너지원ID', name: 'ercId', width: 120, align: 'left' },
{ header: '에너지원명', name: 'ercNm', align: 'left' }, { header: '에너지원명', name: 'ercNm', align: 'left' },
{ {
header: '에너지원 유형', header: '에너지원 유형',
name: 'ercKind', name: 'ercKind',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.ercKindList.filter( const newValue = _this.pageData.ercKindList.filter(
@ -450,7 +462,7 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
width: 95, width: 95,
align: 'center', align: 'left',
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(
@ -479,74 +491,24 @@ export default {
this.loadGrid = true; this.loadGrid = true;
}, },
async getRowGridData() { async getRowGridData() {
let res = [ let res = [];
{
"comId": "COM001",
"ercId": "ERC001",
"ercNm": "LNG 가스",
"ercKind": "GAS",
"readObjId": "READ001",
"readPlcId": "PLC001",
"chrgKind": "FIXED",
"unitPrce": 120.5,
"prceFg": "1",
"peakPow": 500,
"elecContId": "EC001",
"elecContNm": "계약A",
"blocId": "BLOC001",
"useFg": true
},
{
"comId": "COM002",
"ercId": "ERC002",
"ercNm": "태양광",
"ercKind": "ELEC",
"readObjId": "READ002",
"readPlcId": "PLC002",
"chrgKind": "VARIABLE",
"unitPrce": 95.0,
"prceFg": "0",
"peakPow": 300,
"elecContId": "EC002",
"elecContNm": "계약B",
"blocId": "BLOC002",
"useFg": false
},
{
"comId": "COM003",
"ercId": "ERC003",
"ercNm": "지열",
"ercKind": "HEAT",
"readObjId": "READ003",
"readPlcId": "PLC003",
"chrgKind": "FIXED",
"unitPrce": 110.0,
"prceFg": "1",
"peakPow": 450,
"elecContId": "EC003",
"elecContNm": "계약C",
"blocId": "BLOC003",
"useFg": true
}
]
;
// if (this.pageData.blocMstrList.length > 0) { if (this.pageData.blocMstrList.length > 0) {
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: 'selectErcInfo', apiKey: 'selectErcInfo',
// resKey: 'ercInfoData', resKey: 'ercInfoData',
// sendParam: { sendParam: {
// blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId, blocId: this.pageData.blocMstrList[this.pageData.blocId].blocId,
// ercKind: this.pageData.searchErcKind, ercKind: this.pageData.searchErcKind,
// readObjId: this.pageData.searchReadObj, readObjId: this.pageData.searchReadObj,
// chrgKind: this.pageData.searchChrgKind, chrgKind: this.pageData.searchChrgKind,
// useFg: this.pageData.useFg, useFg: this.pageData.useFg,
// ercNmLike: this.pageData.ercNm, ercNmLike: this.pageData.ercNm,
// }, },
// }); });
// } else { } else {
// this.setPageData({ isFind: false }); this.setPageData({ isFind: false });
// } }
const newRes = res.map(item => { const newRes = res.map(item => {
const newObj = { const newObj = {
...item, ...item,
@ -798,133 +760,8 @@ const defaultData = {
/* data 세팅 */ /* data 세팅 */
// 로컬 gridName 값과 동일한 이름으로 세팅 // 로컬 gridName 값과 동일한 이름으로 세팅
rowGrid: { rowGrid: {
data: [ data: [],
{ column: [], // myColumns,
"comId": "COM001",
"ercId": "ERC001",
"ercNm": "LNG 가스",
"ercKind": "GAS",
"readObjId": "READ001",
"readPlcId": "PLC001",
"chrgKind": "FIXED",
"unitPrce": 120.5,
"prceFg": "1",
"peakPow": 500,
"elecContId": "EC001",
"elecContNm": "계약A",
"blocId": "BLOC001",
"useFg": true
},
{
"comId": "COM002",
"ercId": "ERC002",
"ercNm": "태양광",
"ercKind": "ELEC",
"readObjId": "READ002",
"readPlcId": "PLC002",
"chrgKind": "VARIABLE",
"unitPrce": 95.0,
"prceFg": "0",
"peakPow": 300,
"elecContId": "EC002",
"elecContNm": "계약B",
"blocId": "BLOC002",
"useFg": false
},
{
"comId": "COM003",
"ercId": "ERC003",
"ercNm": "지열",
"ercKind": "HEAT",
"readObjId": "READ003",
"readPlcId": "PLC003",
"chrgKind": "FIXED",
"unitPrce": 110.0,
"prceFg": "1",
"peakPow": 450,
"elecContId": "EC003",
"elecContNm": "계약C",
"blocId": "BLOC003",
"useFg": true
}
],
column: [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '에너지원ID', name: 'ercId', width: 120, align: 'center' },
{ header: '에너지원명', name: 'ercNm', align: 'left' },
{
header: '에너지원 유형',
name: 'ercKind',
align: 'center',
},
{
header: '검침대상',
name: 'readObjId',
align: 'left',
},
{
header: '검침 개소 ID',
name: 'readPlcId',
width: 80,
align: 'center',
hidden: true,
},
{
header: '고지 유형',
name: 'chrgKind',
width: 80,
align: 'center',
hidden: true,
},
{
header: '기본단가',
name: 'unitPrce',
width: 100,
align: 'right',
hidden: true,
},
{
header: '단가 사용여부',
name: 'prceFg',
width: 100,
align: 'center',
hidden: true,
},
{
header: '피크 전력',
name: 'peakPow',
width: 100,
align: 'right',
hidden: true,
},
{
header: '전력 계약',
name: 'elecContId',
width: 100,
align: 'center',
hidden: true,
},
{
header: '전력 계약',
name: 'elecContNm',
width: 100,
align: 'center',
hidden: true,
},
{
header: '사업장',
name: 'blocId',
width: 100,
align: 'center',
hidden: true,
},
{
header: '사용 여부',
name: 'useFg',
width: 95,
align: 'center',
}
], // myColumns,
option: {}, // myOptions option: {}, // myOptions
defaultRow: { defaultRow: {
comId: '', comId: '',

View File

@ -1,6 +1,7 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<v-row ref="searchFilter"> <CommonPageTitle />
<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>
@ -29,10 +30,10 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents" class="mt-3">
<v-col :cols="5" class="h100"> <v-col :cols="5" class="pr-2">
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="d-flex align-center justify-space-between pa-4"> <v-card-title class="d-flex align-center justify-space-between pa-5">
물리량 리스트 물리량 리스트
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
@ -44,12 +45,12 @@
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :parentPrgmId="myPrgmId" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :selectedRowDataWatchFlag="true"
:preventFocusChangeEventFlag="true" :preventFocusChangeEventFlag="true"
:preventFocusChangeEventTargetGridList="editingGridList" :dataPath="dataPathExample" /> :preventFocusChangeEventTargetGridList="editingGridList" />
</div> </div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="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>
@ -113,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"> <v-row no-gutters v-show="argContentShowFlag" align="end" >
<v-col :cols="12" class="py-2"> <v-col :cols="12" class="py-2">
<label for=""> <label for="">
<v-icon small <v-icon small
@ -121,13 +122,13 @@
계산Argument 계산Argument
</label> </label>
</v-col> </v-col>
<v-col :cols="6" class="py-2"> <v-col :cols="6" class="py-2 pr-4">
<InputText :parentPrgmId="myPrgmId" label="ARG갯수" valueNm="argCnt" :labelCols="12" <InputText :parentPrgmId="myPrgmId" label="ARG갯수" valueNm="argCnt" :labelCols="12"
:textCols="12" :iconShow="true" :required="requiredValueList[7]" :textCols="12" :iconShow="false" :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="12" class="py-2" align="right"> <v-col :cols="6" 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>
@ -136,7 +137,7 @@
<v-col :cols="12" style="height:100%"> <v-col :cols="12" style="height:100%">
<div ref="gridParent2" style="height:100%"> <div ref="gridParent2" style="height:100%">
<component :ref="gridName2" :is="loadGrid2 ? 'Grid' : null" :gridName="gridName2" <component :ref="gridName2" :is="loadGrid2 ? 'Grid' : null" :gridName="gridName2"
:parentPrgmId="myPrgmId" @getRowsData="getRowData2" :dataPath="dataPathExample2" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData2" />
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -223,115 +224,8 @@ export default {
formatterSelectList01: [], formatterSelectList01: [],
formatterSelectList02: [], formatterSelectList02: [],
loadGrid: true, loadGrid: false,
dataPathExample: { loadGrid2: false,
"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,
},
],
}
},
dataPathExample2: {
"rowGrid2": {
data:
[
{
"argSeq": "1",
"argPysclQtyId": "001",
"eqpmGrpId": "EQPM-GRP-A",
"pysclQtyCd": "TEMP001"
},
{
"argSeq": "2",
"argPysclQtyId": "002",
"eqpmGrpId": "EQPM-GRP-B",
"pysclQtyCd": "PRESS001"
},
{
"argSeq": "3",
"argPysclQtyId": "003",
"eqpmGrpId": "EQPM-GRP-C",
"pysclQtyCd": "FLOW001"
},
{
"argSeq": "4",
"argPysclQtyId": "004",
"eqpmGrpId": "EQPM-GRP-D",
"pysclQtyCd": "HUMID001"
},
{
"argSeq": "5",
"argPysclQtyId": "005",
"eqpmGrpId": "EQPM-GRP-E",
"pysclQtyCd": "VOLT001"
}
]
,
column: [
{ header: '순번', name: 'argSeq', editor: 'text' },
{ header: '물리량 ID', name: 'argPysclQtyId' },
{
header: '설비그룹',
name: 'eqpmGrpId',
},
{ header: '물리량 코드', name: 'pysclQtyCd' },
],
}
},
loadGrid2: true,
detailList: myDetail, detailList: myDetail,
readOnlyValueList: [ readOnlyValueList: [
@ -1001,6 +895,12 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
scrollX: true,
scrollY: true,
}; };
this.setGridOption({ this.setGridOption({
@ -1014,7 +914,7 @@ export default {
header: '물리량 ID', header: '물리량 ID',
name: 'pysclQtyId', name: 'pysclQtyId',
width: 100, width: 100,
align: 'center', align: 'left',
}, },
{ header: '설비그룹 ID', name: 'eqpmGrpId', hidden: true }, { header: '설비그룹 ID', name: 'eqpmGrpId', hidden: true },
{ header: 'argCnt', name: 'argCnt', hidden: true }, { header: 'argCnt', name: 'argCnt', hidden: true },
@ -1066,6 +966,10 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({

View File

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

View File

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

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -34,23 +35,23 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents">
<v-col :cols="5" class="h100"> <v-col :cols="5" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4">설비 정보</v-card-title> <v-card-title class="pa-0 custom-title-4">설비 정보</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div ref="gridParent" class="px-5" style="min-height:60vh;">
<div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo" @getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :preventFocusChangeEventFlag="false" :dataPath="dataPathMock" /> :selectedRowDataWatchFlag="true" :preventFocusChangeEventFlag="false" />
</div> <!-- <div ref="gridParent" class="w100 h100">
</div> -->
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" >
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title> <v-card-title class="custom-title-4" 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)">
@ -287,7 +288,7 @@ export default {
blocId: this.userInfo.blocId, blocId: this.userInfo.blocId,
}, },
}); });
console.log('res : ', res); // console.log('res : ', res);
res.map(item => { res.map(item => {
const it = { text: item.ercNm, value: item.ercId }; const it = { text: item.ercNm, value: item.ercId };
ercList.push(it); ercList.push(it);

View File

@ -1,6 +1,7 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<v-row ref="searchFilter"> <CommonPageTitle />
<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>
@ -37,11 +38,11 @@
: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" > <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"> <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>
@ -112,115 +113,12 @@ export default {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
initedFlag: false, initedFlag: false,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
detailList: myDetail, detailList: myDetail,
selectValue01: null, selectValue01: null,
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: {
@ -352,60 +250,46 @@ export default {
}); });
}, },
async getEqpmKind() { async getEqpmKind() {
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: 'selectEqpmKindCodeList', apiKey: 'selectEqpmKindCodeList',
// resKey: 'eqpmKindCodeLists', resKey: 'eqpmKindCodeLists',
// sendParam: {}, sendParam: {},
// }); });
// if (res.length > 0) { if (res.length > 0) {
// this.selectValueList01 = await res.map(item => { this.selectValueList01 = await res.map(item => {
// return { return {
// text: item.eqpmKindNm, text: item.eqpmKindNm,
// value: item.eqpmKindId, value: item.eqpmKindId,
// }; };
// }); });
// this.selectValue01 = this.selectValueList01[0].value; this.selectValue01 = this.selectValueList01[0].value;
// } else { } else {
// this.selectValueList01 = []; this.selectValueList01 = [];
// this.selectValue01 = null; this.selectValue01 = null;
// } }
this.selectValueList01 = [
{ label: 'Etcher', value: 'EQK001' },
{ label: 'Deposition', value: 'EQK002' },
{ label: 'Inspection', value: 'EQK003' },
];
this.selectValue01 = 'EQK001';
this.setPageData({ this.setPageData({
eqpmKindList: this.selectValueList01, eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01, eqpmKindId: this.selectValue01,
}); });
}, },
async getEqpmGrp() { async getEqpmGrp() {
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: 'selectEqpmGrpCodeList', apiKey: 'selectEqpmGrpCodeList',
// resKey: 'eqpmGrpCodeLists', resKey: 'eqpmGrpCodeLists',
// sendParam: { eqpmKindId: this.selectValue01 }, sendParam: { eqpmKindId: this.selectValue01 },
// }); });
// if (res.length > 0) { if (res.length > 0) {
// this.selectValueList02 = await res.map(item => { this.selectValueList02 = await res.map(item => {
// return { return {
// text: item.eqpmGrpNm, text: item.eqpmGrpNm,
// value: item.eqpmGrpId, value: item.eqpmGrpId,
// }; };
// }); });
// this.selectValue02 = this.selectValueList02[0].value; this.selectValue02 = this.selectValueList02[0].value;
// } else { } else {
// this.selectValueList02 = []; this.selectValueList02 = [];
// this.selectValue02 = null; this.selectValue02 = null;
// } }
this.selectValueList02 = [
{ label: '냉동기고온', value: '냉동기고온' },
{ label: '냉동기저온', value: '냉동기저온' },
{ label: '공조기', value: '공조기' },
{ label: '보일러', value: '보일러' }
];
this.setPageData({ this.setPageData({
eqpmGrpList: this.selectValueList02, eqpmGrpList: this.selectValueList02,
@ -419,6 +303,10 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -636,100 +524,48 @@ 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',
// resKey: 'eqpmGdIdxDataList', resKey: 'eqpmGdIdxDataList',
// sendParam: { sendParam: {
// eqpmGrpId: this.selectValue02, eqpmGrpId: this.selectValue02,
// gdIdxNmLike: this.pageData.gdIdxNm, gdIdxNmLike: this.pageData.gdIdxNm,
// }, },
// }); });
// const newRes = res.map(item => { const newRes = res.map(item => {
// const newObj = { const newObj = {
// ...item, ...item,
// rowStat: null, rowStat: null,
// }; };
// return newObj; return newObj;
// }); });
this.setGridData({ this.setGridData({
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) {
// try { try {
// this.$refs[this.gridName].focus({ this.$refs[this.gridName].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].getData().length - 1 this.$refs[this.gridName].getData().length - 1
// ? this.pageData.rowGridSelectKey ? this.pageData.rowGridSelectKey
// : 0, : 0,
// columnName: 'gdIdxId', columnName: 'gdIdxId',
// setScroll: true, setScroll: true,
// }); });
// } catch (error) { } } catch (error) { }
// } else { } else {
// this.detailDataInit(); this.detailDataInit();
// } }
// }); });
this.loadGrid = true; this.loadGrid = true;
}, },
async getRowData(data) { async getRowData(data) {
@ -1462,7 +1298,7 @@ const myDetail = [
class: 'pa-3', class: 'pa-3',
// required: true, // required: true,
openMode: 'ALL', openMode: 'ALL',
disabled: false, disabled: true,
eqpmKindId: '', eqpmKindId: '',
eqpmGrpId: '', eqpmGrpId: '',
closeBtnFg: true, closeBtnFg: true,

View File

@ -1,6 +1,7 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<v-row ref="searchFilter"> <CommonPageTitle />
<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>
@ -29,7 +30,7 @@
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" class="mt-4"> <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: 60%"> <v-card style="height: 60%">
@ -115,8 +116,8 @@
</v-card> </v-card>
<v-row style="height: 40%" class="mt-4"> <v-row style="height: 40%" class="mt-3">
<v-col :cols="6" style="height: 100%"> <v-col :cols="6" 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>
@ -126,12 +127,12 @@
<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"
:dataPath="dataPathExample" /> />
</div> </div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="6" style="height: 100%"> <v-col :cols="6" style="height: 100%" class="pl-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>
@ -201,7 +202,7 @@ export default {
readonlyFg: true, readonlyFg: true,
initedFlag: false, initedFlag: false,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
detailList: myDetail, detailList: myDetail,
selectValue01: null, selectValue01: null,
selectValueList01: [], selectValueList01: [],
@ -209,62 +210,62 @@ export default {
selectValueList02: [], selectValueList02: [],
selectValue03: null, selectValue03: null,
selectValueList03: [], selectValueList03: [],
dataPathExample: { // dataPathExample: {
"rowGrid": { // "rowGrid": {
data: [ // data: [
{ // {
eqpmId: 'EQ001', // eqpmId: 'EQ001',
originEqpmId: 'ORIG001', // originEqpmId: 'ORIG001',
eqpmNm: '냉각기 A', // eqpmNm: '냉각기 A',
careStndVal: 75, // careStndVal: 75,
warnStndVal: 90, // warnStndVal: 90,
}, // },
{ // {
eqpmId: 'EQ002', // eqpmId: 'EQ002',
originEqpmId: 'ORIG002', // originEqpmId: 'ORIG002',
eqpmNm: '펌프 B', // eqpmNm: '펌프 B',
careStndVal: 60, // careStndVal: 60,
warnStndVal: 80, // warnStndVal: 80,
}, // },
{ // {
eqpmId: 'EQ003', // eqpmId: 'EQ003',
originEqpmId: 'ORIG003', // originEqpmId: 'ORIG003',
eqpmNm: '모터 C', // eqpmNm: '모터 C',
careStndVal: 50, // careStndVal: 50,
warnStndVal: 70, // warnStndVal: 70,
}, // },
{ // {
eqpmId: 'EQ004', // eqpmId: 'EQ004',
originEqpmId: 'ORIG004', // originEqpmId: 'ORIG004',
eqpmNm: '밸브 D', // eqpmNm: '밸브 D',
careStndVal: 65, // careStndVal: 65,
warnStndVal: 85, // warnStndVal: 85,
}, // },
{ // {
eqpmId: 'EQ005', // eqpmId: 'EQ005',
originEqpmId: 'ORIG005', // originEqpmId: 'ORIG005',
eqpmNm: '컨트롤러 E', // eqpmNm: '컨트롤러 E',
careStndVal: 55, // careStndVal: 55,
warnStndVal: 75, // warnStndVal: 75,
}, // },
], // ],
column: [ // column: [
{ header: '설비', name: 'eqpmId', align: 'left' }, // { header: '설비', name: 'eqpmId', align: 'left' },
{ // {
header: 'origin설비', // header: 'origin설비',
name: 'originEqpmId', // name: 'originEqpmId',
align: 'center', // align: 'center',
hidden: true, // hidden: true,
}, // },
{ header: '설비명', name: 'eqpmNm', align: 'left' }, // { header: '설비명', name: 'eqpmNm', align: 'left' },
{ header: '주의기준', name: 'careStndVal', align: 'right' }, // { header: '주의기준', name: 'careStndVal', align: 'right' },
{ header: '심각기준', name: 'warnStndVal', align: 'right' }, // { header: '심각기준', name: 'warnStndVal', align: 'right' },
] // ]
} // }
} // }
}; };
}, },
computed: { computed: {
@ -408,6 +409,10 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
header: {
height: 37,
},
rowHeight: 'auto',
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -511,69 +516,69 @@ export default {
this.loadGrid = false; this.loadGrid = false;
let res = []; let res = [];
// if (this.selectValue01 && this.selectValue02 && this.selectValue03) { if (this.selectValue01 && this.selectValue02 && this.selectValue03) {
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: 'selectEqpmGdDetl', apiKey: 'selectEqpmGdDetl',
// resKey: 'eqpmGdDetlData', resKey: 'eqpmGdDetlData',
// sendParam: { sendParam: {
// gdIdxId: this.selectValue03, gdIdxId: this.selectValue03,
},
});
}
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작
let eqpmIdList = res.map(item => {
return item.eqpmId;
});
this.setPageData({ nowGridEqpmIdList: eqpmIdList });
// grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝
const newRes = res.map(item => {
const newObj = {
...item,
rowStat: null,
};
return newObj;
});
// const newRes = [
// {
// eqpmId: 'EQ001',
// originEqpmId: 'ORIG001',
// eqpmNm: '냉각기 A',
// careStndVal: 75,
// warnStndVal: 90,
// },
// {
// eqpmId: 'EQ002',
// originEqpmId: 'ORIG002',
// eqpmNm: '펌프 B',
// careStndVal: 60,
// warnStndVal: 80,
// },
// {
// eqpmId: 'EQ003',
// originEqpmId: 'ORIG003',
// eqpmNm: '모터 C',
// careStndVal: 50,
// warnStndVal: 70,
// },
// {
// eqpmId: 'EQ004',
// originEqpmId: 'ORIG004',
// eqpmNm: '밸브 D',
// careStndVal: 65,
// warnStndVal: 85,
// },
// {
// eqpmId: 'EQ005',
// originEqpmId: 'ORIG005',
// eqpmNm: '컨트롤러 E',
// careStndVal: 55,
// warnStndVal: 75,
// }, // },
// });
// }
// // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 시작 // ]
// let eqpmIdList = res.map(item => {
// return item.eqpmId;
// });
// this.setPageData({ nowGridEqpmIdList: eqpmIdList });
// // grid에서 eqpmId를 기억해서 popup에서 중복되는 값을 제거하는데 사용하기위해 저장 - 끝
// const newRes = res.map(item => {
// const newObj = {
// ...item,
// rowStat: null,
// };
// return newObj;
// });
const newRes = [
{
eqpmId: 'EQ001',
originEqpmId: 'ORIG001',
eqpmNm: '냉각기 A',
careStndVal: 75,
warnStndVal: 90,
},
{
eqpmId: 'EQ002',
originEqpmId: 'ORIG002',
eqpmNm: '펌프 B',
careStndVal: 60,
warnStndVal: 80,
},
{
eqpmId: 'EQ003',
originEqpmId: 'ORIG003',
eqpmNm: '모터 C',
careStndVal: 50,
warnStndVal: 70,
},
{
eqpmId: 'EQ004',
originEqpmId: 'ORIG004',
eqpmNm: '밸브 D',
careStndVal: 65,
warnStndVal: 85,
},
{
eqpmId: 'EQ005',
originEqpmId: 'ORIG005',
eqpmNm: '컨트롤러 E',
careStndVal: 55,
warnStndVal: 75,
},
]
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
value: newRes, value: newRes,

View File

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

View File

@ -59,8 +59,7 @@
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div class="h100 px-5" style="height:calc(100% - 70px)"> <div ref="gridParent" class="h100 px-5" style="height:calc(100% - 70px)">
<div ref="gridParent" class="w100 h100">
<component <component
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
@ -69,10 +68,8 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100">
@ -188,26 +185,8 @@ export default {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: 'rowGrid', gridName: 'rowGrid',
loadGrid: true, loadGrid: false,
tab: null, tab: null,
dataPathMock: {
"rowGrid": {
column: [
{ header: '검침 대상 ID', name: 'readObjId', align: 'left' },
{ header: '검침 대상 명', name: 'readObjNm', align: 'left' },
{ header: '검침 대상 유형', name: 'readObjKind', align: 'left' },
{ header: '그룹', name: 'grpCd', align: 'left' },
{ header: 'TJ 환산계수', name: 'tjCvrtCoef', align: 'right' },
{ header: 'TOE 환산계수', name: 'toeCvrtCoef', align: 'right' },
{ header: 'CO2 환산계수', name: 'co2CvrtCoef', align: 'right' },
{ header: '단위', name: 'unitCd', align: 'left' },
{ header: '사용 여부', name: 'useFg', align: 'center' },
],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: {}
}
},
items: [ items: [
{ {
name: '검침 대상 정보', name: '검침 대상 정보',
@ -724,8 +703,8 @@ const defaultData = {
}, },
buttonAuth: { buttonAuth: {
add: true, add: true,
save: true,
remove: true, remove: true,
save: true,
excel: false, excel: false,
}, },
}, },
@ -873,40 +852,7 @@ const myDetail = [
required: true, required: true,
}, },
]; ];
const dataPathDataExample = [
{
readObjId: 'OBJ001',
readObjNm: '서울 본사',
readObjKind: 'TYPE01',
grpCd: 'GRP01',
tjCvrtCoef: 1.25,
toeCvrtCoef: 0.85,
co2CvrtCoef: 2.1,
unitCd: 'kWh',
useFg: '1',
},
{
readObjId: 'OBJ002',
readObjNm: '부산 지사',
readObjKind: 'TYPE02',
grpCd: 'GRP02',
tjCvrtCoef: 1.10,
toeCvrtCoef: 0.90,
co2CvrtCoef: 1.8,
unitCd: 'MJ',
useFg: '0',
},
{
readObjId: 'OBJ003',
readObjNm: '대전 공장',
readObjKind: 'TYPE03',
grpCd: 'GRP01',
tjCvrtCoef: 1.30,
toeCvrtCoef: 0.95,
co2CvrtCoef: 2.3,
unitCd: 'GJ',
useFg: '1',
}
];
</script> </script>
<style lang="scss">
@import '@/assets/scss/common.scss';
</style>

View File

@ -1,11 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<!-- <h2 class="title"> <CommonPageTitle />
<v-icon small color="primary" class="mr-1">mdi-circle</v-icon>
계량 데이터 마감 관리
</h2> -->
<PageTitle text="계량 데이터 마감 관리" />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<!-- 조회조견 --> <!-- 조회조견 -->
<v-col :cols="12"> <v-col :cols="12">
@ -75,8 +70,8 @@
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents">
<!-- 일일검침정보 목록--> <!-- 일일검침정보 목록-->
<v-col :cols="12" class="h100"> <v-col :cols="12">
<v-card class="pb-5"> <v-card class="pb-5 w100">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="custom-title-4 pa-0">일일검침정보</v-card-title> <v-card-title class="custom-title-4 pa-0">일일검침정보</v-card-title>
<div class="d-flex align-center"> <div class="d-flex align-center">
@ -91,21 +86,19 @@
type="primary" type="primary"
:ripple="false" :ripple="false"
@click="saveReadResultCloseMng('N')" @click="saveReadResultCloseMng('N')"
>일마감</a-button
> >
일마감
</a-button>
</div> </div>
</div> </div>
<div class="px-5" style="min-height: calc(100% - 76px)"> <div ref="gridParent" class="px-5 w100" style="height: 55vh;">
<div ref="gridParent" class="h100 w100">
<component <component
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:ref="gridName" :ref="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:gridName="gridName" :gridName="gridName"
:dataPath="dataPathMock"
/> />
</div> </div>
</div>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
@ -123,7 +116,6 @@ import selectCodeList from "@/components/common/select/selectCodeList";
import SelectMttList from "@/components/common/select/SelectMttList"; import SelectMttList from "@/components/common/select/SelectMttList";
import Datepicker from "~/components/common/Datepicker"; import Datepicker from "~/components/common/Datepicker";
import BtnExcelDownload from "~/components/common/button/BtnExcelDownload"; import BtnExcelDownload from "~/components/common/button/BtnExcelDownload";
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
// const myPrgmId = "PRG0018"; // const myPrgmId = "PRG0018";
@ -151,13 +143,12 @@ export default {
Datepicker, Datepicker,
Search, Search,
Grid, Grid,
PageTitle,
}, },
data() { data() {
return { return {
myPrgmId: myPrgmId, myPrgmId: myPrgmId,
gridName: "rowGrid", gridName: "rowGrid",
loadGrid: true, loadGrid: false,
dataPathMock: { dataPathMock: {
rowGrid: { rowGrid: {
column: [ column: [
@ -251,6 +242,10 @@ export default {
columnOptions: { columnOptions: {
resizable: true, resizable: true,
}, },
pageOptions: {
useClient: true,
perPage: 13,
},
}; };
this.setGridOption({ this.setGridOption({
gridKey: this.gridName, gridKey: this.gridName,
@ -260,7 +255,6 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: myColumns, value: myColumns,
}); });
this.loadGrid = true;
}, },
async search() { async search() {
await this.getRowGridData(); await this.getRowGridData();
@ -288,8 +282,12 @@ export default {
mgnf: item.mgnf || 0, mgnf: item.mgnf || 0,
})), })),
}); });
// console.log('--------------DEBUG-----res-------', res);
} }
this.setPageData({ isFind: false }); this.setPageData({ isFind: false });
this.$nextTick(() => {
this.loadGrid = true;
})
}, },
//전월 or 일 마감-------------------------------------------------------------------------------------------- //전월 or 일 마감--------------------------------------------------------------------------------------------
async saveReadResultCloseMng(mnthYn) { async saveReadResultCloseMng(mnthYn) {

View File

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

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<!-- Dataset 페이지 시작 --> <!-- Dataset 페이지 시작 -->
<div v-if="pageActionFlag == 'list'" class="h100"> <div v-if="pageActionFlag == 'list'" class="h100">
<v-row ref="searchFilter"> <v-row ref="searchFilter">
@ -34,23 +35,23 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents">
<v-col :cols="5" class="h100"> <v-col :cols="5" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0 custom-title-4">Data Set 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4">Data Set 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList" <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div ref="gridParent" class="px-5" style="min-height: 60vh">
<div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :dataPath="dataPathMock" @getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" /> :selectedRowDataWatchFlag="true" />
</div> <!-- <div ref="gridParent" class="w100 h100">
</div> -->
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col :cols="7" class="h100"> <v-col :cols="7" >
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;">Data Set 상세 <v-card-title class="custom-title-4" style="min-height:76px;">Data Set 상세
</v-card-title> </v-card-title>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<v-row ref="searchFilter"> <common-page-title />
<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>
@ -555,7 +556,7 @@ export default {
header: { header: {
height: 37, height: 37,
}, },
rowHeight: 'auto', rowHeight: 37,
// pageOptions: { // pageOptions: {

View File

@ -195,28 +195,16 @@ export default {
}); });
}, },
async getEqpmKind() { async getEqpmKind() {
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: "selectEqpmKindCodeList", apiKey: 'selectEqpmKindCodeList',
// resKey: "eqpmKindCodeLists", resKey: 'eqpmKindCodeLists',
// sendParam: {}, sendParam: {},
// }); });
let res = [
{
eqpmKindId: "냉동기저온",
eqpmKindNm: "냉동기저온",
},
{
eqpmKindId: "냉동기고온",
eqpmKindNm: "냉동기고온",
},
];
if (res.length > 0) { if (res.length > 0) {
this.selectValueList01 = await res.map((item) => { this.selectValueList01 = await res.map(item => {
return { return {
// text: item.eqpmKindNm, text: item.eqpmKindNm,
label: item.eqpmKindNm,
value: item.eqpmKindId, value: item.eqpmKindId,
}; };
}); });
@ -233,29 +221,24 @@ export default {
gridInit() {}, gridInit() {},
getRowGridData() {}, getRowGridData() {},
async getData() { async getData() {
// let res = await this.postApiReturn({ let res = await this.postApiReturn({
// apiKey: "selectEnrgEffcTotSumm", apiKey: 'selectEnrgEffcTotSumm',
// resKey: "totSummData", resKey: 'totSummData',
// sendParam: { sendParam: {
// fromDt: this.pageData.fromDt, fromDt: this.pageData.fromDt,
// eqpmKindId: this.selectValue01, eqpmKindId: this.selectValue01,
// }, },
// }); });
let res = ["aaa", "bbb"];
await this.getChartData(res); await this.getChartData(res);
// this.selectData = res.filter((item, i) => { this.selectData = res.filter((item, i) => {
// return ( return (
// res.findIndex((item2, j) => { res.findIndex((item2, j) => {
// return item.eqpmGrpId === item2.eqpmGrpId; return item.eqpmGrpId === item2.eqpmGrpId;
// }) === i }) === i
// ); );
// }); });
this.selectData = [
{ eqpmGrpId: "G001", eqpmGrpNm: "Group A", otherProp: "..." },
{ eqpmGrpId: "G002", eqpmGrpNm: "Group B", otherProp: "..." },
];
}, },
barClick(event, chartName) { barClick(event, chartName) {
var data = {}; var data = {};
@ -302,37 +285,25 @@ export default {
// } // }
// }); // });
// data.map((item) => { data.map(item => {
// if (chartDataObj[item.eqpmGrpId] != null) { if (chartDataObj[item.eqpmGrpId] != null) {
// chartDataObj[item.eqpmGrpId].push(item); chartDataObj[item.eqpmGrpId].push(item);
// } else { } else {
// chartDataObj[item.eqpmGrpId] = [item]; chartDataObj[item.eqpmGrpId] = [item];
// } }
// }); });
chartDataObj = {
group1: [
{ fabNm: "Fab A", okCnt: 120, ngCnt: 30 },
{ fabNm: "Fab B", okCnt: 150, ngCnt: 20 },
{ fabNm: "Fab C", okCnt: 100, ngCnt: 50 },
],
group2: [
{ fabNm: "Fab D", okCnt: 180, ngCnt: 10 },
{ fabNm: "Fab E", okCnt: 160, ngCnt: 25 },
{ fabNm: "Fab F", okCnt: 140, ngCnt: 35 },
],
};
// chartDataObj.keys()[0] // chartDataObj.keys()[0]
var i = 0; var i = 0;
for (var x of Object.keys(chartDataObj)) { for (var x of Object.keys(chartDataObj)) {
this.loadChartList.push(false); this.loadChartList.push(false);
i++; i++;
this.objList["chart_0" + i] = chartDataObj[x]; this.objList['chart_0' + i] = chartDataObj[x];
this.chartNameList.push("chart_0" + i); this.chartNameList.push('chart_0' + i);
this.setPageData({ this.setPageData({
[this.chartNameList[i - 1]]: Utility.defaultChartOption(true), [this.chartNameList[i - 1]]: Utility.defaultChartOption(true),
}); });
this.setChartData(chartDataObj[x], i); this.setChartData(chartDataObj[x], i);
} }
// this.setChartData(chartDataObj[Object.keys(chartDataObj)[0]]); // this.setChartData(chartDataObj[Object.keys(chartDataObj)[0]]);

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -158,8 +159,8 @@ export default {
}, },
async created() { }, async created() { },
async mounted() { async mounted() {
this.initTest(); // this.initTest();
return; // return;
this.init(); this.init();
// document.querySelector('.icon_arrow').style.width = document.querySelector('.iconArrowCols').clientWidth-20 + "px"; // document.querySelector('.icon_arrow').style.width = document.querySelector('.iconArrowCols').clientWidth-20 + "px";

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<PageTitle text="효율성 지표 보고서" /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -98,7 +98,6 @@ import Chart from '~/components/common/Chart';
import EqpmSelectPop from '~/components/common/modal/EqpmSelectPop'; import EqpmSelectPop from '~/components/common/modal/EqpmSelectPop';
import DateUtility from '~/plugins/dateUtility'; import DateUtility from '~/plugins/dateUtility';
import XLSX from 'xlsx'; import XLSX from 'xlsx';
import PageTitle from "~/components/common/PageTitle";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -130,7 +129,6 @@ export default {
EqpmSelectPop, EqpmSelectPop,
DateUtility, DateUtility,
XLSX, XLSX,
PageTitle,
}, },
data() { data() {
return { return {
@ -266,8 +264,8 @@ export default {
}, },
created() { }, created() { },
async mounted() { async mounted() {
console.log('----DEBUG---'); // console.log('----DEBUG---');
await this.initTest(); // await this.initTest();
// End Debug Test--- // End Debug Test---
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;

View File

@ -1,7 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<PageTitle text="에너지 사용량 이력" /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -76,6 +75,7 @@
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:isRangeOption="false" :isRangeOption="false"
:textCols="12" :textCols="12"
:customClass="'datepicker-large'"
/> />
</v-col> </v-col>
<v-col :cols="6" class="text-right"> <v-col :cols="6" class="text-right">
@ -270,7 +270,6 @@ export default {
DatePicker, DatePicker,
Grid, Grid,
Chart, Chart,
PageTitle,
}, },
data() { data() {
return { return {
@ -363,10 +362,9 @@ export default {
setChartOption: "setChartOption", setChartOption: "setChartOption",
}), }),
async init() { async init() {
await this.search();
await this.getSelectValueList(); await this.getSelectValueList();
await this.setQueryParams(); await this.setQueryParams();
await this.search();
this.initedFlag = true; this.initedFlag = true;
}, },
@ -522,11 +520,6 @@ export default {
await this.setContentData01(); await this.setContentData01();
await this.setContentData02(); await this.setContentData02();
await this.setContentData03(); await this.setContentData03();
await this.setContentData04();
// await this.setContentData01();
// await this.setContentData02();
// await this.setContentData03();
// await this.setContentData04(); // await this.setContentData04();
}, },
async setContentData01() { async setContentData01() {
@ -540,47 +533,16 @@ export default {
apiKey = "selectMonthlyEnrgUseMainGuideIdx"; apiKey = "selectMonthlyEnrgUseMainGuideIdx";
} }
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: apiKey, apiKey: apiKey,
// resKey: "enrgUseEqpmDetlMntrData", resKey: 'enrgUseEqpmDetlMntrData',
// sendParam: { sendParam: {
// eqpmGrpId: this.selectValue03, eqpmGrpId: this.selectValue03,
// eqpmId: this.selectValue04, eqpmId: this.selectValue04,
// fromDt: this.fromDt, fromDt: this.fromDt,
// },
// });
res = [
{
gdIdxId: "A01",
gdIdxNm: "Temperature",
dataNum: 0,
totVal: 23.5,
timestamp: "2025-07-15T10:00:00Z",
}, },
{ });
gdIdxId: "C03", console.log('res 01:',res)
gdIdxNm: "Power Usage",
dataNum: 1,
totVal: 24.1,
timestamp: "2025-07-15T11:00:00Z",
},
{
gdIdxId: "B02",
gdIdxNm: "Humidity",
dataNum: 0,
totVal: 60,
timestamp: "2025-07-15T10:00:00Z",
},
{
gdIdxId: "B03",
gdIdxNm: "Test",
dataNum: 0,
totVal: 50,
timestamp: "2025-07-19T10:00:00Z",
},
];
this.contentData01 = await this.makeContentData01(res); this.contentData01 = await this.makeContentData01(res);
console.log("content", this.contentData01); console.log("content", this.contentData01);
await this.setChartGroup01(this.contentData01); await this.setChartGroup01(this.contentData01);
@ -615,42 +577,16 @@ export default {
this.loadGrid01 = false; this.loadGrid01 = false;
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: "selectEnrgUseGuideAlarmInfo", apiKey: 'selectEnrgUseGuideAlarmInfo',
// resKey: "enrgUseEqpmDetlMntrData", resKey: 'enrgUseEqpmDetlMntrData',
// sendParam: { sendParam: {
// cmCycle: this.pageData.cmCycle, cmCycle: this.pageData.cmCycle,
// eqpmId: this.selectValue04, eqpmId: this.selectValue04,
// fromDt: this.fromDt, fromDt: this.fromDt,
// alrmKind: ["WARN", "CARE"], alrmKind: ['WARN', 'CARE'],
// },
// });
res = [
{
gdIdxId: "PQ001",
totDttm: "TEMP",
totDt: "Temperature",
totTm: "Analog",
gdIdxNm: "PQ001",
totVal: "TEMP",
caseStndVal: "Temperature",
warnStndVal: "Analog",
alrmKind: "PQ001",
alrmMsg: "TEMP",
}, },
{ });
gdIdxId: "PQ001",
totDttm: "TEMP",
totDt: "Temperature",
totTm: "Analog",
gdIdxNm: "PQ001",
totVal: "TEMP",
caseStndVal: "Temperature",
warnStndVal: "Analog",
alrmKind: "PQ001",
alrmMsg: "TEMP",
},
];
for (var i = 0; i < res.length; i++) { for (var i = 0; i < res.length; i++) {
newRes.push({ newRes.push({
@ -697,33 +633,13 @@ export default {
this.loadGrid02 = false; this.loadGrid02 = false;
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: "selectEnrgUseEqpmDescInfo", apiKey: 'selectEnrgUseEqpmDescInfo',
// resKey: "enrgUseEqpmDetlMntrData", resKey: 'enrgUseEqpmDetlMntrData',
// sendParam: { sendParam: {
// eqpmGrpId: this.selectValue03, eqpmGrpId: this.selectValue03,
// },
// });
res = [
{
pysclQtyId: "PQ001",
pysclQtyCd: "TEMP",
pysclQtyNm: "Temperature",
pysclQtyTp: "Analog",
}, },
{ });
pysclQtyId: "PQ002",
pysclQtyCd: "PRESS",
pysclQtyNm: "Pressure",
pysclQtyTp: "Analog",
},
{
pysclQtyId: "PQ003",
pysclQtyCd: "FLOW",
pysclQtyNm: "Flow Rate",
pysclQtyTp: "Digital",
},
];
for (var i = 0; i < res.length; i++) { for (var i = 0; i < res.length; i++) {
newRes.push({ newRes.push({
@ -748,11 +664,11 @@ export default {
this.loadGrid02 = true; this.loadGrid02 = true;
await this.$nextTick(); await this.$nextTick();
// this.$refs[this.gridName02].focus({ this.$refs[this.gridName02].focus({
// rowKey: 0, rowKey: 0,
// columnName: "no", columnName: 'no',
// setScroll: true, setScroll: true,
// }); });
}, },
async setContentData04(selectedData) { async setContentData04(selectedData) {
var res = null; var res = null;
@ -764,31 +680,23 @@ export default {
this.loadTrendChart = false; this.loadTrendChart = false;
xAxisData = this.makeTrendChartXaxisData(); xAxisData = this.makeTrendChartXaxisData();
console.log("x axis :", xAxisData);
if (this.pageData.cmCycle == "CYC_MONTH") { if (this.pageData.cmCycle == "CYC_MONTH") {
sliderHandleSize = ((24 / xAxisData.length) * 100 * 24) / 25; sliderHandleSize = ((24 / xAxisData.length) * 100 * 24) / 25;
} }
// res = await this.postApiReturn({ res = await this.postApiReturn({
// apiKey: "selectEnrgUseHourlyTrendInfo", apiKey: 'selectEnrgUseHourlyTrendInfo',
// resKey: "enrgUseEqpmDetlMntrData", resKey: 'enrgUseEqpmDetlMntrData',
// sendParam: { sendParam: {
// pysclQtyId: selectedData.pysclQtyId, pysclQtyId: selectedData.pysclQtyId,
// eqpmId: this.selectValue04, eqpmId: this.selectValue04,
// fromDt: this.fromDt, fromDt: this.fromDt,
// cmCycle: this.pageData.cmCycle, cmCycle: this.pageData.cmCycle,
// }, },
// }); });
res = [ seriesData = new Array(xAxisData.length).fill(NaN);
{ monthCnt: 0, totVal: 120 },
{ monthCnt: 1, totVal: 150 },
{ monthCnt: 2, totVal: 180 },
{ monthCnt: 3, totVal: 200 },
];
seriesData = new Array(xAxisData.length).fill(300);
for (var i = 0; i < res.length; i++) { for (var i = 0; i < res.length; i++) {
if (this.pageData.cmCycle == "CYC_MONTH") { if (this.pageData.cmCycle == "CYC_MONTH") {
@ -798,8 +706,6 @@ export default {
} }
} }
var seriesData2 = new Array(xAxisData.length).fill(100);
var chartOption = { var chartOption = {
grid: { grid: {
top: "3%", top: "3%",
@ -845,14 +751,14 @@ export default {
color: "#D32029", color: "#D32029",
}, },
}, },
{ // {
type: "line", // type: "line",
data: seriesData2, // data: seriesData2,
symbol: "none", // symbol: "none",
itemStyle: { // itemStyle: {
color: "#FAAD14", // color: "#FAAD14",
}, // },
}, // },
], ],
dataZoom: [ dataZoom: [
{ {
@ -898,40 +804,13 @@ export default {
} }
} }
// var idxData = await this.postApiReturn({ var idxData = await this.postApiReturn({
// apiKey: "selectEnrgUseMainIdxDesc", apiKey: 'selectEnrgUseMainIdxDesc',
// resKey: "eqpmIndMntrData", resKey: 'eqpmIndMntrData',
// sendParam: { sendParam: {
// eqpmGrpId: this.selectValue03, eqpmGrpId: this.selectValue03,
// },
// });
var idxData = [
{
gdIdxId: "A01",
gdIdxNm: "Temperature",
unit: "°C",
description: "Average temperature reading",
}, },
{ });
gdIdxId: "B02",
gdIdxNm: "Humidity",
unit: "%",
description: "Relative humidity level",
},
{
gdIdxId: "C03",
gdIdxNm: "Power Usage",
unit: "kWh",
description: "Total power consumption",
},
{
gdIdxId: "B03",
gdIdxNm: "Test",
unit: "%",
description: "Relative humidity level test",
},
];
for (var i = 0; i < idxData.length; i++) { for (var i = 0; i < idxData.length; i++) {
if (!result.hasOwnProperty(idxData[i]["gdIdxId"])) { if (!result.hasOwnProperty(idxData[i]["gdIdxId"])) {
@ -956,11 +835,10 @@ export default {
var dataKeyList = Object.keys(data); var dataKeyList = Object.keys(data);
var currentChartData = null; var currentChartData = null;
var chartKey = null; var chartKey = null;
for (var i = 0; i < dataKeyList.length; i++) { for (var i = 0; i < dataKeyList.length; i++) {
currentChartData = data[dataKeyList[i]]; currentChartData = data[dataKeyList[i]];
console.log("curr:", currentChartData); chartKey = 'chartGroup01_' + currentChartData['gdIdxId'];
chartKey = "chartGroup01_" + currentChartData["gdIdxId"];
this.setPageData({ this.setPageData({
[chartKey]: this.getGroup01ChartOption(), [chartKey]: this.getGroup01ChartOption(),
@ -975,10 +853,9 @@ export default {
var seriesData = null; var seriesData = null;
xAxisData = this.makeChartGroup01XaxisData(); xAxisData = this.makeChartGroup01XaxisData();
console.log("text xaxis", xAxisData);
for (var i = 0; i < dataKeyList.length; i++) { for (var i = 0; i < dataKeyList.length; i++) {
seriesData = new Array(xAxisData.length).fill(10); seriesData = new Array(xAxisData.length).fill(NaN);
currentChartData = data[dataKeyList[i]]; currentChartData = data[dataKeyList[i]];
chartKey = "chartGroup01_" + currentChartData["gdIdxId"]; chartKey = "chartGroup01_" + currentChartData["gdIdxId"];
@ -988,7 +865,7 @@ export default {
currentChartData["data"][j]["totVal"]; currentChartData["data"][j]["totVal"];
} }
console.log("text seri data", seriesData); // console.log("text seri data", seriesData);
this.$store.state.pageData[myPrgmId][chartKey]["xAxis"]["data"] = xAxisData; this.$store.state.pageData[myPrgmId][chartKey]["xAxis"]["data"] = xAxisData;
this.$store.state.pageData[myPrgmId][chartKey]["series"][0]["data"] = seriesData; this.$store.state.pageData[myPrgmId][chartKey]["series"][0]["data"] = seriesData;
@ -1006,8 +883,6 @@ export default {
color: "#D32029", color: "#D32029",
}; };
chartOption["series"][0]["symbol"] = "none";
console.log("chartOption: ", chartOption);
return chartOption; return chartOption;
}, },
makeChartGroup01XaxisData() { makeChartGroup01XaxisData() {
@ -1097,76 +972,14 @@ const defaultData = {
fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일 fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일
grid01: { grid01: {
data: [ data: [],
{ column: [],
gdIdxId: "PQ001",
totDttm: "TEMP",
totDt: "Temperature",
totTm: "Analog",
gdIdxNm: "PQ001",
totVal: "TEMP",
caseStndVal: "Temperature",
warnStndVal: "Analog",
alrmKind: "PQ001",
alrmMsg: "TEMP",
},
{
gdIdxId: "PQ001",
totDttm: "TEMP",
totDt: "Temperature",
totTm: "Analog",
gdIdxNm: "PQ001",
totVal: "TEMP",
caseStndVal: "Temperature",
warnStndVal: "Analog",
alrmKind: "PQ001",
alrmMsg: "TEMP",
},
],
column: [
{ header: "NO", name: "no", width: 40, align: "right" },
{ header: "gdIdxId", name: "gdIdxId", hidden: true, align: "left" },
{ header: "totDttm", name: "totDttm", hidden: true, align: "left" },
{ header: "발생일", name: "totDt", width: 150, align: "left" },
{ header: "발생시간대", name: "totTm", width: 100, align: "left" },
{ header: "가이드지표명", name: "gdIdxNm", width: 200, align: "left" },
{ header: "가이드값", name: "totVal", hidden: true, align: "left" },
{ header: "주의값", name: "caseStndVal", hidden: true, align: "left" },
{ header: "경고값", name: "warnStndVal", hidden: true, align: "left" },
{ header: "알람종류", name: "alrmKind", hidden: true, align: "left" },
{ header: "알람내용", name: "alrmMsg", align: "left" },
],
option: {}, option: {},
}, },
grid02: { grid02: {
data: [ data: [],
{ column: [],
pysclQtyId: "PQ001",
pysclQtyCd: "TEMP",
pysclQtyNm: "Temperature",
pysclQtyTp: "Analog",
},
{
pysclQtyId: "PQ002",
pysclQtyCd: "PRESS",
pysclQtyNm: "Pressure",
pysclQtyTp: "Analog",
},
{
pysclQtyId: "PQ003",
pysclQtyCd: "FLOW",
pysclQtyNm: "Flow Rate",
pysclQtyTp: "Digital",
},
],
column: [
{ header: "NO", name: "no", align: "right", width: 40 },
{ header: "물리량ID", name: "pysclQtyId", width: 100, align: "left" },
{ header: "물리량코드", name: "pysclQtyCd", align: "left" },
{ header: "물리량명", name: "pysclQtyNm", width: 190, align: "left" },
{ header: "물리량타입", name: "pysclQtyTp", width: 100, align: "left" },
],
option: {}, option: {},
}, },

View File

@ -1,5 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -9,20 +10,20 @@
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01" <component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" /> :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="false" /> :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="false" /> :label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" customClass="select-large" />
</v-col> </v-col>
<BtnSearch @click="search" /> <BtnSearch size="large" @click="search" />
<v-col> <!-- <v-col>
</v-col> </v-col> -->
<component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId" <component ref="EnrgUsePlanModiPop" :is="'EnrgUsePlanModiPop'" :label="'test'" :parentPrgmId="myPrgmId"
@gridEditingFinish="gridEditingFinish" /> @gridEditingFinish="gridEditingFinish" />
</v-row> </v-row>
@ -30,18 +31,15 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents"> <v-row ref="contents">
<v-col :cols="12" style="height: 100%"> <v-col :cols="12" >
<v-card class="pb-5 h100"> <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" />
</div> </div>
<div class="h100 px-5" style="height:calc(100% - 70px)"> <div ref="gridParent" class="px-5" style="min-height: 60vh;">
<div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
:editorGrid="true" @getRowsData="getRowData" :dataPath="dataPathMock" /> :editorGrid="true" @getRowsData="getRowData" />
</div>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
@ -171,8 +169,8 @@ export default {
created() { }, created() { },
async mounted() { async mounted() {
// ------- // -------
this.initTest(); // this.initTest();
return; // return;
// ========End test=========== // ========End test===========
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;
@ -420,53 +418,25 @@ export default {
class CustumButton { class CustumButton {
constructor(props) { constructor(props) {
// v-btn v-btn--is-elevated v-btn--has-bg theme--dark v-size--default
const el = document.createElement('button');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
$(el).addClass('tui-grid-cell-content'); const gridData = grid.store.data.rawData;
// $(el).css('text-align', 'center'); const value = gridData[rowKey][columnInfo.name];
el.classList.add('v-btn');
// el.style.width = '80%';
// el.style.height = '80%';
// el.style.boxShadow = '0px 0px 0px 2px #cbced6';
// el.style.background = 'linear-gradient(to bottom, #242940 5%, #476e9e 100%)';
// el.style.backgroundColor = '#144985';
el.style.borderRadius = '7px';
el.style.border = '1px solid #4e6096';
// el.style.display = 'inline-block';
// el.style.cursor = 'pointer';
el.style.color = '#ffffff';
// el.style.fontFamily = 'Arial';
el.style.padding = '6% 3%';
// el.style.textDecoration = 'none';
// el.style.textShadow = '0px 1px 0px #283966';
el.innerText = columnInfo.renderer.options.value;
this.el = el;
this.disabled = columnInfo.renderer.options.disabled || false; this.disabled = columnInfo.renderer.options.disabled || false;
const elDiv = document.createElement('div');
elDiv.innerHTML = `<span>${value}</span>`;
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text');
el2.innerText = 'Edit';
elDiv.appendChild(el2);
this.el = elDiv;
if (!this.disabled) { if (!this.disabled) {
// hover 기능 구현
this.el.addEventListener('mouseover', function (event) {
// console.log('darkModeFg', _this.darkModeFg);
// console.log('event',event.fromElement);
// console.log('event',document.defaultView.getComputedStyle(el).getPropertyValue('background-color'));
// rgb(85, 130, 220) // light
// el.style.backgroundColor = '#26578F'; // rgb(20, 73, 133) // dark
// let btnColor = _this.darkModeFg? {mouseOver: '#26578F', mouseOut: '#144985'} : {mouseOver: 'rgb(85, 130, 220)', mouseOut: 'rgb(71, 119, 217)'};
// el.style.backgroundColor = btnColor['mouseOver'];
});
this.el.addEventListener('mouseout', function (event) {
// rgb(71, 119, 217) // light
// el.style.backgroundColor = '#144985'; // dark
// console.log('event',event.fromElement);
// let btnColor = _this.darkModeFg? {mouseOver: '#26578F', mouseOut: '#144985'} : {mouseOver: 'rgb(85, 130, 220)', mouseOut: 'rgb(71, 119, 217)'};
// el.style.backgroundColor = btnColor['mouseOut'];
});
// click 이벤트 // click 이벤트
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 => {
@ -537,18 +507,25 @@ export default {
minWidth: 200, minWidth: 200,
align: 'left', align: 'left',
// hidden: true, // hidden: true,
formatter: ({ value, row }) => { // formatter: ({ value, row }) => {
return ` // return `
<span>${value}</span> // <span>${value}</span>
<button class="edit-btn" data-row='${JSON.stringify(row)}'>Edit</button> // <button class="edit-btn" data-row='${JSON.stringify(row)}'>Edit</button>
`; // `;
} // }
renderer: {
type: CustumButton,
options: {
value: '계획수정',
},
},
}, },
{ {
header: '', header: '',
name: 'btnCol', name: 'btnCol',
width: 70, width: 70,
align: 'center', align: 'center',
hidden: true,
renderer: { renderer: {
type: CustumButton, type: CustumButton,
options: { options: {

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="mainDiv" class="l-layout"> <div ref="mainDiv" class="l-layout">
<PageTitle text="냉동기" /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -180,7 +180,7 @@ export default {
contentData: {}, contentData: {},
loadChart: false, loadChart: false,
testFlag: true, testFlag: false,
}; };
}, },
computed: { computed: {
@ -270,15 +270,14 @@ 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 = [

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> -->
<PageTitle text="에너지 사용량 실적" /> <CommonPageTitle />
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
@ -255,9 +255,8 @@ 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();
@ -488,131 +487,41 @@ 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,
},
];
// for (var i = 0; i < res.length; i++) { var newRes = [];
// newRes.push({ for (var i = 0; i < res.length; i++) {
// ...res[i], newRes.push({
// no: i + 1, ...res[i],
// }); no: i + 1,
// } });
}
this.setGridData({ this.setGridData({
gridKey: this.gridName, gridKey: this.gridName,
@ -752,141 +661,9 @@ const defaultData = {
}, },
fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일 fromDt: Utility.setFormatDate(new Date(), "YYYYMM"), // 조회 시작일
grid01: { grid01: {
data: [ data: [],
{ column: [],
no: 1, option: {},
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",
],
},
],
},
},
}, },
}; };

View File

@ -103,7 +103,6 @@
<component <component
:ref="gridName" :ref="gridName"
class="tagTrndGrid" class="tagTrndGrid"
v-if="loadGrid"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -199,7 +198,6 @@ export default {
async asyncData(context) { async asyncData(context) {
const myState = context.store.state; const myState = context.store.state;
myPrgmId = context.route.query.prgmId; myPrgmId = context.route.query.prgmId;
console.log("menudata:", myState.menuData[myPrgmId]);
await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]); await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
myTitle = await myState.activeMenuInfo.menuNm; myTitle = await myState.activeMenuInfo.menuNm;
}, },
@ -330,7 +328,6 @@ export default {
} else { } else {
this.dumyChartFg = false; this.dumyChartFg = false;
} }
this.dumyChartFg = true;
if (this.initedFlag && this.tagList.length > 0) { if (this.initedFlag && this.tagList.length > 0) {
this.search(); this.search();
} }
@ -409,12 +406,12 @@ export default {
getAddInfoList: "modules/search/getAddInfoList", getAddInfoList: "modules/search/getAddInfoList",
}), }),
async init() { async init() {
await this.setPageData({ this.setPageData({
rowGridSelectKey: 0, rowGridSelectKey: 0,
rowGridSelectData: null, rowGridSelectData: null,
}); });
await this.gridInit(); this.gridInit();
this.setChartNull2(); this.setChartNull();
}, },
async search() { async search() {
// search가 2번 타는 경우: // search가 2번 타는 경우:
@ -513,12 +510,6 @@ export default {
gridKey: this.gridName, gridKey: this.gridName,
value: myColumns, value: myColumns,
}); });
this.setGridData({
gridKey: this.gridName,
value: newRes,
});
this.loadGrid = true; this.loadGrid = true;
}, },
getRowData(data) { getRowData(data) {
@ -809,7 +800,6 @@ export default {
// data SeriesData 추가 // data SeriesData 추가
chartDataDict[dataTagTitle]["seriesData"] = seriesData; chartDataDict[dataTagTitle]["seriesData"] = seriesData;
// data legend 추가 // data legend 추가
console.log("le dat:", legendData);
chartDataDict[dataTagTitle]["legendList"] = legendData; chartDataDict[dataTagTitle]["legendList"] = legendData;
// //
//rawData chart data 구성하기 //rawData chart data 구성하기
@ -1216,40 +1206,8 @@ const defaultData = {
rowGridSelectData: null, rowGridSelectData: null,
/* Griddata 세팅 */ /* Griddata 세팅 */
rowGrid: { rowGrid: {
data: [ data: [],
{ column: [],
eqpmGrpNm: "냉동기고온",
eqpmGrpId: "UT_HT_CH201",
eqpmId: "UT_HT_CH201",
eqpmNm: "UT_HT_CH201",
tagId: "ICHEON.HVAC.EQP_HT_CH004.UT_HT_CH201.CHI_AMP_1A_PV",
tagNm: "ICHEON 고온 냉동기 201호기 - 회로1 전류A",
// rowStat: "I",
},
{
eqpmGrpNm: "냉동기고온",
eqpmGrpId: "UT_HT_CH201",
eqpmId: "UT_HT_CH201",
eqpmNm: "UT_HT_CH201",
tagId: "ICHEON.HVAC.EQP_HT_CH004.UT_HT_CH201.CHI_AMP_1A_PV",
tagNm: "ICHEON 고온 냉동기 201호기 - 회로1 전류A",
// rowStat: "I",
},
],
column: [
{ header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 150 },
{
header: "설비그룹 ID",
name: "eqpmGrpId",
align: "center",
hidden: true,
},
{ header: "설비ID", name: "eqpmId", align: "left", width: 200 },
{ header: "설비명", name: "eqpmNm", align: "left", width: 200 },
{ header: "TAG ID", name: "tagId", align: "left", width: 500 },
{ header: "TAG 명", name: "tagNm", align: "left" },
// { header: "rowStat", name: "rowStat", align: "center", hidden: true },
],
option: {}, option: {},
defaultRow: { defaultRow: {
eqpmGrpNm: null, eqpmGrpNm: null,

View File

@ -52,5 +52,4 @@ use([
// ToolboxComponent, // 그래프 이미지 save // ToolboxComponent, // 그래프 이미지 save
]); ]);
console.log('echart plugin', echarts)
Vue.component('VChart', VChart); Vue.component('VChart', VChart);

View File

@ -10,6 +10,7 @@ import icoBulletPoint from '~/components/icons/icoBulletPoint';
import icoChevronDown from '~/components/icons/icoChevronDown'; import icoChevronDown from '~/components/icons/icoChevronDown';
import icoSearch from '~/components/icons/icoSearch'; import icoSearch from '~/components/icons/icoSearch';
import icoSend from '~/components/icons/icoSend'; import icoSend from '~/components/icons/icoSend';
import icoExpandAlt from '~/components/icons/icoExpandAlt';
import '@mdi/font/css/materialdesignicons.css'; // Ensure you are using css-loader import '@mdi/font/css/materialdesignicons.css'; // Ensure you are using css-loader
import 'material-design-icons-iconfont/dist/material-design-icons.css'; import 'material-design-icons-iconfont/dist/material-design-icons.css';
import Vue from 'vue'; import Vue from 'vue';
@ -73,6 +74,9 @@ export default new Vuetify({
icoSend: { icoSend: {
component: icoSend, component: icoSend,
}, },
icoExpandAlt: {
component: icoExpandAlt,
},
}, },
}, },
}); });

View File

@ -197,8 +197,8 @@ export const mutations = {
// 페이지 그리드 데이터 set // 페이지 그리드 데이터 set
setGridData: (state, payload) => { setGridData: (state, payload) => {
console.log('check:', state.pageData) // console.log('check:', state.pageData)
console.log('payload:', payload) // console.log('payload:', payload)
// state.pageData['PRG0001']['dashBoard_grid_01'] = { // state.pageData['PRG0001']['dashBoard_grid_01'] = {
// ...state.pageData['PRG0001']['dashBoard_grid_01'], // ...state.pageData['PRG0001']['dashBoard_grid_01'],
// data: payload.value, // data: payload.value,

View File

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