Compare commits

...

9 Commits

14 changed files with 253 additions and 75 deletions

View File

@ -433,6 +433,10 @@ a {
.v-application.#{$theme}-mode { .v-application.#{$theme}-mode {
min-width: 1000px; min-width: 1000px;
.head-logo{
gap: 8px;
}
.v-navigation-drawer { .v-navigation-drawer {
background: map-deep-get($config, #{$theme}, "menu-bg-color"); background: map-deep-get($config, #{$theme}, "menu-bg-color");
} }
@ -474,7 +478,7 @@ a {
.btn-header { .btn-header {
background-color: map-deep-get($config, #{$theme}, "v-btn-header-background"); background-color: map-deep-get($config, #{$theme}, "v-btn-header-background");
border: map-deep-get($config, #{$theme}, "v-btn-header-border"); border:1px solid map-deep-get($config, #{$theme}, "v-btn-header-border");
color: map-deep-get($config, #{$theme}, "v-btn-header-text"); color: map-deep-get($config, #{$theme}, "v-btn-header-text");
} }
@ -1255,19 +1259,11 @@ a {
opacity: 0; opacity: 0;
} }
.v-list-item__content {
background-color: currentColor;
}
.v-list-item__title { .v-list-item__title {
color: map-deep-get($config, color: map-deep-get($config,
#{$theme}, #{$theme},
"tui-datepicker-calendar-color" "tui-datepicker-calendar-color"
); );
@if $theme ==light {
color: #fff !important;
}
} }
} }
} }
@ -1310,18 +1306,24 @@ a {
.btn-close-menu-list { .btn-close-menu-list {
min-width: 100px; min-width: 100px;
border-color: transparent; border-color: transparent;
background-color: map-deep-get($config, #{$theme}, "btn-header-select-bg") !important;
.v-list-item { .v-list-item {
min-height: 30px; min-height: 30px;
} }
.v-list-item__title { .v-list-item__title {
color: #fff; color: map-deep-get($config, #{$theme}, "btn-header-select-color");
&:hover { &:hover {
color: #46c0ff; color: #46c0ff;
} }
} }
.v-btn {
background-color: transparent !important;
color: map-deep-get($config, #{$theme}, "btn-header-select-color") !important;
}
} }
[hover-tooltip] { [hover-tooltip] {

View File

@ -107,6 +107,13 @@
} }
.ant-btn { .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 { &.ant-btn-primary {
background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); background: map-deep-get($config, #{$theme}, "ant-btn-primary-bg");
border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg"); border-color:map-deep-get($config, #{$theme}, "ant-btn-primary-bg");

View File

@ -1,4 +1,6 @@
.v-select__custom { .v-select__custom {
padding: 0.125rem;
&.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot { &.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot {
box-shadow: none; box-shadow: none;
} }
@ -42,6 +44,10 @@
legend { legend {
width: 0; width: 0;
} }
.v-select-list {
padding: 0 1rem;
}
} }
.v-input__custom { .v-input__custom {
@ -221,6 +227,16 @@
.v-application.#{$theme}-mode { .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-textarea {
.v-input__slot{ .v-input__slot{

View File

@ -72,11 +72,11 @@ $config: (
v-btn-backgroundColor: #144985, v-btn-backgroundColor: #144985,
v-box: #212224, v-box: #212224,
v-banner-border-color: rgba(255, 255, 255, 0.1), v-banner-border-color: rgba(255, 255, 255, 0.1),
v-treeview-node-root-backgroundColor: #18579e, v-treeview-node-root-backgroundColor: #212224,
v-treeview-node-root-label-color: #fff, v-treeview-node-root-label-color: #FFFFFFD9,
v-treeview-node-root-label-active-color: #fff, v-treeview-node-root-label-active-color: #FFFFFFD9,
v-treeview-node-root-icon-color: #fff, v-treeview-node-root-icon-color: #FFFFFFD9,
v-treeview-node-root-icon-active-color: #fff, v-treeview-node-root-icon-active-color: #FFFFFFD9,
// v-treeview-node-subroot-backgroundColor: #FFFFFF0A, // v-treeview-node-subroot-backgroundColor: #FFFFFF0A,
v-treeview-node-subroot-backgroundColor: transparent, v-treeview-node-subroot-backgroundColor: transparent,
v-treeview-node-label-color: rgba(255, 255, 255, 0.6), v-treeview-node-label-color: rgba(255, 255, 255, 0.6),
@ -152,6 +152,7 @@ $config: (
search-btn-background: #1668DC, search-btn-background: #1668DC,
v-btn-color-default: #FFFFFFD9, v-btn-color-default: #FFFFFFD9,
v-btn-bg-default: #FFFFFF2E, v-btn-bg-default: #FFFFFF2E,
v-input-popup-password-border: #424242,
v-input-textarea-border: #424242, v-input-textarea-border: #424242,
v-input-textarea-bg: #212224, v-input-textarea-bg: #212224,
v-input-textarea-color: #FFFFFFD9, v-input-textarea-color: #FFFFFFD9,
@ -166,6 +167,9 @@ $config: (
ant-btn-default-border:#FFFFFF2E, ant-btn-default-border:#FFFFFF2E,
ant-btn-default-bg:#FFFFFF2E, ant-btn-default-bg:#FFFFFF2E,
ant-btn-default-color:#FFFFFFD9, ant-btn-default-color:#FFFFFFD9,
ant-btn-default-border-outlined:#424242,
btn-header-select-bg: #1F1F1F,
btn-header-select-color:#FFFFFFD9,
), ),
light: (w-g5: $--color-gray_555, light: (w-g5: $--color-gray_555,
g5-w: $--color-white, g5-w: $--color-white,
@ -204,11 +208,11 @@ $config: (
// v-btn-backgroundColor: #fff, // v-btn-backgroundColor: #fff,
v-box: #FFFFFF, v-box: #FFFFFF,
v-banner-border-color: #ddd, v-banner-border-color: #ddd,
v-treeview-node-root-backgroundColor: #4777d9, v-treeview-node-root-backgroundColor: #FFFFFF,
v-treeview-node-root-label-color: #111, v-treeview-node-root-label-color: #000000E0,
v-treeview-node-root-label-active-color: #fff, v-treeview-node-root-label-active-color: #000000E0,
v-treeview-node-root-icon-color: #555, v-treeview-node-root-icon-color: #000000E0,
v-treeview-node-root-icon-active-color: #fff, v-treeview-node-root-icon-active-color: #000000E0,
// v-treeview-node-subroot-backgroundColor: #00000005, // v-treeview-node-subroot-backgroundColor: #00000005,
v-treeview-node-subroot-backgroundColor: transparent, v-treeview-node-subroot-backgroundColor: transparent,
v-treeview-node-label-color: #555, v-treeview-node-label-color: #555,
@ -282,6 +286,7 @@ $config: (
search-btn-background: #1677FF, search-btn-background: #1677FF,
v-btn-bg-default: #00000026, v-btn-bg-default: #00000026,
v-btn-color-default: #000000E0, v-btn-color-default: #000000E0,
v-input-popup-password-border: #D9D9D9,
v-input-textarea-border: #D9D9D9, v-input-textarea-border: #D9D9D9,
v-input-textarea-bg: #FFFFFF, v-input-textarea-bg: #FFFFFF,
v-input-textarea-color: #000000E0, v-input-textarea-color: #000000E0,
@ -296,5 +301,8 @@ $config: (
ant-btn-default-border:#00000026, ant-btn-default-border:#00000026,
ant-btn-default-bg:#00000026, ant-btn-default-bg:#00000026,
ant-btn-default-color:#000000E0, ant-btn-default-color:#000000E0,
ant-btn-default-border-outlined:#D9D9D9,
btn-header-select-color:#1F1F1F,
btn-header-select-bg:#FFFFFF,
), ),
); );

View File

@ -27,7 +27,7 @@
/> --> /> -->
</template> </template>
<v-list class="pa-2"> <v-list class="pa-2 btn-close-menu-list" >
<!-- <v-list-item class="mb-1">--> <!-- <v-list-item class="mb-1">-->
<!-- <div class="d-flex align-center">--> <!-- <div class="d-flex align-center">-->
<!-- <v-avatar class="mr-1" size="20">--> <!-- <v-avatar class="mr-1" size="20">-->

View File

@ -1,9 +1,11 @@
<template> <template>
<v-switch <a-button
class="theme-switch" class="btn-header"
v-model="mode" :color="mode ? 'dark' : 'light'"
@change="themeChange" @click="themeChange"
></v-switch> icon="bulb"
>
</a-button>
</template> </template>
<script> <script>
import { mapState, mapMutations } from 'vuex'; import { mapState, mapMutations } from 'vuex';
@ -26,8 +28,11 @@ export default {
setThemeChange: 'setThemeChange', setThemeChange: 'setThemeChange',
}), }),
themeChange() { themeChange() {
this.mode = !this.mode;
this.$vuetify.theme.isDark = this.mode; this.$vuetify.theme.isDark = this.mode;
this.setThemeChange(this.mode); this.setThemeChange(this.mode);
console.log(this.mode)
console.log(this.$vuetify.theme.isDark)
}, },
}, },
}; };
@ -69,12 +74,14 @@ export default {
background-color: #f2f2f2; background-color: #f2f2f2;
top: 2px; top: 2px;
left: 0; 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-size: 18px 18px;
background-position: center center; background-position: center center;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
} }
&.v-input--is-label-active { &.v-input--is-label-active {
::v-deep { ::v-deep {
.v-input--switch__track { .v-input--switch__track {
@ -82,7 +89,8 @@ export default {
} }
.v-input--switch__thumb { .v-input--switch__thumb {
// transform: translate(38px, 0); // transform: translate(38px, 0);
background-image: url(../../assets/images/icon/ico-theme-dark.png); // background-image: url(../../assets/images/icon/ico-theme-dark.png);
content: 'dark';
} }
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<v-row class="search-box" align="center" no-gutters> <v-row class="search-box" align="center" no-gutters>
<v-col v-if="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"> <label for="" class="search-box-label">
<v-icon <v-icon
x-small x-small
@ -28,10 +28,14 @@
></v-text-field> ></v-text-field>
</template> </template>
<template v-else> <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> <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> </template>
</v-col> </v-col>
@ -48,7 +52,7 @@
</label> </label>
<v-text-field <v-text-field
v-model.trim="firstPswd" v-model.trim="firstPswd"
class="v-input__custom" class="v-input-popup__custom"
type="password" type="password"
:readonly="!isFocused" :readonly="!isFocused"
@focus="isFocused = true" @focus="isFocused = true"
@ -61,7 +65,7 @@
</label> </label>
<v-text-field <v-text-field
v-model.trim="secondPswd" v-model.trim="secondPswd"
class="v-input__custom" class="v-input-popup__custom"
type="password" type="password"
:readonly="!isFocused" :readonly="!isFocused"
@focus="isFocused = true" @focus="isFocused = true"
@ -72,8 +76,15 @@
<v-divider></v-divider> <v-divider></v-divider>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn color="primary" dark @click="setUpdate()">확인</v-btn> <!-- <v-btn color="primary" dark @click="setUpdate()">확인</v-btn> -->
<v-btn color="primary" dark @click="close()">닫기</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-actions>
</v-card> </v-card>
</v-dialog> </v-dialog>
@ -135,8 +146,10 @@ export default {
} else { } else {
return ''; return '';
} }
console.log(value)
}, },
set(value) { set(value) {
console.log(value)
return value; return value;
}, },
}, },

View File

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

View File

@ -7,7 +7,7 @@
</div> </div>
<div ref="gridParent"> <div ref="gridParent">
<Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId" <Grid :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="parentPrgmId"
@getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" :dataPath="dataPathMock" /> @getRowsData="getRowData" :innerTabGridInfo="innerTabGridInfo" />
</div> </div>
<div ref="formParent" class="mt-4"> <div ref="formParent" class="mt-4">
<component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList" <component :is="'Form'" :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"

View File

@ -4,7 +4,7 @@
<fullscreen :fullscreen.sync="fullscreen"> <fullscreen :fullscreen.sync="fullscreen">
<div class="header"> <div class="header">
<v-row class="mx-0"> <v-row class="mx-0">
<div class="head-logo pl-4"> <div class="head-logo pl-4 d-flex gap-3">
<router-link class="home" :to="myHome.root"> <router-link class="home" :to="myHome.root">
<div class="lnb-logo"> <div class="lnb-logo">
<img v-if="isDarkMode" src="@/assets/images/logo_dm.png" /> <img v-if="isDarkMode" src="@/assets/images/logo_dm.png" />
@ -13,9 +13,11 @@
</div> </div>
<!-- <div class="lnb-logo">FEMS</div>--> <!-- <div class="lnb-logo">FEMS</div>-->
</router-link> </router-link>
<div class="align-center d-flex">
<ThemeSwitch style="margin-right: 20px" />
</div>
</div> </div>
<v-col col="1" class="d-flex justify-end py-4 px-6 flex-row" style="gap: 8px;"> <v-col col="1" class="d-flex justify-end py-4 px-6 flex-row" style="gap: 8px;">
<ThemeSwitch style="margin-right: 20px" />
<v-menu offset-y> <v-menu offset-y>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<a-button :ripple="false" tile class="btn-header" v-bind="attrs" v-on="on"> <a-button :ripple="false" tile class="btn-header" v-bind="attrs" v-on="on">
@ -26,9 +28,7 @@
<span class="body-2">닫기</span> <span class="body-2">닫기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button> --> <v-icon size="20">mdi-chevron-down</v-icon></a-button> -->
</template> </template>
<v-list class="py-2 btn-close-menu-list" :style="{ <v-list class="py-2 btn-close-menu-list">
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}">
<v-list-item class="px-2"> <v-list-item class="px-2">
<v-list-item-title @click="delAllTabsData()" class="body-2">전체 닫기</v-list-item-title> <v-list-item-title @click="delAllTabsData()" class="body-2">전체 닫기</v-list-item-title>
</v-list-item> </v-list-item>
@ -54,9 +54,7 @@
<span class="body-2">즐겨찾기</span> <span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button> --> <v-icon size="20">mdi-chevron-down</v-icon></a-button> -->
</template> </template>
<v-list v-if="myMenuList.length > 0" class="py-2 btn-close-menu-list" :style="{ <v-list v-if="myMenuList.length > 0" class="py-2 btn-close-menu-list">
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}">
<v-list-item v-for="item in myMenuList" :key="item.menuId" class="px-2" style="cursor: pointer"> <v-list-item v-for="item in myMenuList" :key="item.menuId" class="px-2" style="cursor: pointer">
<v-list-item-title @click="moveToMyMenu(item.url, item.menuId, item.prgmId)" class="body-2">{{ <v-list-item-title @click="moveToMyMenu(item.url, item.menuId, item.prgmId)" class="body-2">{{
item.menuNm item.menuNm
@ -67,7 +65,9 @@
<a-button id="refresh" class="btn-header" @click="removeBookMark" v-if="bookmarkBtn == 1"> <a-button id="refresh" class="btn-header" @click="removeBookMark" v-if="bookmarkBtn == 1">
<span class="material-icons" style="font-size: 17px">star</span> <span class="material-icons" style="font-size: 17px">star</span>
</a-button> </a-button>
<a-button id="refresh" class="btn-header" @click="addBookMark" v-if="bookmarkBtn == 0"> <a-button id="refresh" class="btn-header" :style="{
display: 'flex',
alignItems: 'center'}" @click="addBookMark" v-if="bookmarkBtn == 0">
<span class="material-icons" style="font-size: 17px">star_border</span> <span class="material-icons" style="font-size: 17px">star_border</span>
</a-button> </a-button>
<a-button <a-button
@ -102,7 +102,9 @@
<img v-else src="@/assets/images/logo_lm.png" /> <img v-else src="@/assets/images/logo_lm.png" />
</div> </div>
<!-- <div class="lnb-logo">FEMS</div>--> <!-- <div class="lnb-logo">FEMS</div>-->
</router-link> </router-link>
<ThemeSwitch style="margin-right: 20px" />
<v-app-bar-nav-icon ref="appbarnavicon" id="appbarnavicon" @click.stop="miniVariant = !miniVariant" <v-app-bar-nav-icon ref="appbarnavicon" id="appbarnavicon" @click.stop="miniVariant = !miniVariant"
@click="updateTreeview" :style="{ @click="updateTreeview" :style="{
backgroundColor: 'transparent', backgroundColor: 'transparent',
@ -164,7 +166,6 @@
<v-icon size="20" class="ml-2" v-if="closable" @click.stop="onCloseTab(to)">mdi-close</v-icon> <v-icon size="20" class="ml-2" v-if="closable" @click.stop="onCloseTab(to)">mdi-close</v-icon>
</template> </template>
<template #end v-if="false"> <template #end v-if="false">
<ThemeSwitch style="margin-right: 20px" />
<v-menu offset-y> <v-menu offset-y>
<template v-slot:activator="{ on, attrs }"> <template v-slot:activator="{ on, attrs }">
<!-- <v-btn :ripple="false" tile class="btn-close" v-bind="attrs" v-on="on"> <!-- <v-btn :ripple="false" tile class="btn-close" v-bind="attrs" v-on="on">
@ -175,9 +176,7 @@
<span class="body-2">닫기</span> <span class="body-2">닫기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button> <v-icon size="20">mdi-chevron-down</v-icon></a-button>
</template> </template>
<v-list class="py-2 btn-close-menu-list" :style="{ <v-list class="py-2 btn-close-menu-list" >
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}">
<v-list-item class="px-2"> <v-list-item class="px-2">
<v-list-item-title @click="delAllTabsData()" class="body-2">전체 닫기</v-list-item-title> <v-list-item-title @click="delAllTabsData()" class="body-2">전체 닫기</v-list-item-title>
</v-list-item> </v-list-item>
@ -203,9 +202,7 @@
<span class="body-2">즐겨찾기</span> <span class="body-2">즐겨찾기</span>
<v-icon size="20">mdi-chevron-down</v-icon></a-button> <v-icon size="20">mdi-chevron-down</v-icon></a-button>
</template> </template>
<v-list v-if="myMenuList.length > 0" class="py-2 btn-close-menu-list" :style="{ <v-list v-if="myMenuList.length > 0" class="py-2 btn-close-menu-list" >
backgroundColor: isDarkMode ? '#144985' : '#3f4d7d',
}">
<v-list-item v-for="item in myMenuList" :key="item.menuId" class="px-2" style="cursor: pointer"> <v-list-item v-for="item in myMenuList" :key="item.menuId" class="px-2" style="cursor: pointer">
<v-list-item-title @click="moveToMyMenu(item.url, item.menuId, item.prgmId)" class="body-2">{{ <v-list-item-title @click="moveToMyMenu(item.url, item.menuId, item.prgmId)" class="body-2">{{
item.menuNm item.menuNm

View File

@ -4,13 +4,14 @@
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
<v-card class="searchFilter"> <v-card class="searchFilter">
<v-row align="center" no-gutters> <v-row align="end" no-gutters>
<v-col :cols="3"> <v-col :cols="3">
<!-- 사업장 --> <!-- 사업장 -->
<component <component
:is="'SelectBlocMstr'" :is="'SelectBlocMstr'"
:parentPrgmId="myPrgmId" :parentPrgmId="myPrgmId"
:sendParam="{ comId }" :sendParam="{ comId }"
customClass="select-large"
/> />
<!-- <component <!-- <component
:is="'selectCodeList'" :is="'selectCodeList'"
@ -35,6 +36,7 @@
label="로그인ID" label="로그인ID"
valueNm="userLoginId" valueNm="userLoginId"
:searchOption="true" :searchOption="true"
customClass="input-large"
/> />
</v-col> </v-col>
<v-col :cols="3"> <v-col :cols="3">
@ -43,10 +45,11 @@
label="사용자명" label="사용자명"
valueNm="userNm" valueNm="userNm"
:searchOption="true" :searchOption="true"
customClass="input-large"
/> />
</v-col> </v-col>
<v-col :cols="3" class="text-right"> <v-col :cols="3" class="text-right">
<BtnSearch /> <BtnSearch size="large"/>
</v-col> </v-col>
</v-row> </v-row>
</v-card> </v-card>
@ -76,6 +79,7 @@
@getRowsData="getRowData" @getRowsData="getRowData"
@sendSelectedRowStatInfo="getSelectedRowStatInfo" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" :selectedRowDataWatchFlag="true"
:dataPath="dataPathMock"
/> />
</div> </div>
</div> </div>
@ -303,10 +307,40 @@ export default {
}, },
methods: { methods: {
async init() { async init() {
await this.gridInit(); this.gridInit();
}, },
gridInitTest() {
const rowGrid = {
column: [
{ header: '사용자No', name: 'userNo', align: 'center', hidden: true },
{ header: '사용자명', name: 'userNm' },
{ header: '사용자ID', name: 'userLoginId' },
{ header: '사용자비밀번호', name: 'userPswd', hidden: true },
{ header: '사업장', name: 'blocId', hidden: true },
{ header: 'email', name: 'email', hidden: true },
{ header: '등록자NO', name: 'regUserNo', hidden: true },
{ header: '등록일시', name: 'regDttm', hidden: true },
{ header: '수정자NO', name: 'procUserNo', hidden: true },
{ header: '수정일시', name: 'procDttm', hidden: true },
{ header: 'comId', name: 'comId', hidden: true },
{ header: 'deptId', name: 'deptId', hidden: true },
],
data: dataMockExample,
defaultRow: dataMockExample,
option: [],
}
this.dataPathMock = {rowGrid};
this.$nextTick(() => {
this.loadGrid = true;
});
},
// 사용자 리스트 그리드 세팅 // 사용자 리스트 그리드 세팅
gridInit() { gridInit() {
// this.gridInitTest(); return
const gridHeight = this.$refs.gridParent.offsetHeight - 90; const gridHeight = this.$refs.gridParent.offsetHeight - 90;
const myOptions = { const myOptions = {
@ -937,7 +971,10 @@ const myDetail = blocCdList => {
elseDisabled: 'I', // 선택적 disabled => rowStat 상태가 해당 값이 아닐경우 true elseDisabled: 'I', // 선택적 disabled => rowStat 상태가 해당 값이 아닐경우 true
readonly: true, readonly: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
required: false, required: false,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
@ -946,7 +983,10 @@ const myDetail = blocCdList => {
label: '사용자ID', label: '사용자ID',
valueNm: 'userLoginId', valueNm: 'userLoginId',
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
required: true, required: true,
}, },
{ {
@ -956,7 +996,10 @@ const myDetail = blocCdList => {
valueNm: 'userPswd', valueNm: 'userPswd',
// disabled: true, // disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
required: true, required: true,
}, },
{ {
@ -964,7 +1007,10 @@ const myDetail = blocCdList => {
label: '사용자명', label: '사용자명',
valueNm: 'userNm', valueNm: 'userNm',
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
required: true, required: true,
}, },
{ {
@ -972,7 +1018,10 @@ const myDetail = blocCdList => {
label: '사업장', label: '사업장',
valueNm: 'blocId', valueNm: 'blocId',
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
list: blocCdList.map(item => ({ list: blocCdList.map(item => ({
text: item.blocNm, text: item.blocNm,
value: item.blocId, value: item.blocId,
@ -984,7 +1033,10 @@ const myDetail = blocCdList => {
label: 'email', label: 'email',
valueNm: 'email', valueNm: 'email',
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
}, },
{ {
type: 'InputText', type: 'InputText',
@ -992,7 +1044,10 @@ const myDetail = blocCdList => {
valueNm: 'regUserNo', valueNm: 'regUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
{ {
@ -1001,7 +1056,10 @@ const myDetail = blocCdList => {
valueNm: 'regDttm', valueNm: 'regDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
{ {
@ -1010,7 +1068,10 @@ const myDetail = blocCdList => {
valueNm: 'procUserNo', valueNm: 'procUserNo',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
{ {
@ -1019,7 +1080,10 @@ const myDetail = blocCdList => {
valueNm: 'procDttm', valueNm: 'procDttm',
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-2', labelCols: 12,
textCols: 12,
class: 'py-2 pr-4',
iconShow: true,
placeholder: '시스템 자동입력', placeholder: '시스템 자동입력',
}, },
]; ];
@ -1036,4 +1100,67 @@ function sha512(str) {
.update(str) .update(str)
.digest('hex'); .digest('hex');
} }
const dataMockExample = [
{
userNo: 1,
userNm: '홍길동',
userLoginId: 'hong123',
userPswd: 'password123',
blocId: 'B001',
email: 'hong@example.com',
regUserNo: 100,
regDttm: '2025-07-01 10:00:00',
procUserNo: 101,
procDttm: '2025-07-15 14:30:00',
comId: 'C001',
deptId: 'D001'
},
{
userNo: 2,
userNm: '김영희',
userLoginId: 'kimyh',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
},
{
userNo: 3,
userNm: '관리자',
userLoginId: 'user',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
},
{
userNo: 4,
userNm: '사용자',
userLoginId: 'admin',
userPswd: 'securePass456',
blocId: 'B002',
email: 'kim@example.com',
regUserNo: 102,
regDttm: '2025-07-02 11:20:00',
procUserNo: 103,
procDttm: '2025-07-16 09:45:00',
comId: 'C002',
deptId: 'D002'
}
];
</script> </script>

View File

@ -44,7 +44,7 @@
<div class="px-5" style="min-height:calc(100% - 76px)"> <div class="px-5" style="min-height:calc(100% - 76px)">
<div ref="gridParent" class="w100 h100"> <div ref="gridParent" class="w100 h100">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId" <component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName" :parentPrgmId="myPrgmId"
@getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo" :dataPath="dataPathMock" @getRowsData="getRowData" @sendSelectedRowStatInfo="getSelectedRowStatInfo"
:selectedRowDataWatchFlag="true" /> :selectedRowDataWatchFlag="true" />
</div> </div>
</div> </div>

View File

@ -266,8 +266,8 @@ export default {
}, },
created() { }, created() { },
async mounted() { async mounted() {
console.log('----DEBUG---'); // console.log('----DEBUG---');
await this.initTest(); // await this.initTest();
// End Debug Test--- // End Debug Test---
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;

View File

@ -275,11 +275,11 @@ export default {
} }
} }
.v-btn { .v-btn {
@if $theme == dark { // @if $theme == dark {
background-color: #18579e; // background-color: #18579e;
} @else { // } @else {
background-color: #3f4d7d; // background-color: #3f4d7d;
} // }
} }
} }
} }