Compare commits

..

24 Commits

Author SHA1 Message Date
38585f7b4f hotfix layout 2025-08-06 16:43:12 +07:00
b0ad70d33e fix bugs 2025-08-06 16:31:44 +07:00
dev
3f89707a01 Merge pull request 'fixbugs grid' (#38) from dev-dungtv-0805 into dev
Reviewed-on: #38
2025-08-06 12:13:45 +09:00
a4007d5697 resolve comment 2025-08-06 10:12:34 +07:00
3b6c05c70a Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv-0805 2025-08-06 09:27:47 +07:00
dev
550659475f Merge pull request 'fix bug 18 33 34' (#37) from dev-manhph1-figbug into dev
Reviewed-on: #37
2025-08-06 11:27:22 +09:00
4a7077336d resolve confict 2025-08-06 09:26:53 +07:00
dev
ca27167d3d Merge pull request 'Update tooltip s4 + add view button to switch page' (#36) from dev-nghiantt-fix-bugs into dev
Reviewed-on: #36
2025-08-06 10:32:48 +09:00
bf6d03df63 fixbugs grid 2025-08-05 17:28:12 +07:00
8cadade514 fix bug 18 33 34 2025-08-05 15:00:22 +07:00
f929ad2c28 Update tooltip s4 + add view button to switch page 2025-08-05 15:29:25 +09:00
dev
53b8b89e68 Merge pull request 'dev-trungvq7-0729' (#35) from dev-trungvq7-0729 into dev
Reviewed-on: #35
2025-08-05 11:15:47 +09:00
dev
b32aa1d5bb Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-08-04 19:40:08 +09:00
dev
8f7f5c598d Update 0408 2025-08-04 19:39:58 +09:00
dev
e96d012d17 Merge pull request 'fixbug' (#34) from dev-luannv24-fixbugs32s2 into dev
Reviewed-on: #34
2025-08-04 19:01:26 +09:00
dev
efee1098ba Merge pull request 'dev-manhph1-figbug' (#33) from dev-manhph1-figbug into dev
Reviewed-on: #33
2025-08-04 18:56:50 +09:00
5735777bb1 fixbug 2025-08-04 18:53:30 +09:00
2253ddef0a conflic 2025-08-04 16:41:29 +07:00
41095098e2 fixbug-scrren-12 2025-08-04 16:37:00 +07:00
28fe49d39f fixbug-scrren-12 2025-08-04 16:35:12 +07:00
dev
f180f22324 Merge pull request 'fix bug screen 8, 10, menu' (#32) from dev-dungtv44-0804 into dev
Reviewed-on: #32
2025-08-04 18:06:52 +09:00
a7968774c3 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv44-0804 2025-08-04 15:03:03 +07:00
dev
195c48ff25 Merge pull request 'Update s1 s29 - Remove mock data s5 s11' (#31) from dev-nghiantt-s1s29 into dev
Reviewed-on: #31
2025-08-04 17:02:41 +09:00
7bca077859 fix bug screen 8, 10, menu 2025-08-04 15:00:22 +07:00
47 changed files with 967 additions and 1060 deletions

View File

@ -266,7 +266,7 @@ a {
} }
&>.v-treeview-node__root:hover:before { &>.v-treeview-node__root:hover:before {
opacity: 1 !important; opacity: 0 !important;
} }
.v-treeview-node__children { .v-treeview-node__children {
@ -280,15 +280,19 @@ a {
.v-treeview-node--click[aria-expanded="true"] { .v-treeview-node--click[aria-expanded="true"] {
&>.v-treeview-node__root:before { &>.v-treeview-node__root:before {
opacity: 1 !important; opacity: 0 !important;
} }
} }
.v-treeview-node[aria-expanded="true"] { .v-treeview-node[aria-expanded="true"] {
&>.v-treeview-node__root>.v-treeview-node__content>.v-treeview-node__label>button>.v-icon.mdi-chevron-down { &>.v-treeview-node__root>.v-treeview-node__content
>.v-treeview-node__label>button {
>.anticon,
>.v-icon.mdi-chevron-down {
transform: rotate(-180deg); transform: rotate(-180deg);
} }
} }
}
.v-treeview-node__label { .v-treeview-node__label {
&>button { &>button {
@ -298,15 +302,17 @@ a {
// justify-content: center; // justify-content: center;
} }
& .anticon,
& .v-icon.mdi-chevron-down { & .v-icon.mdi-chevron-down {
margin-left: auto; margin-left: auto;
animation-duration: 0.5s;
} }
} }
} }
.v-treeview-node--active { .v-treeview-node--active {
&:before { &:before {
opacity: 1 !important; opacity: 0 !important;
} }
} }
@ -322,7 +328,8 @@ a {
.v-treeview-node__content span:not(.v-icon), .v-treeview-node__content span:not(.v-icon),
.v-treeview-node__root>button, .v-treeview-node__root>button,
.v-treeview-node__level, .v-treeview-node__level,
.v-treeview-node__content .v-icon.mdi-chevron-down { .v-treeview-node__content .v-icon.mdi-chevron-down,
.v-treeview-node__content .anticon {
display: none; display: none;
} }
@ -604,45 +611,9 @@ a {
} }
} }
// .v-banner {
// &__wrapper {
// border-bottom-color: map-deep-get($config,
// #{$theme},
// "v-banner-border-color"
// ) !important;
// }
// }
.v-navigation-drawer__append { .v-navigation-drawer__append {
>p { >p {
@if $theme ==dark { color: map-deep-get($config, #{$theme}, "v-banner-border-color" ) !important;
color: rgba(255, 255, 255, 0.6);
}
@else {
color: #999;
}
}
}
.v-footer {
@if $theme ==light {
background-color: #dfdfe5;
color: #767d83;
}
}
.bd {
@if $theme ==dark {
&-r-1 {
border-right: 1px #373f45 solid;
}
}
@else {
&-r-1 {
border-right: 1px #efefef solid;
}
} }
} }
@ -692,181 +663,115 @@ a {
} }
&>.v-treeview-node { &>.v-treeview-node {
.v-treeview-node__root {
.v-treeview-node--active {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-bg"
);
border: 1px solid map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-border"
);
border-radius: 8px; border-radius: 8px;
&:hover {
&:before { background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-border-color" );
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
} }
.v-treeview-node__content {
&>.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
} }
} }
} }
&[aria-expanded="true"]{
// Level 1
&>.v-treeview-node__root { &>.v-treeview-node__root {
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-bg" );
border: 1px solid map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border");
&:before { &:before {
background-color: map-deep-get($config, background-color: map-deep-get($config, #{$theme}, "v-treeview-node-subroot-backgroundColor");
#{$theme},
"v-treeview-node-root-backgroundColor"
);
} }
&>.v-treeview-node__content { .v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border");
#{$theme},
"v-treeview-node-root-label-color"
);
} }
.v-icon { .v-icon:first-child,
color: map-deep-get($config, .v-icon:first-child::before {
#{$theme}, color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
"v-treeview-node-root-icon-color"
);
} }
} }
}
&>.v-treeview-node__children {
// Level 2
.v-treeview-node__root {
color: map-deep-get($config, #{$theme}, "v-treeview-node-root-label-color");
&:hover {
background-color: map-deep-get($config, #{$theme}, "v-calendar-weekday-backgroundColor");
}
}
&>[aria-expanded="true"] >.v-treeview-node__root,
.v-treeview-node__root.v-treeview-node--active {
background-color: map-deep-get($config, #{$theme}, "v-calendar-day-in-not-month-color" );
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "card-title-color");
}
.v-icon,
.v-icon::before,
.anticon {
color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
}
}
}
// Level 3
.v-treeview-node__children {
.v-treeview-node {
>.v-treeview-node__root {
.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config, #{$theme}, "card-default-color");
}
}
*:hover,
:hover {
border-width: 0;
}
&:hover { &:hover {
&>.v-treeview-node__content { border: 1px solid map-deep-get($config, #{$theme}, "v-input-textarea-border");
border-radius: 8px;
background-color: rgba(0, 0, 0, 0);
.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
#{$theme},
"v-treeview-node-root-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-icon-active-color"
);
}
}
} }
} }
&>.v-treeview-node__children {
&>.v-treeview-node {
&>.v-treeview-node__root {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
} }
&>.v-treeview-node__content { &.v-treeview-node--active {
// color: map-deep-get($config, #{$theme}, "card-title-color");
background-color: rgba(0, 0, 0, 0);
.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "tui-grid-title-color");
#{$theme},
"v-treeview-node-label-color"
);
} }
.v-icon { .v-icon,
color: map-deep-get($config, .v-icon::before,
#{$theme}, .anticon {
"v-treeview-icon-color" color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-border" );
);
}
}
&:not(.v-treeview-node--active):hover {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
} }
} }
} }
&>.v-treeview-node__children {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-subchildren-backgroundColor"
);
}
&[aria-expanded="true"] {
& .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-children-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
}
}
}
} }
} }
&[aria-expanded="true"] {
& .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-label-active-color"
);
} }
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-root-icon-active-color"
);
}
} }
} }
} }
@ -1217,19 +1122,40 @@ a {
); );
border: 1px solid map-deep-get($config, #{$theme}, "tui-datepicker-border-color"); border: 1px solid map-deep-get($config, #{$theme}, "tui-datepicker-border-color");
border-radius: 4px; border-radius: 4px;
padding: 4px;
&-item--active { &-item--active {
border-radius: 4px;
&:before { &:before {
opacity: 0; opacity: 0;
} }
.v-list-item__title { .v-list-item__title {
color: map-deep-get($config, color: map-deep-get($config, #{$theme}, "tui-datepicker-calendar-color");
#{$theme},
"tui-datepicker-calendar-color"
);
} }
} }
&.v-select-list{
>.v-list-item {
margin-bottom: 4px;
.anticon {
&.anticon-check {
display: none;
}
}
&[aria-selected="true"] {
border-radius: 8px;
background-color: map-deep-get($config, #{$theme}, "v-treeview-node-label-active-bg");
.anticon {
&.anticon-check {
display: block;
color: map-deep-get($config, #{$theme}, "v-icon-blue");
}
}
}
}
}
} }
.theme--white { .theme--white {
@ -1348,11 +1274,6 @@ a {
} }
} }
} }

View File

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

View File

@ -17,18 +17,6 @@
border: 0 !important; border: 0 !important;
} }
// &-body-container {
// width: 100% !important;
// }
// &-table {
// width: 100% !important;
// }
// &-lside-area .tui-grid-body-area {
// margin-right: -11px;
// }
&-lside-area .tui-grid-scrollbar-left-bottom { &-lside-area .tui-grid-scrollbar-left-bottom {
display: none; display: none;
} }
@ -98,6 +86,12 @@
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.tui-grid-content-area{
.tui-grid-header-area{
height: auto !important;
}
}
.grid-title { .grid-title {
font-weight: 600; font-weight: 600;
font-size: 16px; font-size: 16px;
@ -144,48 +138,28 @@
&-body-container{ &-body-container{
border-right: 0; border-right: 0;
// border-right-color: map-deep-get($config, // position: relative;
// #{$theme},
// "tui-grid-cell-borderColor"
// );
width: auto !important; width: auto !important;
.tui-grid-table-container{
// width: 100% !important;
.tui-grid-table {
// width: 100% !important;
// table-layout: fixed;
// th, td {
// &:last-child{
// width: auto !important;
// }
// }
}
}
} }
&-container, &-summary-area,
&-summary-area { &-container {
font-family: Inter; font-family: Inter;
// color: #000000E0;
& ::-webkit-scrollbar {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
-webkit-appearance: initial;
// background-color: map-deep-get($config,
// #{$theme},
// "tui-grid-cell-borderColor"
// ) !important;
background-color: rgba(0, 0, 0, 0) !important;
border-radius: 3px !important;
}
& ::-webkit-scrollbar-track {
// background-color: map-deep-get($config,
// #{$theme},
// "tui-grid-cell-borderColor"
// ) !important;
background-color: rgba(0, 0, 0, 0) !important;
}
& ::-webkit-scrollbar-thumb {
width: 50px !important;
height: 50px !important;
background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb");
// background-color: rgba(0, 0, 0, 0);
border-radius: 3px;
}
.tui-grid-cell { .tui-grid-cell {
&.tui-grid-cell-summary { &.tui-grid-cell-summary {
color: map-deep-get($config, color: map-deep-get($config,
#{$theme}, #{$theme},
@ -195,6 +169,32 @@
} }
} }
&-body-area {
overflow: auto;
&::-webkit-scrollbar {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
-webkit-appearance: initial;
background-color: rgba(0, 0, 0, 0) !important;
border-radius: 3px !important;
// border-right: 1px solid;
// border-right-color: map-deep-get($config, #{$theme}, "tui-grid-cell-borderColor");
}
&::-webkit-scrollbar-track {
background-color: rgba(0, 0, 0, 0) !important;
}
&::-webkit-scrollbar-thumb {
height: 50px !important;
background-color: map-deep-get($config, #{$theme}, "scrollbar-thumb");
border-radius: 3px;
// width: 50px !important;
// background-color: rgba(0, 0, 0, 0);
}
}
&-rside-area { &-rside-area {
background-color: map-deep-get($config, #{$theme}, "scrollbar-track"); background-color: map-deep-get($config, #{$theme}, "scrollbar-track");
} }
@ -233,13 +233,13 @@
&-scrollbar-right-bottom { &-scrollbar-right-bottom {
width: $scrollbar-width !important; width: $scrollbar-width !important;
height: $scrollbar-width !important; height: $scrollbar-width !important;
// display: none !important;
border-color: map-deep-get($config, #{$theme}, "cardBackground"); border-color: map-deep-get($config, #{$theme}, "cardBackground");
background-color: map-deep-get($config, #{$theme}, "cardBackground"); background-color: map-deep-get($config, #{$theme}, "cardBackground");
box-sizing: border-box;
// display: none !important;
// border: none !important; // border: none !important;
// bottom: -1px; // bottom: -1px;
// right: -2px; // right: -2px;
box-sizing: border-box;
// display: none; // display: none;
} }
@ -308,13 +308,13 @@
#{$theme}, #{$theme},
"tui-grid-cell-borderColor" "tui-grid-cell-borderColor"
); );
.tui-grid-cell-content { // .tui-grid-cell-content {
border-right: 1px solid ; // border-right: 1px solid ;
border-right-color: map-deep-get($config, // border-right-color: map-deep-get($config,
#{$theme}, // #{$theme},
"tui-grid-cell-borderColor" // "tui-grid-cell-borderColor"
); // );
} // }
} }
} }
@ -350,6 +350,10 @@
#{$theme}, #{$theme},
"tui-grid-cell-backgroundColor" "tui-grid-cell-backgroundColor"
); );
// width: 100% !important;
// .tui-grid-table {
// width: 100% !important;
// }
} }
&-row-odd, &-row-odd,
@ -479,6 +483,7 @@
} }
&-tree-button-expand { &-tree-button-expand {
z-index: 9999;
.tui-grid-btn-tree { .tui-grid-btn-tree {
i { i {
width: 16px; width: 16px;
@ -497,6 +502,7 @@
} }
&-tree-button-collapse { &-tree-button-collapse {
z-index: 9999;
.tui-grid-btn-tree { .tui-grid-btn-tree {
i { i {
width: 16px; width: 16px;

View File

@ -175,11 +175,13 @@
margin: 5px; margin: 5px;
font-size: 16px; font-size: 16px;
} }
.custom-radio input[type="radio"] { .custom-radio input[type="radio"] {
position: absolute; position: absolute;
opacity: 0; opacity: 0;
cursor: pointer; cursor: pointer;
} }
/* Custom radio appearance */ /* Custom radio appearance */
.radio-mark { .radio-mark {
position: absolute; position: absolute;
@ -222,11 +224,31 @@
color: #424242 !important; color: #424242 !important;
} }
.ant-checkbox {
.ant-checkbox-inner {
border-radius: 4px
}
}
@each $theme in dark, light { @each $theme in dark, light {
@include theme($theme); @include theme($theme);
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
.ant-checkbox-wrapper {
.ant-checkbox-checked {
.ant-checkbox-inner {
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
color:map-deep-get($config, #{$theme}, "ant-btn-primary-color");
&.ant-checkbox-inner::after {
border-color: map-deep-get($config, #{$theme}, "ant-btn-primary-color");
}
}
}
}
.v-input-popup__custom { .v-input-popup__custom {
.v-input__slot { .v-input__slot {
padding-left: 12px; padding-left: 12px;
@ -239,11 +261,12 @@
} }
.v-textarea { .v-textarea {
.v-input__slot{ .v-input__slot {
border: map-deep-get($config, border: map-deep-get($config,
#{$theme}, #{$theme},
"v-input-textarea-border" "v-input-textarea-border"
); );
fieldset { fieldset {
background-color: map-deep-get($config, background-color: map-deep-get($config,
#{$theme}, #{$theme},
@ -404,6 +427,12 @@
.v-input--checkbox { .v-input--checkbox {
.v-icon { .v-icon {
transform: none;
&.mdi:before {
font-size: 16px;
}
@if $theme ==dark { @if $theme ==dark {
color: rgba(255, 255, 255, 0.6); color: rgba(255, 255, 255, 0.6);
} }
@ -414,6 +443,9 @@
} }
} }
.v-textarea { .v-textarea {
textarea { textarea {
padding: 10px; padding: 10px;

View File

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

View File

@ -110,7 +110,7 @@ $config: (
tui-grid-border-horziontal-color: #212224, tui-grid-border-horziontal-color: #212224,
tui-grid-border-vertical-color: #FFFFFF0F, 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: #FFFFFFA6,
tui-grid-cell-insert-color: #13636c, tui-grid-cell-insert-color: #13636c,
tui-grid-cell-selected-color: #0A224F, tui-grid-cell-selected-color: #0A224F,
tui-grid-cell-modify-color: #13636c, tui-grid-cell-modify-color: #13636c,
@ -211,7 +211,6 @@ $config: (
router-tab-item-hover-color: #1677ff, router-tab-item-hover-color: #1677ff,
router-tab-slot-end-button-backgroundColor: #3f4d7d, router-tab-slot-end-button-backgroundColor: #3f4d7d,
v-btn-backgroundColor: #1677ff, v-btn-backgroundColor: #1677ff,
// v-btn-backgroundColor: #fff,
v-box: #FFFFFF, v-box: #FFFFFF,
v-banner-border-color: #ddd, v-banner-border-color: #ddd,
v-treeview-node-root-backgroundColor: #FFFFFF, v-treeview-node-root-backgroundColor: #FFFFFF,
@ -253,10 +252,10 @@ $config: (
tui-grid-border-vertical-color: rgba(0, 0, 0, 0.06), //#d4d4d4, tui-grid-border-vertical-color: rgba(0, 0, 0, 0.06), //#d4d4d4,
tui-grid-cell-backgroundColor: #fff, tui-grid-cell-backgroundColor: #fff,
tui-grid-cell-color: #000000E0, tui-grid-cell-color: #000000E0,
tui-grid-cell-insert-color: #13636c, tui-grid-cell-insert-color: #FFFBE6,
tui-grid-cell-selected-color: #E6F4FF, tui-grid-cell-selected-color: #E6F4FF,
tui-grid-cell-modify-color: #e6f5f7, tui-grid-cell-modify-color: #e6f5f7,
tui-grid-cell-removed-color: #fddde1, tui-grid-cell-removed-color: #FFF1F0,
tui-grid-cell-hover-backgroundColor: #f5f5f5, tui-grid-cell-hover-backgroundColor: #f5f5f5,
v-tabs-items-border-color: #0000000F, v-tabs-items-border-color: #0000000F,
v-tabs-backgroundColor: #ddd, v-tabs-backgroundColor: #ddd,

View File

@ -2,26 +2,17 @@
<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-checkbox
v-model="chkValue" <a-checkbox v-model="chkValue" :disabled="disabledFlag" :readonly="readonly || false"
:disabled="disabledFlag" :required="required || false" @change="modifyValue">
:readonly="readonly || false" </a-checkbox>
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#1890ff'"
@change="modifyValue"
></v-checkbox>
</v-col> </v-col>
</v-row> </v-row>
</template> </template>
@ -103,7 +94,8 @@ export default {
methods: { methods: {
...mapMutations({ setPageData: "setPageData" }), ...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) { modifyValue(e) {
return this.setPageData({ [this.valueNm]: e }); const isChecked = e.target.checked;
return this.setPageData({ [this.valueNm]: isChecked });
}, },
}, },
}; };

View File

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

View File

@ -617,6 +617,7 @@ export default {
list.map(item => this.gridInstance.invoke('check', item)); list.map(item => this.gridInstance.invoke('check', item));
}, },
refreshLayout() { refreshLayout() {
// console.log("---------DEBUG---refreshLayout: ");
this.gridInstance.invoke('refreshLayout'); this.gridInstance.invoke('refreshLayout');
}, },
refreshGrid(){ refreshGrid(){
@ -626,10 +627,8 @@ export default {
// var containerEl = document.querySelector('.tui-grid-container') // var containerEl = document.querySelector('.tui-grid-container')
var parentEl = containerEl.parentElement; var parentEl = containerEl.parentElement;
// console.log("---------DEBUG---containerEl: ",containerEl);
// console.log('---------DEBUG---parentEl: ', parentEl)
// console.log("containerEl : ",containerEl);
// console.log('parentEl : ', parentEl)
// function refreshLayout(store, containerEl, parentEl) { // function refreshLayout(store, containerEl, parentEl) {
var dimension = store.dimension; var dimension = store.dimension;
var autoWidth = dimension.autoWidth, fitToParentHeight = dimension.fitToParentHeight; var autoWidth = dimension.autoWidth, fitToParentHeight = dimension.fitToParentHeight;
@ -654,25 +653,25 @@ export default {
// } // }
}, },
setOffsetTop(store, offsetTop) { setOffsetTop(store, offsetTop) {
// console.log("setOffsetTop"); // console.log("---------DEBUG---setOffsetTop: ");
store.dimension.offsetTop = offsetTop; store.dimension.offsetTop = offsetTop;
}, },
setWidth(_a, width, autoWidth) { setWidth(_a, width, autoWidth) {
// console.log("setWidth"); // console.log("---------DEBUG---setWidth: ");
var dimension = _a.dimension; var dimension = _a.dimension;
dimension.autoWidth = autoWidth; dimension.autoWidth = autoWidth;
dimension.width = width; dimension.width = width;
}, },
setHeaderHeight(store, height) { setHeaderHeight(store, height) {
// console.log("setHeaderHeight") // console.log("---------DEBUG---setHeaderHeight: ");
store.dimension.headerHeight = height; store.dimension.headerHeight = height;
}, },
setOffsetLeft(store, offsetLeft) { setOffsetLeft(store, offsetLeft) {
// console.log("setOffsetLeft") // console.log("---------DEBUG---setOffsetLeft: ");
store.dimension.offsetLeft = offsetLeft; store.dimension.offsetLeft = offsetLeft;
}, },
setHeight(_a,height){ setHeight(_a,height){
// console.log("setHeight"); // console.log("---------DEBUG---setHeight: ");
var dimension = _a.dimension; var dimension = _a.dimension;
var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth; var headerHeight = dimension.headerHeight, summaryHeight = dimension.summaryHeight, tableBorderWidth = dimension.tableBorderWidth;
dimension.bodyHeight = height - headerHeight - summaryHeight - tableBorderWidth; dimension.bodyHeight = height - headerHeight - summaryHeight - tableBorderWidth;
@ -703,10 +702,11 @@ export default {
// resetData() { // resetData() {
// // console.log("resetData = ", this.tuigridProps.data); // // console.log("resetData = ", this.tuigridProps.data);
// this.$refs.tuigrid.invoke("resetData", this.tuigridProps.data); // this.$refs.tuigrid.invoke("resetData", this.tuigridProps.data);
// } // },
}, },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep .tui-grid-container { ::v-deep .tui-grid-container {
.tui-grid-content-area { .tui-grid-content-area {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -22,7 +22,7 @@
outlined outlined
:menu-props="{ auto: true, offsetY: true }" :menu-props="{ auto: true, offsetY: true }"
:hide-details="true" :hide-details="true"
:class="'v-select__custom'" :class="['v-select__custom', customClass]"
:disabled="disabled" :disabled="disabled"
:readonly="readonly" :readonly="readonly"
@click="setDatepickerHide" @click="setDatepickerHide"
@ -106,6 +106,10 @@ export default {
require: false, require: false,
default: 1, default: 1,
}, },
customClass: {
type: String,
require: false,
},
}, },
emits: ["update:propsValue"], emits: ["update:propsValue"],
data() { data() {

View File

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

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="d-flex justify-space-between align-center" style="min-height: 80px;"> <div class="d-flex justify-space-between align-center" style="min-height: 80px;">
<span class="txt custom-title-4-new">Data Set TAG 연결 정보</span> <span class="txt custom-subtitle-tab">Data Set TAG 연결 정보</span>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
:btnActionsFnc="btnActions" /> :btnActionsFnc="btnActions" />
</div> </div>
@ -38,7 +38,7 @@
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import Buttons from '~/components/common/button/Buttons'; import Buttons from '~/components/common/button/Buttons';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import { CustumChecbox } from '~/plugins/gridUtility'; import { CustomCheckbox } from '~/plugins/gridUtility';
import { CustomNumberEditor } from '~/plugins/gridUtility'; import { CustomNumberEditor } from '~/plugins/gridUtility';
import Form from '~/components/common/form/Form'; import Form from '~/components/common/form/Form';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';

View File

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

View File

@ -8,7 +8,7 @@
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div ref="gridParent" style="height: calc(100vh - 520px);"> <div ref="gridParent" class="w100" style="height: calc(100vh - 520px);">
<Grid <Grid
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
@ -55,9 +55,9 @@ export default {
dataPathMock: { dataPathMock: {
'rowDetailGrid' : { 'rowDetailGrid' : {
column: [ column: [
{ header: '추가 정보', name: 'id', headerAlign: 'left' }, { header: '추가 정보', name: 'id', headerAlign: 'left', align: 'left', },
{ header: 'Data 구분', name: 'lable', headerAlign: 'left' }, { header: 'Data 구분', name: 'lable', headerAlign: 'left', align: 'left' },
{ header: '추가 정보 값', name: 'type', headerAlign: 'left' }, { header: '추가 정보 값', name: 'type', headerAlign: 'left', align: 'right' },
// { header: '비고', name: 'note', headerAlign: 'left' } // { header: '비고', name: 'note', headerAlign: 'left' }
], ],
data: dataPathDataExample, data: dataPathDataExample,
@ -296,7 +296,7 @@ export default {
{ {
header: '추가 정보 값', header: '추가 정보 값',
name: 'addInfoVal', name: 'addInfoVal',
align: 'center', align: 'left',
renderer: { renderer: {
type: CustomRenderer, type: CustomRenderer,
}, },

View File

@ -8,7 +8,7 @@
:btnActionsFnc="btnActions" :btnActionsFnc="btnActions"
/> />
</div> </div>
<div ref="gridParent" style="height: calc(100vh - 800px);"> <div ref="gridParent" style="height: calc(100vh - 700px);">
<Grid <Grid
:ref="gridName" :ref="gridName"
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
@ -18,7 +18,7 @@
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
/> />
</div> </div>
<div style="min-height: calc(100vh - 900px);" class="mt-4"> <div style="height: 60vh;" class="mt-5">
<component <component
:is="'Form'" :is="'Form'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -114,7 +114,7 @@ export default {
this.detailList[2].class = 'py-3 d-none'; this.detailList[2].class = 'py-3 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-1 d-none'; this.detailList[3].class = 'py-3 pl-4 pt-1 d-none';
this.detailList[4].class = 'py-3'; this.detailList[4].class = 'py-3 pl-4';
this.detailList[5].class = 'py-3 pl-4'; this.detailList[5].class = 'py-3 pl-4';
this.detailList[6].class = 'py-3 pl-4 pt-0'; this.detailList[6].class = 'py-3 pl-4 pt-0';
} else { } else {
@ -230,7 +230,7 @@ export default {
{ {
header: '대상 유형', header: '대상 유형',
name: 'objKind', name: 'objKind',
align: 'center', align: 'left',
formatter({ value }) { formatter({ value }) {
var retVal = ''; var retVal = '';
@ -261,7 +261,7 @@ export default {
{ {
header: '계산여부', header: '계산여부',
name: 'calcFg', name: 'calcFg',
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(
@ -612,3 +612,10 @@ const myEqpmIaoDetail = [
}, },
]; ];
</script> </script>
<style lang="scss" scoped >
::v-deep {
.tui-grid-layer-state {
top: 40px !important;
}
}
</style>

View File

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

View File

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

View File

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

View File

@ -30,7 +30,7 @@
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import Buttons from '~/components/common/button/Buttons'; import Buttons from '~/components/common/button/Buttons';
import Grid from '~/components/common/Grid'; import Grid from '~/components/common/Grid';
import { CustumChecbox } from '~/plugins/gridUtility'; import { CustomCheckbox } from '~/plugins/gridUtility';
import { CustomNumberEditor } from '~/plugins/gridUtility'; import { CustomNumberEditor } from '~/plugins/gridUtility';
import Form from '~/components/common/form/Form'; import Form from '~/components/common/form/Form';
import mixinGlobal from '@/mixin/global.js'; import mixinGlobal from '@/mixin/global.js';
@ -153,7 +153,6 @@ export default {
{ {
header: '에너지원', header: '에너지원',
name: 'ercId', name: 'ercId',
align: 'center',
width: 100, width: 100,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -182,10 +181,9 @@ export default {
{ {
header: '대표 TAG 여부', header: '대표 TAG 여부',
name: 'reprTagFg', name: 'reprTagFg',
align: 'center',
width: 100, width: 100,
// renderer: { // renderer: {
// type: CustumChecbox, // type: CustomCheckbox,
// options: { // options: {
// onlyone: true, // onlyone: true,
// // disabled: true // // disabled: true
@ -198,7 +196,6 @@ export default {
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'center',
width: 100, width: 100,
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
@ -214,7 +211,7 @@ export default {
// } // }
// } // }
}, },
{ header: '비고', name: 'rmrk', align: 'left', width: 100 }, { header: '비고', name: 'rmrk', width: 100 },
{ header: '등록 사용자', name: 'regUserNo', hidden: true }, { header: '등록 사용자', name: 'regUserNo', hidden: true },
{ header: '등록 일자', name: 'regDttm', hidden: true }, { header: '등록 일자', name: 'regDttm', hidden: true },
{ header: '수정 사용자', name: 'procUserNo', hidden: true }, { header: '수정 사용자', name: 'procUserNo', hidden: true },

View File

@ -9,7 +9,6 @@
<div class="lnb-logo"> <div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" /> <img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
<img v-else src="@/assets/images/logo_lm.png" /> <img v-else src="@/assets/images/logo_lm.png" />
<!-- <img v-else src="@/assets/images/logo_lm.png" /> -->
</div> </div>
<!-- <div class="lnb-logo">FEMS</div>--> <!-- <div class="lnb-logo">FEMS</div>-->
</router-link> </router-link>
@ -88,32 +87,12 @@
</v-row> </v-row>
</div> </div>
<v-main> <v-main>
<v-container fluid> <v-container fluid>
<v-row class="flex-nowrap"> <v-row class="flex-nowrap">
<div class="menu-container"> <div class="menu-container">
<v-navigation-drawer ref="navigationdrawer" :value="drawer" :mini-variant="miniVariant" :clipped="clipped" <v-navigation-drawer ref="navigationdrawer" :value="drawer" :mini-variant="miniVariant" :clipped="clipped"
:absolute="false" mini-variant-width="60"> :absolute="false" mini-variant-width="60">
<div class="d-flex align-center justify-space-between py-4 px-3" v-if="false">
<router-link class="home" :to="myHome.root">
<div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
<img v-else src="@/assets/images/logo_lm.png" />
</div>
<!-- <div class="lnb-logo">FEMS</div>-->
</router-link>
<ThemeSwitch style="margin-right: 20px" />
<v-app-bar-nav-icon ref="appbarnavicon" id="appbarnavicon" @click.stop="miniVariant = !miniVariant"
@click="updateTreeview" :style="{
backgroundColor: 'transparent',
color: isDarkMode ? '#fff' : '#111',
}" />
<!-- <router-view :key="$route.fullPath"/> -->
</div>
<AdminMenu :miniVariant="miniVariant" :userNm="this.userInfo.userNm" :comId="this.userInfo.comId" v-if="false" />
<component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" /> <component ref="changePswdPop" :is="'ChangePswdPop'" v-show="false" :comId="this.userInfo.comId" />
<v-treeview ref="treeview" :active.sync="activeTree" active-class="v-treeview-node--active" <v-treeview ref="treeview" :active.sync="activeTree" active-class="v-treeview-node--active"
:items="treevieItems" activatable hoverable color="#3896ff" open-on-click @update:open="openNode"> :items="treevieItems" activatable hoverable color="#3896ff" open-on-click @update:open="openNode">
@ -130,14 +109,16 @@
:class="miniVariant === false ? 'mr-2' : ''" size="9"> :class="miniVariant === false ? 'mr-2' : ''" size="9">
$depth3rdBulletDark $depth3rdBulletDark
</v-icon> </v-icon>
<span v-if="item.url">{{ item.menuNm }} <span v-if="item.url">
{{ item.menuNm }}
<!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span> <!-- <span v-if="item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star</span>
<span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> --> <span v-else-if="!item.bookmark" class="material-icons" style="font-size: 17px; vertical-align: middle;" @click="addBookMark(item.menuId, item.url, item.bookmark)">star_border</span> -->
</span> </span>
<span v-else-if="!item.url">{{ item.menuNm }}</span> <span v-else-if="!item.url">{{ item.menuNm }}</span>
<v-icon v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url"> <!-- <v-icon v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url">
mdi-chevron-down mdi-chevron-down
</v-icon> </v-icon> -->
<a-icon type="down" v-if="item.lvl >= 1 && item.childeVo && item.childeVo.length > 0 && !item.url" />
</button> </button>
</template> </template>
</v-treeview> </v-treeview>
@ -805,7 +786,7 @@ export default {
// console.log('if isLoading stmt3'); // console.log('if isLoading stmt3');
// return; // return;
// } // }
alert("move to", url); // alert("move to", url);
this.$router.push({ this.$router.push({
path: url + "?prgmId=" + prgmId, path: url + "?prgmId=" + prgmId,
}); });

View File

@ -5,22 +5,12 @@
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row algin="end" no-gutters> <v-row algin="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<InputText <InputText :parentPrgmId="myPrgmId" label="역할ID" valueNm="roleId" :searchOption="true"
:parentPrgmId="myPrgmId" customClass="input-large" />
label="역할ID"
valueNm="roleId"
:searchOption="true"
customClass="input-large"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText <InputText :parentPrgmId="myPrgmId" label="역할명" valueNm="roleNm" :searchOption="true"
:parentPrgmId="myPrgmId" customClass="input-large" />
label="역할명"
valueNm="roleNm"
:searchOption="true"
customClass="input-large"
/>
</v-col> </v-col>
<v-col class="text-right d-flex justify-end align-end mr-3"> <v-col class="text-right d-flex justify-end align-end mr-3">
<BtnSearch size="large" /> <BtnSearch size="large" />
@ -30,81 +20,55 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row ref="contents" > <v-row ref="contents">
<v-col cols="12" lg="2" > <v-col cols="12" lg="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>
<div ref="gridParent" class="px-5" style="height: 60vh;"> <div ref="gridParent" class="px-5" style="height: 60vh;">
<component <component :is="loadGrid ? 'Grid' : null" :ref="gridName + myPrgmId" :gridName="gridName"
:is="loadGrid ? 'Grid' : null" :parentPrgmId="myPrgmId" @getRowsData="getRowData" />
:ref="gridName + myPrgmId"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<v-col cols="12" lg="10" > <v-col cols="12" lg="9">
<v-card> <v-card>
<v-card-title> <v-card-title>
<span class="custom-title-4">역할 메뉴별 권한</span> <span class="custom-title-4">역할 메뉴별 권한</span>
</v-card-title> </v-card-title>
<v-row <v-row align="center" no-gutters :style="{ height: 'calc(100% - 62px)' }" class="px-5">
align="center" <v-col class="h100" style="max-width: 400px;">
no-gutters <span class="body-1 font-weight-bold d-flex align-center"
:style="{ height: 'calc(100% - 62px)' }" :style="{ minHeight: '36px' }">[미배정]메뉴리스트</span>
class="px-5"
>
<v-col :cols="4" class="h100">
<span
class="body-1 font-weight-bold d-flex align-center"
:style="{ minHeight: '36px' }"
>[미배정]메뉴리스트</span
>
<div ref="treeGridParent" class="px-0 mt-2" style="height: 60vh;"> <div ref="treeGridParent" class="px-0 mt-2" style="height: 60vh;">
<!-- <div <!-- <div
ref="treeGridParent" ref="treeGridParent"
class="w100 h100" class="w100 h100"
> >
</div> --> </div> -->
<component <component :is="loadTreeGrid ? 'Grid' : null" :ref="gridName2 + myPrgmId"
:is="loadTreeGrid ? 'Grid' : null" :gridName="gridName2" :parentPrgmId="myPrgmId" @getRowsData="getUnAsgnRowData" />
:ref="gridName2 + myPrgmId"
:gridName="gridName2"
:parentPrgmId="myPrgmId"
@getRowsData="getUnAsgnRowData"
/>
</div> </div>
</v-col> </v-col>
<v-col :cols="1"> <!-- <v-col :cols="1.5">
<ActionButtons <ActionButtons :parentPrgmId="myPrgmId" :leftGridName="gridName2" :rightGridName="gridName3"
:parentPrgmId="myPrgmId" :btnActionsFnc="dualGridBtnActions" />
:leftGridName="gridName2" </v-col> -->
:rightGridName="gridName3" <div class="pr-2">
:btnActionsFnc="dualGridBtnActions" <ActionButtons :parentPrgmId="myPrgmId" :leftGridName="gridName2" :rightGridName="gridName3"
/> :btnActionsFnc="dualGridBtnActions" />
</v-col> </div>
<v-col :cols="7" class="h100"> <v-col :cols="7" class="h100">
<v-row <v-row justify="space-between" align="center" no-gutters class="px-5">
justify="space-between"
align="center"
no-gutters
class="px-5"
>
<v-col :cols="11"> <v-col :cols="11">
<span class="body-1 font-weight-bold" <span class="body-1 font-weight-bold d-flex align-center"
>[배정]메뉴별권한 리스트</span :style="{ minHeight: '36px' }">[배정]메뉴별권한 리스트</span>
> <!-- <span class="body-1 font-weight-bold">[배정]메뉴별권한 리스트</span> -->
</v-col> </v-col>
<v-col :cols="1" class="text-right"> <v-col :cols="1" class="text-right">
<Buttons <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName3"
:parentPrgmId="myPrgmId" :btnActionsFnc="btnActions" />
:bindingData="gridName3"
:btnActionsFnc="btnActions"
/>
</v-col> </v-col>
</v-row> </v-row>
<div ref="treeGridParent2" class="px-0 mt-2" style="height: 60vh;"> <div ref="treeGridParent2" class="px-0 mt-2" style="height: 60vh;">
@ -113,14 +77,9 @@
class="w100 h100" class="w100 h100"
> >
</div> --> </div> -->
<component <component :is="loadTreeGrid2 ? 'Grid' : null" :ref="gridName3 + myPrgmId"
:is="loadTreeGrid2 ? 'Grid' : null" :gridName="gridName3" :parentPrgmId="myPrgmId" :editorGrid="true"
:ref="gridName3 + myPrgmId" @getRowsData="getAsgnRowData" />
:gridName="gridName3"
:parentPrgmId="myPrgmId"
:editorGrid="true"
@getRowsData="getAsgnRowData"
/>
</div> </div>
</v-col> </v-col>
</v-row> </v-row>
@ -286,8 +245,8 @@ export default {
async gridInit() { async gridInit() {
//---------------------gridOption 설정 시작---------------------------- //---------------------gridOption 설정 시작----------------------------
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 30; const treeGridHeight = this.$refs.treeGridParent.offsetHeight - 50;
const treeGridHeight2 = this.$refs.treeGridParent2.offsetHeight - 30; const treeGridHeight2 = this.$refs.treeGridParent2.offsetHeight - 50;
// const gridHeight = this.$refs.contents.offsetHeight - 30; // const gridHeight = this.$refs.contents.offsetHeight - 30;
const myOptions = { const myOptions = {
@ -316,8 +275,10 @@ export default {
treeColumnOptions: { treeColumnOptions: {
name: 'menuNm', name: 'menuNm',
}, },
scrollX: false, rowHeight: 37,
// scrollY: false, minRowHeight: 37,
scrollX: true,
scrollY: true,
}; };
this.setGridOption({ this.setGridOption({
@ -342,11 +303,14 @@ export default {
//---------------------gridOption 설정 끝---------------------------- //---------------------gridOption 설정 끝----------------------------
//---------------------gridName3의 체크박스 설정 시작---------------------------- //---------------------gridName3의 체크박스 설정 시작----------------------------
class CustumChecbox { class CustomCheckbox {
constructor(props) { constructor(props) {
const el = document.createElement('input'); const el = document.createElement('input');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
el.type = 'checkbox'; el.type = 'checkbox';
$(el).css('width', '16px');
$(el).css('height', '16px');
$(el).css('accent-color', '#1677FF');
el.value = props.value; el.value = props.value;
this.el = el; this.el = el;
@ -380,12 +344,12 @@ export default {
const _this = this; const _this = this;
const myColumns = [ const myColumns = [
{ header: '역할ID', name: 'roleId', align: 'center', minWidth: 70 }, { header: '역할ID', name: 'roleId', align: 'left', minWidth: 70,width:120 },
{ header: '역할명', name: 'roleNm', minWidth: 70 }, { header: '역할명', name: 'roleNm', minWidth: 70, align: 'left',width:120 },
{ {
header: '사용여부', header: '사용여부',
name: 'useFg', name: 'useFg',
align: 'center', align: 'left',
minWidth: 84, minWidth: 84,
formatter({ value }) { formatter({ value }) {
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(
@ -408,6 +372,7 @@ export default {
{ {
header: '메뉴명', header: '메뉴명',
name: 'menuNm', name: 'menuNm',
maxWidth: 120,
validation: { validation: {
dataType: 'string', dataType: 'string',
validatorFn: (value, row) => { validatorFn: (value, row) => {
@ -433,7 +398,7 @@ export default {
name: 'useFg', name: 'useFg',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -441,7 +406,7 @@ export default {
name: 'authCd1', name: 'authCd1',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -449,7 +414,7 @@ export default {
name: 'authCd2', name: 'authCd2',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -457,7 +422,7 @@ export default {
name: 'authCd3', name: 'authCd3',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -465,7 +430,7 @@ export default {
name: 'authCd4', name: 'authCd4',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -473,7 +438,7 @@ export default {
name: 'authCd5', name: 'authCd5',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
{ {
@ -481,7 +446,7 @@ export default {
name: 'authCd6', name: 'authCd6',
align: 'center', align: 'center',
renderer: { renderer: {
type: CustumChecbox, type: CustomCheckbox,
}, },
}, },
]; ];

View File

@ -151,6 +151,7 @@
:leftGridName="gridName2" :leftGridName="gridName2"
:rightGridName="gridName3" :rightGridName="gridName3"
:btnActionsFnc="dualGridBtnActions" :btnActionsFnc="dualGridBtnActions"
directionBtn="vertically"
/> />
</v-col> </v-col>
<v-col :cols="12" class="h100"> <v-col :cols="12" class="h100">
@ -981,7 +982,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -1005,7 +1006,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
required: true, required: true,
}, },
@ -1031,7 +1032,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
}, },
{ {
@ -1054,7 +1055,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
@ -1078,7 +1079,7 @@ const myDetail = blocCdList => {
cols: 6, cols: 6,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
class: 'py-2 pr-4', class: 'py-2 pl-4',
iconShow: true, iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },

View File

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

View File

@ -7,28 +7,15 @@
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<component <component :is="'selectCodeList'" :parentPrgmId="myPrgmId" :label="'사용여부'"
:is="'selectCodeList'" :dataKey="'selectUseFg'" :sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:parentPrgmId="myPrgmId" :addAll="true" customClass="select-large" />
:label="'사용여부'"
:dataKey="'selectUseFg'"
:sendParam="{ commGrpCd: 'CO_USEFG', useFg: '1' }"
:addAll="true"
customClass="select-large"
/>
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText <InputText :parentPrgmId="myPrgmId" label="프로그램명" valueNm="prgmNm" :searchOption="true"
:parentPrgmId="myPrgmId" :labelCols="12" :textCols="12" customClass="input-large" />
label="프로그램명"
valueNm="prgmNm"
:searchOption="true"
:labelCols="12"
:textCols="12"
customClass="input-large"
/>
</v-col> </v-col>
<v-col :cols="5" class="text-right"> <v-col :cols="6" class="text-right">
<BtnSearch size="large" /> <BtnSearch size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -38,46 +25,32 @@
<v-row ref="contents"> <v-row ref="contents">
<!-- 프로그램 리스트 --> <!-- 프로그램 리스트 -->
<v-col :cols="5" > <v-col :cols="5">
<v-card class="pb-5"> <v-card class="pa-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between">
<v-card-title class="pa-0">프로그램 리스트</v-card-title> <v-card-title class="pa-0">프로그램 리스트</v-card-title>
<div> <div>
<Buttons <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:parentPrgmId="myPrgmId" :btnActionsFnc="btnActions" />
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
</div> </div>
</div> </div>
<div ref="gridParent" style="height: 60vh"> <div ref="gridParent" class="pt-5" style="height: 60vh">
<!-- <div ref="gridParent" class="px-5 h100"> <!-- <div ref="gridParent" class="px-5 h100">
</div> --> </div> -->
<component <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :parentPrgmId="myPrgmId"
:ref="gridName" :gridName="gridName" @getRowsData="getRowData" />
:is="loadGrid ? 'Grid' : null"
:parentPrgmId="myPrgmId"
:gridName="gridName"
@getRowsData="getRowData"
/>
</div> </div>
</v-card> </v-card>
</v-col> </v-col>
<!-- 프로그램 상세 --> <!-- 프로그램 상세 -->
<v-col :cols="7" > <v-col :cols="7">
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-5"> <div class="d-flex align-center justify-space-between pa-5">
<v-card-title class="pa-0">프로그램 상세</v-card-title> <v-card-title class="pa-0">프로그램 상세</v-card-title>
</div> </div>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<component <component :is="'Form'" :parentPrgmId="myPrgmId" :bindingData="gridName"
:is="'Form'" :detailList="detailList" @gridEditingFinish="gridEditingFinish" />
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
<!-- <div class="w100"> <!-- <div class="w100">
</div> --> </div> -->
</div> </div>
@ -139,8 +112,6 @@ export default {
{ header: '타임', name: 'field3', align: 'left' }, { header: '타임', name: 'field3', align: 'left' },
{ header: '사용여부', name: 'field4', align: 'left' } { header: '사용여부', name: 'field4', align: 'left' }
], ],
data: dataPathDataExample,
defaultRow: dataPathDataExample,
option: { option: {
scrollY: false, scrollY: false,
scrollX: false, scrollX: false,
@ -487,7 +458,7 @@ const myDetail = [
valueNm: 'prgmTpCd', valueNm: 'prgmTpCd',
essential: true, essential: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-5',
list: [ list: [
{ text: '프로그램', value: '1' }, { text: '프로그램', value: '1' },
{ text: '팝업', value: '2' }, { text: '팝업', value: '2' },
@ -502,10 +473,11 @@ const myDetail = [
essential: true, essential: true,
disabled: false, disabled: false,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-13',
value: { '1': true, '0': false }, value: { '1': true, '0': false },
required: true, required: true,
textCols: 12, textCols: 12,
labelCols:12,
iconShow: true iconShow: true
}, },
{ {
@ -514,7 +486,7 @@ const myDetail = [
valueNm: 'url', valueNm: 'url',
disabled: false, disabled: false,
cols: 12, cols: 12,
class: 'py-2', class: 'py-2 pt-4',
required: true, required: true,
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -525,7 +497,7 @@ const myDetail = [
valueNm: 'regUserNo', valueNm: 'regUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-5',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -536,7 +508,7 @@ const myDetail = [
valueNm: 'regDttm', valueNm: 'regDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-5',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -547,7 +519,7 @@ const myDetail = [
valueNm: 'procUserNo', valueNm: 'procUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-5',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
@ -558,19 +530,10 @@ const myDetail = [
valueNm: 'procDttm', valueNm: 'procDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', class: 'py-2 pt-5',
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
textCols: 12, textCols: 12,
iconShow: true iconShow: true
}, },
]; ];
import { getPathDataExample } from '@/const/const'
const dataPathDataExample = getPathDataExample({
field1: 'PRG0001',
field2: '대시보드',
field3: '프로그램',
field4: '사용'
});
</script> </script>

View File

@ -803,7 +803,7 @@ export default {
header: "NO", header: "NO",
name: "rowNum", name: "rowNum",
width: 70, width: 70,
align: "center", align: "right",
// hidden: true, // hidden: true,
}, },
{ {

View File

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

View File

@ -4,7 +4,7 @@
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="center" no-gutters> <v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="2.5">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -14,7 +14,7 @@
:addAll="true" :addAll="true"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="2.5">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -24,8 +24,8 @@
:addAll="true" :addAll="true"
/> />
</v-col> </v-col>
<v-col :cols="3">
<!-- 사업장 --> <!-- 사업장 -->
<!-- <v-col :cols="3">
<div style="visibility:hidden"> <div style="visibility:hidden">
<component <component
:is="'SelectBlocMstr'" :is="'SelectBlocMstr'"
@ -33,13 +33,8 @@
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
/> />
</div> </div>
</v-col> </v-col> -->
<v-col :cols="3" class="text-right"> <v-col :cols="2.5">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3">
<component <component
:is="'selectCodeList'" :is="'selectCodeList'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@ -49,7 +44,7 @@
:addAll="true" :addAll="true"
/> />
</v-col> </v-col>
<v-col :cols="6"> <v-col :cols="2.5">
<InputText <InputText
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
label="공정명" label="공정명"
@ -59,6 +54,12 @@
:searchOption="true" :searchOption="true"
/> />
</v-col> </v-col>
<v-col class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
</v-row> </v-row>
</v-card> </v-card>
</v-col> </v-col>

View File

@ -342,7 +342,6 @@ export default {
header: '개소 종류', header: '개소 종류',
name: 'plcKind', name: 'plcKind',
minWidth: 100, minWidth: 100,
align: 'center',
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
const newValue = _this.pageData.plcKindList.filter( const newValue = _this.pageData.plcKindList.filter(
@ -392,7 +391,6 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
minWidth: 100, minWidth: 100,
align: 'center',
formatter({ value }) { formatter({ value }) {
value = value === true ? '1' : '0'; value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter( const newValue = _this.pageData.useFgList.filter(

View File

@ -980,7 +980,7 @@ export default {
var columnList = [ var columnList = [
{ header: '회사 ID', name: 'comId', hidden: true }, { header: '회사 ID', name: 'comId', hidden: true },
{ header: '물리량 ID', name: 'pysclQtyId', hidden: true }, { header: '물리량 ID', name: 'pysclQtyId', hidden: true },
{ header: '순번', name: 'argSeq', editor: 'text' }, { header: '순번', name: 'argSeq', editor: 'text', align: 'right' },
{ header: '물리량 ID', name: 'argPysclQtyId' }, { header: '물리량 ID', name: 'argPysclQtyId' },
{ {
header: '설비그룹', header: '설비그룹',

View File

@ -167,7 +167,7 @@ export default {
header: '설비종류ID', header: '설비종류ID',
name: 'eqpmKindId', name: 'eqpmKindId',
width: gridWidth * 0.5, width: gridWidth * 0.5,
align: 'center', align: 'left',
}, },
{ {
header: '설비종류명', header: '설비종류명',

View File

@ -53,7 +53,7 @@
</v-col> </v-col>
<v-col :cols="7" > <v-col :cols="7" >
<v-card class="pb-5"> <v-card class="pb-5">
<v-card-title class="custom-title-4" style="min-height:76px;">설비 상세</v-card-title> <v-card-title class="custom-title-4 pb-1" >설비 상세</v-card-title>
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<v-tabs v-model="tab"> <v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag"> <v-tab v-for="item in items" :key="item.id" :disabled="item.disabledFlag">
@ -382,7 +382,7 @@ export default {
header: '사용 여부', header: '사용 여부',
name: 'useFg', name: 'useFg',
width: 100, width: 100,
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

@ -19,10 +19,11 @@
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
<InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm" <InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm"
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'"/> :searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'" />
</v-col> </v-col>
<v-col :cols="3" class="text-right"> <v-col :cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()" class="search-button" size="large">조회</a-button> <a-button icon="search" type="primary" @click="search()" class="search-button"
size="large">조회</a-button>
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -38,11 +39,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" style="height: 30%"> <div ref="gridParent" style="height: 26%">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" /> :parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div> </div>
<div class="d-flex py-4 mt-4" > <div class="d-flex py-4 mt-4">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList" <component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" /> @gridEditingFinish="gridEditingFinish" />
</div> </div>
@ -326,14 +327,12 @@ export default {
header: 'COM ID', header: 'COM ID',
name: 'comId', name: 'comId',
width: 100, width: 100,
aling: 'center',
hidden: true, hidden: true,
}, },
{ {
header: '가이드', header: '가이드',
name: 'gdIdxId', name: 'gdIdxId',
width: 100, width: 100,
align: 'center',
}, },
{ {
header: '가이드명', header: '가이드명',
@ -345,7 +344,6 @@ export default {
header: '설비그룹ID', header: '설비그룹ID',
name: 'eqpmGrpId', name: 'eqpmGrpId',
width: 100, width: 100,
align: 'center',
// hidden: true, // hidden: true,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -362,7 +360,6 @@ export default {
header: '상위집계방법', header: '상위집계방법',
name: 'upTotMeth', name: 'upTotMeth',
width: 100, width: 100,
align: 'center',
// hidden: true, // hidden: true,
formatter({ value }) { formatter({ value }) {
let retVal = ''; let retVal = '';
@ -1122,14 +1119,7 @@ const myDetail = [
required: true, required: true,
iconShow: true iconShow: true
}, },
// {
// // 공백 처리
// type: 'Label',
// cols: 3,
// class: 'py-2',
// // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
// disabled: false,
// },
// { // {
// type: 'CheckBox', // type: 'CheckBox',
// label: '설비기준적용', // label: '설비기준적용',
@ -1195,7 +1185,8 @@ const myDetail = [
// required: true, // required: true,
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
iconShow: true iconShow: true,
inputType: 'number',
}, },
// { // {
// // 공백 처리 // // 공백 처리
@ -1243,7 +1234,15 @@ const myDetail = [
{ {
// 공백 처리 // 공백 처리
type: 'Label', type: 'Label',
cols: 9, cols: 3,
class: 'py-2',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-3', class: 'py-3',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.", // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false, disabled: false,
@ -1442,9 +1441,3 @@ const myDetail = [
}, },
]; ];
</script> </script>
<style lang="scss" scoped>
.searchFilter {
border-radius: 6px;
box-shadow: none;
}
</style>

View File

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

View File

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

View File

@ -5,14 +5,14 @@
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="end" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="4"> <v-col :cols="3">
<!-- 차트목록 --> <!-- 차트목록 -->
<component :is="'SelectBox'" ref="SelectBox" :propsValue="selectValue01" :itemList="selectValueList01" <component :is="'SelectBox'" ref="SelectBox" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'차트'" @update:propsValue="selectValue01 = $event" :textCols="12" customClass="select-large" /> :label="'차트'" @update:propsValue="selectValue01 = $event" :textCols="12" customClass="select-large" />
</v-col> </v-col>
<v-col :cols="4"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" />
</v-col> </v-col>
<v-col :cols="4" class="text-right"> <v-col :cols="4" class="text-right">
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />

View File

@ -21,22 +21,21 @@
:itemList="selectValueList03" :label="'FAB'" :multiple="fabMultiple" :itemList="selectValueList03" :label="'FAB'" :multiple="fabMultiple"
@update:propsValue="selectValue03 = $event" :labelCols="12" :textCols="12" customClass="select-large" /> @update:propsValue="selectValue03 = $event" :labelCols="12" :textCols="12" customClass="select-large" />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 효율지표 --> <!-- 효율지표 -->
<component ref="effcIdxSelect" :is="'SelectBoxMulti'" :propsValue="selectValue04" <component ref="effcIdxSelect" :is="'SelectBoxMulti'" :propsValue="selectValue04"
:itemList="selectValueList04" :label="'효율지표'" :multiple="effcIdxMultiple" :itemList="selectValueList04" :label="'효율지표'" :multiple="effcIdxMultiple"
@update:propsValue="selectValue04 = $event" :labelCols="12" :textCols="12" customClass="select-large" /> @update:propsValue="selectValue04 = $event" :labelCols="12" :textCols="12" customClass="select-large" />
</v-col> </v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 대상일 --> <!-- 대상일 -->
<component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" /> <component :is="'Datepicker'" :parentPrgmId="myPrgmId" :label="'대상일'" :labelCols="3" customClass="datepicker-large" />
</v-col> </v-col>
<v-col :cols="6" class="text-right d-flex align-end justify-end align-self-end"> <v-col :cols="6.5" class="text-right d-flex align-end justify-end align-self-end">
<!-- 조회버튼 --> <!-- 조회버튼 -->
<a-button type="primary" class="d-inline-flex-1 mr-1" size="large" @click="createExcel()">엑셀</a-button> <a-button icon="file-excel" class="d-inline-flex-1 mr-1" size="large" @click="createExcel()">엑셀</a-button>
<BtnSearch @click="search" size="large" /> <BtnSearch @click="search" size="large" />
</v-col> </v-col>
</v-row> </v-row>
@ -62,15 +61,23 @@
<v-col :cols="3"> <v-col :cols="3">
<v-card-title class="pa-0">설비별 효율지표 Trend</v-card-title> <v-card-title class="pa-0">설비별 효율지표 Trend</v-card-title>
</v-col> </v-col>
<!-- <v-col :cols="5"></v-col> -->
<v-col :cols="4" class="d-flex justify-space-end" > <v-col :cols="4" class="d-flex justify-space-end" >
<component class="text-right mr-2" ref="EqpmSelectPop" :is="'EqpmSelectPop'" :label="''" :labelCols="1" <component
:textCols="12" :valueNm="'eqpmId'" :parentPrgmId="myPrgmId" :eqpmGrpDisabled="true" class="text-right mr-2"
:fabDisabled="true" :isMulti="true" /> ref="EqpmSelectPop"
label=""
placeholder="설비..."
is="EqpmSelectPop"
valueNm="eqpmId"
:textCols="12"
:parentPrgmId="myPrgmId"
:eqpmGrpDisabled="true"
:fabDisabled="true"
:iconShow="false"
:isMulti="true"
/>
<a-button @click="getEqpmData()" type="primary" >조회</a-button> <a-button @click="getEqpmData()" type="primary" >조회</a-button>
</v-col> </v-col>
<!-- <v-col :cols="1">
</v-col> -->
</v-row> </v-row>
</div> </div>
<div ref="chartParent" style="height: 100%"> <div ref="chartParent" style="height: 100%">
@ -99,6 +106,8 @@ import EqpmSelectPop from '~/components/common/modal/EqpmSelectPop';
import DateUtility from '~/plugins/dateUtility'; import DateUtility from '~/plugins/dateUtility';
import XLSX from 'xlsx'; import XLSX from 'xlsx';
import getLineChartOption from "~/components/common/chartoptions/LineChart";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -314,6 +323,7 @@ export default {
legend: { legend: {
icon: 'circle', icon: 'circle',
top: 'top', top: 'top',
size: '8'
}, },
grid: { grid: {
top: '10%', top: '10%',
@ -764,22 +774,14 @@ export default {
]; ];
} }
var chartOption = { const chartOption = getLineChartOption({
legend: { xAxisData: xAxisData,
top: 'top', seriesData: seriesData,
},
grid: {
top: '10%',
bottom: '20%',
},
yAxis: {},
xAxis: {
data: xAxisData,
},
series: seriesData,
tooltip: {},
dataZoom: dataZoom, dataZoom: dataZoom,
}; // legendData: legendData,
// isDarkMode: this.isDarkMode,
});
this.setChartOption({ chartKey: this.chartName01, value: chartOption }); this.setChartOption({ chartKey: this.chartName01, value: chartOption });
// this.setChartYAxisData({ chartKey: this.chartName01, value: yAxisData }); // this.setChartYAxisData({ chartKey: this.chartName01, value: yAxisData });
// this.setChartXAxisData({ chartKey: this.chartName01, value: xAxisData }); // this.setChartXAxisData({ chartKey: this.chartName01, value: xAxisData });
@ -864,22 +866,13 @@ export default {
]; ];
} }
var chartOption = { const chartOption = getLineChartOption({
legend: { xAxisData: xAxisData,
top: 'top', seriesData: seriesData,
},
grid: {
top: '10%',
bottom: '20%',
},
yAxis: {},
xAxis: {
data: xAxisData,
},
series: seriesData,
tooltip: {},
dataZoom: dataZoom, dataZoom: dataZoom,
}; // legendData: legendData,
// isDarkMode: this.isDarkMode,
});
this.setChartOption({ chartKey: this.chartName02, value: chartOption }); this.setChartOption({ chartKey: this.chartName02, value: chartOption });
// this.setChartDataZoom({chartKey : this.chartName02,value: dataZoom}); // this.setChartDataZoom({chartKey : this.chartName02,value: dataZoom});

View File

@ -10,15 +10,15 @@
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01" <component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" customClass="select-large" /> :label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="true" customClass="select-large" />
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" :itemList="selectValueList02" <component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" :itemList="selectValueList02"
:label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="false" customClass="select-large"/> :label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="true" customClass="select-large"/>
</v-col> </v-col>
<v-col :cols="2.5"> <v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03" :itemList="selectValueList03" <component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03" :itemList="selectValueList03"
:label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" customClass="select-large" /> :label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="true" customClass="select-large" />
</v-col> </v-col>
<BtnSearch size="large" @click="search" /> <BtnSearch size="large" @click="search" />
@ -33,7 +33,7 @@
<v-row ref="contents"> <v-row ref="contents">
<v-col :cols="12" > <v-col :cols="12" >
<v-card class="pb-5"> <v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4"> <div class="d-flex align-center justify-space-between py-4 px-4">
<v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title> <v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" /> <Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div> </div>
@ -291,7 +291,7 @@ export default {
}, },
}; };
class CustumButton { class CustomButton {
constructor(props) { constructor(props) {
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -304,7 +304,7 @@ export default {
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between'); $(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button'); const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text'); $(el2).addClass('edit-btn blue--text');
el2.innerText = 'Edit'; el2.innerText = '편집하다';
elDiv.appendChild(el2); elDiv.appendChild(el2);
this.el = elDiv; this.el = elDiv;
@ -352,7 +352,7 @@ export default {
header: 'NO', header: 'NO',
name: 'rowNum', name: 'rowNum',
width: 40, width: 40,
align: 'center', align: 'right',
// hidden: true, // hidden: true,
}, },
{ {
@ -389,7 +389,7 @@ export default {
// `; // `;
// } // }
renderer: { renderer: {
type: CustumButton, type: CustomButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },
@ -402,7 +402,7 @@ export default {
align: 'center', align: 'center',
hidden: true, hidden: true,
renderer: { renderer: {
type: CustumButton, type: CustomButton,
options: { options: {
value: '계획수정', value: '계획수정',
}, },

View File

@ -104,7 +104,6 @@
:is="loadGrid ? 'Grid' : null" :is="loadGrid ? 'Grid' : null"
:gridName="gridName" :gridName="gridName"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
@dblClick="gridDoubleClickEvent"
/> />
<!-- <!--
<component <component
@ -143,7 +142,6 @@ import SelectBox from "@/components/common/select/SelectBox";
import SelectCmCycle from "@/components/common/select/SelectCmCycle"; import SelectCmCycle from "@/components/common/select/SelectCmCycle";
import DatePicker from "@/components/common/Datepicker"; import DatePicker from "@/components/common/Datepicker";
import Grid from "~/components/common/Grid"; import Grid from "~/components/common/Grid";
import PageTitle from "@/components/common/PageTitle";
let myTitle; let myTitle;
let myPrgmId; let myPrgmId;
@ -170,7 +168,6 @@ export default {
SelectCmCycle, SelectCmCycle,
DatePicker, DatePicker,
Grid, Grid,
PageTitle,
}, },
data() { data() {
return { return {
@ -204,6 +201,7 @@ export default {
computed: { computed: {
...mapState({ ...mapState({
pageData: (state) => state.pageData[myPrgmId], pageData: (state) => state.pageData[myPrgmId],
isDarkMode: "isDarkMode",
}), }),
fromDt() { fromDt() {
return this.pageData.fromDt; return this.pageData.fromDt;
@ -237,6 +235,16 @@ export default {
await this.search(); await this.search();
} }
}, },
isDarkMode(newVal) {
// Switch mode for 10 tooltips
for (let i = 0; i < 10; i++) {
const tooltipEl = document.getElementById(`tooltipElement_${i}`);
if (tooltipEl) {
tooltipEl.classList.remove("light-mode", "dark-mode");
tooltipEl.classList.add(newVal ? "dark-mode" : "light-mode");
}
}
},
}, },
async beforeCreate() { async beforeCreate() {
myPrgmId = this.$route.query.prgmId; myPrgmId = this.$route.query.prgmId;
@ -357,13 +365,79 @@ export default {
gridInit() { gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30; const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const _this = this; const _this = this;
// Define custom button
class CustomButton {
constructor(props,pageData) {
const { grid, rowKey, columnInfo } = props;
const gridData = grid.store.data.rawData;
const value = gridData[rowKey][columnInfo.name];
const onClickCallback = columnInfo.renderer.options.onClick;
this.disabled = columnInfo.renderer.options.disabled || false;
const elDiv = document.createElement('div');
elDiv.innerHTML = `<span>${value}</span>`;
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text');
el2.innerText = '보기';
elDiv.appendChild(el2);
this.el = elDiv;
if (!this.disabled && typeof onClickCallback === 'function') {
// click 이벤트
this.el.addEventListener('click', function(event) {
onClickCallback(rowKey);
});
}
}
getElement() {
return this.el;
}
getValue() {
// return this.el.value;
}
mounted() {
// this.el.focus();
}
}
var columnList = [ var columnList = [
{ header: "NO", name: "no", align: "right", width: 80 }, { header: "NO", name: "no", align: "right", width: 80 },
{ header: "fabId", name: "fabId", hidden: true }, { header: "fabId", name: "fabId", hidden: true },
{ header: "FAB", name: "fabNm", align: "left" }, { header: "FAB", name: "fabNm", align: "left" },
{ header: "eqpmGrpId", name: "eqpmGrpId", hidden: true }, { header: "eqpmGrpId", name: "eqpmGrpId", hidden: true },
{ header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200 }, { header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200,
// Render custom button to switch page instead of double click on row
renderer: {
type: CustomButton,
options: {
value: '보기',
onClick: (rowKey) => {
const gridInstance = this.$refs[this.gridName].gridInstance;
const eventRowData = gridInstance.invoke("getRow", rowKey);
const data = {
cmCycle: this.pageData.cmCycle,
fromDt: this.pageData.fromDt,
fabId: this.selectValue01,
eqpmKindId: this.selectValue02,
eqpmGrpId: this.selectValue03,
eqpmId: eventRowData.eqpmId,
};
const key = "tick_" + Math.random();
this.$router.push({
name: "ems-effc-EnrgUseEqpmDetlMntrPage",
query: {
prgmId: "PRG0082",
},
params: {
...data,
key: key,
},
});
}
}
}
},
{ header: "eqpmId", name: "eqpmId", hidden: true }, { header: "eqpmId", name: "eqpmId", hidden: true },
{ header: "설비명", name: "eqpmNm", align: "left", width: 200 }, { header: "설비명", name: "eqpmNm", align: "left", width: 200 },
{ {
@ -472,6 +546,10 @@ export default {
}, },
], ],
}, },
pageOptions: {
useClient: true,
perPage: 3,
}
}; };
this.setGridOption({ this.setGridOption({
@ -693,7 +771,8 @@ function numberFormatter({ value }) {
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@for $i from 0 through 9 { ::v-deep {
@for $i from 0 through 9 {
#gridParent > * { #gridParent > * {
// .tui-grid-content-area{ // .tui-grid-content-area{
background-color: red; background-color: red;
@ -715,18 +794,46 @@ function numberFormatter({ value }) {
display: block; display: block;
position: absolute; position: absolute;
min-width: 100%; min-width: 100%;
bottom: 30px; bottom: 40px;
z-index: 1000000000; z-index: 1000000000;
align: "center"; align: "center";
color: #f2f2f2; color: #f2f2f2;
background-color: #7f7f7f; background-color: #000000d9;
// width : 77px; // width : 77px;
width: 200%; width: 200%;
left: -50%; left: -50%;
border-radius: 3px; border-radius: 4px;
padding: 6px 0px;
word-break: keep-all; word-break: keep-all;
white-space: pre-wrap; white-space: pre-wrap;
// Light mode
&.light-mode {
background-color: #000000d9;
} }
// Dark mode
&.dark-mode {
background-color: #424242;
}
&::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -6px;
border-width: 6px;
border-style: solid;
}
&.light-mode::after {
border-color: #000000d9 transparent transparent transparent;
}
&.dark-mode::after {
border-color: #424242 transparent transparent transparent;
}
}
.tui-grid-rside-area { .tui-grid-rside-area {
display: none; display: none;
overflow: visible; overflow: visible;
@ -741,5 +848,6 @@ function numberFormatter({ value }) {
overflow-x: visible; overflow-x: visible;
overflow-y: visible; overflow-y: visible;
} }
}
} }
</style> </style>

View File

@ -115,7 +115,7 @@ export class CustomCalcNumberEditor {
} }
} }
export class CustumChecbox { export class CustomCheckbox {
constructor(props) { constructor(props) {
const el = document.createElement('input'); const el = document.createElement('input');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;
@ -169,7 +169,7 @@ export class CustumChecbox {
} }
} }
export class CustumButton { export class CustomButton {
constructor(props) { constructor(props) {
const el = document.createElement('button'); const el = document.createElement('button');
const { grid, rowKey, columnInfo } = props; const { grid, rowKey, columnInfo } = props;