Compare commits

...

14 Commits

Author SHA1 Message Date
dev
4a20707c62 Merge pull request 'Update 0729' (#92) from dev-trungvq7-0729 into dev
Reviewed-on: #92
2025-08-21 18:24:20 +09:00
dev
f35924aac8 Update 0729 2025-08-21 18:18:44 +09:00
dev
8d613e14d3 Merge pull request 'fix bug screen 8' (#91) from dev-dungtv-0821 into dev
Reviewed-on: #91
2025-08-21 17:49:11 +09:00
9212c636cf fix bug screen 8 2025-08-21 15:47:41 +07:00
dev
50fee505fe Merge pull request 'add effect loading when change theme mode' (#90) from dev-dungtv-0821 into dev
Reviewed-on: #90
2025-08-21 16:38:13 +09:00
dev
9459291a8e Merge pull request 'Add not hide grid when paging' (#89) from dev-nghiantt-fix-bugs into dev
Reviewed-on: #89
2025-08-21 16:37:14 +09:00
dev
f633eb413a Merge pull request 'fix bug' (#88) from dev-manhph1-figbug into dev
Reviewed-on: #88
2025-08-21 16:36:03 +09:00
9000afc00d add effect loading when change theme mode 2025-08-21 14:33:38 +07:00
ee1bd87817 Add not hide grid when paging 2025-08-21 15:49:38 +09:00
8bfcebdd10 fix bug 2025-08-21 15:48:01 +09:00
dev
af3a7c78f2 Merge pull request 'fix bugs grid on popup' (#86) from dev-dungtv-0821 into dev
Reviewed-on: #86
2025-08-21 12:47:10 +09:00
dev
60b7cfa7e9 Merge pull request 'update code' (#87) from dev-luannv24-fixbugs17 into dev
Reviewed-on: #87
2025-08-21 12:46:45 +09:00
cd1abec719 resolve comment 2025-08-21 10:43:44 +07:00
20211168e9 fix bugs grid on popup 2025-08-21 10:37:17 +07:00
14 changed files with 150 additions and 121 deletions

View File

@ -448,8 +448,8 @@
.router-tab {
.router-tab__header {
background-color: map-deep-get($config, #{$theme}, "router-header");
border-color: map-deep-get($config, #{$theme}, "router-header");
// background-color: map-deep-get($config, #{$theme}, "router-header");
// border-color: map-deep-get($config, #{$theme}, "router-header");
height: 46px;
z-index: 7;
max-width: calc(100vw - 290px);

View File

@ -173,8 +173,9 @@ export default {
this.gridScrollTop = e.target.scrollTop;
this.gridScrollLeft = e.target.scrollLeft;
});
if (!(this.scrollBody.scrollHeight > this.scrollBody.clientHeight)) {
if (this.scrollBody.scrollHeight > this.scrollBody.clientHeight) {
this.gridInstance.$el.getElementsByClassName('tui-grid-content-area')[0].classList.remove('tui-grid-no-scroll-y');
} else {
this.gridInstance.$el.getElementsByClassName('tui-grid-content-area')[0].classList.add('tui-grid-no-scroll-y');
}
}

View File

@ -58,6 +58,11 @@ export default {
require: false,
default: false,
},
required: {
type: Boolean,
require: false,
default: false,
},
labelCols: {
type: Number,
require: false,

View File

@ -2,17 +2,14 @@
<v-row class="search-box" align="center" no-gutters>
<v-col v-if="label" :cols="labelCols" class="mr-2">
<label for="" class="search-box-label">
<v-icon v-if="iconShow" small
:class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
<v-icon v-if="iconShow" small :class="['mr-1', required ? 'icon-orange' : 'icon-blue']">$icoBulletPoint</v-icon>
{{ label }}
</label>
</v-col>
<v-col :cols="textCols">
<v-text-field readonly v-model="selectValue" append-icon="" :class="['v-input__custom', customClass]"
@click="dialogOpenCloseEvent(dialog)" outlined :hide-details="true" :required="required || false"
:disabled="disabled || false"
:placeholder="placeholder"
>
:disabled="disabled || false" :placeholder="placeholder">
<template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
@ -31,17 +28,17 @@
<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" />
<component :is="'SelectBox'" :propsValue="selectValue01" :itemList="selectValueList01" :label="'설비그룹'"
:disabled="eqpmGrpDisabled" @update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:iconShow="true" />
</v-col>
<v-col>
<!-- FAB -->
<component :is="'SelectBoxMulti'" :propsValue="selectValue02" :itemList="selectValueList02"
:label="'FAB'" :labelCols="12" :multiple="true" :disabled="fabDisabled"
@update:propsValue="selectValue02 = $event" :textCols="12" :iconShow="true" />
<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 >
<v-col>
<v-row>
<v-col :cols="12" class="py-0">
<label for="" class="search-box-label">
@ -86,15 +83,16 @@
</div>
<div class="pa-5" style="height:calc(100% - 30px)">
<div ref="modalGridParent" class="h100 w100">
<div ref="modalGridParent" :class="['h100', 'w100', isDarkMode ? 'dark-mode' : 'light-mode']">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null"
:dataPath="searchParam.eqpmSelectPopData.eqpmSelectPop" :gridName="gridName"
:parentPrgmId="parentPrgmId" @getRowsData="getRowData" />
: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="ant-btn-popup-default mr-2">닫기</a-button>
<a-button :ripple="false" @click="dialogOpenCloseEvent(dialog)"
class="ant-btn-popup-default mr-2">닫기</a-button>
<a-button :ripple="false" type="primary" @click="setUpdate($event)">확인</a-button>
</v-card-actions>
</v-card>
@ -247,6 +245,7 @@ export default {
eqpmKindId: data.eqpmKindId,
}
},
isDarkMode: "isDarkMode",
}),
selectValue: {
get() {
@ -400,7 +399,6 @@ export default {
header: {
height: 'auto',
},
// rowHeaders:[{ type: 'checkbox' }],
rowHeight: 'auto',
};
if (this.isMulti) {
@ -408,8 +406,6 @@ export default {
myOptions['rowHeight'] = 'auto';
}
this.setModalGridOption({
modalKey: this.myModalKey,
gridKey: this.gridName,
@ -463,8 +459,6 @@ export default {
modalDataKey: this.modalDataKey,
value: myColumns,
});
// this.getRowGridData();
},
async getRowGridData() {
@ -588,6 +582,35 @@ var eqpmSelectPop = {
overflow-y: hidden;
}
.tui-grid-lside-area {
.tui-grid-table {
.tui-grid-cell-header {
&.tui-grid-cell {
input[type=checkbox] {
margin-top: 0px;
}
}
}
}
}
}
@each $theme in dark, light {
@include theme($theme);
.#{$theme}-mode {
::v-deep {
.tui-grid-lside-area {
.tui-grid-table{
border-right: 1px solid map-deep-get($config,
#{$theme},
"tui-grid-border-vertical-color"
) !important;
}
}
}
}
}
</style>

View File

@ -104,7 +104,9 @@
:items="treevieItems" activatable hoverable color="#3896ff" open-on-click @update:open="openNode">
<template slot="label" slot-scope="{ item }">
<button :class="{ 'justify-center': miniVariant }" @mouseover="doMouseOver">
<!-- <span v-if="['MNU0065', 'MNU0027'].includes(item.menuId)" >
{{ item }}
</span> -->
<v-icon
v-if="item.lvl === 1 && menuIconKeys.includes(item.menuId)"
:class="{ 'mr-2': !miniVariant }"
@ -142,8 +144,12 @@
</v-navigation-drawer>
</div>
<v-col>
<router-tab ref="routerTab" :tabs="treevieItems" :keep-last-tab="false" :contextmenu="false">
<v-col :class="`${isDarkMode ? 'dark' : 'light'}`">
<router-tab ref="routerTab"
:tabs="treevieItems"
:keep-last-tab="false"
:contextmenu="false"
>
<template slot-scope="{ title, closable, to, base }">
<span>{{ title }}</span>
<v-icon size="20" class="ml-2" v-if="closable" @click.stop="onCloseTab(to)">mdi-close</v-icon>
@ -341,6 +347,12 @@ export default {
//console.log("localPageData", this.pageData);
},
},
isDarkMode(){
this.loadingStackCnt = 1;
setTimeout(() => {
this.loadingStackCnt = 0;
}, 1000);
},
// menuLink: {
// deep: true,
// handler() {
@ -700,4 +712,17 @@ export default {
<style lang="scss" scoped>
@import '@/assets/scss/layout.scss';
</style>
<style lang="scss">
.light .router-tab .router-tab__header {
background-color: #fff;
border-color: #fff;
}
.dark .router-tab .router-tab__header {
background-color: #212224;
border-color: #212224;
}
</style>

View File

@ -143,7 +143,7 @@ export default {
chkIsFind(val) {
if (val) {
this.page = 1;
this.search();
this.search(false);
}
},
chkExecRsltCd() {
@ -249,14 +249,16 @@ export default {
this.loadGrid = true;
},
async search() {
await this.getRowGridData();
async search(isPaging) {
await this.getRowGridData(isPaging);
await this.setPageData({
isFind: false,
});
},
async getRowGridData() {
async getRowGridData(isPaging) {
if(!isPaging) {
this.loadGrid = false;
}
// this.setGridData({
// gridKey: this.gridName,
// value: [],
@ -369,7 +371,7 @@ export default {
this.page = pageNum;
this.limit = limit;
this.search();
this.search(true);
},
},
};

View File

@ -426,7 +426,7 @@ export default {
}
},
search() {
this.getGridData();
this.getGridData(false);
},
gridInit() {
const gridHeight = this.$refs.contents.offsetHeight - 120;
@ -498,18 +498,18 @@ export default {
});
this.getGridData();
},
async getGridData() {
async getGridData(isPaging) {
var params = {
bordNo: 'BORD0001',
limit: this.limit,
page: this.page,
offset: (this.page - 1) * this.limit, // MariaDB Query에서 직접 계산이 안됨
};
if(!isPaging) {
this.loadGrid = false;
}
const res = await this.postApiReturn({
apiKey: 'selectPostPage',
apiKey: 'selectPostData',
resKey: 'postPage',
sendParam: params,
});
@ -1059,7 +1059,8 @@ export default {
this.page = pageNum;
this.limit = limit;
this.search();
// this.search();
this.getGridData(true);
},
},
};

View File

@ -63,7 +63,7 @@
<v-tabs-items v-model="tab" style="height: calc(100% - 65px);" class="pt-6 py-2">
<v-tab-item v-for="(item, idx) in items" :key="item.id">
<component v-if="item.id == 'readPlcBaseInfoTab'" :is="'Form'" :parentPrgmId="myPrgmId"
:detailList="f" :bindingData="gridName"
:detailList="detailList" :bindingData="gridName"
@gridEditingFinish="gridEditingFinish" />
<ReadPlcAddInfoTab v-if="item.id == 'readPlcAddInfoTab'" :parentPrgmId="myPrgmId"
:innerTabGridInfo="{ tab, idx }" />
@ -923,51 +923,6 @@ const defaultData = {
},
};
const sampleData = [
{
readPlcNm: '서울 본사',
plcKind: '본사',
useFg: '사용',
_children: [
{
readPlcNm: '서울 본사 - 1층',
plcKind: '층',
useFg: '사용',
},
{
readPlcNm: '서울 본사 - 2층',
plcKind: '층',
useFg: '미사용',
},
],
},
{
readPlcNm: '부산 지사',
plcKind: '지사',
useFg: '사용',
_children: [
{
readPlcNm: '부산 지사 - A동',
plcKind: '건물',
useFg: '사용',
_children: [
{
readPlcNm: '부산 지사 - A동 1층',
plcKind: '층',
useFg: '사용',
},
],
},
],
},
{
readPlcNm: '대전 창고',
plcKind: '창고',
useFg: '미사용',
},
];
const myDetail = [
{
type: 'InputText',

View File

@ -12,7 +12,7 @@
</v-col>
<v-col :cols="3">
<component :is="'EvtObjPop'" :parentPrgmId="myPrgmId" :item="evtObjPopItem"
class="no-gutters" customClass="select-large" />
class="no-gutters" customClass="select-large pa-0" />
</v-col>
<v-col :cols="3">
<!-- 대상일 -->
@ -144,17 +144,17 @@ export default {
chkIsFind(val) {
if (val) {
this.page = 1;
this.search();
this.search(false);
}
},
chkTagId(val) {
if (this.initFlag && val != null) {
this.search();
this.search(false);
}
},
chkTagNm() {
if (this.initFlag) {
this.search();
this.search(false);
}
},
chkReadPlcId() {
@ -193,13 +193,13 @@ export default {
postApiReturn: 'modules/list/postApiReturn',
chkOpenTabList: 'chkOpenTabList',
}),
async search() {
async search(isPaging) {
// this.gridInit();
if (this.initFlag) {
if (this.pageData.tagId == '' || this.pageData.tagId == null) {
alert('TAG를 선택해 주세요');
} else {
this.getRowGridData();
this.getRowGridData(isPaging);
}
}
this.setPageData({
@ -289,9 +289,10 @@ export default {
this.loadGrid = true;
},
async getRowGridData() {
async getRowGridData(isPaging) {
if(!isPaging) {
this.loadGrid = false;
}
let res = [];
let res2 = [];
let yearQuarterData = [];
@ -476,7 +477,7 @@ export default {
this.page = pageNum;
this.limit = limit;
this.search();
this.search(true);
},
},
};

View File

@ -129,10 +129,20 @@ let myPrgmId;
export default {
mixins: [mixinGlobal, resize],
async asyncData(context) {
const myState = context.store.state;
// console.log('----DEBUG-----ReadResultCloseMngPage--asyncData:', Utility.setFormatDate(new Date(), "YYYYMMDD"));
try{
myPrgmId = context.route.query.prgmId;
await context.store.commit("setActiveMenuInfo", myState.menuData[myPrgmId]);
const myState = context.store.state;
const activeMenuInfo = myState.menuData[myPrgmId];
myTitle = activeMenuInfo.menuNm;
// console.log('-----DEBUG----store.commit----setActiveMenuInfo:', activeMenuInfo);
await context.store.commit("setActiveMenuInfo", activeMenuInfo);
myTitle = await myState.activeMenuInfo.menuNm;
// console.log('-----DEBUG----store.commit----setActiveMenuInfo---Compeleted:', myState.activeMenuInfo);
}catch(err){
// console.log('-----DEBUG----err', err);
}
},
meta: {
title: () => {
@ -188,7 +198,7 @@ export default {
chkIsFind(val) {
if (val) {
this.page = 1;
this.search();
this.search(false);
}
},
chkBlocId() {
@ -206,18 +216,21 @@ export default {
this.setPageData({ isFind: true });
},
},
async beforeCreate() {
beforeCreate() {
// console.log('----DEBUG-----ReadResultCloseMngPage--beforeCreate:', Utility.setFormatDate(new Date(), "YYYYMMDD"));
myPrgmId = this.$route.query.prgmId;
await this.$store.dispatch("chkOpenTabList", {
const context = {
key: "create",
prgmId: myPrgmId,
defaultData: defaultData,
});
};
this.$store.dispatch("chkOpenTabList", context);
},
mounted() {
this.init();
},
created() {},
created() {
},
methods: {
...mapMutations({
setPageData: "setPageData",
@ -252,12 +265,13 @@ export default {
value: myColumns,
});
},
async search() {
await this.getRowGridData();
async search(isPaging) {
await this.getRowGridData(isPaging);
},
async getRowGridData() {
async getRowGridData(isPaging) {
if(!isPaging) {
this.loadGrid = false;
}
if (
this.pageData.blocMstrList.length > 0 &&
this.pageData.commCdList.length > 0 &&
@ -343,7 +357,7 @@ export default {
this.page = pageNum;
this.limit = limit;
this.search();
this.search(true);
},
},
};

View File

@ -211,7 +211,7 @@ export default {
}
},
chkIsFind(val) {
if (val) this.search();
if (val) this.search(false);
},
fabId(val) { },
fabNm(val) { },
@ -371,8 +371,8 @@ export default {
}
await this.gridInit();
},
async search() {
await this.getRowGridData();
async search(isPaging) {
await this.getRowGridData(isPaging);
this.setPageData({
isFind: false,
});
@ -725,9 +725,10 @@ export default {
this.getRowGridData();
},
async getRowGridData() {
async getRowGridData(isPaging) {
if(!isPaging) {
this.loadGrid = false;
}
var res = await this.postApiReturn({
apiKey: 'selectEnrgEffcEqpmDetlMntr',
resKey: 'eqpmDetlData',
@ -806,7 +807,7 @@ export default {
this.page = pageNum;
this.limit = limit;
this.search();
this.search(true);
},
},
};

View File

@ -239,7 +239,7 @@ export default {
try{
await this.getChartData();
}catch(err){
this.initTestChart();
// this.initTestChart();
}
this.setPageData({
isFind: false,

View File

@ -513,6 +513,7 @@ export const actions = {
//commit("pageInit", {});
break;
case 'create':
// console.log("---------DEBUGmyPrgmId:", myPrgmId);
if (!list.some(it => it === myPrgmId)) {
// console.log("클릭 한 메뉴가 기존 목록에 없다 => 새로 push"); // & 초기화 세팅
localStorage.setItem('pageData', JSON.stringify(state.pageData));

View File

@ -514,7 +514,7 @@ const INIT_URL_STATE = {
// prgmId: "PRG0003" 공지사항
selectPostList: 'comm/base/NoticeMngCtr/selectPostList',
selectPostPage: 'comm/base/NoticeMngCtr/selectPostPage',
selectPostData: 'comm/base/NoticeMngCtr/selectPostData',
selectPostPageTotal: 'comm/base/NoticeMngCtr/selectPostPageTotal',
deletePostList: 'comm/base/NoticeMngCtr/deletePost',