Compare commits

...

9 Commits

13 changed files with 219 additions and 296 deletions

View File

@ -692,6 +692,43 @@ a {
} }
&>.v-treeview-node { &>.v-treeview-node {
.v-treeview-node--active {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-bg"
);
border: 1px solid map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-border"
);
border-radius: 8px;
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
}
}
}
&>.v-treeview-node__root { &>.v-treeview-node__root {
&:before { &:before {
background-color: map-deep-get($config, background-color: map-deep-get($config,
@ -737,6 +774,7 @@ a {
&>.v-treeview-node__children { &>.v-treeview-node__children {
&>.v-treeview-node { &>.v-treeview-node {
&>.v-treeview-node__root { &>.v-treeview-node__root {
&:before { &:before {
background-color: map-deep-get($config, background-color: map-deep-get($config,
@ -794,117 +832,6 @@ a {
); );
} }
&>.v-treeview-node--active {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-active-color"
);
}
}
}
&>.v-treeview-node__children {
& .v-treeview-node {
&>.v-treeview-node__root {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-subroot-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-icon-color"
);
}
}
&:not(.v-treeview-node--active):hover {
&:before {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-backgroundColor"
);
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-leaf-active-color"
);
}
}
}
}
&>.v-treeview-node--active {
background-color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-bg"
);
border: 1px solid map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-border"
);
border-radius: 8px;
&:before {
opacity: 0 !important;
}
&>.v-treeview-node__content {
.v-treeview-node__label {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
.v-icon {
color: map-deep-get($config,
#{$theme},
"v-treeview-node-label-active-color"
);
}
}
}
}
}
&[aria-expanded="true"] { &[aria-expanded="true"] {
& .v-treeview-node__root>.v-treeview-node__content { & .v-treeview-node__root>.v-treeview-node__content {
.v-treeview-node__label { .v-treeview-node__label {

View File

@ -4,12 +4,12 @@
:data="chkGridData" :data="chkGridData"
:columns="chkGridColumns" :columns="chkGridColumns"
:options="chkGridOptions" :options="chkGridOptions"
@mousedown="onMousedown"
@click="startEditing" @click="startEditing"
@editingFinish="editingFinish" @editingFinish="editingFinish"
@dblclick="dblClick" @dblclick="dblClick"
@mouseover="mouseoverEvent" @mouseover="mouseoverEvent"
@mouseout="mouseoutEvent" @mouseout="mouseoutEvent"
@mousedown="onMousedown"
@focusChange="focusChangeEvt" @focusChange="focusChangeEvt"
/> />
</template> </template>
@ -251,11 +251,9 @@ export default {
this.gridInstance.invoke('check', rowData.rowKey, instance); this.gridInstance.invoke('check', rowData.rowKey, instance);
}, },
setSelectionRange(rowKey) { setSelectionRange(rowKey) {
// console.log("------------------DEBUG-------setSelectionRange:", rowKey);
const rowDatas = this.gridInstance.invoke('getData'); const rowDatas = this.gridInstance.invoke('getData');
rowDatas.forEach(item => { rowDatas.forEach(item => {
if (item.rowKey == rowKey) { if (item.rowKey == rowKey) {
// console.log("------------------DEBUG-------setSelectionRange---item:", item);
this.gridInstance.invoke( this.gridInstance.invoke(
'addRowClassName', 'addRowClassName',
item.rowKey, item.rowKey,
@ -271,11 +269,14 @@ export default {
}); });
}, },
onMousedown(evt) { onMousedown(evt) {
// console.log("------------------DEBUG-------onMousedown:", evt); this.handleSelectedRow(evt);
this.focusChangeEvt(evt);
}, },
focusChangeEvt(e) { focusChangeEvt(e) {
// console.log("------------------DEBUG-------focusChangeEvt:", e); if(e.rowKey === 0) {
this.handleSelectedRow(e);
}
},
handleSelectedRow(e) {
// console.log('focusChangeEvt1...') // console.log('focusChangeEvt1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent focusChangeEvt') // console.log('prevent focusChangeEvt')
@ -283,7 +284,7 @@ export default {
} }
// console.log('focusChangeEvt2...') // console.log('focusChangeEvt2...')
// cell 선택시 row 선택 method // cell 선택시 row 선택 method
if (e.rowKey >= 0) { if (e.rowKey > -1) {
this.$emit( this.$emit(
'getRowsData', 'getRowsData',
this.gridInstance.invoke('getRow', e.rowKey), this.gridInstance.invoke('getRow', e.rowKey),
@ -296,7 +297,6 @@ export default {
this.sendSelectedRowData(e.rowKey); this.sendSelectedRowData(e.rowKey);
}, },
startEditing(e) { startEditing(e) {
// console.log("------------------DEBUG-------startEditing:", e);
// console.log('startEditing1...') // console.log('startEditing1...')
if (this.preventFocusChangeEvent(e)) { if (this.preventFocusChangeEvent(e)) {
// console.log('prevent startEditing') // console.log('prevent startEditing')
@ -323,7 +323,6 @@ export default {
} }
}, },
async editingFinish(e) { async editingFinish(e) {
// console.log('------------------DEBUG-------editingFinish:', e);
// console.log("Editing END E::", e); // console.log("Editing END E::", e);
// editor 간 이동시 수정되는 문제 수정 // editor 간 이동시 수정되는 문제 수정
// e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg // e.rowEditingFg: grid의 한 row를 한번에 수정할 시 각각의 cell 마다 click 이벤트가 발생하지 않아 this.editorStartKey값이 제대로 입력 되지 않는 경우를 대비하여 만든 Fg
@ -685,7 +684,6 @@ export default {
? this.gridInstance.invoke('getFocusedCell').rowKey ? this.gridInstance.invoke('getFocusedCell').rowKey
: eventRowKey; : eventRowKey;
var rowData = this.gridInstance.invoke('getRow', rowKey); var rowData = this.gridInstance.invoke('getRow', rowKey);
// console.log('------------------DEBUG-------sendSelectedRowData:', {eventRowKey, rowKey});
this.$emit('sendSelectedRowStatInfo', rowData); this.$emit('sendSelectedRowStatInfo', rowData);
} }
}, },

View File

@ -280,51 +280,40 @@ export default {
modalKey: this.myModalKey, modalKey: this.myModalKey,
gridKey: this.grid_01, gridKey: this.grid_01,
modalDataKey: this.modalDataKey, modalDataKey: this.modalDataKey,
value: [{ header: '위치정보', name: 'eccNm' }], value: [
{
align: 'center',
width: 30,
minWidth: 60,
formatter: (props) => {
return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
}
},
{ header: '위치정보', name: 'eccNm' }
],
}); });
}, },
async getGridData() { async getGridData() {
// this.loadGrid = false; this.loadGrid = false;
// const res = await this.postApiReturn({ const res = await this.postApiReturn({
// apiKey: 'selectEccBaseInfo', apiKey: 'selectEccBaseInfo',
// resKey: 'eccBaseInfoData', resKey: 'eccBaseInfoData',
// sendParam: { sendParam: {
// blocId: this.myBindingData.blocId, blocId: this.myBindingData.blocId,
// eqpmYn: '0', eqpmYn: '0',
// search: this.searchWord, search: this.searchWord,
// }, },
// }); });
// const setTreeData = await this.setTree({ const setTreeData = await this.setTree({
// gridKey: this.gridNameTree, gridKey: this.gridNameTree,
// treeKey: 'ECC_ID', treeKey: 'ECC_ID',
// value: res.map(item => ({ 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, ...item,
eccNm: item.eccNm, eccNm: item.eccNm,
})) })),
}; });
// console.log(res);
this.setModalGridData({ this.setModalGridData({
modalKey: this.myModalKey, modalKey: this.myModalKey,

View File

@ -96,20 +96,20 @@ export default {
watch: { watch: {
selectedEqpmKindId(val) { selectedEqpmKindId(val) {
if (val) { if (val) {
this.detailList[2].eqpmKindId = val; this.detailList[1].eqpmKindId = val;
} }
}, },
selectedEqpmGrpId(val) { selectedEqpmGrpId(val) {
// if(!val){ // if(!val){
// this.detailList[2].eqpmGrpId = ''; // this.detailList[1].eqpmGrpId = '';
// }else{ // }else{
// this.detailList[2].eqpmGrpId = val; // this.detailList[1].eqpmGrpId = val;
// } // }
// if(val){ // if(val){
// this.detailList[2].eqpmGrpId = val; // this.detailList[1].eqpmGrpId = val;
// } // }
// else if(val == null || val == ''){ // else if(val == null || val == ''){
// this.detailList[2].eqpmGrpId = ''; // this.detailList[1].eqpmGrpId = '';
// } // }
}, },
}, },
@ -238,10 +238,10 @@ export default {
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
if (data.rowStat === 'I') { if (data.rowStat === 'I') {
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
} else { } else {
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
} }
@ -257,12 +257,12 @@ export default {
switch (action) { switch (action) {
case 'add': case 'add':
this.$refs[this.gridName].addRow(); this.$refs[this.gridName].addRow();
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
break; break;
case 'remove': case 'remove':
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.$refs[this.gridName].removeRow(); this.$refs[this.gridName].removeRow();
break; break;
@ -358,7 +358,6 @@ const myEqpmConstDetail = [
{ {
type: 'SelectBox', type: 'SelectBox',
label: '대상 유형', label: '대상 유형',
disabled: true,
cols: 6, cols: 6,
class: 'py-3 pr-4', class: 'py-3 pr-4',
list: 'emMapDivList2', list: 'emMapDivList2',
@ -371,6 +370,7 @@ const myEqpmConstDetail = [
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
}, },
// ==================
{ {
type: 'EgrpPysclQtyPop', type: 'EgrpPysclQtyPop',
labelContent: '물리량', labelContent: '물리량',
@ -382,7 +382,7 @@ const myEqpmConstDetail = [
pysclQtyNm: 'pysclQtyNm', pysclQtyNm: 'pysclQtyNm',
}, },
valueNm: 'objId', valueNm: 'objId',
disabled: false, disabled: true,
required: true, required: true,
openMode: 'CONST', openMode: 'CONST',
cols: 6, cols: 6,
@ -413,6 +413,7 @@ const myEqpmConstDetail = [
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
}, },
// ------------
{ {
type: 'InputText', type: 'InputText',
label: '물리량 값', label: '물리량 값',

View File

@ -18,7 +18,7 @@
:innerTabGridInfo="innerTabGridInfo" :innerTabGridInfo="innerTabGridInfo"
/> />
</div> </div>
<div style="min-height: calc(100vh - 900px);"> <div style="min-height: calc(100vh - 900px);" class="mt-4">
<component <component
:is="'Form'" :is="'Form'"
:parentPrgmId="parentPrgmId" :parentPrgmId="parentPrgmId"
@ -108,18 +108,24 @@ export default {
}, },
watch: { watch: {
selectedObjId(val) { selectedObjId(val) {
// console.log('selectedObjId : ', val);
if (val === 'TAG') { if (val === 'TAG') {
// this.detailList[1].class = 'py-3 pl-4 pb-0';
this.detailList[1].class = 'py-3 d-none';
this.detailList[2].class = 'py-3 d-none'; this.detailList[2].class = 'py-3 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-1 d-none'; this.detailList[3].class = 'py-3 pl-4 pt-1 d-none';
this.detailList[4].class = 'py-3'; this.detailList[4].class = 'py-3';
this.detailList[5].class = 'py-3'; this.detailList[5].class = 'py-3 pl-4';
this.detailList[6].class = 'py-3 pl-4 pt-0';
} else { } else {
// }else if(val==="READ_PLC"){ // }else if(val==="READ_PLC"){
this.detailList[5].class = 'py-3 d-none'; this.detailList[1].class = 'py-3 pl-4';
this.detailList[4].class = 'py-3 d-none';
this.detailList[3].class = 'py-3 pl-4 pt-1';
this.detailList[2].class = 'py-3'; this.detailList[2].class = 'py-3';
this.detailList[3].class = 'py-3 pl-4 pt-0';
this.detailList[4].class = 'py-3 d-none';
this.detailList[5].class = 'py-3 d-none';
this.detailList[6].class = 'py-3 d-none';
} }
}, },
selectedCalcFg(val) { selectedCalcFg(val) {
@ -282,13 +288,13 @@ export default {
async getRowData(data, gridName) { async getRowData(data, gridName) {
if (data.rowStat === 'I') { if (data.rowStat === 'I') {
this.detailList[0].disabled = false; this.detailList[0].disabled = false;
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
this.detailList[4].disabled = false; this.detailList[4].disabled = false;
this.detailList[5].disabled = false; this.detailList[5].disabled = false;
} else { } else {
this.detailList[0].disabled = true; this.detailList[0].disabled = true;
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.detailList[4].disabled = true; this.detailList[4].disabled = true;
this.detailList[5].disabled = true; this.detailList[5].disabled = true;
@ -306,7 +312,7 @@ export default {
case 'add': case 'add':
this.$refs[this.gridName].addRow(); this.$refs[this.gridName].addRow();
this.detailList[0].disabled = false; this.detailList[0].disabled = false;
this.detailList[2].disabled = false; this.detailList[1].disabled = false;
this.detailList[3].disabled = false; this.detailList[3].disabled = false;
this.detailList[4].disabled = false; this.detailList[4].disabled = false;
this.detailList[5].disabled = false; this.detailList[5].disabled = false;
@ -315,7 +321,7 @@ export default {
case 'remove': case 'remove':
this.$refs[this.gridName].removeRow(); this.$refs[this.gridName].removeRow();
this.detailList[0].disabled = true; this.detailList[0].disabled = true;
this.detailList[2].disabled = true; this.detailList[1].disabled = true;
this.detailList[3].disabled = true; this.detailList[3].disabled = true;
this.detailList[4].disabled = true; this.detailList[4].disabled = true;
this.detailList[5].disabled = true; this.detailList[5].disabled = true;
@ -436,10 +442,10 @@ const myEqpmIaoDetail = [
type: 'ReadPlcPop', type: 'ReadPlcPop',
label: '대상 항목', label: '대상 항목',
valueNm: 'objId', valueNm: 'objId',
disabled: true,
cols: 6, cols: 6,
class: 'py-3 pl-4', class: 'py-3 pl-4 pb-0',
required: true, required: true,
disabled: true,
bindNm: 'objNm', bindNm: 'objNm',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
@ -460,11 +466,12 @@ const myEqpmIaoDetail = [
readonly: true, readonly: true,
disabled: true, disabled: true,
cols: 6, cols: 6,
class: 'py-3 pl-4 pt-1', class: 'py-3 pl-4 pt-0',
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// ============
{ {
type: 'EvtObjPop', type: 'EvtObjPop',
labelContent: '대상 항목', labelContent: '대상 항목',
@ -474,16 +481,24 @@ const myEqpmIaoDetail = [
disabled: true, disabled: true,
required: true, required: true,
cols: 6, cols: 6,
class: 'py-3 d-none', class: 'py-3 pl-4 d-none',
disableContent: true, disableContent: true,
textCols: 12, textCols: 12,
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
{ {
type: 'InputText', type: 'Label',
cols: 6, cols: 6,
class: 'py-3 d-none', class: 'py-3 d-none',
disabled: true,
textCols: 12,
labelCols: 12,
},
{
type: 'InputText',
cols: 6,
class: 'py-3 pl-4 d-none',
valueNm: 'objNm', valueNm: 'objNm',
readonly: true, readonly: true,
disabled: true, disabled: true,
@ -491,6 +506,7 @@ const myEqpmIaoDetail = [
labelCols: 12, labelCols: 12,
iconShow: true iconShow: true
}, },
// --------------------------------------------
{ {
type: 'SelectBox', type: 'SelectBox',
label: '에너지원', label: '에너지원',

View File

@ -57,7 +57,7 @@ module.exports = {
], ],
// Modules: https://go.nuxtjs.dev/config-modules // Modules: https://go.nuxtjs.dev/config-modules
modules: ['@nuxtjs/axios', '@nuxtjs/dayjs', '@nuxtjs/style-resources','@nuxtjs/google-fonts'], modules: ['@nuxtjs/axios', '@nuxtjs/dayjs', '@nuxtjs/style-resources' ],
styleResources: { styleResources: {
scss: ['./assets/scss/*.scss'], scss: ['./assets/scss/*.scss'],
}, },

View File

@ -398,14 +398,11 @@ export default {
const myTreeColumns = [ const myTreeColumns = [
{ {
header: '',
name: '',
align: 'center', align: 'center',
width: 30, width: 30,
minWidth: 60,
formatter: (props) => { formatter: (props) => {
return `<span class="custom-radio"> return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
<span class="radio-mark"></span>
</span>`;
} }
}, },
{ {
@ -421,14 +418,11 @@ export default {
]; ];
const myTreeColumns2 = [ const myTreeColumns2 = [
{ {
header: '',
name: '',
align: 'center', align: 'center',
width: 30, width: 30,
minWidth: 60,
formatter: (props) => { formatter: (props) => {
return `<span class="custom-radio"> return `<span class="custom-radio"><span class="radio-mark"></span></span>`;
<span class="radio-mark"></span>
</span>`;
} }
}, },
{ header: '역할ID', name: 'roleId', hidden: true }, { header: '역할ID', name: 'roleId', hidden: true },
@ -674,8 +668,6 @@ export default {
}, },
getUnAsgnRowData(data) { getUnAsgnRowData(data) {
console.log("------------------DEBUG-------getUnAsgnRowData:", data);
const getRowData = data; const getRowData = data;
this.leftSelectRowData = Object.assign({}, getRowData); this.leftSelectRowData = Object.assign({}, getRowData);
}, },

View File

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

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="l-layout"> <div class="l-layout">
<CommonPageTitle />
<!-- 조회조견 --> <!-- 조회조견 -->
<v-row ref="searchFilter"> <v-row ref="searchFilter">
<v-col :cols="12"> <v-col :cols="12">
@ -314,7 +315,6 @@ export default {
}); });
}, },
async getRowData(data, gridName) { async getRowData(data, gridName) {
// console.log("-----------------------DEBUG--getRowData--------------", {
// gridKey: gridName, // gridKey: gridName,
// gridSelect: true, // gridSelect: true,
// rowGridSelectKey: data.rowKey, // rowGridSelectKey: data.rowKey,

View File

@ -969,7 +969,7 @@ const myDetail = [
labelCols: 12, labelCols: 12,
textCols: 12, textCols: 12,
iconShow: true, iconShow: true,
class: 'py-3 pr-4', class: 'py-3 pr-4 pb-2',
}, },
{ {
type: 'CheckBox', type: 'CheckBox',

View File

@ -282,7 +282,6 @@ export default {
mgnf: item.mgnf || 0, mgnf: item.mgnf || 0,
})), })),
}); });
// console.log('--------------DEBUG-----res-------', res);
} }
this.setPageData({ isFind: false }); this.setPageData({ isFind: false });
this.$nextTick(() => { this.$nextTick(() => {

View File

@ -245,7 +245,6 @@ export default {
this.setChartOption({ chartKey: this.chartName, value: chartOption }); this.setChartOption({ chartKey: this.chartName, value: chartOption });
// console.log("----DEBUG chart-options-------", { chartOption });
this.$nextTick(() => { this.$nextTick(() => {
this.loadChart = true; this.loadChart = true;
}); });

View File

@ -264,9 +264,6 @@ export default {
}, },
created() { }, created() { },
async mounted() { async mounted() {
// console.log('----DEBUG---');
// await this.initTest();
// End Debug Test---
await this.init(); await this.init();
this.initedFlag = true; this.initedFlag = true;
}, },
@ -287,7 +284,7 @@ export default {
}), }),
async initTest() { async initTest() {
// debug test // debug test
console.log('----DEBUG init pages----'); // console.log('----DEBUG init pages----');
const seriesName1 = ['B01. 냉동기전력량', ' B01.COP']; const seriesName1 = ['B01. 냉동기전력량', ' B01.COP'];
const seriesName2 = [ const seriesName2 = [
'UT_HT_CH101:냉동기전혁당', 'UT_HT_CH102:냉동기전력량', 'UT_HT_CH201:냉동기전력당', 'UT_HT_CH101:냉동기전혁당', 'UT_HT_CH102:냉동기전력량', 'UT_HT_CH201:냉동기전력당',