fix bug 18 33 34 #37

Merged
dev merged 2 commits from dev-manhph1-figbug into dev 2025-08-06 11:27:24 +09:00
4 changed files with 95 additions and 165 deletions

View File

@ -1,5 +1,7 @@
<template> <template>
<div class="d-flex flex-row justify-center align-center" style="gap: 12px"> <div class="d-flex justify-center align-center"
:class="directionBtn === 'vertically'?'flex-row':'flex-column'"
style="gap: 12px">
<a-button @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost :icon="icons.remove" > <a-button @click="btnActionsFnc('removeRightToLeft')" type="primary" ghost :icon="icons.remove" >
</a-button> </a-button>
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost :icon="icons.add"> <a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost :icon="icons.add">

View File

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

View File

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

View File

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