Compare commits

..

88 Commits

Author SHA1 Message Date
3ae3ff8167 refactor code 2025-07-31 18:47:42 +09:00
881a5ceb2d merge code 2025-07-31 17:44:19 +09:00
e4074201e4 update screen 32 vs 2 2025-07-31 17:43:45 +09:00
dev
a557130c15 Merge pull request 'fixbug ui 20 21' (#29) from dev-manhph1-fixbugui-21-28 into dev
Reviewed-on: #29
2025-07-31 16:44:05 +09:00
34d5a1eeb7 fixbug ui 20 21 2025-07-31 16:18:33 +09:00
3c249aa476 update code 2025-07-31 15:57:07 +09:00
dev
f9643f46a0 Merge pull request 'Commit 3107' (#27) from dev-trungvq7-0729 into dev
Reviewed-on: #27
2025-07-31 15:39:36 +09:00
dev
056d1a1e17 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-07-31 15:03:33 +09:00
dev
a58062a7b7 Commit 3107 2025-07-31 14:54:02 +09:00
dev
44077048e6 Merge pull request 'dev-trungvq7-0729' (#26) from dev-trungvq7-0729 into dev
Reviewed-on: #26
2025-07-31 14:43:43 +09:00
dev
e32f03c9ae Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-07-31 11:33:52 +09:00
dev
58bb7f915c Update screen 30, 13, 22 2025-07-31 11:31:53 +09:00
dev
a85f9f98f6 Merge pull request 'fix style grid' (#25) from dev-dungtv44-0730 into dev
Reviewed-on: #25
2025-07-31 10:49:24 +09:00
dev
791b291c30 Merge pull request 'dev-luannv24-s32s17' (#24) from dev-luannv24-s32s17 into dev
Reviewed-on: #24
2025-07-30 19:18:37 +09:00
e6e1703942 update date pickker 2025-07-30 19:16:42 +09:00
719e7cee69 fix style grid 2025-07-30 17:09:09 +07:00
9b89a5625b update code fix bug and revert screen 2 2025-07-30 18:34:46 +09:00
e600089f7e fix bug 2025-07-30 18:15:08 +09:00
adbf220770 merge file 2025-07-30 18:14:21 +09:00
dev
51b59bf4c9 Merge pull request 'dev-dungtv44-0730' (#23) from dev-dungtv44-0730 into dev
Reviewed-on: #23
2025-07-30 17:41:07 +09:00
b2e50837fd update code 2025-07-30 16:21:52 +09:00
88b59f5f33 update code merge 2025-07-30 16:19:54 +09:00
a2e7e8d74e pull dev 2025-07-30 14:07:08 +07:00
dev
d37f23512a Merge pull request 'Update s14 s29 + Fix bugs s1 + Update datepicker height' (#22) from dev-nghiantt-s1s29 into dev
Reviewed-on: #22
2025-07-30 16:05:38 +09:00
1a23077421 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv44-0730 2025-07-30 14:04:11 +07:00
9603353ab3 update screen 33, 44, 20, fix bug Grid 2025-07-30 14:03:41 +07:00
6077dddb74 Remove mockdata screen 5 2025-07-30 15:35:41 +09:00
2338bbf2ec Remove log + fix click chart top 10 2025-07-30 15:01:44 +09:00
c2e2c10a8a Update s14 s29 + Fix bugs s1 + Update datepicker height 2025-07-30 12:35:12 +09:00
dev
d790249743 Merge pull request 'fix ui EvtObjPop' (#21) from dev-manhph1-fixbug-18-19-21-28 into dev
Reviewed-on: #21
2025-07-30 11:43:21 +09:00
205821fc11 fix ui EvtObjPop 2025-07-30 11:39:45 +09:00
dev
fade079b06 Merge pull request 'dev-manhph1-fixbug-18-19-21-28' (#18) from dev-manhph1-fixbug-18-19-21-28 into dev
Reviewed-on: #18
2025-07-30 11:24:55 +09:00
dev
98c26a156e Merge pull request 'update screen 34, fix bug grid - select item' (#20) from dev-dungtv44-0730 into dev
Reviewed-on: #20
2025-07-30 11:22:38 +09:00
b4f8e41c7e update screen 34, fix bug grid - select item 2025-07-30 09:15:11 +07:00
dev
e9bdd80f14 Merge pull request 'update screen 34, 20' (#19) from dev-dungtv44-0730 into dev
Reviewed-on: #19
2025-07-30 10:35:21 +09:00
eeadcd254d remove console log 2025-07-30 08:32:27 +07:00
b56bd12bb7 update screen 34, 20 2025-07-30 08:23:13 +07:00
bea1e0889b dev-manhph1-add-pagination-28 2025-07-29 18:30:19 +09:00
dev
0f66d84b48 Merge pull request 'hotfix grid' (#17) from dev-dungtv-fix-grid into dev
Reviewed-on: #17
2025-07-29 17:45:00 +09:00
34d03b2546 dev-manhph1-fixbug-18-19-21-28 2025-07-29 17:18:41 +09:00
8f83e1d60c hotfix grid 2025-07-29 14:58:37 +07:00
dev
1faf49056d Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729 2025-07-29 15:59:34 +09:00
dev
e9ab3faa51 update 2025-07-29 15:59:32 +09:00
dev
54220aa4eb Merge pull request 'update screen 12, 20' (#15) from dev-dungtv-0729 into dev
Reviewed-on: #15
2025-07-29 15:39:16 +09:00
315aafc528 update screen 12, 20 2025-07-29 13:20:29 +07:00
8963a92475 update screen15-screen31 2025-07-29 12:06:11 +09:00
d66a03626b updatenew-code-new 2025-07-29 12:04:09 +09:00
dev
665a178f82 Merge pull request 'update screen 2, 8, 9, 10, 27, 33, 34' (#12) from dev-dungtv-0728 into dev
Reviewed-on: #12
2025-07-29 11:52:11 +09:00
7e2383efda update-subtitle-screen15 2025-07-29 11:39:05 +09:00
13cedc7337 resolve conflict 2025-07-29 09:36:40 +07:00
dev
e128375aeb Merge pull request 'Update Screen 16, 22' (#13) from dev-trungvq7-2207 into dev
Reviewed-on: #13
2025-07-29 11:30:56 +09:00
dev
710714116e Remove inline style 2025-07-29 11:30:05 +09:00
dev
33dbe93290 Merge pull request '- Update screen 14 29 - Remove mock data dashboard' (#11) from dev-nghiantt-s14 into dev
Reviewed-on: #11
2025-07-29 11:25:51 +09:00
708b648080 updatecode 2025-07-29 11:20:59 +09:00
dev
2845672723 Update 16, 22 2025-07-29 10:51:49 +09:00
bbaf26af86 Fix comment 2025-07-28 18:34:29 +09:00
c3d01c998c update screen 2, 8, 9, 10, 27, 33, 34 2025-07-28 16:12:24 +07:00
aec9353ab2 - Update screen 14 29 - Remove mock data dashboard 2025-07-28 17:22:38 +09:00
dev
2dd0c6a72c Merge pull request 'dev-trungvq7-2207' (#10) from dev-trungvq7-2207 into dev
Reviewed-on: #10
2025-07-28 14:39:36 +09:00
dev
631637a8e1 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-2207 2025-07-28 14:31:49 +09:00
dev
3ff87852e5 Update 2507 2025-07-28 14:31:41 +09:00
dev
117e0adeb9 Merge pull request 'dev-dungtv-0725' (#9) from dev-dungtv-0725 into dev
Reviewed-on: #9
2025-07-28 10:59:55 +09:00
402b09440f fix code comment 2025-07-28 08:59:17 +07:00
71f7cf4d30 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv-0725 2025-07-28 08:45:04 +07:00
d3984182e8 update screen 8, 10 2025-07-28 08:44:51 +07:00
dev
933d4b751f Merge pull request 'dev-luannv27-2407' (#7) from dev-luannv27-2407 into dev
Reviewed-on: #7
2025-07-28 10:35:21 +09:00
020432d5ac update code 2025-07-25 19:05:38 +09:00
3f99958fe3 update slected header 2025-07-25 19:03:41 +09:00
dev
898df6743a Merge pull request 'dev-manhph1-screen18-19-21-28' (#5) from dev-manhph1-screen18-19-21-28 into dev
Reviewed-on: #5
2025-07-25 18:50:19 +09:00
dd559629ab dev-manhph1-screen18-19-21-28 2025-07-25 18:11:31 +09:00
dev
d45d141c3c Update 2507 2025-07-25 17:59:38 +09:00
dev
1453e75f9a Merge pull request 'Update to original menu' (#4) from dev-nghiantt-menu into dev
Reviewed-on: #4
2025-07-25 16:04:04 +09:00
7227d5d56c Update to original menu 2025-07-25 12:36:03 +09:00
85fc9a62af update theme header 2025-07-25 12:30:27 +09:00
dev
a87a8262f4 Merge pull request 'Update screen 7, 25' (#3) from dev-trungvq7-2207 into dev
Reviewed-on: #3
2025-07-25 12:15:44 +09:00
dev
481434a144 Update 2025-07-25 12:09:27 +09:00
dev
524023b3e1 update screen 7, 25 2025-07-25 11:57:02 +09:00
dev
cb2d4e2e91 Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-2207 2025-07-24 16:54:54 +09:00
dev
dca6673a11 commit 2407 2025-07-24 16:54:47 +09:00
dev
15aa03b1c1 Merge pull request 'impoaver sceen 2-notice management page' (#2) from dev-dungtv-screen2 into dev
Reviewed-on: #2
2025-07-24 16:49:45 +09:00
bbd037dcb4 update code 2025-07-24 14:45:30 +07:00
0ad898769d update32.1vs32.2 2025-07-24 11:41:23 +09:00
bcf4015cae Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-dungtv-screen2 2025-07-23 15:57:24 +07:00
dd9739bf74 impoaver sceen 2-notice management page 2025-07-23 15:41:44 +07:00
dev
ab702c4495 Merge pull request 'Update 2207' (#1) from dev-trungvq7-2207 into dev
Reviewed-on: #1
2025-07-22 15:16:42 +09:00
edab77d0c6 Update 2025-07-22 14:41:39 +09:00
e2f7ab5113 merge 2207 2025-07-22 12:24:07 +09:00
eedbf94d56 init dev-push code ui base design 2025-07-22 09:58:38 +07:00
227 changed files with 36882 additions and 27992 deletions

1
.gitignore vendored
View File

@ -88,3 +88,4 @@ sw.*
# Vim swap files
*.swp
.history

20
assets/css/Oxanium.css Normal file
View File

@ -0,0 +1,20 @@
@font-face {
font-family: 'Oxanium';
font-weight: 700;
src: local('Oxanium Bold'),
url('../font/Oxanium/Oxanium-Bold.ttf') format('truetype');
}
@font-face {
font-family: 'Oxanium';
font-weight: 500;
src: local('Oxanium Medium'),
url('../font/Oxanium/Oxanium-Medium.ttf') format('truetype');
}
@font-face {
font-family: 'Oxanium';
font-weight: 300;
src: local('Oxanium Light'),
url('../font/Oxanium/Oxanium-Light.ttf') format('truetype');
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

BIN
assets/scss/common.zip Normal file

Binary file not shown.

View File

@ -1,40 +1,54 @@
.v-btn {
background-color: #144985;
background-color: #1677ff;
&:not(.v-btn--round) {
border-radius: 6px;
}
&-radius {
&__20 {
border-radius: 20px !important;
}
&__50per {
border-radius: 50% !important;
}
}
&__full {
width: 100%;
}
&__round {
min-width: 100px !important;
padding: 8px 25px !important;
border-radius: 20px !important;
}
&__excel {
background-color: #47535c !important;
}
&-bg {
&__transparent {
background-color: transparent !important;
}
&__blue {
background-color: $--color-primary__blue;
}
&__white-blue {
background-color: $--color-white;
color: $--color-primary__blue;
}
}
&__transparent {
border: 0;
background-color: transparent !important;
}
&.v-btn--icon.v-btn--tile {
border-radius: 4px;
}
@ -42,16 +56,18 @@
@each $theme in dark, light {
@include theme($theme);
.v-application.#{$theme}-mode {
.v-btn-bg__w-g5 {
background-color: $--theme-color-w-g5;
i {
color: $--theme-color-g5-w;
}
}
.v-btn {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"v-btn-backgroundColor"
);
@ -59,8 +75,7 @@
&.v-btn--disabled {
opacity: 0.4;
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"v-btn-backgroundColor"
) !important;
@ -71,5 +86,100 @@
}
}
}
.basic-button {
color: map-deep-get($config, #{$theme}, "basic-button-color");
background: map-deep-get($config, #{$theme}, "basic-button-background");
}
.searchFilter{
.search-button {
height: 40px;
color: map-deep-get($config, #{$theme}, "search-btn-color");
}
}
.v-dialog {
.ant-btn-icon-only {
color: map-deep-get(
$config,
#{$theme},
"icon-color"
);
}
}
.ant-btn {
&.ant-btn-outlined {
color:map-deep-get($config, #{$theme}, "ant-btn-default-color");
border:1px solid map-deep-get($config, #{$theme}, "ant-btn-default-border-outlined");
background-color: transparent;
}
&.ant-btn-primary {
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-btn-background-ghost{
color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
}
}
&.ant-btn-default {
background:map-deep-get($config, #{$theme}, "ant-btn-default-bg");
color:map-deep-get($config, #{$theme}, "ant-btn-default-color");
}
&.ant-btn-danger {
&.ant-btn-background-ghost {
color:map-deep-get($config, #{$theme}, "ant-btn-danger-color");
border-color:map-deep-get($config, #{$theme}, "ant-btn-danger-border");
background: map-deep-get($config, #{$theme}, "ant-btn-danger-bg") !important;
}
}
&.expand-btn {
.v-icon {
color: map-deep-get($config, #{$theme}, "basic-button-color");
svg {
fill: map-deep-get($config, #{$theme}, "basic-button-color");
}
}
}
}
}
}
.v-application {
.ant-btn {
border-radius: 6px;
&.ant-btn-lg {
border-radius: 8px;
}
&.ant-btn-default {
border:none !important
}
}
}
.v-dialog {
.ant-btn-icon-only {
border: none;
width: 16px;
height: 16px;
background:none;
}
}
.ant-btn {
&.expand-btn {
.v-icon {
span {
margin-right: 8px;
}
}
}
}

View File

@ -3,13 +3,43 @@
}
@each $theme in dark, light {
// @include theme($theme);
.v-application.#{$theme}-mode {
.v-card {
color: map-deep-get($config, #{$theme}, "card-default-color");
background-color: map-deep-get($config, #{$theme}, "cardBackground");
.v-card__subtitle {
font-size: 14px;
font-weight: 400;
color: map-deep-get($config, #{$theme}, "card-subtitle");
}
.v-card__title {
font-size: 20px;
font-weight: 600;
line-height: 28px;
color: map-deep-get($config, #{$theme}, "card-title-color") !important;
}
.card-text-info {
font-family: "Oxanium", sans-serif;
font-weight: 500;
font-size: 24px;
line-height: 24px;
letter-spacing: 0;
color: map-deep-get($config, #{$theme}, "card-text-info-color");
}
.card-text-title {
font-weight: 400;
font-size: 14px;
line-height: 22px;
letter-spacing: 0;
color: map-deep-get($config, #{$theme}, "card-text-title-color");
}
}
}
}
}

View File

@ -11,9 +11,10 @@
width: 100%;
border-radius: 10px;
}
&-content-area {
width: 100%;
border: 0;
border: 0 !important;
}
// &-body-container {
@ -33,6 +34,7 @@
}
&-rside-area {
.tui-grid-header-area,
.tui-grid-summary-area {
margin-right: $scrollbar-width;
@ -40,27 +42,41 @@
}
&-border-line-top,
&-border-line-bottom,
&-border-line-right {
&-border-line-bottom {
border: 0 !important;
}
&-cell {
border-width: 1px !important;
}
&-cell-header {
border-top: 0;
font-weight: 400;
}
&-cell-header,
&-cell-content,
&-cell.tui-grid-cell-summary {
font-family: "Spoqa Han Sans Neo";
// font-family: "Spoqa Han Sans Neo";
font-size: 0.875rem;
font-weight: 400;
line-height: 1.25rem;
letter-spacing: 0.0178571429em;
}
&-cell-content {
font-weight: 400;
}
}
.tui-grid-table{
.tui-grid-cell-header,
.tui-grid-cell-has-input .tui-grid-cell-content {
padding: 8px;
}
}
.treeGrid {
.tui-grid {
&-header-area {
@ -73,42 +89,110 @@
}
}
}
.tui-grid-scrollbar-right-top{
z-index:5;
.tui-grid-scrollbar-right-top {
z-index: 5;
}
@each $theme in dark, light {
@include theme($theme);
.v-application.#{$theme}-mode {
.grid-title {
font-weight: 600;
font-size: 16px;
line-height: 24px;
letter-spacing: 0;
color: map-deep-get($config,
#{$theme},
"tui-grid-title-color"
);
}
.grid-toggle-section{
.tui-grid-rside-area{
.tui-grid-body-area {
height: auto !important;
}
}
}
.tui-grid {
&-table {
border: 1px solid;
border-color: map-deep-get($config,
#{$theme},
"scrollbar-track"
);
.tui-grid-cell {
border-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-borderColor-darkmode"
);
border-style: map-deep-get($config,
#{$theme},
"tui-grid-cell-borderStyle-darkmode"
);
}
}
&-border-line-right{
opacity: 0;
}
&-body-container{
border-right: 0;
// border-right-color: map-deep-get($config,
// #{$theme},
// "tui-grid-cell-borderColor"
// );
width: auto !important;
}
&-container,
&-summary-area {
font-family: Inter;
// color: #000000E0;
& ::-webkit-scrollbar {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
-webkit-appearance: initial;
background-color: map-deep-get(
$config,
#{$theme},
"scrollbar-track"
) !important;
// 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},
"scrollbar-track"
) !important;
// 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-summary {
color: map-deep-get($config,
#{$theme},
"tui-grid-cell-color"
);
}
}
}
&-rside-area {
@ -121,38 +205,42 @@
}
&-scrollbar-right-top {
background-color: map-deep-get(
$config,
#{$theme},
"tui-grid-header-backgroundColor"
);
border-left-color: map-deep-get(
$config,
#{$theme},
"tui-grid-border-horziontal-color"
);
border-right-color: map-deep-get(
$config,
#{$theme},
"tui-grid-border-horziontal-color"
);
border-bottom-color: map-deep-get(
$config,
#{$theme},
"tui-grid-border-vertical-color"
);
background-color: rgba(0, 0, 0, 0);
border: none;
display: none;
// background-color: map-deep-get(
// $config,
// #{$theme},
// "tui-grid-header-backgroundColor"
// );
// border-left-color: map-deep-get(
// $config,
// #{$theme},
// "tui-grid-border-horziontal-color"
// );
// border-right-color: map-deep-get(
// $config,
// #{$theme},
// "tui-grid-border-horziontal-color"
// );
// border-bottom-color: map-deep-get(
// $config,
// #{$theme},
// "tui-grid-border-vertical-color"
// );
}
&-scrollbar-right-bottom {
width: $scrollbar-width !important;
height: $scrollbar-width !important;
// display: none !important;
border-color: map-deep-get($config, #{$theme}, "scrollbar-track");
background-color: map-deep-get($config, #{$theme}, "scrollbar-track");
border-color: map-deep-get($config, #{$theme}, "cardBackground");
background-color: map-deep-get($config, #{$theme}, "cardBackground");
// border: none !important;
// bottom: -1px;
// right: -2px;
box-sizing: border-box;
// display: none;
}
&-scrollbar-frozen-border,
@ -162,25 +250,72 @@
border-color: transparent !important;
}
&-body-area {
overflow: auto !important;
}
&-body-area,
&-container,
&-layer-state,
&-body-area,
&-summary-area,
&-cell {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-backgroundColor"
);
border-color: map-deep-get(
$config,
border-color: map-deep-get($config,
#{$theme},
"tui-grid-border-vertical-color"
);
// &-current-row{
// }
td.row-selected {
.custom-radio {
background-color: map-deep-get($config,
#{$theme},
"ant-btn-primary-color"
);
.radio-mark{
border-color: map-deep-get($config,
#{$theme},
"arow-line-color"
);
background-color: map-deep-get($config,
#{$theme},
"arow-line-btn-bg-color"
);
&::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 8px;
width: 8px;
border-radius: 50%;
background-color: map-deep-get($config,
#{$theme},
"arow-line-color"
);
}
}
}
}
}
&-cell {
&:last-child {
padding-right: 1px;
border-right: 1px solid ;
border-right-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-borderColor"
);
.tui-grid-cell-content {
border-right: 1px solid ;
border-right-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-borderColor"
);
}
}
}
&-cell-summary {
@ -189,17 +324,32 @@
&-header-area,
&-cell-header {
background-color: map-deep-get(
$config,
// font-family: inherit;
// font-style: Semi Bold;
font-weight: 600;
background-color: map-deep-get($config,
#{$theme},
"tui-grid-header-backgroundColor"
);
border-color: map-deep-get(
$config,
border-color: map-deep-get($config,
#{$theme},
"tui-grid-border-vertical-color"
);
color: map-deep-get($config, #{$theme}, "activate");
color: map-deep-get($config,
#{$theme},
"tui-grid-header-color"
);
}
&-header-area {
// background-color: none;
border: none;
margin-right: 0 !important;
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-backgroundColor"
);
}
&-row-odd,
@ -209,9 +359,8 @@
}
&:hover {
> .tui-grid-cell {
background-color: map-deep-get(
$config,
>.tui-grid-cell {
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-hover-backgroundColor"
);
@ -221,33 +370,33 @@
}
}
}
}
&-cell {
&.row-insert {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-insert-color"
);
}
&.row-modify {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-modify-color"
);
}
&.row-removed {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-removed-color"
);
}
&.row-disabled {
color: map-deep-get(
$config,
color: map-deep-get($config,
#{$theme},
"tui-grid-cell-disabled-color"
);
@ -256,9 +405,9 @@
color: map-deep-get($config, #{$theme}, "tui-grid-cell-disabled-color");
}
}
&.row-selected {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"tui-grid-cell-selected-color"
);
@ -284,15 +433,14 @@
align-items: center;
position: relative;
.tui-grid-tree-depth
{
.tui-grid-tree-depth {
width: 16px;
height: 16px;
position: relative;
left: 0 !important;
margin-right: 6px;
}
}
&-btn-tree {
@ -303,6 +451,7 @@
margin-right: 6px;
top: 0;
left: 0 !important;
i {
margin-top: 0;
}
@ -311,15 +460,19 @@
&-tree-icon {
margin-top: 0;
top: 0;
i {
width: 16px;
height: 16px;
margin-left: 0;
background-repeat: no-repeat;
background-position: 0 0;
@if $theme == dark {
@if $theme ==dark {
background-image: url("data:image/svg+xml,%3Csvg id='ico_tree_item' xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cstyle%3E .cls-1, .cls-4 %7B fill: none; %7D .cls-1 %7B stroke: %23fff; opacity: 0.3; %7D .cls-2 %7B fill: %23fff; %7D .cls-3 %7B stroke: none; %7D %3C/style%3E%3C/defs%3E%3Cg id='사각형_703' data-name='사각형 703' class='cls-1'%3E%3Crect class='cls-3' width='16' height='16' rx='3'/%3E%3Crect class='cls-4' x='0.5' y='0.5' width='15' height='15' rx='2.5'/%3E%3C/g%3E%3Crect id='사각형_1384' data-name='사각형 1384' class='cls-2' width='8' height='1' rx='0.5' transform='translate(4 4.5)'/%3E%3Crect id='_1386' data-name=' 1386' class='cls-2' width='8' height='1' rx='0.5' transform='translate(4 7.5)'/%3E%3Crect id='_1387' data-name=' 1387' class='cls-2' width='8' height='1' rx='0.5' transform='translate(4 10.5)'/%3E%3C/svg%3E%0A");
} @else {
}
@else {
background-image: url("data:image/svg+xml,%3Csvg id='ico_tree_item' xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cdefs%3E%3Cstyle%3E .cls-2%7Bfill:%23a4aac3%7D %3C/style%3E%3C/defs%3E%3Cg id='사각형_703' data-name='사각형 703' style='stroke:%23a4aac3;fill:none'%3E%3Crect width='16' height='16' rx='3' style='stroke:none'/%3E%3Crect x='.5' y='.5' width='15' height='15' rx='2.5' style='fill:none'/%3E%3C/g%3E%3Crect id='사각형_1384' data-name='사각형 1384' class='cls-2' width='8' height='1' rx='.5' transform='translate(4 4.5)'/%3E%3Crect id='_1386' data-name=' 1386' class='cls-2' width='8' height='1' rx='.5' transform='translate(4 7.5)'/%3E%3Crect id='_1387' data-name=' 1387' class='cls-2' width='8' height='1' rx='.5' transform='translate(4 10.5)'/%3E%3C/svg%3E%0A");
}
}
@ -331,10 +484,13 @@
width: 16px;
height: 16px;
background-position: 0 0;
@if $theme == dark {
background-image: url("data:image/svg+xml,%3Csvg id='btn_tree_item_close' xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cstyle%3E .cls-1 %7B fill: %230d0f17; stroke: %23fff; opacity: 0.3; %7D .cls-2 %7B fill: %23fff; %7D .cls-3 %7B stroke: none; %7D .cls-4 %7B fill: none; %7D %3C/style%3E%3C/defs%3E%3Cg id='사각형_703' data-name='사각형 703' class='cls-1'%3E%3Crect class='cls-3' width='16' height='16' rx='3'/%3E%3Crect class='cls-4' x='0.5' y='0.5' width='15' height='15' rx='2.5'/%3E%3C/g%3E%3Crect id='사각형_1384' data-name='사각형 1384' class='cls-2' width='8' height='2' rx='1' transform='translate(4 7)'/%3E%3C/svg%3E%0A");
} @else {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cg data-name='사각형 703' style='fill:%23f1f3f9;stroke:%23a4aac3'%3E%3Crect width='16' height='16' rx='3' style='stroke:none'/%3E%3Crect x='.5' y='.5' width='15' height='15' rx='2.5' style='fill:none'/%3E%3C/g%3E%3Crect data-name='사각형 1384' width='8' height='2' rx='1' transform='translate(4 7)' style='fill:%23a4aac3'/%3E%3C/svg%3E ");
@if $theme ==dark {
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%224%22%20fill%3D%22%23212224%22/%3E%3Crect%20x%3D%220.5%22%20y%3D%220.5%22%20width%3D%2215%22%20height%3D%2215%22%20rx%3D%223.5%22%20stroke%3D%22white%22%20stroke-opacity%3D%220.06%22/%3E%3Cpath%20d%3D%22M12.5998%208H2.99979%22%20stroke%3D%22white%22%20stroke-opacity%3D%220.85%22/%3E%3C/svg%3E");
}
@else {
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%224%22%20fill%3D%22white%22/%3E%3Crect%20x%3D%220.5%22%20y%3D%220.5%22%20width%3D%2215%22%20height%3D%2215%22%20rx%3D%223.5%22%20stroke%3D%22black%22%20stroke-opacity%3D%220.06%22/%3E%3Cpath%20d%3D%22M12.5997%208H2.99973%22%20stroke%3D%22black%22%20stroke-opacity%3D%220.88%22/%3E%3C/svg%3E");
}
}
}
@ -346,10 +502,13 @@
width: 16px;
height: 16px;
background-position: 0 0;
@if $theme == dark {
background-image: url("data:image/svg+xml,%3Csvg id='btn_tree_item_open' xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cdefs%3E%3Cstyle%3E .cls-2%7Bfill:%23fff%7D %3C/style%3E%3C/defs%3E%3Cg id='사각형_703' data-name='사각형 703' style='fill:%230d0f17;stroke:%23fff;opacity:.3'%3E%3Crect width='16' height='16' rx='3' style='stroke:none'/%3E%3Crect x='.5' y='.5' width='15' height='15' rx='2.5' style='fill:none'/%3E%3C/g%3E%3Crect id='사각형_1384' data-name='사각형 1384' class='cls-2' width='8' height='2' rx='1' transform='translate(4 7)'/%3E%3Crect id='_1385' data-name=' 1385' class='cls-2' width='2' height='8' rx='1' transform='translate(7 4)'/%3E%3C/svg%3E%0A");
} @else {
background-image: url("data:image/svg+xml,%3Csvg id='btn_tree_item_open' xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cdefs%3E%3Cstyle%3E .cls-2%7Bfill:%23a4aac3%7D %3C/style%3E%3C/defs%3E%3Cg id='사각형_703' data-name='사각형 703' style='fill:%23f1f3f9;stroke:%23a4aac3'%3E%3Crect width='16' height='16' rx='3' style='stroke:none'/%3E%3Crect x='.5' y='.5' width='15' height='15' rx='2.5' style='fill:none'/%3E%3C/g%3E%3Crect id='사각형_1384' data-name='사각형 1384' class='cls-2' width='8' height='2' rx='1' transform='translate(4 7)'/%3E%3Crect id='_1385' data-name=' 1385' class='cls-2' width='2' height='8' rx='1' transform='translate(7 4)'/%3E%3C/svg%3E ");
@if $theme ==dark {
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%224%22%20fill%3D%22%23212224%22/%3E%3Crect%20x%3D%220.5%22%20y%3D%220.5%22%20width%3D%2215%22%20height%3D%2215%22%20rx%3D%223.5%22%20stroke%3D%22white%22%20stroke-opacity%3D%220.06%22/%3E%3Cpath%20d%3D%22M7.7998%203.00073V12.6007%22%20stroke%3D%22white%22%20stroke-opacity%3D%220.85%22/%3E%3Cpath%20d%3D%22M12.5999%207.80078L2.99985%207.80078%22%20stroke%3D%22white%22%20stroke-opacity%3D%220.85%22/%3E%3C/svg%3E");
}
@else {
background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%224%22%20fill%3D%22white%22/%3E%3Crect%20x%3D%220.5%22%20y%3D%220.5%22%20width%3D%2215%22%20height%3D%2215%22%20rx%3D%223.5%22%20stroke%3D%22black%22%20stroke-opacity%3D%220.06%22/%3E%3Cpath%20d%3D%22M7.7998%203.00073V12.6007%22%20stroke%3D%22black%22%20stroke-opacity%3D%220.88%22/%3E%3Cpath%20d%3D%22M12.5997%207.80078L2.99973%207.80078%22%20stroke%3D%22black%22%20stroke-opacity%3D%220.88%22/%3E%3C/svg%3E");
}
}
}
@ -373,4 +532,4 @@
padding-left: 0 !important;
}
}
}
}

View File

@ -1,40 +1,88 @@
.v-select__custom {
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)
> .v-input__control
> .v-input__slot {
padding: 0.125rem;
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none;
}
&.v-text-field.v-text-field--solo .v-input__control {
min-height: 36px;
height: 36px;
min-height: 32px;
height: 32px;
}
&.v-input input {
min-height: 36px;
height: 36px;
min-height: 32px;
height: 32px;
}
.v-input--selection-controls {
margin-top: 0;
padding-top: 0;
}
.v-input__slot {
overflow: hidden;
position: relative;
height: 36px;
height: 32px;
}
&.v-text-field .v-input__control {
border-color: #d9d9d9;
}
&.select-large {
.v-input__slot,
.v-input__control {
height: 40px !important;
// border: solid 1px #D9D9D9;
border-radius: 8px !important;
}
}
legend {
width: 0;
}
.v-select-list {
padding: 0 1rem;
}
}
.v-input__custom {
.v-input__slot {
&:before,
&:after {
display: none;
}
}
.v-input__slot {
overflow: hidden;
position: relative;
}
&.input-large {
border-radius: 8px !important;
input {
max-height: 40px;
height: 40px;
}
}
&.v-text-field .v-input__control {
border-color: #d9d9d9;
}
&.surface-name {
fieldset {
max-width: 345px;
}
}
}
.v-text-field .v-input__append-inner,
@ -45,20 +93,21 @@
.v-select__widget {
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)
> .v-input__control
> .v-input__slot {
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none;
}
&.v-text-field.v-text-field--solo .v-input__control {
min-height: 30px !important;
height: 30px !important;
}
&.v-input input {
min-height: 30px !important;
height: 30px !important;
}
&.v-text-field--outlined > .v-input__control > .v-input__slot {
&.v-text-field--outlined>.v-input__control>.v-input__slot {
align-items: stretch;
min-height: 30px;
}
@ -67,6 +116,7 @@
margin-top: 0;
padding-top: 0;
}
.v-input__slot {
overflow: hidden;
position: relative;
@ -79,20 +129,23 @@
width: 110px;
height: 30px;
flex: 0 0 auto;
&.v-text-field.v-text-field--solo .v-input__control {
min-height: 30px;
height: 30px;
}
}
}
.v-text-field > .v-input__control > .v-input__slot:after,
.v-text-field > .v-input__control > .v-input__slot:before {
.v-text-field>.v-input__control>.v-input__slot:after,
.v-text-field>.v-input__control>.v-input__slot:before {
display: none;
}
.v-input__slot {
margin-bottom: 0 !important;
}
.v-input {
margin-top: 0 !important;
padding-top: 0 !important;
@ -104,25 +157,124 @@
}
}
.v-main {
.ant-input,
.ant-input-affix-wrapper>input,
.ant-select-selection {
border-radius: 6px;
}
}
.custom-radio {
display: inline-flex;
align-items: center;
cursor: pointer;
position: relative;
padding-left: 0;
margin: 5px;
font-size: 16px;
}
.custom-radio input[type="radio"] {
position: absolute;
opacity: 0;
cursor: pointer;
}
/* Custom radio appearance */
.radio-mark {
position: absolute;
left: -8px;
top: 50%;
transform: translateY(-50%);
height: 14px;
width: 14px;
// background-color: white;
border: 1px solid #ccc;
border-radius: 50%;
transition: all 0.2s ease;
}
/* Show selected state */
.custom-radio input[type="radio"]:checked~.radio-mark {
border-color: #1677ff;
background-color: #fff;
}
.custom-radio input[type="radio"]:checked~.radio-mark::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
height: 11px;
width: 11px;
border-radius: 50%;
background-color: #1677ff;
}
/* Light mode: use Vuetify default */
.checkbox-light .v-icon {
color: #D9D9D9 !important;
}
/* Dark mode: override tick color to black */
.checkbox-dark .v-icon {
color: #424242 !important;
}
@each $theme in dark, light {
@include theme($theme);
.v-application.#{$theme}-mode {
.v-input-popup__custom {
.v-input__slot {
padding-left: 12px;
padding-right: 12px;
border: 1px solid map-deep-get($config,
#{$theme},
"v-input-popup-password-border"
);
}
}
.v-textarea {
.v-input__slot{
border: map-deep-get($config,
#{$theme},
"v-input-textarea-border"
);
fieldset {
background-color: map-deep-get($config,
#{$theme},
"v-input-textarea-bg"
);
}
}
}
.v-input {
border-radius: 4px;
border-radius: 6px;
border-color: #d9d9d9;
color: map-deep-get($config,
#{$theme},
"v-input-backgroundColor"
);
&:not(.v-input--radio-group, .v-input--checkbox) {
.v-input__slot {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"v-input-backgroundColor"
);
}
}
.v-input__slot {
fieldset {
color: map-deep-get(
$config,
color: map-deep-get($config,
#{$theme},
"v-input-fieldset-color"
) !important;
@ -130,8 +282,7 @@
&:hover {
fieldset {
color: map-deep-get(
$config,
color: map-deep-get($config,
#{$theme},
"v-input-fieldset-hover-color"
) !important;
@ -144,15 +295,14 @@
}
&--is-readonly {
border-color: map-deep-get(
$config,
border-color: map-deep-get($config,
#{$theme},
"v-input-readonly-border-color"
);
&:not(.v-input--radio-group, .v-input--checkbox) {
.v-input__slot {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"v-input-readonly-backgroundColor"
) !important;
@ -161,20 +311,20 @@
}
&--is-disabled {
border-color: map-deep-get(
$config,
border-color: map-deep-get($config,
#{$theme},
"v-input-readonly-border-color"
);
&:not(.v-input--radio-group, .v-input--checkbox) {
.v-input__slot {
background-color: map-deep-get(
$config,
background-color: map-deep-get($config,
#{$theme},
"v-input-disabled-backgroundColor"
) !important;
}
}
input {
color: map-deep-get($config, #{$theme}, "v-input-disabled-color");
}
@ -184,22 +334,23 @@
.v-select {
.v-label {
color: map-deep-get($config, #{$theme}, "v-select-label-color");
position: static !important;
}
&.v-input--is-disabled {
.v-label {
color: map-deep-get($config, #{$theme}, "v-input-disabled-color");
}
.v-icon.v-icon--disabled {
color: map-deep-get(
$config,
color: map-deep-get($config,
#{$theme},
"v-input-disabled-color"
) !important;
}
.v-select__selection--disabled {
color: map-deep-get(
$config,
color: map-deep-get($config,
#{$theme},
"v-input-disabled-color"
) !important;
@ -211,12 +362,24 @@
.v-label {
color: map-deep-get($config, #{$theme}, "non-activate");
}
&.v-item--active {
.v-label {
color: map-deep-get($config, #{$theme}, "activate");
}
}
}
.radio-mark {
background-color: map-deep-get($config,
#{$theme},
"ant-btn-primary-color"
);
border-color: map-deep-get($config,
#{$theme},
"v-input-textarea-border"
);
}
}
.v-radio {
@ -241,17 +404,19 @@
.v-input--checkbox {
.v-icon {
@if $theme == dark {
@if $theme ==dark {
color: rgba(255, 255, 255, 0.6);
} @else {
}
@else {
color: #aaaaaa;
}
}
}
.v-textarea{
textarea{
.v-textarea {
textarea {
padding: 10px;
}
}
}
}

View File

@ -1,20 +1,20 @@
// .v-tabs {
// height: 38px;
// flex: 0;
// & + .v-tabs-items {
// height: calc(100% - 38px) !important;
// width: 100%;
// background-color: transparent !important;
// }
// &-bar {
// height: 38px;
// background-color: transparent !important;
// border-bottom: 1px solid $--color-hover_d;
// }
// .v-tab {
// margin: 0 !important;
// }
// }
.v-tabs {
.v-tab {
padding: 16px 0;
font-size: 14px;
position: relative;
z-index: 2;
transform: translateY(1px);
letter-spacing: 0;
+.v-tab {
margin-left: 32px;
}
min-width:auto;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
@ -22,67 +22,112 @@
position: relative;
z-index: 2;
.v-tabs-bar{
background-color: rgba(0, 0, 0, 0)
}
.v-slide-group__content {
border-bottom: 1px solid map-deep-get($config,
#{$theme},
"v-tabs-items-border-color"
);
}
.v-slide-group__wrapper {
background-color: map-deep-get($config,
#{$theme},
"card-default-backgroundColor"
);
overflow: visible !important;
contain: initial !important;
}
.v-tab {
border: 1px solid transparent;
border-radius: 6px 6px 0 0;
border-bottom-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-border-color"
);
background-color: map-deep-get(
$config,
#{$theme},
"v-tabs-backgroundColor"
);
padding: 16px 0;
font-size: 14px;
// border-radius: 6px 6px 0 0;
// border-bottom-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-active-border-color"
// );
// background-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-backgroundColor"
// );
position: relative;
z-index: 2;
transform: translateY(1px);
letter-spacing: 0;
+ .v-tab {
margin-left: 4px;
margin-left: 32px;
}
&::before {
background-color: transparent;
}
}
&:hover {
color: map-deep-get(
$config,
#{$theme},
"v-tabs-hover-color"
) !important;
}
&:not(.v-tab--active){
color: map-deep-get($config, #{$theme}, "router-tab-item-color") !important;
}
}
.v-tab--active {
border-top-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-border-color"
);
border-right-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-border-color"
);
border-left-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-border-color"
);
border-bottom-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-backgroundColor"
);
// border-top-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-active-border-color"
// );
// border-right-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-active-border-color"
// );
// border-left-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-active-border-color"
// );
// border-bottom-color: map-deep-get(
// $config,
// #{$theme},
// "v-tabs-active-backgroundColor"
// );
background-color: map-deep-get(
$config,
#{$theme},
"v-tabs-active-backgroundColor"
);
}
.v-tabs-slider {
border-bottom: 1px solid;
border-bottom-color: map-deep-get($config,
#{$theme},
"v-tabs-active-border-color"
);
}
}
.v-tabs-items {
position: relative;
z-index: 1;
border-top: 1px
solid
map-deep-get($config, #{$theme}, "v-tabs-active-border-color");
background-color: map-deep-get($config,
#{$theme},
"card-default-backgroundColor"
);
// border-top: 1px
// solid
// map-deep-get($config, #{$theme}, "v-tabs-active-border-color");
}
}
}

View File

@ -1,6 +1,7 @@
.txt {
&__bar {
display: flex;
&:before {
content: "";
display: inline-block;
@ -11,6 +12,7 @@
position: relative;
top: 3px;
}
&.log {
&:before {
background-color: $--color-primary__green;
@ -44,15 +46,29 @@
}
.custom-title-4 {
font-size: 1.125rem !important;
font-size: 1.25rem !important;
font-weight: 700 !important;
line-height: 1.25 !important;
}
.custom-title-4-new {
font-size: 1.25rem !important;
font-weight: 600 !important;
line-height: 1.25 !important;
}
.custom-title-6 {
font-size: 1.0rem !important;
font-weight: 700 !important;
line-height: 1.25 !important;
}
.custom-title-7 {
font-size: 0.875rem !important;
font-weight: 400 !important;
line-height: 22px !important;
}
.custom-title-8 {
font-size: 0.75rem !important;
font-weight: 700 !important;
@ -66,15 +82,15 @@
.custom-text-2 {
opacity: 0.6;
font-family: SpoqaHanSansNeo;
font-size: 14px;
font-weight: normal;
font-stretch: normal;
font-style: normal;
line-height: 2.17;
letter-spacing: normal;
text-align: right;
color: #fff;
// font-weight: normal;
// font-stretch: normal;
// font-style: normal;
// letter-spacing: normal;
// text-align: right;
// color: #fff;
// font-family: SpoqaHanSansNeo;
}
.text-color--white-0 {
@ -94,5 +110,32 @@
.text-color--sub {
color: map-deep-get($config, #{$theme}, "text-subcolor");
}
.h1-title {
font-weight: 600;
font-size: 24px;
line-height: 32px;
letter-spacing: 0;
color: map-deep-get($config, #{$theme}, "h1-title");
}
.custom-subtitle-tab {
font-size: 1.25rem !important;
font-weight: 600 !important;
line-height: 1.25 !important;
color: map-deep-get($config, #{$theme}, "subtitle-tab");
}
.v-dialog {
.custom-title-4 {
font-size: 16px !important;
font-weight: 600 !important;
color: map-deep-get($config, #{$theme}, "card-title-color");
line-height: 24px !important;
}
}
}
}

View File

@ -0,0 +1,80 @@
@each $theme in dark, light {
// @include theme($theme);
.v-application.#{$theme}-mode {
.search-box-label {
margin-bottom: 8px;
}
.datepicker-container {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
border-radius: 6px;
border: solid 1px;
height: 32px;
// border-color: #424242;
border-color: map-deep-get($config, #{$theme}, "tui-datepicker-border-color");
&.datepicker-large {
height: 40px;
}
.v-input {
// ----------------------
&.v-input--is-readonly {
border-color: rgba(0, 0, 0, 0);
flex-grow: 1;
&:not(.v-input--radio-group) {
&:not(.v-input--checkbox) {
::v-deep {
.v-input__slot {
background-color: rgba(0, 0, 0, 0) !important;
fieldset {
border: none;
}
}
}
}
}
}
// -------------------
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container,
#endpicker-container {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
&.large {
height: 40px;
}
&.datepicker-timeselect {
border: solid 1px map-deep-get($config, #{$theme}, "tui-datepicker-border-color") !important;
}
}
}
}

View File

@ -8,7 +8,7 @@ $--color-gray_C: #cccccc !important;
$--color-gray_9: #95a0a9 !important;
$--color-gray_7: #767d83 !important;
$--color-gray_999: #999 !important;
$--color-gray_555: #555 !important;
$--color-gray_555: #555;
$--color-gray_aaa: #aaa !important;
$--color-hover_d: #47535c !important;
$--color-hover_l: #f0f5fc !important;
@ -25,96 +25,101 @@ $--theme-color-g7-g9: "";
$--theme-color-g9-g7: "";
$scrollbar-width: 11px; // 스크롤 바
$column-spacer: 20px; // 검색 영역 열 간격
$column-spacer: 16px; // 검색 영역 열 간격
$row-spacer: 14px; // 검색 영역 행 간격
$color: (
"black": (
"0": #000,
"1": #111
),
"white": (
"0": #fff
),
"week": (
"sun": #fb5a83,
"sat": #2d8cf6
)
"black": ("0": #000,
"1": #111),
"white": ("0": #fff),
"week": ("sun": #FF4D4F,
"sat": #597EF7)
);
$config: (
dark: (
w-g5: $--color-white,
dark: (w-g5: $--color-white,
g5-w: $--color-gray_555,
gc-g9: $--color-gray_C,
g5-gc: $--color-gray_555,
g7-g9: $--color-gray_7,
g9-g7: $--color-gray_9,
pageBackground: #23272b,
cardBackground: #242940,
cardBackground: #212224,
hover: #47535c,
btnClose: #24282c,
scrollbar-track: #2f334a,
scrollbar-thumb: #575b72,
card-default-color: #fff,
card-default-color: #FFFFFFA6,
card-title-color: #FFFFFFD9, // #111,
card-subtitle: rgba(255, 255, 255, 0.6),
card-text-info-color: #1668DC,
card-text-title-color: #FFFFFFA6,
activate: #fff,
non-activate: rgba(255, 255, 255, 0.6),
text-subcolor: rgba(255, 255, 255, 0.6),
border-color: rgba(255, 255, 255, 0.1),
router-header: #1d2133,
router-tab-item: #2d3355,
router-tab-item-active: #18579e,
router-tab-item-color: #fff,
router-tab-item-active-color: #fff,
router-tab-item-icon-color: rgba(255, 255, 255, 0.5),
router-tab-item-icon-active-color: #fff,
router-tab-item-hover-color: #3896ff,
router-header: #212224,
router-container: #141415,
container-fluid: #141415,
router-tab-item: transparent,
router-tab-item-active: transparent,
router-tab-item-color: #FFFFFFD9,
router-tab-item-active-color: #1668DC,
router-tab-item-icon-color: #FFFFFFD9,
router-tab-item-icon-active-color: #1668DC,
router-tab-item-hover-color: #1668DC,
router-tab-slot-end-button-backgroundColor: #144985,
v-btn-backgroundColor: #144985,
v-box: #383f5d,
v-box: #212224,
v-banner-border-color: rgba(255, 255, 255, 0.1),
v-treeview-node-root-backgroundColor: #18579e,
v-treeview-node-root-label-color: #fff,
v-treeview-node-root-label-active-color: #fff,
v-treeview-node-root-icon-color: #fff,
v-treeview-node-root-icon-active-color: #fff,
v-treeview-node-subroot-backgroundColor: #2d3355,
v-treeview-node-root-backgroundColor: #212224,
v-treeview-node-root-label-color: #FFFFFFD9,
v-treeview-node-root-label-active-color: #FFFFFFD9,
v-treeview-node-root-icon-color: #FFFFFFD9,
v-treeview-node-root-icon-active-color: #FFFFFFD9,
// v-treeview-node-subroot-backgroundColor: #FFFFFF0A,
v-treeview-node-subroot-backgroundColor: transparent,
v-treeview-node-label-color: rgba(255, 255, 255, 0.6),
v-treeview-node-label-active-color: #fff,
v-treeview-node-label-active-color: #1668DC,
v-treeview-leaf-active-backgroundColor: rgba(45, 51, 85, 0.5),
v-treeview-leaf-active-color: #3896ff,
v-treeview-icon-color: rgba(255, 255, 255, 0.6),
v-treeview-icon-active-color: #fff,
v-input-backgroundColor: rgba(13, 15, 23, 0.3),
v-input-fieldset-color: rgba(255, 255, 255, 0.32),
v-treeview-node-label-children-color: #fff,
v-input-backgroundColor: transparent,
v-input-color: rgba(255, 255, 255, 0.25),
v-input-fieldset-color: #424242,
v-input-fieldset-hover-color: rgba(255, 255, 255, 1),
v-input-icon-color: #fff,
v-input-readonly-border-color: rgba(255, 255, 255, 0.3),
v-input-readonly-backgroundColor: rgba(57, 64, 94, 0.3),
v-input-disabled-backgroundColor: rgba(57, 64, 94, 0.3),
v-input-disabled-color: rgba(255, 255, 255, 0.2),
v-select-label-color: #fff,
v-calendar-weekday-backgroundColor: #383f5d,
v-calendar-weekday-color: #fff,
v-calendar-weekday-border-color: rgba(255, 255, 255, 0.1),
v-calendar-day-color: #fff,
v-calendar-day-in-not-month-color: rgba(255, 255, 255, 0.05),
v-calendar-is-today-background-color: #2d4571,
tui-grid-header-backgroundColor: #383f5d,
tui-grid-border-horziontal-color: #383f5d,
tui-grid-border-vertical-color: rgba(255, 255, 255, 0.1),
tui-grid-cell-backgroundColor: #242940,
v-input-readonly-border-color:#424242,
v-input-readonly-backgroundColor: rgba(255, 255, 255, 0.08),
v-input-disabled-backgroundColor:rgba(255, 255, 255, 0.08),
v-input-disabled-color: rgba(255, 255, 255, 0.5),
v-select-label-color: rgba(255, 255, 255, 0.85),
v-calendar-weekday-backgroundColor: #FFFFFF0A,
v-calendar-weekday-color: #FFFFFFD9,
v-calendar-weekday-border-color: #FFFFFF0F,
v-calendar-day-color: #FFFFFFD9,
v-calendar-day-in-not-month-color: #FFFFFF14,
v-calendar-is-today-background-color: #0A224F,
v-calendar-is-sat: #263EA0,
v-calendar-is-sun:#A61D24,
tui-grid-title-color: #FFFFFFD9,
tui-grid-header-backgroundColor: #2a2b2d,
tui-grid-header-color: #FFFFFFD9,
tui-grid-border-horziontal-color: #212224,
tui-grid-border-vertical-color: #FFFFFF0F,
tui-grid-cell-backgroundColor: #212224,
tui-grid-cell-color: #fff,
tui-grid-cell-insert-color: #13636c,
tui-grid-cell-selected-color: #1a4e87,
tui-grid-cell-selected-color: #0A224F,
tui-grid-cell-modify-color: #13636c,
tui-grid-cell-removed-color: #f6637b,
tui-grid-cell-disabled-color: rgb(170, 170, 170),
tui-grid-cell-hover-backgroundColor: #31375b,
v-tabs-items-border-color: rgba(255, 255, 255, 0.7),
tui-grid-cell-hover-backgroundColor: #2d4571,
v-tabs-items-border-color: #FFFFFF0F,
v-tabs-backgroundColor: rgba(57, 64, 94, 0.5),
v-tabs-active-backgroundColor: #242940,
v-tabs-active-backgroundColor: transparent,
v-tabs-active-border-color: rgba(255, 255, 255, 0.7),
v-dialog-card-text-color: #fff,
tui-datepicker-backgroundColor: #0d0f17,
@ -122,11 +127,57 @@ $config: (
tui-datepicker-selectable-hover-color: #2d3355,
tui-datepicker-selected-color: #1a4e87,
tui-datepicker-calendar-color: #fff,
tui-editor-contents-color: #111,
admin-menu-expanded-list-backgroundColor: #144985
tui-editor-contents-color: rgba(0, 0, 0, 0.88),
tui-grid-cell-borderStyle: solid,
tui-grid-cell-borderColor: #FFFFFF0f,
admin-menu-expanded-list-backgroundColor: #144985,
h1-title: #1668DC,
v-btn-save: transparent,
v-btn-add-text: #212224,
header-backgroud: #131629,
v-btn-header-background: #212224,
v-btn-header-border: #424242,
v-btn-header-text: #fff,
v-icon-orange:#D87A16,
v-icon-blue:#1668DC,
v-btn-excel-dowload-title: #FFFFFFD9,
v-btn-excel-dowload-bg: #00000026,
basic-button-color: #FFFFFFD9,
basic-button-background: #212224,
search-btn-color: #212224,
card-default-backgroundColor: rgba(155, 155, 155, 0),
v-icon-chevron-down: rgba(255, 255, 255, 0.45),
v-icon-search: rgba(255, 255, 255, 0.45),
icon-color: rgba(255, 255, 255, 0.45),
menu-bg-color:rgba(33, 34, 36, 1),
arow-line-btn-bg-color: #111A2C,
arow-line-color: #1668DC,
search-btn-background: #1668DC,
v-btn-color-default: #FFFFFFD9,
v-btn-bg-default: #FFFFFF2E,
v-input-popup-password-border: #424242,
v-input-textarea-border: #424242,
v-input-textarea-bg: #212224,
v-input-textarea-color: #FFFFFFD9,
v-treeview-node-label-active-bg: #111A2C,
v-treeview-node-label-active-border: #1668DC,
v-treeview-leaf-subchildren-backgroundColor: #2a2b2d,
ant-btn-primary-bg: #1668DC,
ant-btn-primary-color: #212224,
ant-btn-danger-bg:#D32029,
ant-btn-danger-border:#D32029,
ant-btn-danger-color:#212224,
ant-btn-default-border:#FFFFFF2E,
ant-btn-default-bg:#FFFFFF2E,
ant-btn-default-color:#FFFFFFD9,
ant-btn-default-border-outlined:#424242,
btn-header-select-bg: #1F1F1F,
btn-header-select-color:#FFFFFFD9,
subtitle-tab: #FFFFFFA6,
v-header-border: #424242,
v-sidebar-border: #303030,
),
light: (
w-g5: $--color-gray_555,
light: (w-g5: $--color-gray_555,
g5-w: $--color-white,
gc-g9: $--color-gray_999,
g5-gc: $--color-gray_C,
@ -137,67 +188,81 @@ $config: (
cardBackground: #fefefe,
hover: #f0f5fc,
btnClose: #f1f0f8,
scrollbar-track: #e9e9e9,
scrollbar-track: rgba(0, 0, 0, 0), // #e9e9e9,
scrollbar-thumb: #bbbbbb,
card-default-color: #111,
card-subtitle: #555,
card-default-color: #00000073, // #111,
card-subtitle: #1677ff,
card-text-info-color: #1677FF,
card-text-title-color: #00000073,
card-title-color: #000000E0, // #111,
activate: #111,
non-activate: #555,
text-subcolor: #999,
border-color: #ddd,
router-header: #fff,
router-tab-item: #e1e7f3,
router-tab-item-active: #4777d9,
router-tab-item-color: #111,
router-tab-item-active-color: #fff,
router-tab-item-icon-color: #838aa6,
router-tab-item-icon-active-color: #fff,
router-tab-item-hover-color: #366dbe,
router-container: #f8f8f8,
container-fluid: #f8f8f8,
router-tab-item: #fff,
router-tab-item-active: #fff,
router-tab-item-color: #000000E0,
router-tab-item-active-color: #1677ff,
router-tab-item-icon-color: #000000E0,
router-tab-item-icon-active-color: #1677ff,
router-tab-item-hover-color: #1677ff,
router-tab-slot-end-button-backgroundColor: #3f4d7d,
v-btn-backgroundColor: #4777d9,
v-box: #f0f3fa,
v-btn-backgroundColor: #1677ff,
// v-btn-backgroundColor: #fff,
v-box: #FFFFFF,
v-banner-border-color: #ddd,
v-treeview-node-root-backgroundColor: #4777d9,
v-treeview-node-root-label-color: #111,
v-treeview-node-root-label-active-color: #fff,
v-treeview-node-root-icon-color: #555,
v-treeview-node-root-icon-active-color: #fff,
v-treeview-node-subroot-backgroundColor: #e1e7f3,
v-treeview-node-root-backgroundColor: #FFFFFF,
v-treeview-node-root-label-color: #000000E0,
v-treeview-node-root-label-active-color: #000000E0,
v-treeview-node-root-icon-color: #000000E0,
v-treeview-node-root-icon-active-color: #000000E0,
// v-treeview-node-subroot-backgroundColor: #00000005,
v-treeview-node-subroot-backgroundColor: transparent,
v-treeview-node-label-color: #555,
v-treeview-node-label-active-color: #111,
v-treeview-node-label-active-color: #002C8C,
v-treeview-node-label-children-color: #616885,
v-treeview-leaf-active-backgroundColor: #edf1f7,
v-treeview-leaf-active-color: #366dbe,
v-treeview-icon-color: #a4aac3,
v-treeview-icon-active-color: #616885,
v-input-backgroundColor: #ffffff,
v-input-fieldset-color: #b4b8c9,
v-input-fieldset-hover-color: #b4b8c9,
v-input-icon-color: #555,
v-input-readonly-border-color: #b4b8c9,
v-input-readonly-backgroundColor: #f5f5f5,
v-input-disabled-backgroundColor: #eee,
v-input-disabled-color: #bbb,
v-select-label-color: #111,
v-calendar-weekday-backgroundColor: #e0e0e0,
v-calendar-weekday-color: #111,
v-calendar-weekday-border-color: #d4d4d4,
v-calendar-day-color: #111,
v-calendar-day-in-not-month-color: #f8f8f8,
v-calendar-is-today-background-color: #e3eaf3,
tui-grid-header-backgroundColor: #e0e0e0,
v-input-color: rgba(0, 0, 0, 0.25),
v-input-fieldset-color: #d9d9d9,
v-input-fieldset-hover-color: #1890ff,
v-input-icon-color: #d9d9d9,
v-input-readonly-border-color: #424242,
v-input-readonly-backgroundColor: rgba(0, 0, 0, 0.04),
v-input-disabled-backgroundColor: rgba(0, 0, 0, 0.04),
v-input-disabled-color: rgba(0, 0, 0, 0.25),
v-select-label-color: rgba(0, 0, 0, 0.88),
v-calendar-weekday-backgroundColor: #00000005,
v-calendar-weekday-color: #000000E0,
v-calendar-weekday-border-color: #0000000F,
v-calendar-day-color: #000000E0,
v-calendar-day-in-not-month-color: #0000000A,
v-calendar-is-today-background-color: #E6F4FF,
v-calendar-is-sat: #597EF7,
v-calendar-is-sun:#FF4D4F,
tui-grid-title-color: #000000E0,
tui-grid-header-backgroundColor: #fafafa, //#e0e0e0,
tui-grid-header-color: rgba(0, 0, 0, 0.88),
tui-grid-border-horziontal-color: #e0e0e0,
tui-grid-border-vertical-color: #d4d4d4,
tui-grid-border-vertical-color: rgba(0, 0, 0, 0.06), //#d4d4d4,
tui-grid-cell-backgroundColor: #fff,
tui-grid-cell-color: #555,
tui-grid-cell-color: #000000E0,
tui-grid-cell-insert-color: #13636c,
tui-grid-cell-selected-color: #ecf2fa,
tui-grid-cell-selected-color: #E6F4FF,
tui-grid-cell-modify-color: #e6f5f7,
tui-grid-cell-removed-color: #fddde1,
tui-grid-cell-hover-backgroundColor: #f5f5f5,
v-tabs-items-border-color: #989db1,
v-tabs-items-border-color: #0000000F,
v-tabs-backgroundColor: #ddd,
v-tabs-active-backgroundColor: #fff,
v-tabs-active-border-color: #989db1,
v-tabs-active-backgroundColor: rgba(0, 0, 0, 0), // #fff,
v-tabs-active-border-color: #1677FF,
v-tabs-hover-color: #1677FF,
v-dialog-card-text-color: #111,
tui-datepicker-backgroundColor: #fff,
tui-datepicker-border-color: #b4b8c9,
@ -205,6 +270,51 @@ $config: (
tui-datepicker-selected-color: #4777d9,
tui-datepicker-calendar-color: #111,
tui-editor-contents-color: #111,
admin-menu-expanded-list-backgroundColor: #3f4d7d
)
);
tui-grid-cell-borderStyle: solid,
tui-grid-cell-borderColor: #0000000F,
admin-menu-expanded-list-backgroundColor: #3f4d7d,
h1-title: #002C8C,
header-backgroud: #F0F5FF,
v-btn-header-background: #FFF,
v-btn-header-border: #D9D9D9,
v-btn-header-text: #000000,
v-icon-orange:#FA8C16,
v-icon-blue:#1677FF,
v-btn-excel-dowload-title: #000000E0,
v-btn-excel-dowload-bg: #00000026,
basic-button-color: #000000E0,
basic-button-background: #FFFFFF,
search-btn-color: #ffffff,
card-default-backgroundColor: rgba(155, 155, 155, 0),
v-icon-chevron-down:rgba(0, 0, 0, 0.45),
v-icon-search:rgba(0, 0, 0, 0.45),
icon-color: rgba(0, 0, 0, 0.45),
menu-bg-color: #fff,
arow-line-btn-bg-color: #E6F4FF,
arow-line-color: #1677FF,
search-btn-background: #1677FF,
v-btn-bg-default: #00000026,
v-btn-color-default: #000000E0,
v-input-popup-password-border: #D9D9D9,
v-input-textarea-border: #D9D9D9,
v-input-textarea-bg: #FFFFFF,
v-input-textarea-color: #000000E0,
v-treeview-node-label-active-bg: #E6F4FF,
v-treeview-node-label-active-border: #1677FF,
v-treeview-leaf-subchildren-backgroundColor: #fafafa,
ant-btn-primary-bg: #1677FF,
ant-btn-primary-color: #FFF,
ant-btn-danger-bg:#FFF,
ant-btn-danger-border:#F5222D,
ant-btn-danger-color:#F5222D,
ant-btn-default-border:#00000026,
ant-btn-default-bg:#00000026,
ant-btn-default-color:#000000E0,
ant-btn-default-border-outlined:#D9D9D9,
btn-header-select-color:#1F1F1F,
btn-header-select-bg:#FFFFFF,
subtitle-tab: #000000A6,
v-header-border: #D9D9D9,
v-sidebar-border: #F0F0F0,
),
);

BIN
assets/scss/var.zip Normal file

Binary file not shown.

View File

@ -21,8 +21,8 @@ $material-light: (
$treeview-node-padding: 10px;
$treeview-node-height: 40px;
$banner-start-padding: 10px;
$banner-end-padding: 10px;
$banner-start-padding: 0px;
$banner-end-padding: 0px;
$banner-y-padding: 12px;
$card-border-radius: 10px;
@ -33,12 +33,12 @@ $card-subtitle-padding: 20px;
$timeline-dot-small-size: 10px;
$data-table-regular-row-height: 36px;
$data-table-regular-row-height: 32px;
$input-font-size: 14px;
$input-max-height: 36px;
$text-field-filled-full-width-outlined-slot-min-height: 36px;
$text-field-solo-control-min-height: 36px;
$input-max-height: 32px;
$text-field-filled-full-width-outlined-slot-min-height: 32px;
$text-field-solo-control-min-height: 32px;
$text-field-line-height: 1.285;
$text-field-enclosed-prepend-append-margin-top: 0;
$text-field-enclosed-details-padding: 0 8px;
@ -50,7 +50,7 @@ $tabs-item-padding: 12px;
$list-border-radius: 4px;
$list-padding: 0;
$list-item-min-height: 36px;
$list-item-min-height: 32px;
$list-item-padding: 0;
$list-item-title-font-size: 0.875rem; // 14px;
$list-item-content-padding: 10px 7px;
$list-item-content-padding: 10px 7px;

View File

@ -170,7 +170,7 @@ export default {
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.btn-pager {
margin: 4px;
input {
@ -200,9 +200,9 @@ export default {
// .grey--text {
// margin-left: 16px;
// }
.mr-4 {
margin-left: 14px;
}
// .mr-4 {
// margin-left: 14px;
// }
.v-btn__content {
color: #ffffff;
}

View File

@ -1,19 +1,23 @@
<template>
<v-menu offset-y nudge-bottom="8" :left="true">
<v-menu offset-y nudge-bottom="8" :right="true">
<template v-slot:activator="{ on, attrs }">
<v-btn
v-bind="attrs"
v-on="on"
depressed
:ripple="false"
:class="{ miniVariant }"
:style="btnStyle"
>
<v-icon size="32" :class="{ 'mr-2': !miniVariant }"
icon
fab
small
>
<!-- depressed
:ripple="false" -->
<!-- :style="btnStyle" -->
<v-icon size="32" color="#fff"
>$icoAdminMenu</v-icon
>
<span class="body-1 mr-1">{{ userNm }}</span>
<v-icon>mdi-chevron-down</v-icon>
<!-- <span class="body-1 mr-1">{{ userNm }}</span> -->
<!-- <v-icon>mdi-chevron-down</v-icon> -->
</v-btn>
<!-- <AlertPopup
ref="alertPop"
@ -23,7 +27,7 @@
/> -->
</template>
<v-list class="pa-2">
<v-list class="pa-2 btn-close-menu-list" >
<!-- <v-list-item class="mb-1">-->
<!-- <div class="d-flex align-center">-->
<!-- <v-avatar class="mr-1" size="20">-->
@ -155,12 +159,15 @@ export default {
min-width: auto !important;
display: flex;
align-items: center;
padding: 0 20px !important;
margin-bottom: 12px;
padding: 0 !important;
// margin-bottom: 12px;
&,
&:before {
background-color: transparent !important;
// background-color: transparent !important;
}
&.v-btn--fab{
height: auto;
}
::v-deep {

View File

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

View File

@ -59,7 +59,6 @@ export default {
computed: {
...mapState({
isDarkMode: 'isDarkMode',
chartOption(state) {
var dark_Col = [
'#01AE6A',
@ -352,21 +351,25 @@ export default {
tmpChrtOp.color = light_Col;
}
}
// console.log('ops11:',tmpChrtOp)
return tmpChrtOp;
},
}),
},
created() {
// console.log('wd data:',this.widgetData)
},
methods: {
onClick(event, instance, ECharts) {
console.log('onClick : ', event);
// console.log('onClick : ', event);
this.$emit('click', event);
},
onDblClick(event, instance, ECharts) {
console.log('onDblClick : ', event);
// console.log('onDblClick : ', event);
this.$emit('dblclick', event);
},
onRightClick(event, instance, ECharts) {
console.log('onRightClick : ', event);
// console.log('onRightClick : ', event);
this.$emit('rclick', event);
},
onLegendSelect(params) {

View File

@ -1,102 +1,111 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-checkbox
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#4777d9'"
:color="isDarkMode ? '#fff' : '#1890ff'"
@change="modifyValue"
></v-checkbox>
</v-col>
</v-row>
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { mapState, mapMutations } from "vuex";
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: true,
},
isDarkMode: {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: true,
},
isDarkMode: {
type: Boolean,
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
iconShow: {
type: Boolean,
require: false,
default: false,
default: true
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
computed: {
...mapState({
searchParam: state => state.pageData,
myBindingDara(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
}),
},
watch: {
myBindingDara: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
modifyValue(e) {
return this.setPageData({ [this.valueNm]: e });
},
},
computed: {
...mapState({
searchParam: (state) => state.pageData,
myBindingDara(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
}),
},
watch: {
myBindingDara: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
},
methods: {
...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) {
return this.setPageData({ [this.valueNm]: e });
},
},
};
</script>

View File

@ -1,144 +1,141 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="location == 'front'" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="textCols" @click="modifyValue">
<v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#4777d9'"
@change="modifyValue"
></v-checkbox>
</v-col>
<v-col v-if="location == 'rear'" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
</v-row>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="location == 'front'" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="textCols" @click="modifyValue">
<v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#4777d9'"
@change="modifyValue"
></v-checkbox>
</v-col>
<v-col v-if="location == 'rear'" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { mapState, mapMutations } from "vuex";
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: false,
},
isDarkMode: {
type: Boolean,
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
icon: {
type: Boolean,
require: false,
default: true,
},
location: {
type: String,
require: false,
default: 'front'
},
disabledCheckOption: {
type: String,
require: false
}
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: false,
},
isDarkMode: {
type: Boolean,
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
icon: {
type: Boolean,
require: false,
default: true,
},
location: {
type: String,
require: false,
default: "front",
},
disabledCheckOption: {
type: String,
require: false,
},
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
computed: {
...mapState({
searchParam: state => state.pageData,
myBindingData(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
bindingDisabledCheckOption(state) {
if(state.pageData[this.parentPrgmId][this.disabledCheckOption]!=undefined){
return state.pageData[this.parentPrgmId][this.disabledCheckOption];
}
}
}),
},
watch: {
myBindingData: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
bindingDisabledCheckOption(val) {
this.disabledFlag = val;
}
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
if(this.searchParam[this.parentPrgmId][this.disabledCheckOption]!=undefined){
this.disabledFlag = this.searchParam[this.parentPrgmId][this.disabledCheckOption]
}
},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
modifyValue(e) {
if(this.disabledFlag==true&&e.target != undefined){
alert('기간이 한 시간 이내일 경우만 선택할 수 있습니다.')
}else{
if(e.target == undefined){
return this.setPageData({ [this.valueNm]: e });
}
}
},
},
computed: {
...mapState({
searchParam: (state) => state.pageData,
myBindingData(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
bindingDisabledCheckOption(state) {
if (state.pageData[this.parentPrgmId][this.disabledCheckOption] != undefined) {
return state.pageData[this.parentPrgmId][this.disabledCheckOption];
}
},
}),
},
watch: {
myBindingData: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
bindingDisabledCheckOption(val) {
this.disabledFlag = val;
},
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
if (this.searchParam[this.parentPrgmId][this.disabledCheckOption] != undefined) {
this.disabledFlag = this.searchParam[this.parentPrgmId][this.disabledCheckOption];
}
},
methods: {
...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) {
if (this.disabledFlag == true && e.target != undefined) {
alert("기간이 한 시간 이내일 경우만 선택할 수 있습니다.");
} else {
if (e.target == undefined) {
return this.setPageData({ [this.valueNm]: e });
}
}
},
},
};
</script>

View File

@ -0,0 +1,84 @@
<template>
<v-chart class="chart" :option="option" autoresize style="width: 400px; height: 300px;" />
</template>
<script>
import { use } from 'echarts/core';
import { CanvasRenderer } from 'echarts/renderers';
import { PieChart } from 'echarts/charts';
import {
TitleComponent,
TooltipComponent,
LegendComponent,
} from 'echarts/components';
import VChart, { THEME_KEY } from 'vue-echarts';
import { ref } from 'vue';
import { defineComponent } from '@vue/composition-api';
use([
CanvasRenderer,
PieChart,
TitleComponent,
TooltipComponent,
LegendComponent,
]);
export default defineComponent({
name: 'ColumnChart',
components: {
VChart,
},
provide: {
[THEME_KEY]: 'dark',
},
setup() {
const option = ref({
title: {
text: 'Traffic Sources',
left: 'center',
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)',
},
legend: {
orient: 'vertical',
left: 'left',
data: ['Direct', 'Email', 'Ad Networks', 'Video Ads', 'Search Engines'],
},
series: [
{
name: 'Traffic Sources',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [
{ value: 335, name: 'Direct' },
{ value: 310, name: 'Email' },
{ value: 234, name: 'Ad Networks' },
{ value: 135, name: 'Video Ads' },
{ value: 1548, name: 'Search Engines' },
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)',
},
},
},
],
});
return { option };
},
});
</script>
<style scoped>
.chart {
height: 100vh;
}
</style>

View File

@ -2,14 +2,14 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="iconShow" small color="primary"
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<div class="datepicker-container">
<div :class="['datepicker-container', customClass]" >
<v-text-field
id="startpicker"
ref="startpicker"
@ -19,14 +19,16 @@
readonly
outlined
>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
<template #append >
<v-icon size="20" v-show="!isRange">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container" id="startpicker-container"></div>
</template>
</v-text-field>
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div>
<div v-if="isRange" class="mx-3" :style="{ lineHeight: 0 }">
<img :src="arrowIcon" alt="">
</div>
<v-text-field
v-show="isRange"
id="endpicker"
@ -70,23 +72,33 @@ export default {
labelCols: {
type: Number,
require: false,
default: 4,
default: 12,
},
textCols: {
type: Number,
require: false,
default: 8,
default: 12,
},
required: {
type: Boolean,
require: false,
default: false,
},
iconShow: {
type: Boolean,
require: false,
default: true,
},
isRangeOption:{
type:Boolean,
require:false,
default: true
}
},
customClass: {
type: String,
require: false,
},
},
data() {
return {
@ -103,6 +115,7 @@ export default {
searchParam(state) {
return state.pageData[this.parentPrgmId];
},
isDarkMode: "isDarkMode",
}),
myCmCycle() {
return this.searchParam.cmCycle;
@ -194,6 +207,12 @@ export default {
this.defaultRange === 'no limite'
);
},
arrowIcon() {
if(this.isDarkMode){
return require('@/assets/images/arrow_datepicker_dm.png');
}
return require('@/assets/images/arrow_datepicker.png');
}
},
watch: {
myCmCycle() {
@ -259,8 +278,10 @@ export default {
},
mounted() {
const startContainer = document.getElementById('startpicker-container');
// const startContainer = document.getElementById('datepicker-container');
const startTarget = document.getElementById('startpicker');
const endContainer = document.getElementById('endpicker-container');
// const endContainer = document.getElementById('datepicker-container');
const endTarget = document.getElementById('endpicker');
// datepicker 생성
@ -304,6 +325,10 @@ export default {
},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
onOpenDatepicker() {
this.startDatepickerInstance.open();
this.endDatepickerInstance.open();
},
getStartDt() {
const dt = this.startDatepickerInstance.getDate();
this.setPageData({
@ -401,34 +426,8 @@ export default {
};
</script>
<style lang="scss" scoped>
.datepicker-container {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
@import "@/assets/scss/datepicker.scss";
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container,
#endpicker-container {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
}
::v-deep {
.tui-timepicker-row {
display: flex;

File diff suppressed because it is too large Load Diff

View File

@ -2,9 +2,15 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
<!-- <v-icon x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
> -->
<v-icon
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>
$icoBulletPoint
</v-icon>
{{ label }}
</label>
</v-col>
@ -19,14 +25,17 @@
readonly
outlined
>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
<template #append >
<v-icon size="20" v-show="!isRange">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container" id="startpicker-container"></div>
</template>
</v-text-field>
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div>
<!-- <div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div> -->
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">
<img :src="arrowIcon" alt="">
</div>
<v-text-field
v-show="isRange"
id="endpicker"
@ -104,6 +113,7 @@ export default {
return state.pageData[this.parentPrgmId];
},
}),
isDarkMode: "isDarkMode",
myCmCycle() {
return this.searchParam.cmCycle;
},
@ -194,6 +204,12 @@ export default {
this.defaultRange === 'no limite'
);
},
arrowIcon() {
if(this.isDarkMode){
return require('@/assets/images/arrow_datepicker_dm.png');
}
return require('@/assets/images/arrow_datepicker.png');
}
},
watch: {
myCmCycle() {
@ -401,34 +417,8 @@ export default {
};
</script>
<style lang="scss" scoped>
.datepicker-container {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
@import "@/assets/scss/datepicker.scss";
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container,
#endpicker-container {
width: 100%;
position: absolute;
top: -260px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
}
::v-deep {
.tui-timepicker-row {
display: flex;

View File

@ -355,34 +355,8 @@ export default {
};
</script>
<style lang="scss" scoped>
.datepicker-container {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
@import "@/assets/scss/datepicker.scss";
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container,
#endpicker-container {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
}
::v-deep {
.tui-timepicker-row {
display: flex;

View File

@ -4,12 +4,13 @@
:data="chkGridData"
:columns="chkGridColumns"
:options="chkGridOptions"
@focusChange="focusChangeEvt"
@mousedown="onMousedown"
@click="startEditing"
@editingFinish="editingFinish"
@dblclick="dblClick"
@mouseover="mouseoverEvent"
@mouseout="mouseoutEvent"
@focusChange="focusChangeEvt"
/>
</template>
<script>
@ -183,13 +184,13 @@ export default {
}),
// true : 현재 행 혹은 연결된 그리드가 수정중인 상태
checkGridState() {
var rowStatList = ['I', 'U', 'D'];
var row = this.gridInstance.invoke('getFocusedCell');
const rowStatList = ['I', 'U', 'D'];
const row = this.gridInstance.invoke('getFocusedCell');
if (row) {
var rowData = this.gridInstance.invoke('getRow', row.rowKey);
const rowData = this.gridInstance.invoke('getRow', row.rowKey);
if (rowData) {
var rowStat = rowData['rowStat'];
const rowStat = rowData['rowStat'];
if (rowStatList.includes(rowStat)) {
return true;
}
@ -197,8 +198,8 @@ export default {
}
if (this.preventFocusChangeEventTargetGridList) {
for (var gridInstance of this.preventFocusChangeEventTargetGridList) {
var dataArr = gridInstance.save();
for (let gridInstance of this.preventFocusChangeEventTargetGridList) {
const dataArr = gridInstance.save();
if (dataArr.length > 0) {
return true;
@ -250,9 +251,11 @@ export default {
this.gridInstance.invoke('check', rowData.rowKey, instance);
},
setSelectionRange(rowKey) {
// console.log("------------------DEBUG-------setSelectionRange:", rowKey);
const rowDatas = this.gridInstance.invoke('getData');
rowDatas.forEach(item => {
if (item.rowKey == rowKey) {
// console.log("------------------DEBUG-------setSelectionRange---item:", item);
this.gridInstance.invoke(
'addRowClassName',
item.rowKey,
@ -267,7 +270,12 @@ export default {
}
});
},
onMousedown(evt) {
// console.log("------------------DEBUG-------onMousedown:", evt);
this.focusChangeEvt(evt);
},
focusChangeEvt(e) {
// console.log("------------------DEBUG-------focusChangeEvt:", e);
// console.log('focusChangeEvt1...')
if (this.preventFocusChangeEvent(e)) {
// console.log('prevent focusChangeEvt')
@ -288,6 +296,7 @@ export default {
this.sendSelectedRowData(e.rowKey);
},
startEditing(e) {
// console.log("------------------DEBUG-------startEditing:", e);
// console.log('startEditing1...')
if (this.preventFocusChangeEvent(e)) {
// console.log('prevent startEditing')
@ -314,6 +323,7 @@ export default {
}
},
async editingFinish(e) {
// console.log('------------------DEBUG-------editingFinish:', e);
// console.log("Editing END E::", e);
// editor 간 이동시 수정되는 문제 수정
// e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg
@ -675,6 +685,7 @@ export default {
? this.gridInstance.invoke('getFocusedCell').rowKey
: eventRowKey;
var rowData = this.gridInstance.invoke('getRow', rowKey);
// console.log('------------------DEBUG-------sendSelectedRowData:', {eventRowKey, rowKey});
this.$emit('sendSelectedRowStatInfo', rowData);
}
},

View File

@ -0,0 +1,47 @@
<template>
<client-only>
<VChart
:option="chartOption"
ref="chart"
style="width:400px; height:300px;"
/>
</client-only>
</template>
<script>
// import Echarts from 'vue-echarts';
// import 'echarts'
export default {
// name: 'Vchart',
// components: {
// 'v-charts': Echarts,
// },
data() {
return {
chartOption: {
series: [
{
type: 'gauge',
progress: {
show:true
},
detail: {
valueAnimation: true,
formatter: '{value}%'
},
data:[{
value: 65,
name: 'Progress'
}]
}
]
},
};
},
created() {
console.log('test chart:')
},
};
</script>

View File

@ -0,0 +1,27 @@
<template>
<h1 class="h1-title">
<v-avatar size="12" :style="{ backgroundColor: 'currentColor' }"></v-avatar>
{{ text ? text : menuNm}}
</h1>
</template>
<script>
import { mapState } from 'vuex';
export default {
name: "PageTitle",
props: {
text: {
type: String,
required: false,
},
},
computed: {
...mapState({
menuNm: state => state.activeMenuInfo.menuNm,
}),
}
};
</script>
<style scoped></style>

View File

@ -2,12 +2,14 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
<v-icon small color="primary"
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<div class="datepicker-container">
<div :class="['datepicker-container', customClass]" >
<v-text-field
id="startpicker"
ref="startpicker"
@ -17,14 +19,16 @@
readonly
outlined
>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
<template #append >
<v-icon size="20" v-show="!isRange">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container" id="startpicker-container"></div>
</template>
</v-text-field>
<div v-show="isRange" class="mx-3" :style="{ lineHeight: 0 }">~</div>
<div v-if="isRange" class="mx-3" :style="{ lineHeight: 0 }">
<img :src="arrowIcon" alt="">
</div>
<v-text-field
v-show="isRange"
id="endpicker"
@ -75,6 +79,10 @@ export default {
require: false,
default: 8,
},
customClass: {
type: String,
require: false,
},
},
data() {
return {
@ -129,6 +137,12 @@ export default {
this.defaultRange === 'no limite'
);
},
arrowIcon() {
if(this.isDarkMode){
return require('@/assets/images/arrow_datepicker_dm.png');
}
return require('@/assets/images/arrow_datepicker.png');
}
},
watch: {
myCmCycle() {
@ -313,34 +327,8 @@ export default {
};
</script>
<style lang="scss" scoped>
.datepicker-container {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
@import "@/assets/scss/datepicker.scss";
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container,
#endpicker-container {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
}
::v-deep {
.tui-timepicker-row {
display: flex;

View File

@ -1,9 +1,11 @@
<template>
<v-switch
class="theme-switch"
v-model="mode"
@change="themeChange"
></v-switch>
<a-button
class="btn-header"
:color="mode ? 'dark' : 'light'"
@click="themeChange"
icon="bulb"
>
</a-button>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
@ -26,8 +28,11 @@ export default {
setThemeChange: 'setThemeChange',
}),
themeChange() {
this.mode = !this.mode;
this.$vuetify.theme.isDark = this.mode;
this.setThemeChange(this.mode);
// console.log(this.mode)
// console.log(this.$vuetify.theme.isDark)
},
},
};
@ -41,6 +46,7 @@ export default {
.v-input__control,
.v-input__slot {
height: 100%;
background-color: rgba(0, 0, 0, 0) !important;
}
.v-input--selection-controls__input {
width: 100%;
@ -68,20 +74,23 @@ export default {
background-color: #f2f2f2;
top: 2px;
left: 0;
background-image: url(../../assets/images/icon/ico-theme-light.png);
// background-image: url(../../assets/images/icon/ico-theme-light.png);
content: "light";
background-size: 18px 18px;
background-position: center center;
background-repeat: no-repeat;
}
}
&.v-input--is-label-active {
::v-deep {
.v-input--switch__track {
background-color: #383f5d;
}
.v-input--switch__thumb {
transform: translate(38px, 0);
background-image: url(../../assets/images/icon/ico-theme-dark.png);
// transform: translate(38px, 0);
// background-image: url(../../assets/images/icon/ico-theme-dark.png);
content: 'dark';
}
}
}

View File

@ -1,9 +1,12 @@
<template>
<div class="d-flex flex-column justify-center align-center">
<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
<div class="d-flex flex-row justify-center align-center" style="gap: 12px">
<!--<v-btn icon tile :ripple="false" @click="btnActionsFnc('addLeftToRight')">
<v-icon>mdi-chevron-right</v-icon>
</v-btn>
<v-btn
</v-btn> -->
<a-button @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost icon="up" >
</a-button>
<!--<v-btn
icon
tile
:ripple="false"
@ -11,7 +14,9 @@
@click="btnActionsFnc('removeRightToLeft')"
>
<v-icon>mdi-chevron-left</v-icon>
</v-btn>
</v-btn> -->
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost icon="down">
</a-button>
</div>
</template>
<script>

View File

@ -1,6 +1,11 @@
<template>
<v-btn :ripple="false" @click="btnActionsFnc('add')">추가</v-btn>
<!-- <v-btn :ripple="false" @click="btnActionsFnc('add')">추가</v-btn> -->
<a-button type="primary" @click="btnActionsFnc('add')" class="v-btn-add-text" icon="plus">
추가
</a-button>
</template>
<style>
</style>
<script>
export default {
props: {

View File

@ -1,5 +1,14 @@
<template>
<v-btn :ripple="false" @click="downloadExcelFile">액셀</v-btn>
<!--<v-btn :ripple="false" @click="downloadExcelFile">액셀</v-btn>-->
<a-button
@click="downloadExcelFile"
v-bind="$attrs"
type="default"
class="btn-default"
icon="file-excel"
:size="size"
>액셀</a-button>
</template>
<script>
@ -33,6 +42,11 @@ export default {
require: false,
default: null,
},
size: {
type: String,
require: false,
default: "default", // small, middle, large
}
},
data() {
return {
@ -134,3 +148,5 @@ export default {
},
};
</script>
<style scoped lang="scss">
</style>

View File

@ -1,9 +1,10 @@
<template>
<div id="btnExeclUpload">
<v-btn class="v-btn__round v-btn__excel" @click="uploadExcelFile">
<!-- <v-btn class="v-btn__round v-btn__excel" @click="uploadExcelFile">
<v-icon>mdi-file-excel</v-icon>
엑셀 로드
</v-btn>
</v-btn> -->
<a-button class="v-btn__round v-btn__excel" type="default" @click="uploadExcelFile">엑셀 로드</a-button>
</div>
</template>

View File

@ -1,5 +1,6 @@
<template>
<v-btn :ripple="false" @click="btnActionsFnc('remove')">삭제</v-btn>
<!--<v-btn :ripple="false" @click="btnActionsFnc('remove')">삭제</v-btn>-->
<a-button type="danger" @click="btnActionsFnc('remove')" ghost danger icon="delete">삭제</a-button>
</template>
<script>
export default {

View File

@ -1,16 +1,25 @@
<template>
<v-btn :ripple="false" @click="btnActionsFnc('save')">저장</v-btn>
<!--<v-btn :ripple="false" @click="btnActionsFnc('save')">저장</v-btn>-->
<!-- style="color: #1890ff; border-color: #1890ff" -->
<a-button
type="default"
class="btn-default"
@click="btnActionsFnc('save')"
icon="save"
>
저장</a-button
>
</template>
<script>
export default {
props: {
myGrid: {
require: true,
},
btnActionsFnc: {
type: Function,
required: true,
},
},
props: {
myGrid: {
require: true,
},
btnActionsFnc: {
type: Function,
required: true,
},
},
};
</script>

View File

@ -1,10 +1,18 @@
<template>
<v-btn :ripple="false" @click="getSearch('prev')">조회</v-btn>
<a-button icon="search" type="primary" @click="getSearch('prev')" class="search-button" :size="size">조회</a-button>
</template>
<script>
import { mapMutations } from 'vuex';
export default {
props: {
size: {
type: String,
require: false,
default: "middle", // small, middle, large
}
},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
getSearch() {
@ -14,4 +22,6 @@ export default {
};
</script>
<style scoped lang="scss" scoped></style>
<style scoped lang="scss">
</style>

View File

@ -1,5 +1,7 @@
<template>
<v-btn :ripple="false" @click="setTotal()">전체</v-btn>
<!-- <v-btn :ripple="false" @click="setTotal()">전체</v-btn> -->
<a-button type="default" @click="setTotal()">전체</a-button>
</template>
<script>
import { mapMutations } from 'vuex';

View File

@ -1,22 +1,22 @@
<template>
<div>
<div class="d-flex" style="gap:8px">
<component
:is="buttonAuth.add ? 'BtnAddRow' : null"
:btnActionsFnc="btnActionsFnc"
/>
<component
:is="buttonAuth.remove ? 'BtnRemoveRow' : null"
:btnActionsFnc="btnActionsFnc"
/>
<component
:is="buttonAuth.save ? 'BtnSave' : null"
:btnActionsFnc="btnActionsFnc"
/>
<component
:is="buttonAuth.excel ? 'BtnExcelDownload' : null"
:parentPrgmId="parentPrgmId"
:gridName="bindingData"
/>
<component
:is="buttonAuth.save ? 'BtnSave' : null"
:btnActionsFnc="btnActionsFnc"
/>
<component
:is="buttonAuth.remove ? 'BtnRemoveRow' : null"
:btnActionsFnc="btnActionsFnc"
/>
</div>
</template>
<script>

View File

@ -0,0 +1,34 @@
<template>
<div class="custom-card">
<a-card
:class="['themed-card', cardClass]"
:title="title"
bordered
ref="cardRef"
@click="$emit('click')"
>
<slot />
</a-card>
</div>
</template>
<script>
export default {
name: 'AntCard',
props: {
title: {
type: String,
default: ''
},
cardClass: {
type: [String, Array, Object],
default: ''
}
}
}
</script>
<style scoped>
.custom-card {
border-top: 4px solid #1890ff;
border-radius: 4px;
}
</style>

View File

@ -0,0 +1,143 @@
// Gauge chart options
export default function getGaugeChartOption({ title, min = 0, max = 160, unit = '%', isDarkMode = false, backgroundRadius = 97 }) {
const colorRanges = isDarkMode
? [
[0.375, '#49AA19'], // Dark Green
// [0.5, '#B8860B'], // Dark Yellow
[0.625, '#D89614'], // Dark Orange
[1, '#D32029'], // Dark Red
]
: [
[0.375, '#52C41A'], // Light Green
// [0.5, '#FFD700'], // Light Yellow
[0.625, '#FAAD14'], // Light Orange
[1, '#F5222D'], // Light Red
];
// Old color range
// const gaugeColors = [
// [0, "#ed1c24"],
// [0.6, "#ed1c24"],
// [0.8, "#f7931e"],
// [1.0, "#009245"],
// ];
// const gaugeColors2 = [
// [0, "#009245"],
// [0.6, "#009245"],
// [0.8, "#f7931e"],
// [1.0, "#ed1c24"],
// ];
return {
grid: {
// top: '-10%',
bottom: 0,
},
title: {},
graphic: [
{
type: "circle",
left: "center",
top: "center",
shape: {
r: backgroundRadius, // radius of the background circle
},
style: {
fill: isDarkMode ? "#141415" : "#F5F5F5", // Light grey color
opacity: 0.3, // Semi-transparent
},
z: 0, // make sure it's behind the gauge
},
],
series: [
{
type: "gauge",
radius: "90%",
startAngle: 225,
endAngle: -45,
min: min,
max: max,
// progress: {
// show: true,
// width: 15,
// },
axisLine: {
lineStyle: {
width: 12,
// color: [
// [0.375, "#3CB371"], // Green (060)
// [0.5, "#FFD700"], // Yellow (6080)
// [0.625, "#FFA500"], // Orange (80100)
// [1, "#FF4500"], // Red (100160)
// ],
color: colorRanges
},
},
axisTick: {
distance: -12,
length: 5,
lineStyle: {
color: "#000000",
width: 1,
},
},
splitLine: {
distance: -12,
length: 8,
lineStyle: {
color: "#000000",
width: 2,
},
},
axisLabel: {
color: isDarkMode ? "#fff" : "#333333",
distance: 23,
fontSize: 9,
},
pointer: {
show: true,
length: "70%",
width: 6,
itemStyle: {
color: "#FA8C16", // Set your desired pointer color here
},
},
title: {
show: false,
offsetCenter: [0, "40%"],
fontSize: 18,
},
detail: {
valueAnimation: true,
fontWeight: 500, // or "normal", "lighter", "bolder", or a number like 600
fontFamily: "Oxanium, sans-serif", // or any custom font
fontSize: 30,
lineHeight: 25,
offsetCenter: [0, "60%"],
color: isDarkMode ? "#fff" : "#333333",
formatter: function (value) {
return `{valueStyle|${value}}\n{percentStyle|${unit}}`;
},
rich: {
// valueStyle: {
// fontSize: 25,
// fontWeight: "bold",
// },
percentStyle: {
fontSize: 10,
color: isDarkMode ? "#fff" : "#333333",
// fontWeight: "normal",
},
},
},
data: [
{
value: 16,
name: "에너지사용효율", // "Energy Usage Efficiency"
},
],
},
],
};
}

View File

@ -0,0 +1,79 @@
export default function getLineChartOption({
xAxisData = [],
seriesData = [],
// legendData = [],
isDarkMode = false,
}) {
// const defaultColors = isDarkMode
// ? ['#D32029', '#31B47B', '#D89614'] : ['#F5222D', '#31B47B', '#FAAD14'];
const defaultColors = isDarkMode
? ['#31B47B', '#D89614', '#D32029'] : ['#31B47B', '#FAAD14', '#F5222D'];
const styledSeries = seriesData.map((item, index) => {
const color = item.color || defaultColors[index % defaultColors.length];
return {
...item,
showSymbol: true, // Show symbol at each data point
itemStyle: {
color,
},
};
});
return {
grid: {
left: '3%',
right: '5%',
top: '25%',
bottom: '0%',
containLabel: true,
},
legend: {
// data: legendData,
icon: 'circle',
top: '0%',
right: '5%',
orient: 'horizontal',
textStyle: {
color: isDarkMode ? 'white' : '#676A7B',
},
},
xAxis: {
type: 'category',
boundaryGap: false,
splitLine: {
show: false,
},
data: xAxisData,
axisLine: {
lineStyle: {
color: isDarkMode ? '#AAAAAA' : '#333333',
},
},
axisLabel: {
color: isDarkMode ? '#676A7B' : '#676A7B',
},
},
yAxis: {
type: 'value',
position: 'left',
axisLine: {
lineStyle: {
color: isDarkMode ? '#AAAAAA' : '#333333',
},
},
axisLabel: {
color: isDarkMode ? '#676A7B' : '#676A7B',
},
splitLine: {
lineStyle: {
color: isDarkMode ? '#444444' : '#EEEEEE',
},
},
},
series: styledSeries,
};
}

View File

@ -0,0 +1,119 @@
<template>
<v-row class="search-box" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<!-- <v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#4777d9'"
@change="modifyValue"
></v-checkbox> -->
<a-checkbox
v-model:checked="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
@change="modifyValue"
>
</a-checkbox>
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations } from "vuex";
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: true,
},
isDarkMode: {
type: Boolean,
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
iconShow: {
type: Boolean,
require: false,
default: true
},
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
computed: {
...mapState({
searchParam: (state) => state.pageData,
myBindingDara(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
}),
},
watch: {
myBindingDara: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
},
methods: {
...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) {
return this.setPageData({ [this.valueNm]: e });
},
},
};
</script>
<style></style>

View File

@ -0,0 +1,146 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="location == 'front'" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="textCols" @click="modifyValue">
<v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="readonly || false"
:required="required || false"
:false-value="false"
@change="modifyValue"
:class="isDarkMode ? 'checkbox-dark' : 'checkbox-light'"
></v-checkbox>
</v-col>
<v-col
style="margin-left: 5px; margin-top: 5px"
v-if="location == 'rear'"
:cols="labelCols"
>
<label for="" class="search-box-label">
<v-icon v-if="icon" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations } from "vuex";
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: false,
},
isDarkMode: {
type: Boolean,
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
valueNm: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
icon: {
type: Boolean,
require: false,
default: true,
},
location: {
type: String,
require: false,
default: "front",
},
disabledCheckOption: {
type: String,
require: false,
},
},
data() {
return {
chkValue: false,
testData: false,
disabledFlag: false,
};
},
computed: {
...mapState({
searchParam: (state) => state.pageData,
myBindingData(state) {
return state.pageData[this.parentPrgmId][this.valueNm];
},
bindingDisabledCheckOption(state) {
if (state.pageData[this.parentPrgmId][this.disabledCheckOption] != undefined) {
return state.pageData[this.parentPrgmId][this.disabledCheckOption];
}
},
}),
},
watch: {
myBindingData: {
deep: true,
handler(val) {
this.chkValue = val;
},
},
bindingDisabledCheckOption(val) {
this.disabledFlag = val;
},
},
created() {
this.chkValue = this.searchParam[this.parentPrgmId][this.valueNm];
if (this.searchParam[this.parentPrgmId][this.disabledCheckOption] != undefined) {
this.disabledFlag = this.searchParam[this.parentPrgmId][this.disabledCheckOption];
}
},
methods: {
...mapMutations({ setPageData: "setPageData" }),
modifyValue(e) {
if (this.disabledFlag == true && e.target != undefined) {
alert("기간이 한 시간 이내일 경우만 선택할 수 있습니다.");
} else {
if (e.target == undefined) {
return this.setPageData({ [this.valueNm]: e });
}
}
},
},
};
</script>
<style></style>

View File

@ -1,25 +1,24 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="item.label" cols="4">
<v-row class="search-box" align="center" >
<v-col v-if="item.label" cols="4" >
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
v-if="item.iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ item.label }}
</label>
</v-col>
<v-col :cols="item.label ? 7 : ''">
<v-col :cols="item.label ? 7 : ''" >
<v-checkbox
v-model="chkValue"
style= "height: 36px; align-items: center;"
:disabled="disabledFlag"
:readonly="item.readonly || false"
:required="item.required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#4777d9'"
:color="isDarkMode ? '#fff' : '#1890ff'"
@change="modifyValue"
></v-checkbox>
</v-col>

View File

@ -1,5 +1,5 @@
<template>
<v-row no-gutters>
<v-row class="form-row">
<template v-for="(item, index) in detailList">
<v-col
v-if="!item.showValue"
@ -44,6 +44,7 @@ import EgrpPysclQtyPop from '../modal/EgrpPysclQtyPop';
import EqpmCalcPop from '../modal/EqpmCalcPop';
import EqpmBaseInfoPop from '../modal/EqpmBaseInfoPop';
import InputTextReg from './InputTextReg';
import CustomInput from '../../form/CustomInput.vue';
export default {
props: {
@ -87,7 +88,8 @@ export default {
EgrpPysclQtyPop,
EqpmCalcPop,
EqpmBaseInfoPop,
InputTextReg
InputTextReg,
CustomInput
},
data() {
return {};

View File

@ -1,18 +1,22 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="item.label" :cols="item.cols == 12 ? 2 : 4">
<v-row class="search-box" align="center">
<v-col v-if="item.label"
:cols="item.labelCols !== undefined ? item.labelCols : item.cols == 12 ? 2 : 4"
class="py-0"
>
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
v-if="item.iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ item.label }}
<span v-if="item.essential">*</span>
</label>
</v-col>
<v-col :cols="item.label ? 7 : ''">
<v-col v-if="!item.hideText"
:cols="item.textCols !== undefined ? item.textCols : item.label ? 8 : ''" class="py-0">
<!-- v-model="InputValue" -->
<v-text-field
v-model="textValue"
@ -121,7 +125,7 @@ export default {
modifyValue(e) {
let val = e.target.value.replace(/[^-.0-9]/g, '');
console.log('val : ', val);
// console.log('val : ', val);
if(this.item.min != undefined && parseFloat(val) < this.item.min){
val = this.item.min;
@ -130,7 +134,7 @@ export default {
if(this.item.max != undefined && parseFloat(val) > this.item.max){
val = this.item.max;
}
console.log('val2 : ', val);
// console.log('val2 : ', val);
this.textValue = val;
// this.textValue = this.validateNumber(val);

View File

@ -1,56 +1,39 @@
<template>
<v-row v-if="!item.showValue" class="search-box" align="center" no-gutters>
<v-row v-if="!item.showValue" class="search-box" align="center">
<v-col
v-if="item.label"
:cols="item.labelCols !== undefined ? item.labelCols : item.cols == 12 ? 2 : 4"
:style="item.padding ? 'padding-left:10px' : ''"
>
class="py-0"
>
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
v-if="item.iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ item.label }}
<span v-if="item.essential">*</span>
</label>
</v-col>
<v-col
v-if="!item.hideText"
:cols="item.textCols !== undefined ? item.textCols : item.label ? 7 : ''"
>
<v-text-field
v-model="InputValue"
class="v-input__custom"
outlined
:type="item.inputType || 'text'"
:min="item.min || ''"
:max="item.max || ''"
:onkeyup="item.onkeyup || ''"
:onkeydown="item.onkeydown || ''"
:hide-details="true"
:disabled="
item.disabled ||
(item.elseDisabled &&
myBindingData &&
item.elseDisabled !== myBindingData.rowStat) ||
disabledCondition ||
false
"
:readonly="
item.readonly ||
(item.elseReadonly &&
myBindingData &&
item.elseReadonly !== myBindingData.rowStat) ||
readonlyCondition ||
false
"
:required="item.required || false"
:placeholder="item.placeholder"
@input="modifyValue($event, item.valueNm)"
@click="onClick($event, item, item.valueNm)"
></v-text-field>
<v-col class="py-0" v-if="!item.hideText" :cols="item.textCols !== undefined ? item.textCols : item.label ? 8 : ''" :style="item.noText ? 'padding-top:0px' : ''">
<v-text-field v-model="InputValue" class="v-input__custom" outlined :type="item.inputType || 'text'"
:min="item.min || ''" :max="item.max || ''" :onkeyup="item.onkeyup || ''"
:onkeydown="item.onkeydown || ''" :hide-details="true" :disabled="item.disabled ||
(item.elseDisabled &&
myBindingData &&
item.elseDisabled !== myBindingData.rowStat) ||
disabledCondition ||
false
" :readonly="item.readonly ||
(item.elseReadonly &&
myBindingData &&
item.elseReadonly !== myBindingData.rowStat) ||
readonlyCondition ||
false
" :required="item.required || false" :placeholder="item.placeholder" @input="modifyValue($event, item.valueNm)"
@click="onClick($event, item, item.valueNm)"></v-text-field>
</v-col>
<v-col v-if="item.lengthCheckFlag" :cols="1" text-align="center">
<label for="" class="search-box-label px-1">

View File

@ -1,28 +1,22 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="item.label" :cols="item.labelCols">
<v-row class="search-box" align="center" >
<v-col v-if="item.label" :cols="item.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon v-if="item.iconShow" x-small :color="item.required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
<v-icon
v-if="item.iconShow"
small
:color="item.required ? '#fb8200' : 'primary'"
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>
$icoBulletPoint
</v-icon>
{{ item.label }}
</label>
</v-col>
<v-col :cols="item.label ? item.textCols : ''">
<v-text-field
ref="formRef"
:value="InputValue"
class="v-input__custom"
:disabled="item.disabled"
:readonly="item.readonly"
outlined
:hide-details="true"
@keyup.enter="search"
@keydown="keydownEvent"
@keyup="keyupEvent"
@input="inputEvent($event, item.valueNm)"
:placeholder="item.placeholder"
></v-text-field>
<v-col :cols="item.label ? item.textCols : ''" class="py-0">
<v-text-field ref="formRef" :value="InputValue" class="v-input__custom" :disabled="item.disabled"
:readonly="item.readonly" outlined :hide-details="true" @keyup.enter="search" @keydown="keydownEvent"
@keyup="keyupEvent" @input="inputEvent($event, item.valueNm)" :placeholder="item.placeholder"></v-text-field>
</v-col>
</v-row>
</template>
@ -74,7 +68,7 @@ export default {
},
},
},
created() {},
created() { },
methods: {
...mapMutations({ setPageData: 'setPageData' }),
search() {
@ -82,22 +76,22 @@ export default {
this.setPageData({ isFind: true });
}
},
inputEvent(str,n){
inputEvent(str, n) {
var temp = str.match(/[^ㄱ-ㅎ|ㅏ-ㅣ|가-힣\s]*/i)[0];
var regExp = /[^a-z]*/;
temp = temp.match(regExp)[0];
var regExp = /[^a-z]*/;
temp = temp.match(regExp)[0];
this.$refs.formRef.lazyValue = temp;
const dt = {
columnName : n,
value : this.newValue(this.$refs.formRef.lazyValue)
columnName: n,
value: this.newValue(this.$refs.formRef.lazyValue)
};
this.$emit('gridEditingFinish', dt);
},
keydownEvent($event){
keydownEvent($event) {
},
keyupEvent($event){
keyupEvent($event) {
},
newValue(value) {
let returnVal = value.trim();

View File

@ -1,35 +1,31 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col
v-if="item.label"
cols="4"
:style="item.padding ? 'padding-left:10px' : ''"
>
<v-row class="search-box" align="center">
<v-col v-if="item.label" :cols="item.label ? (item.textCols ? item.textCols : 4) : ''"
:style="item.padding ? 'padding-left:10px' : ''" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
v-if="item.iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ item.label }}
</label>
</v-col>
<v-col :cols="item.label ? (item.textCols ? item.textCols : 7) : ''">
<v-select
v-model="selectValue"
:items="typeof item.list != 'string' ? item.list : myListData"
<v-col :cols="item.label ? (item.textCols ? item.textCols : 8) : ''" class="py-0">
<v-select v-model="selectValue" :items="typeof item.list != 'string' ? item.list : myListData"
:item-text="typeof item.list != 'string' ? 'text' : item.itemText"
:item-value="typeof item.list != 'string' ? 'value' : item.itemValue"
outlined
:hide-details="true"
append-icon="mdi-chevron-down"
class="v-select__custom"
:disabled="item.disabled || false"
:readonly="item.readonly || false"
:required="item.required || false"
@change="modifyValue($event, item.valueNm)"
></v-select>
: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"
:required="item.required || false" @change="modifyValue($event, item.valueNm)" append-icon="">
<template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoChevronDown</v-icon>
</template>
</v-select>
</v-col>
</v-row>
</template>
@ -60,21 +56,25 @@ export default {
computed: {
...mapState({
myListData(state) {
let list = [...state.pageData[this.parentPrgmId][this.item.list]];
list.forEach((item, idx) => {
if (item.commCdNm && item.commCdNm == '전체') {
list.splice(idx, 1);
}
if (this.item.addNull && idx == 0) {
list.unshift({
commCd: '',
commCdNm: '',
commCdAbbrnm: '',
commGrpCd: 'EM_ECC_KIND',
});
}
});
return list;
try{
let list = [...state.pageData[this.parentPrgmId][this.item.list]];
list.forEach((item, idx) => {
if (item.commCdNm && item.commCdNm == '전체') {
list.splice(idx, 1);
}
if (this.item.addNull && idx == 0) {
list.unshift({
commCd: '',
commCdNm: '',
commCdAbbrnm: '',
commGrpCd: 'EM_ECC_KIND',
});
}
});
return list;
}catch(err) {
return [];
}
},
myBindingData(state) {
if (!this.bindingData) {
@ -110,7 +110,7 @@ export default {
},
},
},
created() {},
created() { },
methods: {
...mapMutations({ setGridDataEdit: 'setGridDataEdit' }),
modifyValue(v, n) {

View File

@ -4,13 +4,13 @@
v-if="item.label"
:cols="item.cols == 12 ? 2 : 4"
:style="item.padding ? 'padding-left:10px' : ''"
class="py-0"
>
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ item.label }}
<span v-if="item.essential">*</span>
@ -41,6 +41,7 @@
:required="item.required || false"
:maxlength="item.maxlength"
@input="modifyValue($event, item.valueNm)"
outlined
></v-textarea>
</v-col>
<v-col v-if="item.lengthCheckFlag" :cols="1" text-align="center">

View File

@ -1,9 +1,12 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-row class="search-box" align="end" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
@ -12,6 +15,7 @@
<v-text-field
v-model="InputValue"
class="v-input__custom"
:class="customClass"
:disabled="disabled"
:readonly="readonly"
outlined
@ -21,6 +25,9 @@
@keyup="keyupEvent"
:placeholder="placeholder"
></v-text-field>
<!-- <a-input v-model:value="InputValue" class="v-input__custom" :disabled="disabled" :readonly="readonly"
:placeholder="placeholder" @pressEnter="search" @keydown="keydownEvent" @keyup="keyupEvent" :size="size" /> -->
</v-col>
</v-row>
</template>
@ -58,12 +65,12 @@ export default {
labelCols: {
type: Number,
require: false,
default: 4,
default: 12,
},
textCols: {
type: Number,
require: false,
default: 7,
default: 12,
},
searchOption: {
type: Boolean,
@ -74,19 +81,28 @@ export default {
require: false,
default: false,
},
iconShow:{
type:Boolean,
require:false,
default:true
iconShow: {
type: Boolean,
require: false,
default: true
},
replaceList:{
type:Array,
require:false,
default:null
replaceList: {
type: Array,
require: false,
default: null
},
placeholder:{
type:String,
require:false
placeholder: {
type: String,
require: false
},
size: {
type: String,
require: false,
default: "middle",
},
customClass: {
type: String,
require: false,
}
},
data() {
@ -103,8 +119,8 @@ export default {
},
set(value) {
if (!this.diffModel) {
if(this.replaceList){
for(var i=0; i<this.replaceList; i++){
if (this.replaceList) {
for (var i = 0; i < this.replaceList; i++) {
value.replaceAll(this.replaceList[i]);
}
}
@ -113,7 +129,7 @@ export default {
},
},
},
created() {},
created() { },
methods: {
...mapMutations({ setPageData: 'setPageData' }),
search() {
@ -121,11 +137,11 @@ export default {
this.setPageData({ isFind: true });
}
},
keydownEvent($event){
keydownEvent($event) {
},
keyupEvent($event){
if(this.replaceList){
for(var i=0; i<this.replaceList.length; i++){
keyupEvent($event) {
if (this.replaceList) {
for (var i = 0; i < this.replaceList.length; i++) {
this.InputValue = this.InputValue.replaceAll(this.replaceList[i], '');
}
}

View File

@ -2,8 +2,11 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" x-small :color="required ? '#fb8200' : 'primary'" class="mr-1"
>mdi-record-circle</v-icon
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>

View File

@ -1,6 +1,6 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="item.label" :cols="item.cols == 12 ? 2 : 4">
<v-col v-if="item.label" :cols="item.labelCols !== undefined ? item.labelCols : item.cols == 12 ? 2 : 4">
<label for="" class="search-box-label">
<v-icon
x-small
@ -28,10 +28,14 @@
></v-text-field>
</template>
<template v-else>
<v-btn :ripple="false" @click="dialog = !dialog">
<!-- <v-icon>mdi-content-save</v-icon> -->
<!-- <v-icon>mdi-content-save</v-icon> -->
<!-- <v-btn :ripple="false" @click="dialog = !dialog">
<span>비밀번호 {{ isPassword }}</span>
</v-btn>
</v-btn> -->
<a-button :ripple="false" @click="dialog = !dialog" class="ant-btn-outlined">
<!-- <v-icon>mdi-content-save</v-icon> -->
비밀번호 {{ isPassword }}
</a-button>
</template>
</v-col>
@ -48,7 +52,7 @@
</label>
<v-text-field
v-model.trim="firstPswd"
class="v-input__custom"
class="v-input-popup__custom"
type="password"
:readonly="!isFocused"
@focus="isFocused = true"
@ -61,7 +65,7 @@
</label>
<v-text-field
v-model.trim="secondPswd"
class="v-input__custom"
class="v-input-popup__custom"
type="password"
:readonly="!isFocused"
@focus="isFocused = true"
@ -72,8 +76,15 @@
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" dark @click="setUpdate()">확인</v-btn>
<v-btn color="primary" dark @click="close()">닫기</v-btn>
<!-- <v-btn color="primary" dark @click="setUpdate()">확인</v-btn> -->
<div>
<a-button @click="close()" class="btn-default">삭제</a-button>
<a-button type="primary" @click="setUpdate()" class="v-btn-add-text">
확인
</a-button>
</div>
<!-- <v-btn color="primary" dark @click="close()">닫기</v-btn> -->
</v-card-actions>
</v-card>
</v-dialog>
@ -135,8 +146,10 @@ export default {
} else {
return '';
}
console.log(value)
},
set(value) {
console.log(value)
return value;
},
},

View File

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

View File

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

View File

@ -1,119 +1,90 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="option.labelCols">
<v-row class="search-box" align="center">
<v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="item.iconShow" small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ option.labelContent }}
</label>
</v-col>
<v-col :cols="option.textCols">
<v-text-field
:readonly="item.readonly || false"
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="item.required || false"
:disabled="item.disabled || false"
></v-text-field>
</v-col>
<v-col :cols="option.textCols" class="py-0">
<v-text-field :readonly="item.readonly || false" v-model="selectValue" append-icon=""
class="v-input__custom" @click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true"
:required="item.required || false" :disabled="item.disabled || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
<v-dialog v-model="dialog" scrollable width="540px">
</template></v-text-field>
</v-col>
<v-dialog v-model="dialog" scrollable width="800px">
<v-card style="height: 100%">
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="12">
<component
:is="'SelectBox'"
ref="SelectBox1"
:labelCols="2"
:textCols="6"
:disabled="option.eqpmGrpDisableFlag"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비그룹'"
@update:propsValue="selectValue01 = $event"
:readonly="
item.selectBoxReadonly != undefined
? item.selectBoxReadonly
: false
"
/>
<div class="px-6 py-4 pt-0">
<v-row align="center">
<v-col :cols="5">
<component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12"
:disabled="option.eqpmGrpDisableFlag" :propsValue="selectValue01" :iconShow="true"
:itemList="selectValueList01" :label="'설비그룹'"
@update:propsValue="selectValue01 = $event" :readonly="item.selectBoxReadonly != undefined
? item.selectBoxReadonly
: false
" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="2">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
물리량명
</label>
</v-col>
<v-col :cols="6">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="search"
></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="4" class="text-right">
<v-btn :ripple="false" @click="search()">
조회
</v-btn>
<!-- <v-btn :ripple="false" @click="initSearch()">
<v-col :cols="7">
<v-row align="center" no-gutters>
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon>
물리량명
</label>
</v-col>
<v-col :cols="9">
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true"
v-model="searchWord" @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col :cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()"
class="search-button">조회</a-button>
<!-- <v-btn :ripple="false" @click="initSearch()">
초기화
</v-btn> -->
</v-col>
</v-row>
</v-col>
<v-col :cols="12">
<div style="height: 50vh;">
<div ref="modalGridParent" class="h100 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.pyscModalData.egrpPysclQtyPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<div :style="'height: 429px;'">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 w100">
<component
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="grid_01"
:dataPath="searchParam.pyscModalData.egrpPysclQtyPop"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
@dblClick="setUpdate($event)"
/>
<!-- <div style="height: 50vh;">
<div ref="modalGridParent" class="h100 px-6 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.pyscModalData.egrpPysclQtyPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<v-btn
v-if="item.closeBtnFg || false"
:ripple="false"
@click="deleteBtnAction($event)"
>삭제</v-btn
>
</div> -->
<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 v-if="item.closeBtnFg || false" :ripple="false" type="danger" ghost danger
@click="deleteBtnAction($event)" class="mr-2">삭제</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -165,7 +136,7 @@ export default {
type: String,
require: false,
},
eqpmGrpDisableFlag:{
eqpmGrpDisableFlag: {
type: Boolean,
require: false,
default: false
@ -300,7 +271,7 @@ export default {
await this.setSelectValueList01();
this.init();
},
mounted() {},
mounted() { },
methods: {
...mapMutations({
setPageData: 'setPageData',
@ -344,8 +315,8 @@ export default {
this.item.eqpmGrpId != undefined
? this.item.eqpmGrpId
: this.searchParam.eqpmGrpId != undefined
? this.searchParam.eqpmGrpId
: this.selectValueList01[0].value;
? this.searchParam.eqpmGrpId
: this.selectValueList01[0].value;
} else {
this.selectValueList01 = [];
this.selectValue01 = null;
@ -359,6 +330,7 @@ export default {
this.getGridData();
},
gridInit() {
// const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const myOptions = {
columnOptions: {
resizable: true,
@ -562,33 +534,12 @@ var egrpPysclQtyPop = {
}
}
.tui-grid-cell.tui-grid-cell-has-tree
.tui-grid-tree-extra-content
+ .tui-grid-cell-content:before {
.tui-grid-cell.tui-grid-cell-has-tree .tui-grid-tree-extra-content+.tui-grid-cell-content:before {
content: none !important;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
.ant-btn-icon-only {
border: none;
}
}
</style>

View File

@ -1,8 +1,8 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<!-- <v-col v-if="label" cols="2"> -->
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-col v-if="label" :cols="item.labelCols">
<!-- <label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
@ -10,9 +10,14 @@
>mdi-record-circle</v-icon
>
{{ item.label }}
</label> -->
<label for="" class="search-box-label">
<v-icon v-if="item.iconShow" small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ item.label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-col :cols="label ? item.textCols : ''">
<!-- <v-col :cols="label ? 9 : ''"> -->
<!-- :value="textfield" -->
<v-text-field
@ -644,8 +649,7 @@ const myColumns = [
// 전력량 요금(원/kWh)
</script>
<style lang="scss">
// @import '@/assets/scss/common.scss';
<style lang="scss" scoped>
@import '@/assets/scss/var.scss';
@each $theme in dark, light {
.v-application.#{$theme}-mode {

View File

@ -1,5 +1,5 @@
<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="2"> -->
<!-- <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
@ -27,18 +27,15 @@
</v-col> -->
<!-- <v-row justify="center"> -->
<v-dialog
ref="popModal"
v-model="dialog"
width="1400"
overlay-color="#000"
overlay-opacity="0.8"
scrollable
>
<v-dialog ref="popModal" v-model="dialog" width="1200" overlay-color="#000" overlay-opacity="0.8" scrollable>
<!-- <template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">공정/설비</v-btn>
</template> -->
<v-card style="height: 100%">
<v-card-title class="px-5 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">가이드 알람이력</span>
<a-button icon="close" type="text" @click="closePop()"></a-button>
</v-card-title>
<!-- <v-card-title
class="v-card__title d-flex align-center justify-space-between"
>
@ -50,105 +47,66 @@
<!-- <v-card-actions> -->
<div class="pa-5">
<!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-row align="center" no-gutters>
<v-col :cols="4">
<div class="d-flex align-center justify-space-between pb-5">
<v-card-title class="pa-0">가이드 알람이력</v-card-title>
</div>
</v-col>
<v-col :cols="8" class="text-right">
<v-btn icon tile :ripple="false" @click="closePop()">
<v-icon>mdi-close</v-icon>
</v-btn>
</v-col>
</v-row>
<!-- <v-row align="center" no-gutters>
<v-col :cols="4">
<div class="d-flex align-center justify-space-between pb-5">
<v-card-title class="pa-0">가이드 알람이력</v-card-title>
</div>
</v-col>
<v-col :cols="8" class="text-right">
<v-btn icon tile :ripple="false" @click="closePop()">
<v-icon>mdi-close</v-icon>
</v-btn>
</v-col>
</v-row> -->
<v-row align="center" no-gutters>
<v-col :cols="1">
<label for="" class="search-box-label">
<v-icon
x-small
:color="'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
설비
</label>
</v-col>
<v-col :cols="2">
<v-text-field
v-if="dialog"
v-model="InputValue['eqpmId']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
</v-text-field>
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
설비
</label>
</v-col>
<v-col :cols="3">
<v-text-field
v-if="dialog"
v-model="InputValue['eqpmNm']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
</v-text-field>
<v-col :cols="6" class="pr-2 py-0">
<v-text-field v-if="dialog" v-model="InputValue['eqpmId']" class="v-input__custom"
:readonly="true" outlined :hide-details="true">
</v-text-field>
</v-col>
<v-col :cols="6">
<v-col :cols="6" class="pl-2 py-0">
<v-text-field v-if="dialog" v-model="InputValue['eqpmNm']" class="v-input__custom"
:readonly="true" outlined :hide-details="true">
</v-text-field>
</v-col>
<v-col :cols="1">
<label for="" class="search-box-label">
<v-icon
x-small
:color="'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
가이드지표
</label>
</v-col>
<v-col :cols="2">
<v-text-field
v-if="dialog"
v-model="InputValue['gdIdxId']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
</v-text-field>
</v-row>
<v-row align="center" no-gutters class="mt-4">
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
가이드지표
</label>
</v-col>
<v-col :cols="3">
<v-text-field
v-if="dialog"
v-model="InputValue['gdIdxNm']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
</v-text-field>
<v-col :cols="6" class="pr-2 py-0">
<v-text-field v-if="dialog" v-model="InputValue['gdIdxId']" class="v-input__custom"
:readonly="true" outlined :hide-details="true">
</v-text-field>
</v-col>
<v-col :cols="6" class="pl-2 py-0">
<v-text-field v-if="dialog" v-model="InputValue['gdIdxNm']" class="v-input__custom"
:readonly="true" outlined :hide-details="true">
</v-text-field>
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<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="py-0 px-2 custom-title-4">설비 가이드 정보</v-card-title>
</div>
<div class="px-5" style="height:calc(100% - 76px)">
<div ref="modalGridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid? 'Grid' : null"
:dataPath="searchParam.modalData.eqpmDetlPop"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
/>
</div>
</div>
<!-- <div id="gridParent" ref="gridParent" style="height: 500px">
<div class="px-5" style="height:calc(100% - 76px)">
<div ref="modalGridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null"
:dataPath="searchParam.modalData.eqpmDetlPop" :gridName="gridName"
:parentPrgmId="parentPrgmId" />
</div>
</div>
<!-- <div id="gridParent" ref="gridParent" style="height: 500px">
<component
:ref="'gridName' + parentPrgmId"
:is="loadGrid && dialog ? 'Grid' : null"
@ -160,11 +118,10 @@
@dblClick="setUpdate()"
/>
</div> -->
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" dark @click="closePop()">확인</v-btn>
<a-button color="primary" type="primary" @click="closePop()">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -223,19 +180,19 @@ export default {
components: {
Grid,
selectCodeList,
dateUtility,
dateUtility,
InputText
// Tree
},
data() {
return {
labelPrepend: true,
modalDataKey:'modalData',
modalDataKey: 'modalData',
myModalKey: 'eqpmDetlPop',
gridName: 'eqpmDetlGrid',
loadGrid: false,
setGrid:false,
popCheck:false,
loadGrid: false,
setGrid: false,
popCheck: false,
dialog: false,
activeRowData: {},
checkedRowDataList: [],
@ -258,32 +215,32 @@ export default {
}
},
}),
InputValue: {
InputValue: {
get() {
return this.myBindingData;
}
},
chkDialog(){
chkDialog() {
return this.dialog
},
},
watch: {
async chkDialog(val){
if(!val){
this.closePop();
}else{
// await this.getRowGridData();
}
async chkDialog(val) {
if (!val) {
this.closePop();
} else {
// await this.getRowGridData();
}
},
async popCheck(val){
if(val){
await this.getRowGridData();
this.dialog= true;
}else{
this.dialog=false;
}
}
async popCheck(val) {
if (val) {
await this.getRowGridData();
this.dialog = true;
} else {
this.dialog = false;
}
}
},
beforeCreate() {
@ -297,7 +254,7 @@ export default {
methods: {
...mapMutations({
setPageData: 'setPageData',
setModalGridData: 'setModalGridData',
setModalGridData: 'setModalGridData',
setModalGridColumn: 'setModalGridColumn',
setModalGridOption: 'setModalGridOption',
}),
@ -306,28 +263,32 @@ export default {
}),
init() {
this.gridInit();
this.gridInit();
},
closePop(){
this.popCheck= false;
closePop() {
this.popCheck = false;
},
search() {
// this.getData();
},
gridInit(){
// const gridHeight = this.$refs.gridParent.offsetHeight - 30;
gridInit() {
// const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const myOptions = {
rowHeaders: ['rowNum'],
columnOptions: {
resizable: true,
minWidth:100
},
setScroll: true,
};
const myOptions = {
rowHeaders: ['rowNum'],
columnOptions: {
resizable: true,
minWidth: 100
},
// setScroll: true,
header: {
height: 37,
},
rowHeight: 'auto',
};
this.setModalGridOption({
this.setModalGridOption({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
@ -338,55 +299,55 @@ export default {
),
});
const myColumns= [
{
header : '발생일',
name : 'totDttmDay',
align:'center'
},
{
header : '발생시간대',
name : 'totDttmTime',
align:'center'
},
{
header : '가이드지표명',
minWidth:200,
name : 'gdIdxNm',
},
{
header : '주의',
width:100,
name : 'careStndVal',
align:'center'
},
{
header : '경고',
width:100,
name : 'warnStndVal',
align:'center'
},
{
header : '가이드값',
width:100,
name : 'totVal',
align:'center'
},
{
header : '알람내용',
minWidth:300,
width:'auto',
name : 'alrmMsg',
},
{
header : '알람종류',
name : 'alrmKind',
hidden:true
},
const myColumns = [
{
header: '발생일',
name: 'totDttmDay',
align: 'center'
},
{
header: '발생시간대',
name: 'totDttmTime',
align: 'center'
},
{
header: '가이드지표명',
minWidth: 200,
name: 'gdIdxNm',
},
{
header: '주의',
width: 100,
name: 'careStndVal',
align: 'center'
},
{
header: '경고',
width: 100,
name: 'warnStndVal',
align: 'center'
},
{
header: '가이드값',
width: 100,
name: 'totVal',
align: 'center'
},
{
header: '알람내용',
minWidth: 300,
width: 'auto',
name: 'alrmMsg',
},
{
header: '알람종류',
name: 'alrmKind',
hidden: true
},
]
]
this.setModalGridColumn({
this.setModalGridColumn({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
@ -394,59 +355,57 @@ export default {
});
// this.getRowGridData();
},
async getRowGridData(){
this.loadGrid =false;
var res = await this.postApiReturn({
this.getRowGridData();
},
async getRowGridData() {
this.loadGrid = false;
var res = await this.postApiReturn({
apiKey: 'selectEqpmDetailPop',
resKey: 'eqpmDetlPopData',
sendParam: {
gdIdxId : this.myBindingData.gdIdxId,
eqpmId : this.myBindingData.eqpmId,
fromDt : this.myBindingData.fromDt,
toDt : this.myBindingData.toDt
gdIdxId: this.myBindingData.gdIdxId,
eqpmId: this.myBindingData.eqpmId,
fromDt: this.myBindingData.fromDt,
toDt: this.myBindingData.toDt
},
});
const dayjs = require('dayjs');
var newRes = res.map(item=>
item = {
...item,
totDttmDay : Utility.setFormatDate(item.totDttm, 'YYYY-MM-DD'),
totDttmTime : Utility.setFormatDate(item.totDttm, 'HH') + "~" + dayjs(item.totDttm).add(1,'h').format('HH'),
}
);
const dayjs = require('dayjs');
var newRes = res.map(item =>
item = {
...item,
totDttmDay: Utility.setFormatDate(item.totDttm, 'YYYY-MM-DD'),
totDttmTime: Utility.setFormatDate(item.totDttm, 'HH') + "~" + dayjs(item.totDttm).add(1, 'h').format('HH'),
}
);
this.setModalGridData({
this.setModalGridData({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
value: newRes,
});
this.loadGrid=true;
this.setGrid = true;
}
this.loadGrid = true;
this.setGrid = true;
}
},
};
var eqpmDetlPop ={
eqpmDetlGrid:{
data:[],
column:[],
option:{}
}
var eqpmDetlPop = {
eqpmDetlGrid: {
data: [],
column: [],
option: {}
}
}
// 전력량 요금(원/kWh)
</script>
<style lang="scss">
<style lang="scss" scoped>
// @import '@/assets/scss/common/grid.scss';
.tui-grid-scrollbar-left-bottom {
display: none !important;
display: none !important;
}
</style>

View File

@ -0,0 +1,115 @@
<template>
<div>
<!-- Detail Modal -->
<a-modal v-model="showDetailModal" title="가이드 알람이력" width="1200px" :footer="null"
:style="{ borderRadius: '8px', overflow: 'hidden' }" :bodyStyle="{ paddingTop: '0px' }">
<!-- Top Input Fields -->
<a-row :gutter="8" align="middle" style="margin-bottom: 16px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">설비</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="설비명" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
<a-col :span="12">
<a-input value="가이드지표" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 16px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">가이드지표</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="설비명" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
<a-col :span="12">
<a-input value="가이드지표" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-divider />
<!-- Table -->
<h3 style=" margin-bottom: 16px">설비 가이드 정보</h3>
<a-table :columns="modalTableColumns" :dataSource="modalTableData" rowKey="No" size="small" bordered
:pagination="false" />
<!-- Footer Buttons -->
<div style="text-align: right; margin-top: 16px;">
<a-button @click="showDetailModal = false">닫기</a-button>
<a-button type="primary" style="margin-left: 8px; color:#fff" @click="confirmModal">확인</a-button>
</div>
</a-modal>
</div>
</template>
<script>
export default {
data() {
return {
showDetailModal: false,
selectedRecord: null,
modalTableColumns: [
{ title: 'No.', dataIndex: 'No', key: 'No', align: 'center' },
{ title: '발생일', dataIndex: '발생일', key: '발생일' },
{ title: '발생시간대', dataIndex: '발생시간대', key: '발생시간대' },
{ title: '가이드지표명', dataIndex: '가이드지표명', key: '가이드지표명' },
{ title: '주의', dataIndex: '주의', key: '주의' },
{ title: '경고', dataIndex: '경고', key: '경고' },
{ title: '가이드값', dataIndex: '가이드값', key: '가이드값' },
{ title: '알랑내용', dataIndex: '알랑내용', key: '알랑내용' },
],
modalTableData: [
{
No: 1,
발생일: '2025-06-01',
발생시간대: '02-03',
가이드지표명: '냉수 출구 온도 평균 편차',
주의: 3,
경고: 2,
가이드값: -1.23,
알랑내용: '[심각]냉수3과 온도차가 7.72°C로 낮음(평균 15.44*C 대비 7.72°C 낮음) - UT_HT_CH1C',
},
{
No: 2,
발생일: '2025-06-02',
발생시간대: '02-03',
가이드지표명: '냉수 출구 온도 평균 편차',
주의: 2,
경고: 1,
가이드값: -1.45,
},
],
};
},
methods: {
handleNgCntClick(record) {
this.selectedRecord = record;
this.showDetailModal = true;
},
confirmModal() {
this.showDetailModal = false;
},
},
};
</script>
<style>
.ant-modal-header {
border-bottom: none;
border-radius: 8px 8px 0 0;
}
.ant-modal-content {
border-radius: 8px;
}
.ant-modal-title,
h3 {
font-weight: 600
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<v-row class="search-box" align="center" no-gutters >
<!-- <v-col v-if="label" cols="2"> -->
<!-- <v-col v-if="label" :cols="labelCols">
<v-row class="search-box" align="center" no-gutters>
<!-- <v-col v-if="label" cols="2"> -->
<!-- <v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon
x-small
@ -12,7 +12,7 @@
{{ item.label }}
</label>
</v-col> -->
<!-- <v-col :cols="label ? textCols : ''">
<!-- <v-col :cols="label ? textCols : ''">
<v-text-field
readonly
v-model="selectValue"
@ -26,20 +26,13 @@
></v-text-field>
</v-col> -->
<!-- <v-row justify="center"> -->
<v-dialog
ref="popModal"
v-model="dialog"
width="1400"
overlay-color="#000"
overlay-opacity="0.8"
scrollable
>
<!-- <template v-slot:activator="{ on, attrs }">
<!-- <v-row justify="center"> -->
<v-dialog ref="popModal" v-model="dialog" width="800" overlay-color="#000" overlay-opacity="0.8" scrollable>
<!-- <template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">공정/설비</v-btn>
</template> -->
<v-card style="height: 100%">
<!-- <v-card-title
<v-card style="height: 100%">
<!-- <v-card-title
class="v-card__title d-flex align-center justify-space-between"
>
<span class="custom-title-4">{{ '' }}</span>
@ -47,10 +40,13 @@
<v-icon>mdi-close</v-icon>
</v-btn>
</v-card-title> -->
<!-- <v-card-actions> -->
<div class="pa-5">
<!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-row align="center" no-gutters>
<!-- <v-card-actions> -->
<!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<span class="custom-title-4">가이드 정보</span>
<a-button icon="close" type="text" @click="closePop()"></a-button>
</v-card-title>
<!-- <v-row align="center" no-gutters>
<v-col :cols="4">
<div class="d-flex align-center justify-space-between pb-5">
<v-card-title class="pa-0">가이드 정보</v-card-title>
@ -61,208 +57,92 @@
<v-icon>mdi-close</v-icon>
</v-btn>
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="2">
</v-row> -->
<div class="px-5 pb-3">
<v-row align="center" no-gutters>
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon
x-small
:color="'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
가이드지표
</label>
</v-col>
<v-col :cols="3">
<v-text-field
v-if="dialog"
v-model="InputValue['gdIdxId']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
<v-col :cols="6" class="pr-2">
<v-text-field v-if="dialog" v-model="InputValue['gdIdxId']" class="v-input__custom" :readonly="true"
outlined :hide-details="true">
</v-text-field>
</v-col>
<v-col :cols="3">
<v-text-field
v-if="dialog"
v-model="InputValue['gdIdxNm']"
class="v-input__custom"
:readonly="true"
outlined
:hide-details="true"
>
</v-col>
<v-col :cols="6" class="pl-2">
<v-text-field v-if="dialog" v-model="InputValue['gdIdxNm']" class="v-input__custom" :readonly="true"
outlined :hide-details="true">
</v-text-field>
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">가이드 정보</v-card-title>
</div>
<div class="px-5">
<v-row>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="계산코드"
valueNm="calcProc"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
</v-col>
</v-row>
<v-divider class="mt-5 mb-2"></v-divider>
</div>
<div class="px-5 pb-4">
<v-row align="center">
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="계산코드" valueNm="calcProc"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6">
</v-col>
<v-col :cols="12" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="계산설명"
valueNm="calcDesc"
:iconShow="true"
:labelCols="2"
:textCols="9"
:readonly="true"
/>
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="계산설명" valueNm="calcDesc"
:iconShow="true" :labelCols="12" :textCols="12" :readonly="true" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="물리량1"
valueNm="pysclQtyId1"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="물리량1" valueNm="pysclQtyId1"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="물리량2"
valueNm="pysclQtyId2"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pl-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="물리량2" valueNm="pysclQtyId2"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="물리량3"
valueNm="pysclQtyId3"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="물리량3" valueNm="pysclQtyId3"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="물리량4"
valueNm="pysclQtyId4"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pl-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="물리량4" valueNm="pysclQtyId4"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="카테고리1"
valueNm="ctgr1"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="카테고리1" valueNm="ctgr1"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="카테고리2"
valueNm="ctgr2"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pl-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="카테고리2" valueNm="ctgr2"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="주의기준값"
valueNm="careStndVal"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="주의기준값" valueNm="careStndVal"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="6">
</v-col>
<v-col :cols="6" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="경고기준값"
valueNm="warnStndVal"
:iconShow="true"
:readonly="true"
:labelCols="4"
:textCols="6"
/>
<v-col :cols="6" class="py-2 pr-2">
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="경고기준값" valueNm="warnStndVal"
:iconShow="true" :readonly="true" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="12" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="알람메세지"
valueNm="alrmMsg"
:iconShow="true"
:labelCols="2"
:textCols="9"
:readonly="true"
/>
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="알람메세지" valueNm="alrmMsg"
:iconShow="true" :labelCols="12" :textCols="12" :readonly="true" />
</v-col>
<v-col :cols="12" class="py-2">
<InputText
id="gdIdx_InputText"
:parentPrgmId="parentPrgmId"
label="가이드방법"
valueNm="gdMeth"
:iconShow="true"
:labelCols="2"
:textCols="9"
:readonly="true"
/>
<InputText id="gdIdx_InputText" :parentPrgmId="parentPrgmId" label="가이드방법" valueNm="gdMeth"
:iconShow="true" :labelCols="12" :textCols="12" :readonly="true" />
</v-col>
</v-row>
</div>
<div style="height:20px;"></div>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" dark @click="closePop()">확인</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
<v-card-actions>
<v-spacer></v-spacer>
<a-button color="primary" type="primary" @click="closePop()">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</template>
<script>
@ -274,175 +154,175 @@ import InputText from '~/components/common/input/InputText';
import dateUtility from '~/plugins/dateUtility';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
default: '비교대상 최대(20개)',
},
label: {
type: String,
require: false,
default: '전력 계약 정보',
},
valueNm: {
type: String,
require: false,
default: '',
},
title: {
type: String,
require: false,
default: '전력 계약 목록',
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
item: {
type: Object,
require: true,
},
bindingData: {
type: String,
require: false,
}
},
components: {
Grid,
selectCodeList,
props: {
parentPrgmId: {
type: String,
require: true,
default: '비교대상 최대(20개)',
},
label: {
type: String,
require: false,
default: '전력 계약 정보',
},
valueNm: {
type: String,
require: false,
default: '',
},
title: {
type: String,
require: false,
default: '전력 계약 목록',
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
item: {
type: Object,
require: true,
},
bindingData: {
type: String,
require: false,
}
},
components: {
Grid,
selectCodeList,
dateUtility,
InputText
// Tree
},
data() {
return {
labelPrepend: true,
modalDataKey:'modalData2',
myModalKey: 'gdIdxDetPop',
gridName: 'gdIdxDetPop',
loadGrid: false,
setGrid:false,
popCheck:false,
dialog: false,
activeRowData: {},
checkedRowDataList: [],
};
},
computed: {
...mapState({
// searchParam: state => state.pageData,
searchParam(state) {
return state.pageData[this.parentPrgmId];
},
myBindingData(state) {
//return state.pageData[this.parentPrgmId]["rowGridSelectData"];
if (!this.bindingData) {
return state.pageData[this.parentPrgmId]['rowGridSelectData'];
} else {
return state.pageData[this.parentPrgmId][this.bindingData][
'rowGridSelectData'
];
}
},
}),
InputText
// Tree
},
data() {
return {
labelPrepend: true,
modalDataKey: 'modalData2',
myModalKey: 'gdIdxDetPop',
gridName: 'gdIdxDetPop',
loadGrid: false,
setGrid: false,
popCheck: false,
dialog: false,
activeRowData: {},
checkedRowDataList: [],
};
},
computed: {
...mapState({
// searchParam: state => state.pageData,
searchParam(state) {
return state.pageData[this.parentPrgmId];
},
myBindingData(state) {
//return state.pageData[this.parentPrgmId]["rowGridSelectData"];
if (!this.bindingData) {
return state.pageData[this.parentPrgmId]['rowGridSelectData'];
} else {
return state.pageData[this.parentPrgmId][this.bindingData][
'rowGridSelectData'
];
}
},
}),
InputValue: {
get() {
return this.myBindingData;
}
},
chkDialog(){
return this.dialog
},
},
watch: {
async chkDialog(val){
if(!val){
this.closePop();
}else{
// await this.getRowGridData();
get() {
return this.myBindingData;
}
},
async popCheck(val){
if(val){
},
chkDialog() {
return this.dialog
},
},
watch: {
async chkDialog(val) {
if (!val) {
this.closePop();
} else {
// await this.getRowGridData();
}
},
async popCheck(val) {
if (val) {
await this.getData();
this.dialog= true;
}else{
this.dialog=false;
this.dialog = true;
} else {
this.dialog = false;
}
}
},
beforeCreate() {
this.$store.commit('setPageData', {
modalData2: { gdIdxDetPop },
});
},
created() {
},
mounted(){
},
beforeCreate() {
this.$store.commit('setPageData', {
modalData2: { gdIdxDetPop },
});
},
created() {
},
mounted() {
this.init();
},
methods: {
...mapMutations({
setPageData: 'setPageData',
methods: {
...mapMutations({
setPageData: 'setPageData',
setModalGridData: 'setModalGridData',
setModalGridColumn: 'setModalGridColumn',
setModalGridOption: 'setModalGridOption',
}),
...mapActions({
postApiReturn: 'modules/list/postApiReturn',
}),
init() {
// this.gridInit();
},
closePop(){
this.popCheck= false;
},
search() {
// this.getData();
},
async getData(){
setModalGridColumn: 'setModalGridColumn',
setModalGridOption: 'setModalGridOption',
}),
...mapActions({
postApiReturn: 'modules/list/postApiReturn',
}),
init() {
this.gridInit();
},
closePop() {
this.popCheck = false;
},
search() {
this.getData();
},
async getData() {
var res = await this.postApiReturn({
apiKey: 'selectEnrgEffcGdIdxDetPop',
resKey: 'gdIdxDetPopData',
sendParam: {
gdIdxId : this.myBindingData.gdIdxId,
eqpmId : this.myBindingData.eqpmId,
},
});
apiKey: 'selectEnrgEffcGdIdxDetPop',
resKey: 'gdIdxDetPopData',
sendParam: {
gdIdxId: this.myBindingData.gdIdxId,
eqpmId: this.myBindingData.eqpmId,
},
});
this.setPageData({
calcProc : res[0].calcProc,
calcDesc : res[0].calcDesc,
pysclQtyId1 : res[0].pysclQtyId1Nm,
pysclQtyId2 : res[0].pysclQtyId2Nm,
pysclQtyId3 : res[0].pysclQtyId3Nm,
pysclQtyId4 : res[0].pysclQtyId4Nm,
ctgr1 : res[0].ctgr1,
ctgr2 : res[0].ctgr2,
warnStndVal : res[0].warnStndVal,
careStndVal : res[0].careStndVal,
alrmMsg : res[0].alrmMsg,
gdMeth : res[0].gdMeth
calcProc: res[0].calcProc,
calcDesc: res[0].calcDesc,
pysclQtyId1: res[0].pysclQtyId1Nm,
pysclQtyId2: res[0].pysclQtyId2Nm,
pysclQtyId3: res[0].pysclQtyId3Nm,
pysclQtyId4: res[0].pysclQtyId4Nm,
ctgr1: res[0].ctgr1,
ctgr2: res[0].ctgr2,
warnStndVal: res[0].warnStndVal,
careStndVal: res[0].careStndVal,
alrmMsg: res[0].alrmMsg,
gdMeth: res[0].gdMeth
});
}
},
},
};
var gdIdxDetPop ={
gdIdxDetGrid:{
data:[],
column:[],
option:{}
var gdIdxDetPop = {
gdIdxDetGrid: {
data: [],
column: [],
option: {}
}
}
@ -451,13 +331,14 @@ var gdIdxDetPop ={
<style lang="scss" scoped>
// @import '@/assets/scss/common/grid.scss';
.tui-grid-scrollbar-left-bottom {
display: none !important;
}
#gdIdx_InputText::v-deep .v-input__custom{
margin-left:-60px;
}
.v-input__custom{
margin-left:-60px;
display: none !important;
}
// #gdIdx_InputText::v-deep .v-input__custom {
// margin-left: -60px;
// }
// .v-input__custom {
// margin-left: -60px;
// }
</style>

View File

@ -0,0 +1,220 @@
<template>
<div>
<!-- Detail Modal -->
<a-modal v-model="showDetailModal" title="가이드 정보" width="800px" :footer="null"
:style="{ borderRadius: '8px', overflow: 'hidden' }" :bodyStyle="{ paddingTop: '0px' }">
<!-- Top Input Fields -->
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">가이드지표</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="GD00111" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
<a-col :span="12">
<a-input value="냉각수 온도차 평균 편차" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-divider />
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">계산코드</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="BEF_AVG_DEV_GT" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">계산설명</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="냉각수 온도차" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">물리랑1</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="냉각수 온도차" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">물리랑2</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">물리랑3</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="냉각수 온도차" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">물리랑4</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">카테고리1</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="냉각수 온도차" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-row>
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">카테고리2</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">주의기준간</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="3" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">경고기준값</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="12">
<a-input value="5" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">열람메세지</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="냉각수 온도차가 @V1C로 낮음(청균@AVG 대비 @RSLTC 낮음]-@EOPM" :style="{ borderRadius: '6px', height: '34px' }"
disabled />
</a-col>
</a-row>
<a-row :gutter="8" align="middle" style="margin-bottom: 8px;">
<!-- Label on the left -->
<a-col :span="24" style="text-align: left;">
<div style="line-height: 32px;">가이드방법</div>
</a-col>
<!-- Two inputs on the right -->
<a-col :span="24">
<a-input value="대비 @RSLTC 낮음]-@EOPM" :style="{ borderRadius: '6px', height: '34px' }" disabled />
</a-col>
</a-row>
<!-- Footer Buttons -->
<div style="text-align: right; margin-top: 16px;">
<a-button @click="showDetailModal = false">닫기</a-button>
<a-button type="primary" style="margin-left: 8px; color:#fff" @click="confirmModal">확인</a-button>
</div>
</a-modal>
</div>
</template>
<script>
export default {
data() {
return {
showDetailModal: false,
selectedRecord: null
};
},
methods: {
handleGdIdxNmClick(record) {
this.selectedRecord = record;
this.showDetailModal = true;
},
confirmModal() {
this.showDetailModal = false;
},
},
};
</script>
<style>
.ant-modal-header {
border-bottom: none;
border-radius: 8px 8px 0 0;
}
.ant-modal-content {
border-radius: 8px;
}
.ant-modal-title,
h3 {
font-weight: 600
}
</style>

View File

@ -9,10 +9,15 @@
scrollable
>
<v-card style="height: 100%">
<v-card-title class="pa-5 pb-0 d-flex align-center justify-space-between">
<span class="custom-title-4">사용량 계획</span>
<v-icon @click="closePop()">mdi-close</v-icon>
</v-card-title>
<div class="pa-5">
<!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-row align="center" no-gutters>
<v-col :cols="4">
<v-col :cols="4.5">
<InputText
:parentPrgmId="parentPrgmId"
:label="'설비명'"
@ -20,18 +25,43 @@
:readonly="true"
/>
</v-col>
<v-col :cols="2">
</v-row>
<v-row align="end" no-gutters class="mt-4 d-flex justify-center">
<v-col :cols="5.5" class="mr-2">
<component
:is="'SelectBox'"
ref="SelectBox1"
:labelCols='12'
:textCols='12'
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'대상월'"
@update:propsValue="selectValue01 = $event"
/>
</v-col>
<v-col :cols="3">
</v-col>
<v-col :cols="3" class="text-right">
<v-btn icon tile :ripple="false" @click="closePop()">
<v-icon>mdi-close</v-icon>
</v-btn>
<v-col :cols="5.5" class="mr-2">
<component
:is="'SelectBox'"
ref="SelectBox2"
:labelCols='12'
:textCols='12'
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'전년대비절감율'"
@update:propsValue="selectValue02 = $event"
/>
</v-col>
<a-button color="primary" dark @click="search()" icon="clock-circle" >
<!-- <template #icon>
<ClockCircleOutlined />
</template> -->
적용
</a-button>
<!-- <v-col :cols="2" class="text-right">
</v-col> -->
</v-row>
</div>
<v-divider></v-divider>
<!-- <v-divider></v-divider> -->
<!-- <div id="chartParent" ref="chartParent" style="height: 100px"> -->
<div :style="'height: calc(50vh)'">
@ -50,37 +80,8 @@
:ref="chartName"
/>
</div>
<v-divider></v-divider>
<div style="height: 20%; margin: auto; width: 90%; display: flex; align-items: center;">
<v-row align="center" no-gutters class="pa-5 d-flex align-center justify-center;">
<v-col :cols="5">
<component
:is="'SelectBox'"
ref="SelectBox1"
:labelCols='3'
:textCols='6'
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'대상월'"
@update:propsValue="selectValue01 = $event"
/>
</v-col>
<v-col :cols="5">
<component
:is="'SelectBox'"
ref="SelectBox2"
:labelCols='5'
:textCols='6'
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'전년대비절감율'"
@update:propsValue="selectValue02 = $event"
/>
</v-col>
<v-col :cols="2" class="text-right">
<v-btn color="primary" dark @click="search()">적용</v-btn>
</v-col>
</v-row>
<!-- <v-divider></v-divider> -->
<!-- <div style="height: 20%; margin: auto; width: 90%; display: flex; align-items: center;"> -->
<!-- <div style="height: 70%; width:10%; float: left; border: 1px solid blue; background-color: #A2A2A2">
설정
</div>
@ -97,8 +98,6 @@
</v-col>
</v-row>
</div> -->
<!-- <v-row align="center" no-gutters>
<v-row
:cols="12"
@ -115,7 +114,7 @@
<v-btn color="primary" dark @click="setChart()">적용</v-btn>
</v-col>
</v-row> -->
</div>
<!-- </div> -->
</div>
<!-- <div id="gridParent" ref="gridParent" style="height: 500px">
@ -132,9 +131,9 @@
</div> -->
<v-divider></v-divider>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn color="primary" dark @click="setUpdate()">확정</v-btn>
<v-btn color="primary" dark @click="closePop()">취소</v-btn>
<v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button color="primary" type="default" class="mr-2" dark @click="closePop()">취소</a-button>
<a-button color="primary" type="primary" dark @click="setUpdate()">확정</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -196,7 +195,7 @@ export default {
selectCodeList,
InputText,
Chart,
SelectBox
SelectBox,
// Tree
},
data() {
@ -318,6 +317,9 @@ export default {
// });
// }
},
mounted(){
// this.initTest(); return;
},
methods: {
...mapMutations({
setPageData: 'setPageData',
@ -329,6 +331,7 @@ export default {
...mapActions({
postApiReturn: 'modules/list/postApiReturn',
}),
init() {
this.setChart();
},
@ -406,6 +409,74 @@ export default {
this.nowSeriesData = [];
this.nowModalChartData = [];
},
async initTestChart(){
this.loadChart = false;
let xAxisData = [];
let seriesData = [];
let data = [];
let targetMonthList = [];
let _this = this;
const dataItemLine = []; // { gubun: '2PLAN' };
const dataItemBar = []; //{ gubun: '1PLAN' };
const getRanNum = (n) => Math.floor(Math.random()*n + 1);
for(var i=1; i<=12; i++){
let qty = 'qty' + i.toString().padStart(2, '0');
targetMonthList.push(qty);
xAxisData.push(i);
dataItemLine.push(getRanNum(100));
dataItemBar.push(getRanNum(100));
}
data = [
{gubun: '1PLAN'}, {gubun: '2PLAN'},
];
seriesData = data.map(item => ({
name: item.gubun == '2PLAN' ? '계획' : '전년실적',
type: item.gubun == '2PLAN' ? 'line' : 'bar',
data: item.gubun == '2PLAN' ? dataItemLine : dataItemBar
}));
this.nowSeriesData = seriesData;
let option = {
grid: {
top: "3%",
},
xAxis:{
type: 'category',
data: xAxisData
},
yAxis:{
type:'value',
nameLocation : 'middle',
nameGap :45
},
legend: {
icon: 'circle',
},
series: seriesData,
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
}
}
};
await this.$nextTick(() => { });
this.setModalChartOption({
prgmId: this.$route.query.prgmId,
chartKey: this.chartName,
modalId: this.modalId,
modalDataKey: this.modalDataKey,
value: option,
});
this.loadChart = true;
// this.$nextTick(() => {
// })
},
async setChart(){
this.loadChart = false;
let xAxisData = [];

View File

@ -1,115 +1,80 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="option.labelCols">
<v-row class="search-box" align="center">
<v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="item.iconShow" small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ option.labelContent }}
</label>
</v-col>
<v-col :cols="option.textCols">
<v-text-field
readonly
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="item.required || false"
:disabled="item.disabled || false"
></v-text-field>
<v-col :cols="option.textCols" class="py-0">
<v-text-field readonly v-model="selectValue" append-icon="" class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true" :required="item.required || false"
:disabled="item.disabled || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-dialog v-model="dialog" scrollable width="540px">
<v-dialog v-model="dialog" scrollable width="800px">
<v-card style="height: 100%">
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="12">
<component
:is="'SelectBox'"
ref="SelectBox1"
:labelCols="2"
:textCols="6"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비그룹'"
@update:propsValue="selectValue01 = $event"
:readonly="
item.openMode == undefined
? openMode
: item.openMode == 'ALL'
<div class="pa-6 pt-0">
<v-row align="center">
<v-col :cols="5">
<component :is="'SelectBox'" ref="SelectBox1" :labelCols="12" :textCols="12"
:iconShow="true" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'설비그룹'" @update:propsValue="selectValue01 = $event" :readonly="item.openMode == undefined
? openMode
: item.openMode == 'ALL'
? false
: true
"
/>
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="2">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
설비명
</label>
</v-col>
<v-col :cols="6">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="search"
></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="4" class="text-right">
<v-btn :ripple="false" @click="search()">
조회
</v-btn>
<!-- <v-btn :ripple="false" @click="initSearch()">
초기화
</v-btn> -->
" />
</v-col>
<v-col :cols="7">
<v-row align="center" no-gutters>
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon>
물리량명
</label>
</v-col>
<v-col :cols="9"> <v-text-field append-icon="" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template
v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field></v-col>
<v-spacer></v-spacer>
<v-col cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()"
class="search-button">조회</a-button>
</v-col>
</v-row>
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<!-- <div :style="'height: calc(50vh)'"> -->
<div :style="'height: 429px;'">
<div :style="'height: 429px;'">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 py-3">
<component
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="gridName"
<div ref="modalGridParent" class="h100 px-6 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="gridName"
:dataPath="searchParam.modalDataEqpmBaseInfoPop.eqpmBaseInfoPop"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
@dblClick="setUpdate($event)"
/>
:parentPrgmId="parentPrgmId" @getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<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" type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -166,6 +131,11 @@ export default {
require: false,
default: true, // 'ALL'도 있음
},
iconShow: {
type: Boolean,
require: false,
default: true,
},
// bindingFlag:{
// type:Boolean,
// require: false,
@ -181,7 +151,7 @@ export default {
return {
dialog: false,
loadGrid: false,
loadGrid: true,
gridName: 'gridEqpmBaseInfoPop',
myModalKey: 'eqpmBaseInfoPop',
modalDataKey: 'modalDataEqpmBaseInfoPop',
@ -283,7 +253,7 @@ export default {
async created() {
await this.init();
},
mounted() {},
mounted() { },
methods: {
...mapMutations({
setPageData: 'setPageData',
@ -323,6 +293,7 @@ export default {
this.selectValueList01 = [];
this.selectValue01 = null;
}
},
search() {
this.getGridData();
@ -482,33 +453,29 @@ var eqpmBaseInfoPop = {
}
}
.tui-grid-cell.tui-grid-cell-has-tree
.tui-grid-tree-extra-content
+ .tui-grid-cell-content:before {
.tui-grid-cell.tui-grid-cell-has-tree .tui-grid-tree-extra-content+.tui-grid-cell-content:before {
content: none !important;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
// .v-application.#{$theme}-mode {
// .v-dialog {
// .v-card {
// &__title {
// @if $theme ==dark {
// background-color: #2d3355;
// .v-btn {
// background-color: #2d3355;
// }
// }
// }
// }
// }
// }
}
</style>

View File

@ -1,96 +1,74 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="option.labelCols">
<v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
v-if="iconShow"
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ option.labelContent }}
</label>
</v-col>
<v-col :cols="option.textCols">
<v-text-field
:readonly="item.readonly || false"
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="item.required || false"
:disabled="item.disabled || false"
></v-text-field>
</v-col>
<v-text-field :readonly="item.readonly || false" v-model="selectValue" append-icon=""
class="v-input__custom" @click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true"
:required="item.required || false" :disabled="item.disabled || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
<v-dialog v-model="dialog" scrollable width="540px">
</template></v-text-field>
</v-col>
<v-dialog v-model="dialog" scrollable width="800px">
<v-card style="height: 100%">
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="2">
<div class="pa-6 pt-0">
<v-row align="center">
<v-col :cols="12" class="py-0">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
계산설명
<v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon>
계산설명
</label>
</v-col>
<v-col :cols="6">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="search"
></v-text-field>
<v-col :cols="11" class="pr-8 py-0" >
<v-text-field append-icon="" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="4" class="text-right">
<v-btn :ripple="false" @click="search()">
조회
</v-btn>
<v-col cols="1" class="py-0" style="display: flex; justify-content: flex-end;">
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
<!-- <v-btn :ripple="false" @click="initSearch()">
초기화
</v-btn> -->
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<!-- <v-divider></v-divider> -->
<div :style="'height: calc(50vh)'">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 py-3">
<component
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="grid_01"
:dataPath="searchParam.modalData2.eqpmCalcPop"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
@dblClick="setUpdate($event)"
/>
<div ref="modalGridParent" class="h100 px-6 py-4">
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.modalData2.eqpmCalcPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)" class="mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)" >확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</template>
@ -138,10 +116,20 @@ export default {
type: String,
require: false,
},
openMode:{
type:String,
openMode: {
type: String,
require: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
iconShow:{
type:Boolean,
require:false,
}
default:true
},
// bindingFlag:{
// type:Boolean,
// require: false,
@ -156,7 +144,23 @@ export default {
return {
dialog: false,
loadGrid: false,
loadGrid: true,
dataPathPopExample: {
"rowGrid": {
data: [
{
'calcProc': 'AVG_CNT2',
'argCnt': '2',
'calcDesc': '두개 변수에 대한 평균'
}
],
column: [
{ header: '계산코드', name: 'calcProc', width: 150 },
{ header: '아규먼트갯수', name: 'argCnt', align: 'center', width: 100 },
]
}
},
grid_01: 'grid_01',
myModalKey: 'eqpmCalcPop',
modalDataKey: 'modalData2',
@ -247,7 +251,7 @@ export default {
async created() {
this.init();
},
mounted() {},
mounted() { },
methods: {
...mapMutations({
setPageData: 'setPageData',
@ -282,7 +286,7 @@ export default {
modalDataKey: this.modalDataKey,
value: Object.assign(
// Utility.defaultGridOption(this.$refs.modalGridParent.offsetHeight - 60, myOptions),
Utility.defaultGridOption(400, myOptions),
// Utility.defaultGridOption(400, myOptions),
myOptions,
),
});
@ -292,10 +296,9 @@ export default {
gridKey: this.grid_01,
modalDataKey: this.modalDataKey,
value: [
{ header: '계산코드', name: 'calcProc', width: 150},
{ header: '아규먼트갯수', name: 'argCnt', align:'center', width: 100},
// { header: '계산설명', name : 'calcDesc', width: 286},
{ header: '계산설명', name : 'calcDesc', align:'left'},
{ header: '계산코드', name: 'calcProc', width: 150 },
{ header: '아규먼트갯수', name: 'argCnt', align: 'center', width: 100 },
{ header: '계산설명', name: 'calcDesc', align: 'left' },
],
});
},
@ -306,10 +309,10 @@ export default {
resKey: 'eqpmCalcPopData',
sendParam: {
calcDescLike: this.searchWord,
openMode:this.item.openMode != undefined ? this.item.openMode : this.openMode
openMode: this.item.openMode != undefined ? this.item.openMode : this.openMode
},
});
if(this.myBindingData['calcProc']!= '' || this.myBindingData['calcProc']!= null || this.myBindingData['calcProc']!=undefined){
if (this.myBindingData['calcProc'] != '' || this.myBindingData['calcProc'] != null || this.myBindingData['calcProc'] != undefined) {
let newRes = [];
newRes = res.filter(item => {
return item.calcProc != this.myBindingData['calcProc']
@ -317,14 +320,6 @@ export default {
res = newRes;
}
// const res = [
// {
// 'calcProc' : 'AVG_CNT2',
// 'argCnt' : '2',
// 'calcDesc' : '두개 변수에 대한 평균'
// }
// ]
this.setModalGridData({
modalKey: this.myModalKey,
gridKey: this.grid_01,
@ -352,14 +347,14 @@ export default {
value: this.selectedData.calcProc,
};
this.$emit('gridEditingFinish', dt);
this.setPageData({ [this.item.valueNm] : this.selectedData.calcProc});
this.setPageData({ [this.item.valueNm]: this.selectedData.calcProc });
if (this.item.valueNm2 !== undefined) {
const dt = {
columnName: this.item.valueNm2,
value: this.selectedData[this.item.valueNm2],
};
this.$emit('gridEditingFinish', dt);
this.setPageData({[this.item.valueNm2] : this.selectedData.argCnt});
this.setPageData({ [this.item.valueNm2]: this.selectedData.argCnt });
}
if (this.item.bindNm !== undefined) {
const dt = {
@ -367,7 +362,7 @@ export default {
value: this.selectedData.argCnt,
};
this.$emit('gridEditingFinish', dt);
this.setPageData({ [this.item.bindNm] : this.selectedData.argCnt});
this.setPageData({ [this.item.bindNm]: this.selectedData.argCnt });
}
}
},
@ -403,33 +398,10 @@ var eqpmCalcPop = {
}
}
.tui-grid-cell.tui-grid-cell-has-tree
.tui-grid-tree-extra-content
+ .tui-grid-cell-content:before {
.tui-grid-cell.tui-grid-cell-has-tree .tui-grid-tree-extra-content+.tui-grid-cell-content:before {
content: none !important;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
}
</style>

View File

@ -1,123 +1,97 @@
<template>
<v-row class="search-box" align="center" no-gutters >
<v-col :cols="labelCols">
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow"
x-small
:color="required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="iconShow" small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="textCols">
<v-text-field
readonly
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="required || false"
:disabled="disabled || false"
></v-text-field>
<v-text-field readonly append-icon="" :class="['v-input__custom', customClass]"
@click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true" :required="required || false"
:disabled="disabled || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-dialog
ref="popModal"
v-model="dialog"
width="1400"
overlay-color="#000"
overlay-opacity="0.8"
scrollable
>
<v-dialog ref="popModal" v-model="dialog" width="800" overlay-color="#000" overlay-opacity="0.8" scrollable>
<v-card style="height: 100%">
<v-divider></v-divider>
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4"> 설비 선택</v-card-title>
</div>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="3">
<!-- 설비그룹 -->
<component
:is="'SelectBox'"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비그룹'"
:disabled="eqpmGrpDisabled"
@update:propsValue="selectValue01 = $event"
/>
</v-col>
<v-col :cols="6" style="padding:0px 10px;">
<!-- FAB -->
<component
:is="'SelectBoxMulti'"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'FAB'"
:labelCols="2"
:multiple="true"
:disabled="fabDisabled"
@update:propsValue="selectValue02 = $event"
/>
</v-col>
<v-spacer></v-spacer>
<v-col cols="3" class="text-right">
<v-btn :ripple="false" @click="search()">
조회
</v-btn>
<!-- <v-btn :ripple="false" @click="initSearch()">
초기화
</v-btn> -->
</v-col>
</v-row>
<v-row align="center" no-gutters style="margin-top: 14px;">
<v-col :cols="1">
<v-card-title class="px-5 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">설비 선택</span>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title>
<div class="pa-2 pt-0">
<v-card class="searchFilter">
<v-row align="end">
<v-col :cols="3.5">
<!-- 설비그룹 -->
<component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'설비그룹'" :disabled="eqpmGrpDisabled"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:iconShow="true" />
</v-col>
<v-col :cols="3.5">
<!-- FAB -->
<component :is="'SelectBoxMulti'" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'FAB'" :labelCols="12" :multiple="true"
:disabled="fabDisabled" @update:propsValue="selectValue02 = $event" :textCols="12"
:iconShow="true" />
</v-col>
<v-col :cols="3.5">
<v-row>
<v-col :cols="12" class="py-0">
<label for="" class="search-box-label">
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
설비명
</label>
</v-col>
<v-col :cols="12" class="pt-0">
<v-text-field append-icon="" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"><template
v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
</v-row>
</v-col>
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
</v-row>
</v-card>
<!-- <v-row align="center" no-gutters style="margin-top: 14px;">
<v-col :cols="1">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
설비명
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
설비명
</label>
</v-col>
<v-col :cols="3">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="search"
></v-text-field>
<v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"></v-text-field>
</v-col>
</v-row>
</v-row> -->
</div>
<div class="px-5" style="height:429px;">
<div ref="modalGridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid? 'Grid' : null"
:dataPath="searchParam.eqpmSelectPopData.eqpmSelectPop"
:gridName="gridName"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
/>
</div>
</div>
<v-divider></v-divider>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<div class="px-5" style="height:429px;">
<div ref="modalGridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null"
:dataPath="searchParam.eqpmSelectPopData.eqpmSelectPop" :gridName="gridName"
:parentPrgmId="parentPrgmId" @getRowsData="getRowData" />
</div>
</div>
<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" type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
</v-row>
</template>
@ -171,66 +145,71 @@ export default {
type: String,
require: false,
},
disabled:{
type:Boolean,
require:false,
default:false
disabled: {
type: Boolean,
require: false,
default: false
},
required:{
type:Boolean,
require:false,
default:false
required: {
type: Boolean,
require: false,
default: false
},
fabDisabled:{
type:Boolean,
require:false,
default:false
fabDisabled: {
type: Boolean,
require: false,
default: false
},
eqpmGrpDisabled:{
type:Boolean,
require:false,
default:false
eqpmGrpDisabled: {
type: Boolean,
require: false,
default: false
},
iconShow:{
type:Boolean,
require:false,
default:true
iconShow: {
type: Boolean,
require: false,
default: true
},
isMulti:{
type:Boolean,
require:false,
default:false
}
isMulti: {
type: Boolean,
require: false,
default: false
},
customClass: {
type: String,
require: false,
default: ''
}
},
components: {
Grid,
selectCodeList,
dateUtility,
dateUtility,
InputText,
SelectBox,
SelectBoxMulti
SelectBox,
SelectBoxMulti
// Tree
},
data() {
return {
labelPrepend: true,
modalDataKey:'eqpmSelectPopData',
modalDataKey: 'eqpmSelectPopData',
myModalKey: 'eqpmSelectPop',
gridName: 'eqpmSelectGrid',
loadGrid: false,
setGrid:false,
popCheck:false,
loadGrid: true,
setGrid: false,
popCheck: false,
dialog: false,
activeRowData: {},
checkedRowDataList: [],
selectValue01:null,
selectValue02:[],
selectValueList01:[],
selectValueList02:[],
searchWord:'',
activeRowData:{},
textFieldData:'',
selectRow:{}
selectValue01: null,
selectValue02: [],
selectValueList01: [],
selectValueList02: [],
searchWord: '',
activeRowData: {},
textFieldData: '',
selectRow: {}
};
},
computed: {
@ -240,28 +219,28 @@ export default {
return state.pageData[this.parentPrgmId];
},
myBindingData(state) {
var data = state.pageData[this.parentPrgmId];
if(data.fabId == ''){
data.fabId = null
}else if(typeof(data.fabId)=='string'){
data.fabId = [data.fabId]
}
return {
fabId : data.fabId,
eqpmGrpId : data.eqpmGrpId,
eqpmId:data.eqpmId,
eqpmNm:data.eqpmNm,
eqpmIdList:data.eqpmIdList,
eqpmKindId:data.eqpmKindId,
}
var data = state.pageData[this.parentPrgmId];
if (data.fabId == '') {
data.fabId = null
} else if (typeof (data.fabId) == 'string') {
data.fabId = [data.fabId]
}
return {
fabId: data.fabId,
eqpmGrpId: data.eqpmGrpId,
eqpmId: data.eqpmId,
eqpmNm: data.eqpmNm,
eqpmIdList: data.eqpmIdList,
eqpmKindId: data.eqpmKindId,
}
},
}),
selectValue: {
get() {
// return this.searchParam[this.item.valueNm];
return this.myBindingData
? this.myBindingData[this.valueNm]
: this.textFieldData;
return this.myBindingData
? this.myBindingData[this.valueNm]
: this.textFieldData;
},
set(value) {
// if(this.item && this.item.disableContent){
@ -270,44 +249,44 @@ export default {
return value;
},
},
chkDialog(){
if(this.isMulti){
this.$store.state.pageData[this.parentPrgmId][this.modalDataKey][this.myModalKey][this.gridName].option.rowHeaders = [{type : 'checkbox'}];
}else{
this.$store.state.pageData[this.parentPrgmId][this.modalDataKey][this.myModalKey][this.gridName].option.rowHeaders = [];
}
chkDialog() {
if (this.isMulti) {
this.$store.state.pageData[this.parentPrgmId][this.modalDataKey][this.myModalKey][this.gridName].option.rowHeaders = [{ type: 'checkbox' }];
} else {
this.$store.state.pageData[this.parentPrgmId][this.modalDataKey][this.myModalKey][this.gridName].option.rowHeaders = [];
}
return this.dialog
},
},
watch: {
async chkDialog(val){
// console.log("val : ", val);
if(val){
this.selectValue01 = this.myBindingData.eqpmGrpId;
this.selectValue02 = this.myBindingData.fabId;
await this.search();
// if(this.isMulti){
// }else{
// // 단일 focus용
// if(this.$refs[this.gridName]){
// this.selectRow = this.$refs[this.gridName].getData().filter(item=>{
// return item.eqpmId == this.myBindingData.eqpmId
// });
// this.$refs[this.gridName].focus({
// rowKey : this.selectRow[0].rowKey,
// setScroll: true
// })
// }
// }
}else{
this.dialog = false;
}
// this.selectValue01 = this.myBindingData.eqpmGrpId;
// this.selectValue02 = this.myBindingData.fabId;
// await this.search();
// this.getChecked();
// }
async chkDialog(val) {
// console.log("val : ", val);
if (val) {
this.selectValue01 = this.myBindingData.eqpmGrpId;
this.selectValue02 = this.myBindingData.fabId;
await this.search();
// if(this.isMulti){
// }else{
// // 단일 focus용
// if(this.$refs[this.gridName]){
// this.selectRow = this.$refs[this.gridName].getData().filter(item=>{
// return item.eqpmId == this.myBindingData.eqpmId
// });
// this.$refs[this.gridName].focus({
// rowKey : this.selectRow[0].rowKey,
// setScroll: true
// })
// }
// }
} else {
this.dialog = false;
}
// this.selectValue01 = this.myBindingData.eqpmGrpId;
// this.selectValue02 = this.myBindingData.fabId;
// await this.search();
// this.getChecked();
// }
},
},
@ -317,14 +296,14 @@ export default {
});
},
async created() {
await this.getFab();
await this.getEqpmGrp();
await this.getFab();
await this.getEqpmGrp();
this.init();
},
methods: {
...mapMutations({
setPageData: 'setPageData',
setModalGridData: 'setModalGridData',
setModalGridData: 'setModalGridData',
setModalGridColumn: 'setModalGridColumn',
setModalGridOption: 'setModalGridOption',
}),
@ -332,18 +311,18 @@ export default {
postApiReturn: 'modules/list/postApiReturn',
}),
init() {
this.activeRowData = {};
this.gridInit();
this.activeRowData = {};
this.gridInit();
},
dialogOpenCloseEvent(val){
dialogOpenCloseEvent(val) {
// this.checkPop = !val;
this.dialog=!val;
// this.checkPop = !val;
this.dialog = !val;
},
search() {
this.getRowGridData();
},
async getFab() {
async getFab() {
let res = await this.postApiReturn({
apiKey: 'selectFabCodeList',
resKey: 'fabCodeLists',
@ -356,25 +335,25 @@ export default {
value: item.eccId,
};
});
this.selectValueList02.unshift({
text:"전체",
value:null
});
// if(this.pageData.eccId != null && this.pageData.eccId != ''){
// this.selectValue02 = this.pageData.eccId;
// }else if(this.pageData.eccId == null || this.pageData.eccId == ''){
this.selectValue02.push(this.selectValueList02[0].value);
// }
this.selectValueList02.unshift({
text: "전체",
value: null
});
// if(this.pageData.eccId != null && this.pageData.eccId != ''){
// this.selectValue02 = this.pageData.eccId;
// }else if(this.pageData.eccId == null || this.pageData.eccId == ''){
this.selectValue02.push(this.selectValueList02[0].value);
// }
} else {
this.selectValueList02 = [];
this.selectValue02 = [];
}
},
async getEqpmGrp() {
async getEqpmGrp() {
let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists',
sendParam: { },
sendParam: {},
});
if (res.length > 0) {
this.selectValueList01 = await res.map(item => {
@ -383,39 +362,42 @@ export default {
value: item.eqpmGrpId,
};
});
this.selectValueList01.unshift({
text:"전체",
value:null
});
// if(this.pageData.eqpmGrpId != null && this.pageData.eqpmGrpId != ''){
// this.selectValue02 = this.pageData.eqpmGrpId;
// }else if(this.pageData.eqpmGrpId == null || this.pageData.eqpmGrpId == ''){
this.selectValue01 = this.selectValueList01[0].value;
// }
this.selectValueList01.unshift({
text: "전체",
value: null
});
// if(this.pageData.eqpmGrpId != null && this.pageData.eqpmGrpId != ''){
// this.selectValue02 = this.pageData.eqpmGrpId;
// }else if(this.pageData.eqpmGrpId == null || this.pageData.eqpmGrpId == ''){
this.selectValue01 = this.selectValueList01[0].value;
// }
} else {
this.selectValueList01 = [];
this.selectValue01 = null;
}
},
gridInit(){
// console.log("modalGridParent : ",this.$refs)
// const gridWidth = this.$refs.modalGridParent.offsetWidth/4;
gridInit() {
// console.log("modalGridParent : ",this.$refs)
// const gridWidth = this.$refs.modalGridParent.offsetWidth/4;
let myOptions = {
columnOptions: {
resizable: true,
},
// rowHeaders:[{ type: 'checkbox' }],
// rowHeight:'auto'
};
if(this.isMulti){
myOptions['rowHeaders'] = [{type : 'checkbox'}];
myOptions['rowHeight'] = 'auto';
}
let myOptions = {
columnOptions: {
resizable: true,
},
header: {
height: 'auto',
},
// rowHeaders:[{ type: 'checkbox' }],
rowHeight: 'auto',
};
if (this.isMulti) {
// myOptions['rowHeaders'] = [{ type: 'checkbox' }];
// myOptions['rowHeight'] = 'auto';
}
this.setModalGridOption({
this.setModalGridOption({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
@ -426,46 +408,46 @@ export default {
),
});
const myColumns= [
{
header : 'FAB',
name : 'fabId',
align:'center',
hidden:true
},
{
header : 'FAB',
name : 'fabNm',
align:'center'
},
{
header : '설비ID',
name : 'eqpmId',
align:'center',
// hidden:true
},
{
header : '설비명',
name : 'eqpmNm',
align:'center'
},
{
header : 'eccId',
name : 'eccId',
align:'center',
hidden:true
},
{
header : 'eccNm',
name : 'eccNm',
align:'center',
hidden:true
},
const myColumns = [
{
header: 'FAB',
name: 'fabId',
align: 'center',
hidden: true
},
{
header: 'FAB',
name: 'fabNm',
align: 'center'
},
{
header: '설비ID',
name: 'eqpmId',
align: 'center',
// hidden:true
},
{
header: '설비명',
name: 'eqpmNm',
align: 'center'
},
{
header: 'eccId',
name: 'eccId',
align: 'center',
hidden: true
},
{
header: 'eccNm',
name: 'eccNm',
align: 'center',
hidden: true
},
]
]
this.setModalGridColumn({
this.setModalGridColumn({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
@ -473,91 +455,117 @@ export default {
});
// this.getRowGridData();
},
async getRowGridData(){
this.loadGrid =false;
var res = await this.postApiReturn({
// this.getRowGridData();
},
async getRowGridData() {
this.loadGrid = false;
var res = await this.postApiReturn({
apiKey: 'selectEqpmPop',
resKey: 'eqpmPopData',
sendParam: {
fabId:this.selectValue02,
eqpmGrpId:this.selectValue01,
searchWord:this.searchWord,
eqpmKindId:this.myBindingData.eqpmKindId,
fabId: this.selectValue02,
eqpmGrpId: this.selectValue01,
searchWord: this.searchWord,
eqpmKindId: this.myBindingData.eqpmKindId,
},
});
// const dayjs = require('dayjs');
// var newRes = res.map(item=>
// item = {
// ...item,
// totDttmDay : Utility.setFormatDate(item.totDttm, 'YYYY-MM-DD'),
// totDttmTime : Utility.setFormatDate(item.totDttm, 'HH') + "~" + dayjs(item.totDttm).add(1,'h').format('HH')
// }
// );
this.setModalGridData({
// const dayjs = require('dayjs');
// var newRes = res.map(item=>
// item = {
// ...item,
// totDttmDay : Utility.setFormatDate(item.totDttm, 'YYYY-MM-DD'),
// totDttmTime : Utility.setFormatDate(item.totDttm, 'HH') + "~" + dayjs(item.totDttm).add(1,'h').format('HH')
// }
// );
// const res =
// [
// {
// "fabId": "FAB001",
// "fabNm": "Gumi FAB",
// "eqpmId": "EQ001",
// "eqpmNm": "Etcher A12",
// "eccId": "ECC001",
// "eccNm": "Etch Control Center"
// },
// {
// "fabId": "FAB002",
// "fabNm": "Pyeongtaek FAB",
// "eqpmId": "EQ002",
// "eqpmNm": "Deposition B34",
// "eccId": "ECC002",
// "eccNm": "Deposition Control Center"
// },
// {
// "fabId": "FAB003",
// "fabNm": "Hwaseong FAB",
// "eqpmId": "EQ003",
// "eqpmNm": "CMP C56",
// "eccId": "ECC003",
// "eccNm": "CMP Control Center"
// }
// ];
this.setModalGridData({
modalKey: this.myModalKey,
gridKey: this.gridName,
modalDataKey: this.modalDataKey,
value: res
});
this.loadGrid=true;
this.$nextTick(()=>{
if(this.isMulti){
this.getChecked();
}
});
},
setUpdate() {
if(this.isMulti){
var data = this.$refs[this.gridName].getCheckedRowsEvt();
this.dialog = false;
this.setPageData({
checkedRows: data,
eqpmId : data.map(item=>{
return item.eqpmId;
}),
eqpmNm : data.map(item=>{
return item.eqpmNm;
}),
eqpmIdList:data,
isFind2:true
});
}else{
this.dialog = false;
this.setPageData({eqpmInfo : this.activeRowData, eqpmNm : this.activeRowData.eqpmNm})
}
this.loadGrid = true;
this.$nextTick(() => {
if (this.isMulti) {
this.getChecked();
}
});
},
getRowData(data){
if(this.isMulti){
if(data._attributes.checked){
this.$refs[this.gridName].uncheckEvt(data, this.$refs[this.gridName]);
}else{
this.$refs[this.gridName].checkEvt(data, this.$refs[this.gridName]);
}
}else{
this.activeRowData = data;
}
},
getChecked(){
if(this.myBindingData.eqpmIdList.length>0){
this.myBindingData.eqpmIdList.map(item=>{
this.$refs[this.gridName].checkEvt(item, this.$refs[this.gridName]);
});
}
}
setUpdate() {
if (this.isMulti) {
var data = this.$refs[this.gridName].getCheckedRowsEvt();
this.dialog = false;
this.setPageData({
checkedRows: data,
eqpmId: data.map(item => {
return item.eqpmId;
}),
eqpmNm: data.map(item => {
return item.eqpmNm;
}),
eqpmIdList: data,
isFind2: true
});
} else {
this.dialog = false;
this.setPageData({ eqpmInfo: this.activeRowData, eqpmNm: this.activeRowData.eqpmNm })
}
},
getRowData(data) {
if (this.isMulti) {
if (data._attributes.checked) {
this.$refs[this.gridName].uncheckEvt(data, this.$refs[this.gridName]);
} else {
this.$refs[this.gridName].checkEvt(data, this.$refs[this.gridName]);
}
} else {
this.activeRowData = data;
}
},
getChecked() {
if (this.myBindingData.eqpmIdList.length > 0) {
this.myBindingData.eqpmIdList.map(item => {
this.$refs[this.gridName].checkEvt(item, this.$refs[this.gridName]);
});
}
}
},
};
var eqpmSelectPop ={
eqpmSelectGrid:{
data:[],
column:[],
option:{}
}
var eqpmSelectPop = {
eqpmSelectGrid: {
data: [],
column: [],
option: {}
}
}
</script>

View File

@ -0,0 +1,375 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="labelCols">
<label for="" class="search-box-label">
{{ label }}
</label>
</v-col>
<v-col :cols="textCols">
<!-- <a-input :size="size" @click="showDetailModal = true" class="custom-input" suffix-icon placeholder="Search..." v-model="selectValue">
<template #suffix>
<a-icon type="search" />
</template>
</a-input> -->
<!-- append-icon="search" -->
<v-text-field
readonly
v-model="selectValue"
class="v-input__custom"
@click="showDetailModal = true"
outlined
:hide-details="true"
:required="required || false"
>
<!-- :disabled="disabled || false" -->
<template #append >
<a-icon type="search" />
</template>
</v-text-field>
</v-col>
<a-modal v-model="showDetailModal" title="가이드 알람이력" class="text-left" width="800px" :footer="null"
:style="{ borderRadius: '8px', overflow: 'hidden' }" :bodyStyle="{ paddingTop: '0px' }">
<!-- Top Input Fields -->
<v-row :gutters="32" align="end" style="margin-bottom: 16px;">
<!-- Label on the left -->
<!-- Two inputs on the right -->
<v-col :cols="3">
<component :is="'SelectBox'" :label="'실비그룹'" :labelCols="12" :textCols="12"
:propsValue="eqpmGrpSelected" :itemList="eqpmGrpList"
@update:propsValue="eqpmGrpSelected = $event" :disabled="disabled" :iconShow="false" />
</v-col>
<v-col :cols="4" style="text-align: left;">
<component :is="'SelectBox'" :label="'FAB'" :labelCols="12" :textCols="12"
:propsValue="localFabSelected" :itemList="fabList"
@update:propsValue="localFabSelected = $event" :disabled="disabled" :iconShow="false" />
</v-col>
<v-col :cols="5" >
<v-row>
<v-col :cols="12" style="text-align: left;">
<div>실비명</div>
</v-col>
<v-col :cols="8">
<a-input class="custom-input" suffix-icon placeholder="Search..."
:style="{ borderRadius: '6px', }" >
<template #suffix>
<a-icon type="search" />
</template>
</a-input>
</v-col>
<v-col :cols="3" class="text-right">
<!-- 조회버튼 -->
<BtnSearch @click="searchFab()" />
</v-col>
</v-row>
</v-col>
</v-row>
<a-divider />
<!-- Table -->
<a-table :columns="columns" :dataSource="filteredData" rowKey="id" :rowSelection="rowSelection" bordered />
<!-- Footer Buttons -->
<div style="text-align: right; margin-top: 16px;">
<a-button @click="showDetailModal = false">닫기</a-button>
<a-button type="primary" style="margin-left: 8px; color:#fff"
@click="showDetailModal = false">확인</a-button>
</div>
</a-modal>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility';
import selectCodeList from '@/components/common/select/selectCodeList';
import InputText from '~/components/common/input/InputText';
import dateUtility from '~/plugins/dateUtility';
import SelectBox from '@/components/common/select/SelectBox';
import SelectBoxMulti from '@/components/common/select/SelectBoxMulti';
import BtnSearch from '~/components/common/button/BtnSearch';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
default: '비교대상 최대(20개)',
},
label: {
type: String,
require: false,
default: '전력 계약 정보',
},
valueNm: {
type: String,
require: false,
default: '',
},
title: {
type: String,
require: false,
default: '전력 계약 목록',
},
labelCols: {
type: Number,
require: false,
default: 12,
},
textCols: {
type: Number,
require: false,
default: 12,
},
item: {
type: Object,
require: true,
},
bindingData: {
type: String,
require: false,
},
disabled: {
type: Boolean,
default: true
},
required: {
type: Boolean,
require: false,
default: false
},
fabDisabled: {
type: Boolean,
require: false,
default: false
},
eqpmGrpDisabled: {
type: Boolean,
require: false,
default: false
},
iconShow: {
type: Boolean,
require: false,
default: true
},
isMulti: {
type: Boolean,
require: false,
default: false
},
fabSelected: {
type: String, // or Array, depending on your data
required: false
},
eqpmGrpSelected: {
type: String, // or Array, depending on your data
required: false
},
size: {
type: String,
require: false,
default: "middle",
}
},
components: {
Grid,
selectCodeList,
dateUtility,
InputText,
SelectBox,
SelectBoxMulti,
BtnSearch
// Tree
},
data() {
return {
labelPrepend: true,
modalDataKey: 'eqpmSelectPopData',
myModalKey: 'eqpmSelectPop',
gridName: 'eqpmSelectGrid',
loadGrid: false,
setGrid: false,
popCheck: false,
dialog: false,
activeRowData: {},
checkedRowDataList: [],
localFabSelected: this.fabSelected,
localEqpmGrpSelected: this.eqpmGrpSelected,
fabList: [],
eqpmGrpList: [],
searchWord: '',
activeRowData: {},
textFieldData: '',
selectRow: {},
showDetailModal: false,
columns: [
{
title: 'FAB',
dataIndex: 'fab',
key: 'fab',
},
{
title: '설비ID',
dataIndex: 'equipmentId',
key: 'equipmentId',
},
{
title: '설비명',
dataIndex: 'equipmentName',
key: 'equipmentName',
},
],
// Table data
data: [
{
id: 1,
fab: 'FAB001',
equipmentId: 'EQ001',
equipmentName: '냉각기 A',
},
{
id: 2,
fab: 'FAB002',
equipmentId: 'EQ002',
equipmentName: '펌프 B',
},
{
id: 3,
fab: 'FAB003',
equipmentId: 'EQ003',
equipmentName: '히터 C',
},
{
id: 4,
fab: 'FAB001',
equipmentId: 'EQ004',
equipmentName: '냉각기 D',
},
{
id: 5,
fab: 'FAB002',
equipmentId: 'EQ005',
equipmentName: '펌프 E',
},
{
id: 6,
fab: 'FAB003',
equipmentId: 'EQ006',
equipmentName: '히터 F',
},
{
id: 7,
fab: 'FAB001',
equipmentId: 'EQ007',
equipmentName: '냉각기 G',
},
{
id: 8,
fab: 'FAB002',
equipmentId: 'EQ008',
equipmentName: '펌프 H',
},
],
filteredData: [],
// Row selection config
rowSelection: {
onChange: (selectedRowKeys, selectedRows) => {
// console.log('Selected Row Keys:', selectedRowKeys);
// console.log('Selected Rows:', selectedRows);
},
}
};
},
watch: {
fabSelected(newVal) {
this.localFabSelected = newVal;
},
eqpmGrpSelected(newVal) {
this.localEqpmGrpSelected = newVal;
}
},
beforeCreate() {
this.$store.commit('setPageData', {
eqpmSelectPopData: { eqpmSelectPop },
});
},
async created() {
await this.getFab();
await this.getEqpmGrp();
this.init();
},
methods: {
// ...mapMutations({
// setPageData: 'setPageData',
// setModalGridData: 'setModalGridData',
// setModalGridColumn: 'setModalGridColumn',
// setModalGridOption: 'setModalGridOption',
// }),
// ...mapActions({
// postApiReturn: 'modules/list/postApiReturn',
// }),
init() {
this.filteredData = this.data;
// this.activeRowData = {};
// this.gridInit();
},
// search() {
// this.getRowGridData();
// },
searchFab() {
// console.log('tttttttttttt')
// this.filteredData = this.data.filter(item => {
// const matchGrp = this.eqpmGrpSelected ? item.group === this.eqpmGrpSelected : true;
// const matchFab = this.localFabSelected ? item.fab === this.localFabSelected : true;
// return matchGrp && matchFab;
// });
},
async getFab() {
this.fabList = [
{ label: 'FAB001', value: 'FAB001' },
{ label: 'FAB002', value: 'FAB002' },
{ label: 'FAB003', value: 'FAB003' },
];
// this.fabSelected = 'FAB001';
},
async getEqpmGrp() {
this.eqpmGrpList = [
{ label: 'EQ 1', value: 'EQ001' },
{ label: 'EQ 2', value: 'EQ002' },
{ label: 'EQ 3', value: 'EQ003' },
];
// this.eqpmGrpSelected = 'EQ001';
},
},
};
var eqpmSelectPop = {
eqpmSelectGrid: {
data: [],
column: [],
option: {}
}
}
</script>

View File

@ -1,95 +1,62 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="option.labelCols">
<v-row class="search-box no-gutters" align="center">
<v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="item.iconShow" small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ option.labelContent }}
</label>
</v-col>
<v-col :cols="option.textCols">
<v-text-field
readonly
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
:required="item.required || false"
:disabled="item.disabled || false"
></v-text-field>
<v-col :cols="option.textCols" class="py-0">
<v-text-field readonly append-icon="" :class="['v-select__custom', customClass]" outlined :hide-details="true"
v-model="selectValue" @keyup.enter="typeEnterKey" @click="dialogOpenCloseEvent(dialog)" style="padding: 0;"
:required="item.required || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-dialog v-model="dialog" scrollable width="1000px">
<v-card style="height: 100%">
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
<v-icon @click="dialogOpenCloseEvent(dialog)">mdi-close</v-icon>
</v-card-title>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="2">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
검색
</label>
</v-col>
<v-col :cols="6">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="search"
></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="4" class="text-right">
<v-btn :ripple="false" @click="search()">
조회
</v-btn>
<!-- <v-btn :ripple="false" @click="initSearch()">
초기화
</v-btn> -->
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<v-row align="end" class="px-5 pb-3" no-gutters>
<v-col :cols="2.5" class="mr-2">
<v-row>
<v-col :cols="12" class="py-0">
<label for="" class="search-box-label">
<!-- <v-icon small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon> -->
검색
</label>
</v-col>
<v-col :cols="11" class="py-0 pr-3">
<v-text-field append-icon="mdi-magnify" class="v-input__custom" outlined
:hide-details="true" v-model="searchWord" @keyup.enter="search"></v-text-field>
</v-col>
<a-button icon="search" :ripple="false" type="primary" @click="search()"
class="search-button">조회</a-button>
</v-row>
</v-col>
</v-row>
<!-- <div :style="'height: calc(65vh)'"> -->
<div :style="'height: 600px'">
<div :style="'height: 600px'" class="px-5">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 py-3">
<component
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="grid_01"
:dataPath="searchParam.modalData2.evtObjPop"
:parentPrgmId="parentPrgmId"
@getRowsData="getRowData"
@dblClick="setUpdate($event)"
/>
<!-- :is="loadGrid && dialog ? 'Grid' : null" -->
<component :is="loadGrid && dialog ? 'Grid' : null" :gridName="grid_01"
:dataPath="searchParam.modalData2.evtObjPop" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" @dblClick="setUpdate($event)" />
</div>
</div>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate('init')">초기화</v-btn>
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button type="default" class="mr-2" :ripple="false"
@click="dialogOpenCloseEvent(dialog)">닫기</a-button>
<a-button type="primary" class="mr-2" :ripple="false" @click="setUpdate('init')">초기화</a-button>
<a-button type="primary" :ripple="false" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -139,7 +106,11 @@ export default {
bindingData: {
type: String,
require: false,
}
},
customClass: {
type: String,
require: false,
},
// bindingFlag:{
// type:Boolean,
// require: false,
@ -209,7 +180,7 @@ export default {
}),
selectValue: {
get() {
if(this.formFlag){
if (this.formFlag) {
if (!this.item) {
return this.textFieldData;
}
@ -217,12 +188,12 @@ export default {
// return "NONE";
// }
else {
return this.myBindingData
return this.myBindingData
? this.myBindingData[this.item.valueNm]
: this.textFieldData;
: this.textFieldData;
}
}else{
} else {
// grid와 바인딩 안했을 때
return this.textFieldData;
}
@ -251,7 +222,7 @@ export default {
created() {
this.init();
},
mounted() {},
mounted() { },
methods: {
...mapMutations({
setPageData: 'setPageData',
@ -278,6 +249,9 @@ export default {
columnOptions: {
resizable: true,
},
header: {
height: 38,
},
};
this.setModalGridOption({
modalKey: this.myModalKey,
@ -325,7 +299,7 @@ export default {
},
setUpdate(v) {
// 초기화
if(v == 'init'){
if (v == 'init') {
this.selectedData.tagId = null;
this.selectedData.tagNm = null;
}
@ -334,9 +308,9 @@ export default {
this.textFieldData = this.selectedData.tagId;
} else {
// let formFg = this.item.formFg != undefined ? this.item.formFg : this.formFg;
if(this.formFlag){
if (this.formFlag) {
if (this.item.bindNm) {
this.myBindingData[this.item.bindNm] = this.selectedData.tagNm;
this.myBindingData[this.item.bindNm] = this.selectedData.tagNm;
} else {
this.myBindingData.tagNm = this.selectedData.tagNm;
}
@ -360,16 +334,16 @@ export default {
};
this.$emit('gridEditingFinish', dt);
}
}else{
} else {
// grid와 binding 안되어있는 경우
this.textFieldData = this.selectedData.tagNm;
this.setPageData({
tagId: this.selectedData.tagId,
// [this.item.tagNm]: this.selectedData.tagNm
});
}
}
},
dialogOpenCloseEvent(val) {
@ -404,33 +378,8 @@ var evtObjPop = {
}
}
.tui-grid-cell.tui-grid-cell-has-tree
.tui-grid-tree-extra-content
+ .tui-grid-cell-content:before {
.tui-grid-cell.tui-grid-cell-has-tree .tui-grid-tree-extra-content+.tui-grid-cell-content:before {
content: none !important;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
}
</style>

View File

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

View File

@ -1,52 +1,50 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col :cols="option.labelCols">
<v-row class="search-box " align="center" no-gutters >
<v-col :cols="option.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
v-if="iconShow"
small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ option.labelContent }}
</label>
</v-col>
<v-col :cols="option.textCols">
<!-- append-icon="mdi-magnify" -->
<v-text-field
readonly
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialogOpenCloseEvent(dialog)"
outlined
:hide-details="true"
></v-text-field>
>
<!-- Custom SVG icon -->
<template v-slot:append>
<v-icon>$icoSearch</v-icon>
</template>
</v-text-field>
</v-col>
<v-dialog v-model="dialog" scrollable width="700px">
<v-card style="height: 100%">
<v-card-title class="pa-5 d-flex align-center justify-space-between">
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ option.modalTitle }}</span>
<v-btn
icon
tile
:ripple="false"
@click="dialogOpenCloseEvent(dialog)"
>
<v-icon>mdi-close</v-icon>
</v-btn>
<a-button icon="close" type="text" @click="dialogOpenCloseEvent(dialog)"></a-button>
</v-card-title>
<div class="pa-5">
<v-row align="center" no-gutters>
<v-col :cols="3">
<v-col :cols="12">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
<!-- <v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> -->
<v-icon small :class="['mr-1 icon-blue']">$icoBulletPoint</v-icon>
검색
</label>
</v-col>
<v-col :cols="5">
<v-col :cols="9">
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
@ -57,21 +55,19 @@
></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="4" class="text-right">
<v-btn :ripple="false" @click="search()">
<v-col :cols="3" class="text-right">
<a-button type="primary" @click="search()" icon="search">
조회
</v-btn>
<v-btn :ripple="false" @click="initSearch()">
</a-button>
<a-button @click="initSearch()">
초기화
</v-btn>
</a-button>
</v-col>
</v-row>
</div>
<v-divider></v-divider>
<!-- <div :style="'height: calc(65vh)'"> -->
<div :style="'height: 429px;'">
<!-- <div :style="{ height: 'calc(100% - 213px)' }"> -->
<div ref="modalGridParent" class="h100 w100 py-3">
<!-- <v-divider></v-divider> -->
<div style="height: 429px;" class="py-3 px-5">
<div ref="modalGridParent" class="h100 w100">
<component
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="grid_01"
@ -82,11 +78,9 @@
/>
</div>
</div>
<v-card-actions class="pa-5 d-flex align-center justify-center">
<v-btn :ripple="false" @click="setUpdate($event)">확인</v-btn>
<v-btn :ripple="false" @click="dialogOpenCloseEvent(dialog)"
>닫기</v-btn
>
<v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button class="mr-2" @click="dialogOpenCloseEvent(dialog)">닫기</a-button>
<a-button type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -137,6 +131,11 @@ export default {
type: String,
require: false,
},
iconShow: {
type: Boolean,
require: false,
default: true
},
},
components: {
Grid,
@ -146,7 +145,7 @@ export default {
return {
dialog: false,
loadGrid: false,
loadGrid: true,
grid_01: 'grid_01',
myModalKey: 'FtnPlcFormPop',
modalDataKey: 'modalData3',
@ -285,27 +284,48 @@ export default {
});
},
async getGridData() {
this.loadGrid = false;
// this.loadGrid = false;
const res = await this.postApiReturn({
apiKey: 'selectEccBaseInfo',
resKey: 'eccBaseInfoData',
sendParam: {
blocId: this.myBindingData.blocId,
eqpmYn: '0',
search: this.searchWord,
},
});
// const res = await this.postApiReturn({
// apiKey: 'selectEccBaseInfo',
// resKey: 'eccBaseInfoData',
// sendParam: {
// blocId: this.myBindingData.blocId,
// eqpmYn: '0',
// search: this.searchWord,
// },
// });
const setTreeData = await this.setTree({
gridKey: this.gridNameTree,
treeKey: 'ECC_ID',
value: res.map(item => ({
// const setTreeData = await this.setTree({
// gridKey: this.gridNameTree,
// treeKey: 'ECC_ID',
// value: res.map(item => ({
// ...item,
// eccNm: item.eccNm,
// })),
// });
//mockdata eccNm
let res = [
{ ECC_ID: 'ECC001', eccNm: '서울 본사', iconShow: false, align: 'center' },
{ ECC_ID: 'ECC002', eccNm: '부산 지사', useIcon: false, align: 'center' },
{ ECC_ID: 'ECC003', eccNm: '대구 센터', useIcon: false, align: 'center' },
{ ECC_ID: 'ECC004', eccNm: '광주 사무소' , useIcon: false, align: 'center'},
{ ECC_ID: 'ECC005', eccNm: '인천 물류창고' , useIcon: false, align: 'center'},
];
const setTreeData = {
ROOT: res.map(item => ({
...item,
eccNm: item.eccNm,
})),
});
}))
};
// console.log(res);
this.setModalGridData({
modalKey: this.myModalKey,
gridKey: this.grid_01,
@ -363,7 +383,31 @@ var FtnPlcFormPop = {
</script>
<style lang="scss" scoped>
// @each $theme in dark, light {
// @include theme($theme);
// .v-application.#{$theme}-mode {
// .v-input--is-readonly {
// border-color: map-deep-get($config,
// #{$theme},
// "v-input-readonly-border-color"
// );
// ::v-deep {
// &:not(.v-input--radio-group, .v-input--checkbox) {
// .v-input__slot {
// background-color: map-deep-get($config,
// #{$theme},
// "v-input-backgroundColor"
// ) !important;
// }
// }
// }
// }
// }
// }
::v-deep {
.v-dialog {
overflow-y: hidden !important;
}
@ -386,26 +430,4 @@ var FtnPlcFormPop = {
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
}
</style>

View File

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

View File

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

View File

@ -1,268 +1,191 @@
<template>
<div>
<!-- <v-btn :ripple="false" @click="dialog = !dialog">경고창</v-btn> -->
<v-dialog
v-model="dialog"
width="700"
overlay-color="#000"
overlay-opacity="0.8"
>
<v-dialog v-model="dialog" width="800" overlay-color="#000" overlay-opacity="0.8">
<v-card>
<v-toolbar
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ label }}</span>
<a-button icon="close" type="text" @click="dialog = !dialog"></a-button>
</v-card-title>
<!-- <v-toolbar
:color="isDarkMode ? '#2d3355' : '#3f4d7d'"
class="py-4 pr-3 pl-5"
height="auto"
>
<v-toolbar-title>{{ label }}</v-toolbar-title>
<!-- <v-btn
icon
tile
small
:ripple="false"
@click="dialog = !dialog"
:style="{ backgroundColor: isDarkMode ? '#2d3355' : '#3f4d7d' }"
>
<v-icon>mdi-close</v-icon>
</v-btn> -->
</v-toolbar>
</v-toolbar> -->
<!-- <v-card-title>
일정 상세 내용
</v-card-title> -->
<!-- <template v-for="(item, index) in detailList"> -->
<template>
<div style="padding : 20px">
<v-col :cols="12">
<v-row>
<v-col :cols="3">
<v-row class="search-box" align="center" no-gutters>
<label class="search-box-label">
<v-icon x-small color="#fb8200" class="mr-1"
>mdi-record-circle</v-icon
>
일정 시작
</label>
</v-row>
</v-col>
<v-col :cols="4">
<!-- <DatePicker v-model="strtDt" :parentPrgmId="parentPrgmId"/> -->
<div class="startpicker-container2">
<v-text-field
id="startpicker2"
ref="startpicker2"
v-model="strtDt"
:class="'v-input__custom'"
:hide-details="true"
readonly
outlined
>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div
ref="startpicker-container2"
id="startpicker-container2"
></div>
</template>
</v-text-field>
<div class="pa-6 pt-0">
<v-row no-gutters class="mb-4">
<v-col :cols="12">
<label class="search-box-label">
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
일정 시작
</label>
</v-col>
<v-col :cols="6" class="py-0 pr-2">
<!-- <DatePicker v-model="strtDt" :parentPrgmId="parentPrgmId"/> -->
<div class="startpicker-container2">
<v-text-field id="startpicker2" ref="startpicker2" v-model="strtDt"
:class="'v-input__custom'" :hide-details="true" readonly outlined>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container2" id="startpicker-container2"></div>
</template>
</v-text-field>
</div>
</v-col>
<v-col :cols="6" class="py-0 pl-2">
<!-- <DatePicker v-model="strtDt" :parentPrgmId="parentPrgmId"/> -->
<component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox1"
:propsValue="selectTimeValue1" :itemList="selectTimeValueList1" :minInterval="selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
" @update:propsValue="selectTimeValue1 = $event" />
<!-- <div class="startpicker-container2">
<v-text-field id="startpicker2" ref="startpicker2" v-model="strtDt"
:class="'v-input__custom'" :hide-details="true" readonly outlined>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container2" id="startpicker-container2"></div>
</template>
</v-text-field>
</div> -->
</v-col>
<!-- <v-col :cols="2">
<vue-numeric-input v-model="strtHh" :min="0" :max="23" controls-type="updown"
class="v-input__slot" width="100%" align="center">
</vue-numeric-input>
</v-col>
<v-col :cols="1" style="text-align: center;">
:
</v-col>
<v-col :cols="2">
<vue-numeric-input v-model="strtMm" :min="0" :max="59" controls-type="updown"
class="v-input__slot" width="100%" align="center">
</vue-numeric-input>
</v-col> -->
</v-row>
<v-row no-gutters class="mb-4">
<v-col :cols="12">
<label class="search-box-label">
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
일정 종료
</label>
</v-col>
<v-col :cols="6" class="pr-2">
<!-- <DatePicker v-model="endDt" :parentPrgmId="parentPrgmId"/> -->
<div class="startpicker-container3">
<v-text-field id="startpicker3" ref="startpicker3" v-model="endDt"
:class="'v-input__custom'" :hide-details="true" readonly outlined>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div ref="startpicker-container3" id="startpicker-container3"></div>
</template>
</v-text-field>
</div>
</v-col>
<v-col :cols="6" class="pl-2">
<component :parentPrgmId="parentPrgmId" :is="'SelectBoxTime'" ref="SelectBox2"
:propsValue="selectTimeValue2" :itemList="selectTimeValueList2" :minInterval="selectBoxTimeItemList.minInterval ? selectBoxTimeItemList.minInterval : 1
" @update:propsValue="selectTimeValue2 = $event" />
</v-col>
<!-- <v-col :cols="2">
<vue-numeric-input v-model="endHh" :min="0" :max="23" controls-type="updown"
class="v-input__slot" width="100%" align="center">
</vue-numeric-input>
</v-col>
<v-col :cols="1" style="text-align: center;">
:
</v-col>
<v-col :cols="2">
<vue-numeric-input v-model="endMm" :min="0" :max="59" controls-type="updown"
class="v-input__slot" width="100%" align="center">
</vue-numeric-input>
</v-col> -->
</v-row>
<v-row no-gutters class="mb-4">
<v-col :cols="12">
<label class="search-box-label">
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
일정 제목
</label>
</v-col>
<v-col :cols="12" class="py-0">
<v-text-field v-model="planTitle" class="v-input__custom" outlined
:hide-details="true"></v-text-field>
</v-col>
</v-row>
<v-row no-gutters class="mb-4">
<v-col :cols="12">
<label class="search-box-label">
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
일정 상세 내용
</label>
</v-col>
<v-col :cols="12" class="py-0">
<v-textarea v-model="planCntn" class="v-input__custom" outlined :hide-details="true"
:maxlength="1000"></v-textarea>
</v-col>
</v-row>
<v-row no-gutters class="mb-4">
<v-col :cols="12">
<label class="search-box-label">
<v-icon small :class="['mr-1', 'icon-orange']">$icoBulletPoint</v-icon>
표시 색상
</label>
</v-col>
<v-col :cols="6">
<div class="d-flex calendar-color" style="gap:16px">
<div id="redDiv" class="colPk redBg" @click="colorClick('red')">
<div class="inner-color"></div>
</div>
</v-col>
<v-col :cols="2">
<vue-numeric-input
v-model="strtHh"
:min="0"
:max="23"
controls-type="updown"
class="v-input__slot"
width="100%"
align="center"
>
</vue-numeric-input>
</v-col>
<v-col :cols="1" style="text-align: center;">
:
</v-col>
<v-col :cols="2">
<vue-numeric-input
v-model="strtMm"
:min="0"
:max="59"
controls-type="updown"
class="v-input__slot"
width="100%"
align="center"
>
</vue-numeric-input>
</v-col>
</v-row>
<v-row>
<v-col :cols="3">
<v-row class="search-box" align="center" no-gutters>
<label class="search-box-label">
<v-icon x-small color="#fb8200" class="mr-1"
>mdi-record-circle</v-icon
>
일정 종료
</label>
</v-row>
</v-col>
<v-col :cols="4">
<!-- <DatePicker v-model="endDt" :parentPrgmId="parentPrgmId"/> -->
<div class="startpicker-container3">
<v-text-field
id="startpicker3"
ref="startpicker3"
v-model="endDt"
:class="'v-input__custom'"
:hide-details="true"
readonly
outlined
>
<template #append>
<v-icon size="20">$icoCalendar</v-icon>
</template>
<template #append-outer>
<div
ref="startpicker-container3"
id="startpicker-container3"
></div>
</template>
</v-text-field>
<div id="blueDiv" class="colPk blueBg" @click="colorClick('blue')">
<div class="inner-color"></div>
</div>
</v-col>
<v-col :cols="2">
<vue-numeric-input
v-model="endHh"
:min="0"
:max="23"
controls-type="updown"
class="v-input__slot"
width="100%"
align="center"
>
</vue-numeric-input>
</v-col>
<v-col :cols="1" style="text-align: center;">
:
</v-col>
<v-col :cols="2">
<vue-numeric-input
v-model="endMm"
:min="0"
:max="59"
controls-type="updown"
class="v-input__slot"
width="100%"
align="center"
>
</vue-numeric-input>
</v-col>
</v-row>
<v-row>
<v-col :cols="3">
<v-row class="search-box" align="center" no-gutters>
<label class="search-box-label">
<v-icon x-small color="#fb8200" class="mr-1"
>mdi-record-circle</v-icon
>
일정 제목
</label>
</v-row>
</v-col>
<v-col :cols="9">
<v-text-field
v-model="planTitle"
class="v-input__custom"
outlined
:hide-details="true"
></v-text-field>
</v-col>
</v-row>
<v-row>
<v-col :cols="3">
<v-row class="search-box" align="center" no-gutters>
<label class="search-box-label">
<v-icon x-small color="#fb8200" class="mr-1"
>mdi-record-circle</v-icon
>
일정 상세 내용
</label>
</v-row>
</v-col>
<v-col :cols="9">
<v-textarea
v-model="planCntn"
class="v-input__custom"
outlined
:hide-details="true"
:maxlength="1000"
></v-textarea>
</v-col>
</v-row>
<v-row>
<v-col :cols="3">
<v-row class="search-box" align="center" no-gutters>
<v-icon x-small color="#fb8200" class="mr-1"
>mdi-record-circle</v-icon
>
표시 색상
</v-row>
</v-col>
<v-col :cols="1">
<div
id="redDiv"
class="colPk redBg"
@click="colorClick('red')"
></div>
</v-col>
<v-col :cols="1">
<div
id="blueDiv"
class="colPk blueBg"
@click="colorClick('blue')"
></div>
</v-col>
<v-col :cols="1">
<div
id="pupleDiv"
class="colPk pupleBg"
@click="colorClick('puple')"
></div>
</v-col>
<v-col :cols="1">
<div
id="greenDiv"
class="colPk greenBg"
@click="colorClick('green')"
></div>
</v-col>
<v-col :cols="1">
<div
id="orangeDiv"
class="colPk orangeBg"
@click="colorClick('orange')"
></div>
</v-col>
<v-col :cols="1">
<div
id="pinkDiv"
class="colPk pinkBg"
@click="colorClick('pink')"
></div>
</v-col>
</v-row>
</v-col>
<div id="pupleDiv" class="colPk pupleBg" @click="colorClick('puple')">
<div class="inner-color"></div>
</div>
<div id="greenDiv" class="colPk greenBg" @click="colorClick('green')">
<div class="inner-color"></div>
</div>
<div id="orangeDiv" class="colPk orangeBg" @click="colorClick('orange')">
<div class="inner-color"></div>
</div>
<div id="pinkDiv" class="colPk pinkBg" @click="colorClick('pink')">
<div class="inner-color"></div>
</div>
</div>
</v-col>
</v-row>
</div>
</template>
<v-card-actions class="justify-end">
<v-btn :ripple="false" @click="btnAction('save')">저장</v-btn>
<v-btn
v-show="popUpAction === 'update'"
:ripple="false"
@click="btnAction('delete')"
>삭제</v-btn
>
<v-btn :ripple="false" @click="btnAction('close')">닫기</v-btn>
<a-button :ripple="false" @click="btnAction('close')" class="mr-2">닫기</a-button>
<a-button type="primary" :ripple="false" @click="btnAction('save')" class="mr-2">저장</a-button>
<a-button v-show="popUpAction === 'update'" type="danger" ghost danger :ripple="false"
@click="btnAction('delete')">삭제</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -283,6 +206,7 @@ import DatePicker from '~/components/common/Datepicker';
import mixinGlobal from '@/mixin/global.js';
import Utility from '~/plugins/utility';
import TuiDatepicker from 'tui-date-picker';
import SelectBoxTime from "@/components/common/select/SelectBoxTime";
export default {
mixins: [mixinGlobal],
@ -310,6 +234,13 @@ export default {
type: String,
require: false,
},
selectBoxTimeItemList: {
type: Object,
require: false,
default: () => {
return {};
},
},
},
components: {
InputText,
@ -323,6 +254,7 @@ export default {
Utility,
TuiDatepicker,
VueNumericInput,
SelectBoxTime,
},
data() {
return {
@ -335,8 +267,8 @@ export default {
strtMm: 0,
endHh: 1,
endMm: 0,
strtDt:null,
endDt:null,
strtDt: null,
endDt: null,
// strtDt: new Date().toISOString().substr(0, 10),
// endDt: new Date().toISOString().substr(0, 10),
planColor: '',
@ -344,8 +276,24 @@ export default {
startDatepickerInstance3: null,
planSeq: '',
blocId: '',
addPlanData:{
}
addPlanData: {
},
selectTimeValue1:
this.selectBoxTimeItemList.selectTimeValue1 != undefined
? this.selectBoxTimeItemList.selectTimeValue1
: null, // selectBoxTime에 필요한 prop
selectTimeValueList1:
this.selectBoxTimeItemList.selectTimeValueList1 != undefined
? this.selectBoxTimeItemList.selectTimeValueList1
: [], // selectBoxTime에 필요한 prop
selectTimeValue2:
this.selectBoxTimeItemList.selectTimeValue2 != undefined
? this.selectBoxTimeItemList.selectTimeValue2
: null, // selectBoxTime에 필요한 prop
selectTimeValueList2:
this.selectBoxTimeItemList.selectTimeValueList2 != undefined
? this.selectBoxTimeItemList.selectTimeValueList2
: [], // selectBoxTime에 필요한 prop
};
},
computed: {
@ -364,30 +312,34 @@ export default {
if (val) {
this.openDialog();
this.$nextTick(() => {});
this.$nextTick(() => { });
} else {
}
},
strtDt(val){
console.log('strtDt : ', val);
strtDt(val) {
// console.log('strtDt : ', val);
this.checkStrtAndEndDateTime('start');
if(this.startDatepickerInstance3){
if (this.startDatepickerInstance3) {
this.startDatepickerInstance3.setDate(new Date(this.endDt));
}
},
endDt(val){
console.log('endDt : ', val);
endDt(val) {
// console.log('endDt : ', val);
this.checkStrtAndEndDateTime('end');
if(this.startDatepickerInstance){
if (this.startDatepickerInstance) {
this.startDatepickerInstance.setDate(new Date(this.strtDt));
}
},
strtHh(val) {
// const [hh, mm] = selectTimeValue1.split(':');
// console.log(`Hours: ${hh}, Minutes: ${mm}`);
console.log('strtHh : ', val);
this.checkStrtAndEndDateTime('start');
},
endHh(val) {
console.log('endHh : ', val);
// console.log('endHh : ', val);
this.checkStrtAndEndDateTime('end');
},
strtMm(val) {
@ -396,6 +348,12 @@ export default {
endMm(val) {
this.checkStrtAndEndDateTime('end');
},
selectTimeValue1(val) {
this.setPageData({ selectTimeValue1: val });
},
selectTimeValue2(val) {
this.setPageData({ selectTimeValue2: val });
}
},
methods: {
...mapMutations({
@ -405,18 +363,18 @@ export default {
postUpdateApi: 'modules/list/postUpdateApi',
getDomain: 'modules/list/getDomain',
}),
async checkStrtAndEndDateTime(startEndFlag){
async checkStrtAndEndDateTime(startEndFlag) {
var startDateTime = this.strtDt + ' ' + this.strtHh + ':' + this.strtMm;
var endDateTime = this.endDt + ' ' + this.endHh + ':' + this.endMm;
startDateTime = new Date(startDateTime);
endDateTime = new Date(endDateTime);
if(startDateTime > endDateTime){
if(startEndFlag == 'start'){ // 시작 부분이 변경됨 -> 끝 부분 값을 변경
if (startDateTime > endDateTime) {
if (startEndFlag == 'start') { // 시작 부분이 변경됨 -> 끝 부분 값을 변경
this.endDt = this.convertDateToString(new Date(new Date().setDate(new Date(this.strtDt).getDate() + 1)));
this.startDatepickerInstance3.setDate(new Date(this.endDt));
}else if(startEndFlag == 'end'){ // 끝 부분이 변경됨 -> 시작 부분 값을 변경
} else if (startEndFlag == 'end') { // 끝 부분이 변경됨 -> 시작 부분 값을 변경
this.strtDt = this.convertDateToString(new Date(new Date().setDate(new Date(this.endDt).getDate() - 1)));
this.startDatepickerInstance.setDate(new Date(this.strtDt));
}
@ -432,17 +390,17 @@ export default {
var dt1 = new Date();
var dt2 = new Date();
if(this.strtDt){
if (this.strtDt) {
dt1 = this.strtDt;
}
if(this.endDt){
if (this.endDt) {
dt2 = this.endDt;
}
this.startDatepickerInstance = new TuiDatepicker(startContainer, {
// date: new Date(),
date : dt1,
date: dt1,
language: 'ko',
type: 'date',
input: {
@ -455,7 +413,7 @@ export default {
this.startDatepickerInstance3 = new TuiDatepicker(startContainer3, {
// date: new Date(),
date : dt2,
date: dt2,
language: 'ko',
type: 'date',
input: {
@ -492,8 +450,8 @@ export default {
this.endDt = this.convertDateToString(dt);
this.startDatepickerInstance3.setDate(new Date(this.endDt));
},
convertDateToString(dt){
return dt.getFullYear() + '-' + String(dt.getMonth()+1).padStart(2, '0') + '-' + String(dt.getDate()).padStart(2, '0');
convertDateToString(dt) {
return dt.getFullYear() + '-' + String(dt.getMonth() + 1).padStart(2, '0') + '-' + String(dt.getDate()).padStart(2, '0');
},
convertStringToDateFormat(val) {
var result = '';
@ -526,7 +484,7 @@ export default {
}
});
},
async insertPlanData(){
async insertPlanData() {
var year = this.addPlanData.year;
var month = this.addPlanData.month;
var day = this.addPlanData.day;
@ -562,8 +520,8 @@ export default {
// this.strtDt = Utility.setFormatDate(this.strtDt, 'YYYY-MM-DD');
// this.endDt = Utility.setFormatDate(this.endDt, 'YYYY-MM-DD');
this.strtDt = year + '-' + String(month).padStart(2, '0') + '-' + String(day).padStart(2, '0');
this.endDt = year + '-' + String(month).padStart(2, '0') + '-' + String(day).padStart(2, '0');
this.strtDt = year + '-' + String(month).padStart(2, '0') + '-' + String(day).padStart(2, '0');
this.endDt = year + '-' + String(month).padStart(2, '0') + '-' + String(day).padStart(2, '0');
},
async getPlanData() {
let res = await this.postApiReturn({
@ -578,10 +536,8 @@ export default {
let returnData = res[0];
this.strtDt = Utility.setFormatDate(returnData.strtDt, 'YYYY-MM-DD');
this.endDt = Utility.setFormatDate(returnData.endDt, 'YYYY-MM-DD');
this.strtHh = returnData.strtHh;
this.strtMm = returnData.strtMm;
this.endHh = returnData.endHh;
this.endMm = returnData.endMm;
this.selectTimeValue1 = returnData.strtHh+' : '+ returnData.strtMm;
this.selectTimeValue2 = returnData.endHh+' : '+ returnData.endMm;
this.planTitle = returnData.planTitle;
this.planCntn = returnData.planCntn;
this.planColor = returnData.planColor;
@ -598,10 +554,8 @@ export default {
if (
this.strtDt === '' ||
this.endDt === '' ||
this.strtHh === '' ||
this.strtMm === '' ||
this.endHh === '' ||
this.endMm === '' ||
this.selectTimeValue1 === '' ||
this.selectTimeValue2 === '' ||
this.planTitle === '' ||
this.planCntn === '' ||
this.planColor === ''
@ -615,10 +569,8 @@ export default {
if (
this.strtDt == '' ||
this.endDt == '' ||
this.strtHh == '' ||
this.strtMm == '' ||
this.endHh == '' ||
this.endMm == '' ||
this.selectTimeValue1 === '' ||
this.selectTimeValue2 === '' ||
this.planTitle == '' ||
this.planCntn == '' ||
this.planColor == ''
@ -638,13 +590,17 @@ export default {
//console.log(this);
},
async insertDetail() {
const [strtHh, strtMm] = this.selectTimeValue1 ? this.selectTimeValue1.split(':') : '00:00'.split(':');
const [endHh, endMm] = this.selectTimeValue2 ? this.selectTimeValue2.split(':') : '01:00'.split(':');
var params = {
strtDt: this.strtDt,
endDt: this.endDt,
strtHh: this.strtHh.toString(),
strtMm: this.strtMm.toString(),
endHh: this.endHh.toString(),
endMm: this.endMm.toString(),
strtHh: strtHh.trim().toString(),
strtMm: strtMm.trim().toString(),
endHh: endHh.trim().toString(),
endMm: endMm.trim().toString(),
blocId: this.blocId,
planTitle: this.planTitle,
planCntn: this.planCntn,
@ -665,13 +621,16 @@ export default {
});
},
async updateDetail() {
const [strtHh, strtMm] = this.selectTimeValue1 ? this.selectTimeValue1.split(':') : '00:00'.split(':');
const [endHh, endMm] = this.selectTimeValue2 ? this.selectTimeValue2.split(':') : '01:00'.split(':');
var params = {
strtDt: this.strtDt.substr(0, 10),
endDt: this.endDt.substr(0, 10),
strtHh: this.strtHh.toString(),
strtMm: this.strtMm.toString(),
endHh: this.endHh.toString(),
endMm: this.endMm.toString(),
strtHh: strtHh.trim().toString(),
strtMm: strtMm.trim().toString(),
endHh: endHh.trim().toString(),
endMm: endMm.trim().toString(),
planTitle: this.planTitle,
planCntn: this.planCntn,
planColor: this.planColor,
@ -786,100 +745,116 @@ export default {
.v-card__actions {
padding-bottom: 30px !important;
}
.inner-color {
width: 100%;
height: 100%;
border-radius: 4px;
}
.colPk {
width: 25px;
height: 25px;
width: 28px;
height: 28px;
text-align: center;
border-radius: 5px 5px;
border-radius: 6px 6px;
cursor: pointer;
padding: 4px
}
.colPkSelect {
border: 2px solid;
border: 1px solid #00000073;
}
.redBg {
.redBg .inner-color {
background-color: rgba(229, 62, 62, var(--bg-opacity));
background-color: #e53e3e;
background-color: #FF4D4F;
}
.blueBg {
.blueBg .inner-color {
background-color: rgba(66, 153, 225, var(--bg-opacity));
background-color: #4299e1;
background-color: #597EF7;
}
.pupleBg {
.pupleBg .inner-color {
background-color: rgba(102, 126, 234, var(--bg-opacity));
background-color: #667eea;
background-color: #9254DE;
}
.greenBg {
.greenBg .inner-color {
background-color: rgba(56, 178, 172, var(--bg-opacity));
background-color: #38b2ac;
background-color: #73D13D;
}
.orangeBg {
.orangeBg .inner-color {
background-color: rgba(237, 137, 54, var(--bg-opacity));
background-color: #ed8936;
background-color: #FFA940;
}
.pinkBg {
.pinkBg .inner-color {
background-color: rgba(237, 100, 166, var(--bg-opacity));
background-color: #ed64a6;
background-color: #F759AB;
}
}
.startpicker-container2 {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container2,
#endpicker-container2 {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.startpicker-container3 {
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container3,
#endpicker-container3 {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.v-input__custom {
flex: 0 0 auto;
&.half {
width: calc(50% - 20px);
}
}
::v-deep {
.tui-timepicker-row {
display: flex;
justify-content: space-around;
background-color: #edf4fc;
.tui-timepicker-column.tui-timepicker-colon {
color: #000 !important;
}
}
.startpicker-container2 {
position: relative;
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container2,
#endpicker-container2 {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
.startpicker-container3 {
position: relative;
.v-input {
.v-input__append-outer {
margin-top: 0;
margin-left: 0;
#startpicker-container3,
#endpicker-container3 {
width: 100%;
position: absolute;
top: 36px;
left: 0;
}
}
}
}
}
</style>

View File

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

View File

@ -1,86 +1,60 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-row class="search-box" align="center">
<!-- <v-col v-if="label" cols="2"> -->
<v-col v-if="label" :cols="labelCols">
<v-col v-if="item.label" :cols="item.labelCols" class="py-0">
<label for="" class="search-box-label">
<v-icon
x-small
:color="item.required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon v-if="item.iconShow" small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ item.label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-col :cols="item.label ? item.textCols : ''" class="py-0">
<!-- <v-col :cols="label ? 9 : ''"> -->
<!-- :value="textfield" -->
<v-text-field
readonly
v-model="selectValue"
append-icon="mdi-magnify"
class="v-input__custom"
@click="dialog = !dialog"
outlined
:hide-details="true"
:disabled="item.disabled || false"
:required="item.required || false"
></v-text-field>
<v-text-field readonly v-model="selectValue" append-icon="" class="v-input__custom"
@click="dialog = !dialog" outlined :hide-details="true" :disabled="item.disabled || false"
:required="item.required || false"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<!-- <v-row justify="center"> -->
<v-dialog
ref="popModal"
v-model="dialog"
width="600"
overlay-color="#000"
overlay-opacity="0.8"
scrollable
>
<v-dialog v-model="dialog" width="800px" scrollable>
<!-- <template v-slot:activator="{ on, attrs }">
<v-btn color="primary" dark v-bind="attrs" v-on="on">공정/설비</v-btn>
</template> -->
<v-card style="height: 100%">
<v-card-title
class="v-card__title d-flex align-center justify-space-between"
>
<v-card-title class="px-6 py-4 d-flex align-center justify-space-between">
<span class="custom-title-4">{{ item.label }}</span>
<v-btn icon tile :ripple="false" @click="dialog = !dialog">
<v-icon>mdi-close</v-icon>
</v-btn>
<a-button icon="close" type="text" @click="dialog = false"></a-button>
</v-card-title>
<!-- <v-card-actions> -->
<div class="pa-5">
<div class="pa-6 pt-0">
<!-- <v-text-field label="위치정보 선택"></v-text-field> -->
<v-row align="center" no-gutters>
<v-col v-if="label" cols="3">
<v-row align="center">
<v-col v-if="label" cols="12" class="py-0">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1"
>mdi-record-circle</v-icon
>
<v-icon small :class="['mr-1', 'icon-blue']">$icoBulletPoint</v-icon>
{{ item.label }}
</label>
</v-col>
<v-col :cols="label ? 6 : ''">
<v-col :cols="label ? 8 : ''" class="py-0">
<!-- :value="textfield" -->
<v-text-field
append-icon="mdi-magnify"
class="v-input__custom"
outlined
:hide-details="true"
v-model="searchWord"
@keyup.enter="typeEnterKey"
></v-text-field>
<v-text-field append-icon="" class="v-input__custom" outlined :hide-details="true"
v-model="searchWord" @keyup.enter="typeEnterKey"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template></v-text-field>
</v-col>
<v-spacer></v-spacer>
<v-col cols="3" class="text-right">
<v-btn :ripple="false" icon tile @click="btnTreeExpand()">
<!-- {{ treeExpand }} -->
<v-icon
size="30"
v-text="treeExpandAll ? 'mdi-chevron-up' : 'mdi-chevron-down'"
></v-icon>
</v-btn>
<!-- <v-spacer></v-spacer> -->
<v-col cols="2" class="text-right">
<a-button icon="search" type="primary" @click="search()" class="search-button">조회</a-button>
<!-- <v-btn color="primary" dark>펼치기</v-btn> -->
<!-- <v-btn color="primary" dark>접기</v-btn> -->
<!-- <v-btn :ripple="false">초기화</v-btn> -->
@ -88,8 +62,12 @@
<v-btn v-if="!searchParam.isMulti" :ripple="false" @click="search()">검색</v-btn> -->
<!-- as-is 봐도 초기화가 하는 기능을 모르겠음.. -->
</v-col>
<v-col cols="2" class="text-right"><a-button class="expand-btn" :ripple="false" @click="btnTreeExpand()">
<v-icon small>$icoExpandAlt</v-icon>
Expand All
</a-button></v-col>
</v-row>
<!-- <v-btn color="primary" dark @click="btnTreeExpand()">{{
treeExpand
}}</v-btn> -->
@ -98,45 +76,23 @@
<!-- <v-btn color="primary" dark>초기화</v-btn> -->
<!-- as-is 봐도 초기화가 하는 기능을 모르겠음.. -->
</div>
<!-- </v-card-actions> -->
<v-divider></v-divider>
<v-card-text>
<div ref="treeGridParent" style="height: 500px">
<component
:ref="'treeGrid' + parentPrgmId"
:is="loadGrid && dialog ? 'Grid' : null"
:gridName="gridNameTree"
:dataPath="searchParam.modalData.selectReadObjListTree"
:parentPrgmId="parentPrgmId"
:bindingData="bindingData"
@getRowsData="getRowData"
@dblClick="setUpdate()"
/>
<div ref="treeGridParent" style="height: 450px">
<component :ref="'treeGrid' + parentPrgmId" :is="loadGrid && dialog ? 'Grid' : null"
:gridName="gridNameTree" :dataPath="searchParam.modalData.selectReadObjListTree"
:parentPrgmId="parentPrgmId" :bindingData="bindingData" @getRowsData="getRowData"
@dblClick="setUpdate()" />
</div>
<!-- <component
:is="ftnPlcListTreeData.length > 0 ? 'Tree' : null"
:tree-data="ftnPlcListTreeData"
/> -->
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn color="primary" dark @click="setUpdate()">확인</v-btn>
<v-btn color="primary" dark @click="dialog = false">닫기</v-btn>
<!-- <v-btn
color="green darken-1"
text
@click="dialog = false"
>
Disagree
</v-btn>
<v-btn
color="green darken-1"
text
@click="dialog = false"
>
Agree
</v-btn> -->
<v-card-actions class="px-6 py-4 d-flex align-center justify-end">
<a-button :ripple="false" @click="dialog = false" class="mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
</v-dialog>
@ -308,13 +264,24 @@ export default {
gridKey: this.gridNameTree,
modalDataKey: this.modalDataKey,
value: [
{
header: '',
name: '',
align: 'center',
width: 20,
formatter: (props) => {
return `<label class="custom-radio">
<span class="radio-mark"></span>
</label>`;
}
},
{
header: '검침개소명',
name: 'readPlcNm',
width: 370,
width: 500,
align: 'left',
},
{ header: '검침개소', name: 'name', align: 'center' },
{ header: '검침개소', name: 'name', align: 'left', width: 200 },
],
});
},
@ -340,9 +307,16 @@ export default {
// console.log("treeData", res)
let myOptionsTree = {
columnOptions: {
resizable: true,
},
treeColumnOptions: {
name: 'readPlcNm',
},
header: {
height: 37,
},
rowHeight: 'auto',
};
if (this.searchParam.isMulti) {
myOptionsTree['rowHeaders'] = [{ type: 'checkbox' }];
@ -381,6 +355,8 @@ export default {
})),
});
// this.treeData = setTreeData;
this.setModalGridData({
modalKey: this.myModalKey,
gridKey: this.gridNameTree,
@ -520,33 +496,9 @@ const selectReadObjListTree = {
}
}
.tui-grid-cell.tui-grid-cell-has-tree
.tui-grid-tree-extra-content
+ .tui-grid-cell-content:before {
.tui-grid-cell.tui-grid-cell-has-tree .tui-grid-tree-extra-content+.tui-grid-cell-content:before {
content: none !important;
}
}
@each $theme in dark, light {
.v-application.#{$theme}-mode {
.v-dialog {
.v-card {
&__title {
color: map-deep-get($color, 'white', '0');
@if $theme == dark {
background-color: #2d3355;
.v-btn {
background-color: #2d3355;
}
} @else {
background-color: #3f4d7d;
.v-btn {
background-color: #3f4d7d;
}
}
}
}
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,138 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? 'auto' : ''">
<v-radio-group
v-model="selected"
required:rules="radioRules"
row
dense
:hide-details="true"
>
<v-radio
label="월별"
value="CYC_YEAR"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="일별"
value="CYC_MONTH"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="시간별"
value="CYC_DAY"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
</v-radio-group>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import Utility from '~/plugins/utility';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
label: {
type: String,
require: false,
default: '주기',
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
},
data() {
return {
labelPrepend: true,
// selected:"CYC_DAY"
};
},
computed: {
...mapState({
searchParam: state => state.pageData,
isDarkMode: 'isDarkMode',
}),
selected: {
get() {
return this.searchParam[this.parentPrgmId].cmCycle;
},
set(value) {
this.setDefaultDate(value);
return this.setPageData({ cmCycle: value });
},
},
},
watch: {},
created() {
// this.setDefaultDate(this.searchParam[this.parentPrgmId].cmCycle);
},
async mounted() {},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
...mapActions({}),
setDefaultDate(value) {
// console.log("주기에 따른 오늘 기준 기본 날짜 세팅");
const today = Utility.setFormatDate('today', 'YYYY-MM-DD');
let srartDate = '';
let endDate = '';
// console.log(value);
switch (value) {
case 'CYC_YEAR':
// endDate = today;
srartDate = Utility.setFormatDate(today, 'YYYY');
break;
case 'CYC_MONTH':
// endDate = today;
srartDate = Utility.setFormatDate(today, 'YYYY-MM');
// endDate = today;
// srartDate = Utility.setBeforetDate(
// this.searchParam[this.parentPrgmId],
// endDate,
// "YYYYMMDD"
// );
break;
case 'CYC_DAY':
// endDate = today;
srartDate = today;
break;
default:
break;
}
this.setPageData({ fromDt: srartDate });
// console.log(this.searchParam[this.parentPrgmId].cmCycle);
// console.log(this.searchParam[this.parentPrgmId].dateRange);
},
},
};
</script>
<style></style>

View File

@ -0,0 +1,113 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-radio-group
v-model="selected"
required:rules="radioRules"
row
hide-details
dense
>
<v-radio
label="태그"
value="tag"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="검침개소"
value="readPlc"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="공정"
value="ecc"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="설비"
value="eqpm"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
</v-radio-group>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import Utility from '~/plugins/utility';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
},
data() {
return {
label: '기준',
labelPrepend: true,
// selected:"CYC_DAY"
};
},
computed: {
...mapState({
isDarkMode: 'isDarkMode',
searchParam: state => state.pageData,
}),
selected: {
get() {
return this.searchParam[this.parentPrgmId].rdbStandard;
},
set(value) {
return this.setPageData({ rdbStandard: value });
},
},
},
watch: {
selected(value) {
// 주기에 따른 오늘 기준 기본 날짜 세팅
this.setDefaultDate(value);
},
},
created() {
// this.setDefaultDate(this.searchParam[this.parentPrgmId].cmCycle);
},
async mounted() {},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
...mapActions({}),
setDefaultDate(value) {
this.setPageData({ rdbStandard: value });
},
},
};
</script>
<style></style>

View File

@ -0,0 +1,99 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-radio-group
v-model="selected"
required:rules="radioRules"
row
hide-details
dense
>
<v-radio
label="사용량"
value="use"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="비용"
value="cost"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
</v-radio-group>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import Utility from '~/plugins/utility';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 7,
},
},
data() {
return {
label: '구분',
labelPrepend: true,
// selected:"CYC_DAY"
};
},
computed: {
...mapState({
isDarkMode: 'isDarkMode',
searchParam: state => state.pageData,
}),
selected: {
get() {
return this.searchParam[this.parentPrgmId].rdbUseCost;
},
set(value) {
return this.setPageData({ rdbUseCost: value });
},
},
},
watch: {
selected(value) {
// 주기에 따른 오늘 기준 기본 날짜 세팅
this.setDefaultDate(value);
},
},
created() {
// this.setDefaultDate(this.searchParam[this.parentPrgmId].cmCycle);
},
async mounted() {},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
...mapActions({}),
setDefaultDate(value) {
this.setPageData({ rdbUseCost: value });
},
},
};
</script>
<style></style>

View File

@ -0,0 +1,97 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-radio-group
v-model="selectedView"
required:rules="radioRules"
row
dense
:hide-details="true"
>
<v-radio
label="전체"
value="viewAll"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="차트"
value="viewChart"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
<v-radio
label="그리드"
value="viewGrid"
:ripple="false"
:color="isDarkMode ? '#1b74d7' : '#4777d9'"
on-icon="mdi-record-circle"
></v-radio>
</v-radio-group>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import Utility from '~/plugins/utility';
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
textCols: {
type: Number,
require: false,
default: 8,
},
},
data() {
return {
label: '',
labelPrepend: true,
// selected:"CYC_DAY"
};
},
computed: {
...mapState({
searchParam: state => state.pageData,
isDarkMode: 'isDarkMode',
}),
selectedView: {
get() {
return this.searchParam[this.parentPrgmId].viewCheck;
},
set(value) {
return this.setPageData({ viewCheck: value });
},
},
},
watch: {},
created() {
// this.setDefaultDate(this.searchParam[this.parentPrgmId].cmCycle);
},
async mounted() {},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
...mapActions({}),
},
};
</script>
<style></style>

View File

@ -7,7 +7,12 @@
>
<v-col v-if="item.label" :cols="labelCol">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
<v-icon
small
:class="['mr-1', item.required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
<!-- <v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon> -->
{{ item.label }}
</label>
</v-col>

View File

@ -3,8 +3,12 @@
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<!-- <v-icon x-small :color="'#fb8200'" class="mr-1" -->
<v-icon x-small :color="'#4777d9'" class="mr-1"
>mdi-record-circle</v-icon
<v-icon
v-if="iconShow"
small
:color="'#4777d9'"
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
@ -18,7 +22,7 @@
solo
outlined
append-icon="mdi-chevron-down"
class="v-select__custom"
:class="['v-select__custom', customClass]"
></v-select>
</v-col>
</v-row>
@ -61,12 +65,21 @@ export default {
textCols: {
type: Number,
require: false,
default: 7,
default: 12,
},
labelCols: {
type: Number,
require: false,
default: 4,
default: 12,
},
iconShow: {
type: Boolean,
require: false,
default: true
},
customClass: {
type: String,
require: false,
},
},
data() {

View File

@ -2,22 +2,16 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon x-small color="primary" class="mr-1">mdi-record-circle</v-icon>
<v-icon v-if="iconShow" small :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-select
v-model="selectValue"
:items="searchParam[parentPrgmId].blocMstrList"
label="사업장을 선택하세요"
item-text="blocNm"
item-value="idx"
solo
append-icon="mdi-chevron-down"
class="v-select__custom"
outlined
></v-select>
<v-select v-model="selectValue" :items="searchParam[parentPrgmId].blocMstrList"
item-text="blocNm" item-value="idx" append-icon="" outlined
:hide-details="true" :class="['v-select__custom', customClass]">
<template v-slot:append><v-icon>$icoChevronDown</v-icon></template>
</v-select>
</v-col>
</v-row>
</template>
@ -56,6 +50,21 @@ export default {
require: false,
default: 4,
},
required: {
type: Boolean,
require: false,
default: false
},
iconShow: {
type: Boolean,
require: false,
default: true,
},
customClass: {
type: String,
require: false,
default: null,
}
},
data() {
return {

View File

@ -2,26 +2,24 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" x-small
:color="required ? '#fb8200' : 'primary'"
class="mr-1">mdi-record-circle</v-icon>
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? textCols : ''">
<v-select
v-model="innerValue"
:items="itemList"
item-text="text"
item-value="value"
solo
outlined
:hide-details="true"
append-icon="mdi-chevron-down"
class="v-select__custom"
:disabled="disabled"
:readonly="readonly"
></v-select>
<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"
:readonly="readonly"><template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoChevronDown</v-icon>
</template></v-select>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
@ -44,12 +42,12 @@ export default {
textCols: {
type: Number,
require: false,
default: 8,
default: 12,
},
labelCols: {
type: Number,
require: false,
default: 4,
default: 12,
},
itemList: {
type: Array,
@ -61,25 +59,29 @@ export default {
require: true,
default: null,
},
required:{
type:Boolean,
require:false,
default:false
required: {
type: Boolean,
require: false,
default: false
},
iconShow:{
type:Boolean,
require:false,
default:true
iconShow: {
type: Boolean,
require: false,
default: true
},
disabled: {
type:Boolean,
require:false,
default:false
type: Boolean,
require: false,
default: false
},
readonly: {
type:Boolean,
require:false,
default:false
type: Boolean,
require: false,
default: false
},
customClass: {
type: String,
require: false,
},
},
emits: ['update:propsValue'],

View File

@ -2,9 +2,12 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" x-small
:color="required ? '#fb8200' : 'primary'"
class="mr-1">mdi-record-circle</v-icon>
<v-icon
v-if="iconShow"
small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']"
>$icoBulletPoint</v-icon
>
{{ label }}
</label>
</v-col>
@ -14,16 +17,16 @@
:items="itemList"
item-text="text"
item-value="value"
solo
outlined
:multiple="multiple"
:hide-details="true"
append-icon="mdi-chevron-down"
class="v-select__custom"
:class="['v-select__custom', customClass]"
:disabled="disabled"
:readonly="readonly"
></v-select>
<!-- @change="updateBlocCode($event)" -->
append-icon=""
><template v-slot:append>
<v-icon>$icoChevronDown</v-icon>
</template></v-select>
</v-col>
</v-row>
</template>
@ -87,6 +90,10 @@ export default {
require:false,
default:false
},
customClass: {
type: String,
require: false,
},
},
emits: ['update:propsValue'],
data() {

View File

@ -1,160 +1,171 @@
<template>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" x-small
:color="required ? '#fb8200' : 'primary'"
class="mr-1">mdi-record-circle</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? timeCols : ''">
<v-select
v-model="timeInnerValue"
:items="itemList"
item-text="text"
item-value="value"
solo
outlined
:menu-props="{auto:true, offsetY: true}"
:hide-details="true"
append-icon="mdi-chevron-down"
:class="'v-select__custom'"
:disabled="disabled"
:readonly="readonly"
@click="setDatepickerHide"
></v-select>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols">
<label for="" class="search-box-label">
<v-icon
v-if="iconShow"
x-small
:color="required ? '#fb8200' : 'primary'"
class="mr-1"
>mdi-record-circle</v-icon
>
{{ label }}
</label>
</v-col>
<v-col :cols="label ? timeCols : ''">
<v-select
v-model="timeInnerValue"
:items="itemList"
item-text="text"
item-value="value"
solo
outlined
:menu-props="{ auto: true, offsetY: true }"
:hide-details="true"
:class="'v-select__custom'"
:disabled="disabled"
:readonly="readonly"
@click="setDatepickerHide"
style="min-width: 170px;"
>
<template v-slot:append>
<a-icon
class="v-icon"
type="clock-circle"
style="width: 14px; height: 14px; color: #00000073"
/>
</template>
</v-select>
<!-- @change="updateBlocCode($event)" -->
</v-col>
</v-row>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import { mapState, mapMutations, mapActions } from "vuex";
export default {
props: {
parentPrgmId: {
type: String,
require: true,
},
autoLoad: {
type: Boolean,
require: false,
default: true,
},
label: {
type: String,
require: false,
default: null,
},
timeCols: {
type: Number,
require: false,
default: 1,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
itemList: {
type: Array,
require: true,
default: () => [],
},
propsValue: {
type: String,
require: true,
//데이터 형태: '00 : 00'
},
required:{
type:Boolean,
require:false,
default:false
},
iconShow:{
type:Boolean,
require:false,
default:true
},
disabled: {
type:Boolean,
require:false,
default:false
},
readonly: {
type:Boolean,
require:false,
default:false
},
minInterval: {
type:Number,
require:false,
default:1
}
},
emits: ['update:propsValue'],
data() {
return {};
},
computed: {
...mapState({
searchParam: state => state.pageData,
}),
timeInnerValue: {
get() {
return this.propsValue;
},
set(value) {
// console.log('value[setValue] : ', value)
this.$emit('update:propsValue', value);
},
}
},
created() {
this.getTimeList();
// console.log('created SelectBox')
// console.log('timeList : ', this.timeList);
// console.log('propsValue : ', this.propsValue);
},
methods: {
...mapMutations({ setPageData: 'setPageData' }),
...mapActions({}),
getTimeList(){
for(var i=0; i<24; i++){
let hour = i.toString().padStart(2, '0');
for(var j=0; j<60; j++){
if(j%this.minInterval===0){
let min = j.toString().padStart(2, '0');
this.itemList.push(
{
'text' : hour + ' : ' + min,
'value': hour + ' : ' + min
}
)
}
}
}
this.propsValue = this.itemList[0].value;
},
setDatepickerHide(e){
// datepicker 선택 시간 selectBox를 고를 경우 datepicker를 hidden 시키는 기능
if(document.querySelector("#startpicker-container > div") != undefined){
let datepicker1 = document.querySelector("#startpicker-container > div");
datepicker1.classList.add('tui-hidden');
}
if(document.querySelector("#endpicker-container > div") != undefined){
let datepicker2 = document.querySelector("#endpicker-container > div");
datepicker2.classList.add('tui-hidden');
}
}
},
components: {},
props: {
parentPrgmId: {
type: String,
require: true,
},
autoLoad: {
type: Boolean,
require: false,
default: true,
},
label: {
type: String,
require: false,
default: null,
},
timeCols: {
type: Number,
require: false,
default: 1,
},
labelCols: {
type: Number,
require: false,
default: 4,
},
itemList: {
type: Array,
require: true,
default: () => [],
},
propsValue: {
type: String,
require: true,
//데이터 형태: '00 : 00'
},
required: {
type: Boolean,
require: false,
default: false,
},
iconShow: {
type: Boolean,
require: false,
default: true,
},
disabled: {
type: Boolean,
require: false,
default: false,
},
readonly: {
type: Boolean,
require: false,
default: false,
},
minInterval: {
type: Number,
require: false,
default: 1,
},
},
emits: ["update:propsValue"],
data() {
return {};
},
computed: {
...mapState({
searchParam: (state) => state.pageData,
}),
timeInnerValue: {
get() {
return this.propsValue;
},
set(value) {
// console.log('value[setValue] : ', value)
this.$emit("update:propsValue", value);
},
},
},
created() {
this.getTimeList();
// console.log('created SelectBox')
// console.log('timeList : ', this.timeList);
// console.log('propsValue : ', this.propsValue);
},
methods: {
...mapMutations({ setPageData: "setPageData" }),
...mapActions({}),
getTimeList() {
for (var i = 0; i < 24; i++) {
let hour = i.toString().padStart(2, "0");
for (var j = 0; j < 60; j++) {
if (j % this.minInterval === 0) {
let min = j.toString().padStart(2, "0");
this.itemList.push({
text: hour + " : " + min,
value: hour + " : " + min,
});
}
}
}
this.propsValue = this.itemList[0].value;
},
setDatepickerHide(e) {
// datepicker 선택 중 시간 selectBox를 고를 경우 datepicker를 hidden 시키는 기능
if (document.querySelector("#startpicker-container > div") != undefined) {
let datepicker1 = document.querySelector("#startpicker-container > div");
datepicker1.classList.add("tui-hidden");
}
if (document.querySelector("#endpicker-container > div") != undefined) {
let datepicker2 = document.querySelector("#endpicker-container > div");
datepicker2.classList.add("tui-hidden");
}
},
},
};
</script>
<style lang="scss" scoped>
// .v-select__custom {
// .v-select__custom {
// &.time {
// width: calc(50%);
// }

Some files were not shown because too many files have changed in this diff Show More