Merge branch 'dev' of http://218.237.212.51:30003/gitadmin/sk_fems_ui into dev-trungvq7-0729

This commit is contained in:
dev
2025-08-07 18:54:21 +09:00
31 changed files with 724 additions and 164 deletions

View File

@ -61,7 +61,8 @@ export default {
isDarkMode: 'isDarkMode',
chartOption(state) {
var dark_Col = [
'#01AE6A',
'#79B100',
// '#01AE6A',
'#FFB046',
'#F6637B',
'#944FE9',
@ -194,7 +195,8 @@ export default {
var lightCol_dashReadplcStatus = ['#3cc380', '#ffb13b', '#f98694'];
var light_Col = [
'#3CC380',
'#3BAD43',
// '#3CC380',
'#FFB13B',
'#F98694',
'#CF74E5',

View File

@ -426,7 +426,7 @@ export default {
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/datepicker.scss";
// @import "@/assets/scss/datepicker.scss";
::v-deep {
.tui-timepicker-row {

View File

@ -9,7 +9,6 @@
@dblclick="dblClick"
@mouseover="mouseoverEvent"
@mouseout="mouseoutEvent"
@mousedown="onMousedown"
@focusChange="focusChangeEvt"
/>
</template>
@ -268,15 +267,7 @@ export default {
}
});
},
onMousedown(evt) {
this.handleSelectedRow(evt);
},
focusChangeEvt(e) {
if(e.rowKey === 0) {
this.handleSelectedRow(e);
}
},
handleSelectedRow(e) {
// console.log('focusChangeEvt1...')
if (this.preventFocusChangeEvent(e)) {
// console.log('prevent focusChangeEvt')
@ -299,7 +290,6 @@ export default {
startEditing(e) {
// console.log('startEditing1...')
if (this.preventFocusChangeEvent(e)) {
// console.log('prevent startEditing')
return;
}
@ -311,7 +301,6 @@ export default {
// console.log('startEditing2...')
if (this.editorGrid && e.rowKey >= 0) {
this.editorStartKey = e.rowKey;
// console.log("E::", this.gridInstance.invoke("getRow", e.rowKey));
this.gridInstance.invoke('startEditing', e.rowKey, e.columnName);
this.$emit(
'getRowsData',

View File

@ -2,9 +2,9 @@
<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" class="custom-action-btn">
</a-button>
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost :icon="icons.add">
<a-button @click="btnActionsFnc('addLeftToRight')" type="primary" ghost :icon="icons.add" class="custom-action-btn">
</a-button>
</div>
</template>

View File

@ -10,7 +10,7 @@ export default {
size: {
type: String,
require: false,
default: "middle", // small, middle, large
default: "default", // small, default, large
}
},
methods: {

View File

@ -12,15 +12,26 @@
</label>
</v-col>
<v-col :cols="item.label ? 7 : ''" >
<v-checkbox
<!-- <v-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="item.readonly || false"
:required="item.required || false"
:false-value="false"
:color="isDarkMode ? '#fff' : '#1890ff'"
@change="modifyValue"
></v-checkbox>
:color="isDarkMode ? '#1668DC' : '#1890ff'"
@change="modifyValue"
class="small-checkbox"
></v-checkbox> -->
<a-checkbox
v-model="chkValue"
:disabled="disabledFlag"
:readonly="item.readonly || false"
:required="item.required || false"
:false-value="false"
:color="isDarkMode ? '#1668DC' : '#1890ff'"
@change="modifyValue"
>
</a-checkbox>
</v-col>
</v-row>
</template>
@ -141,7 +152,7 @@ export default {
modifyValue(e) {
const dt = {
columnName: this.item.valueNm,
value: e,
value: e.target.checked,
};
this.$emit('gridEditingFinish', dt);
},

View File

@ -65,13 +65,10 @@
<!-- <div id="chartParent" ref="chartParent" style="height: 100px"> -->
<div :style="'height: calc(50vh)'">
<div class="d-flex align-center justify-space-between pa-4" style="height: 10%">
<v-card-title class="pa-0 custom-title-4">사용량 계획</v-card-title>
</div>
<!-- <div id="chartParent" ref="chartParent" :style="'height: 80%'"> -->
<div id="chartParent" ref="chartParent" style="height: 70%">
<div id="chartParent" ref="chartParent" style="height: 100%" class="px-6">
<component
class="w100 h100"
class="w100 h100 py-7 custom-chart"
:is="loadChart ? 'Chart' : null"
:parentPrgmId="parentPrgmId"
:modalId="modalId"
@ -130,7 +127,6 @@
/>
</div> -->
<v-divider></v-divider>
<v-card-actions class="pa-5 d-flex align-center justify-end">
<a-button color="primary" type="default" class="mr-2" dark @click="closePop()">취소</a-button>
<a-button color="primary" type="primary" dark @click="setUpdate()">확정</a-button>
@ -533,7 +529,7 @@ export default {
seriesData = data.map(item => ({
name: item.gubun == '2PLAN' ? '계획' : '전년실적',
type: item.gubun == '2PLAN' ? 'line' : 'bar',
data: targetMonthList.map(obj => item[obj] || null)
data: targetMonthList.map(obj => item[obj] || null),
// data: targetMonthList.map(obj => item[obj] || 0)
}));
this.nowSeriesData = seriesData;
@ -558,7 +554,6 @@ export default {
series: seriesData,
tooltip: tooltipData
};
// console.log('option', option);
await this.$nextTick(() => {
});
@ -601,7 +596,6 @@ export default {
sData2 = nowSeriesData.filter(item => {
return item.name == '계획';
})[0]['data'];
// console.log('sData1', sData);
if(targetMonth.includes('qty')){
targetMonth = parseInt(targetMonth.slice(-2));
}
@ -610,13 +604,11 @@ export default {
sData2[i] = sData[i] * targetRatio;
}
}
// console.log('sData2', sData2);
seriesData = nowSeriesData.map(item => ({
...item,
data: item.name == '계획' ? sData2 : item.data
}));
// console.log('seriesData', seriesData);
await this.$nextTick(() => {
});
@ -643,4 +635,4 @@ let modifyEnrgUsePlanModalDataKey =
modifyEnrgUsePlanChart: Utility.defaultChartOption(true)
};
// 전력량 요금(원/kWh)
</script>
</script>

View File

@ -10,7 +10,10 @@
<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"><template v-slot:append>
:disabled="disabled || false"
:placeholder="placeholder"
>
<template v-slot:append>
<!-- Custom SVG icon -->
<v-icon>$icoSearch</v-icon>
</template>

View File

@ -1,7 +1,10 @@
<template>
<div>
<div class="d-flex justify-space-between align-center" style="min-height: 80px;">
<span class="txt custom-subtitle-tab">Data Set TAG 연결 정보</span>
<div class="d-flex justify-space-between align-center pb-5" >
<!-- <span class="txt custom-title-4">Data Set TAG 연결 정보</span> -->
<v-card-title class="pa-0">
Data Set TAG 연결 정보
</v-card-title>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :detailList="detailDataSetTagList"
:btnActionsFnc="btnActions" />
</div>
@ -14,22 +17,20 @@
@gridEditingFinish="gridEditingFinish" />
</div>
<div ref="formParent" style="min-height: 100px;" class="w100 h100">
<v-row ref="contents" class="w100">
<v-col :cols="6">
<div ref="formParent" class="h100">
<v-row align="end" ref="contents" class="">
<v-col>
<component :is="'Datepicker'" :parentPrgmId="parentPrgmId" :label="'검색기간'" :labelCols="12" :textCols="12" />
</v-col>
<v-col :cols="4">
<v-col >
<component :is="'selectCodeList'" :parentPrgmId="parentPrgmId" :label="'주기'" dataKey="mdlDataTerm"
:sendParam="{ commGrpCd: 'MDL_DATA_TERM', useFg: '1' }" :addAll="false" :labelCols="12" :textCols="12" :iconShow="true" />
</v-col>
<v-col class="text-right align-self-end">
<a-button @click="jamoviProcClickEvent('view1')" type="primary" :ripple="false" class="mr-1">데이터 분석</a-button>
</v-row>
<v-row align="center" no-gutters class="searchFilter mt-2">
<v-col class="d-flex justify-end">
<a-button @click="jamoviProcClickEvent('view1')" type="primary" :ripple="false" class="mb-1">데이터 분석</a-button>
</v-col>
<!-- <v-card class="searchFilter w100">
<v-row align="center" no-gutters>
</v-row>
</v-card> -->
</v-row>
</div>
</div>
@ -156,7 +157,7 @@ export default {
{
header: '모델 Data 구분',
name: 'mdlDataTypeCd',
align: 'center',
align: 'left',
width: 120,
formatter({ value }) {
var retVal = '';
@ -173,7 +174,7 @@ export default {
{
header: '사용여부',
name: 'useFg',
align: 'center',
align: 'left',
width: 100,
formatter({ value }) {
value = value === true ? '1' : '0';
@ -189,7 +190,7 @@ export default {
// }
// }
},
{ header: '비고', name: 'rmrk', align: 'center' },
{ header: '비고', name: 'rmrk', align: 'left' },
];
this.setGridColumn({

View File

@ -11,7 +11,7 @@
:btnActionsFnc="btnActions"
/>
</div>
<div ref="gridParent" style="height: calc(100vh - 760px);">
<div ref="gridParent" >
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"

View File

@ -1,7 +1,9 @@
<template>
<div>
<div class="d-flex justify-space-between align-center my-5" >
<span class="txt custom-subtitle-tab">설비 추가 정보</span>
<div class="d-flex justify-space-between align-center mb-5" >
<v-card-title class="txt custom-title-4 pa-0">
설비 추가 정보
</v-card-title>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
@ -120,10 +122,10 @@ export default {
bodyHeight: gridHeight,
minBodyHeight: gridHeight,
header: {
height: 28,
height: 38,
},
rowHeight: 29,
minRowHeight: 29,
// rowHeight: 39,
// minRowHeight: 29,
selectionUnit: 'row',
editingEvent: 'click',
};
@ -263,11 +265,12 @@ export default {
}
return retVal;
},
minWidth: 230,
},
{
header: 'Data 구분',
name: 'addInfoDataKind',
align: 'center',
align: 'left',
formatter({ value }) {
let retVal = '';
const newValue = addInfoDataKindList.filter(
@ -278,6 +281,7 @@ export default {
}
return retVal;
},
minWidth: 330,
},
{
header: '숫자 값',
@ -308,6 +312,7 @@ export default {
// console.log('test :', test);
return data.row.addInfoDataKind;
},
minWidth: 330,
},
//{ header: "추가 정보 값", name: "addInfoVal", align: "center" , editor: "text",
//},
@ -414,3 +419,4 @@ const dataPathDataExample = getPathDataExample({
type: '사용', note: '-'
});
</script>
<style lang="scss" scoped> </style>

View File

@ -1,7 +1,10 @@
<template>
<div>
<div class="d-flex justify-space-between align-center my-5" >
<span class="txt custom-subtitle-tab">설비 상수 정보</span>
<div class="d-flex justify-space-between align-center mb-5" >
<!-- <span class="txt custom-subtitle-tab">설비 상수 정보</span> -->
<v-card-title class="txt custom-title-4 pa-0">
설비 상수 정보
</v-card-title>
<Buttons :parentPrgmId="parentPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div>
<div ref="gridParent" style="min-height: calc(100vh - 800px);">
@ -160,11 +163,11 @@ export default {
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '설비 번호', name: 'eqpmId', hidden: true },
// { header: '대상항목', name: 'objId', align: 'center', hidden: true},
{ header: '물리량 ID', name: 'pysclQtyId', align: 'left' },
{ header: '물리량 명', name: 'pysclQtyNm', align: 'left' },
{ header: '물리량값', name: 'pysclQtyVal', align: 'left' },
{ header: '물리량 ID', name: 'pysclQtyId', align: 'left', minWidth: 230, },
{ header: '물리량 명', name: 'pysclQtyNm', align: 'left', minWidth: 230, },
{ header: '물리량값', name: 'pysclQtyVal', align: 'left', minWidth: 230, },
// { header: '대상항목', name: 'objNm', align: 'left'},
{ header: '대상항목', name: 'objId', align: 'left' },
{ header: '대상항목', name: 'objId', align: 'left', minWidth: 230, },
{
header: '에너지원 명',
name: 'ercId',
@ -386,7 +389,7 @@ const myEqpmConstDetail = [
required: true,
openMode: 'CONST',
cols: 6,
class: 'py-3 pl-4',
class: 'pt-3 pb-1 pl-4',
eqpmGrpDisableFlag: true,
// eqpmGrpId:'',
labelCols: 12,
@ -406,7 +409,7 @@ const myEqpmConstDetail = [
disabled: true,
readonly: true,
cols: 6,
class: 'py-3 pt-1 pl-4',
class: 'pb-3 pt-0 pl-4',
align: 'right',
// class: 'py-2 d-none',
labelCols: 12,
@ -441,3 +444,11 @@ const dataPathDataExample = getPathDataExample({
field2: '2222',
});
</script>
<style lang="scss" scoped>
::v-deep {
.tui-grid-layer-state {
top: 40px !important;
}
}
</style>

View File

@ -1,7 +1,10 @@
<template>
<div>
<div class="d-flex justify-space-between align-center my-5" >
<span class="txt custom-subtitle-tab">설비 입출력 정보</span>
<div class="d-flex justify-space-between align-center mb-5" >
<!-- <span class="txt custom-subtitle-tab">설비 입출력 정보</span> -->
<v-card-title class="txt custom-title-4 pa-0">
설비 입출력 정보
</v-card-title>
<Buttons
:parentPrgmId="parentPrgmId"
:bindingData="gridName"
@ -226,6 +229,7 @@ export default {
return retVal;
},
minWidth: 150,
},
{
header: '대상 유형',
@ -242,9 +246,10 @@ export default {
return retVal;
},
minWidth: 150,
},
{ header: '물리량', name: 'pysclQtyId', align: 'left', hidden: true },
{ header: '물리량', name: 'pysclQtyNm', align: 'left' },
{ header: '물리량', name: 'pysclQtyNm', align: 'left', minWidth: 150, },
{
header: '물리량값',
name: 'pysclQtyVal',
@ -269,6 +274,7 @@ export default {
);
return newValue[0].commCdNm;
},
minWidth: 100,
},
{ header: '분배율', name: 'distRt', align: 'right' },
{ header: '등록 사용자', name: 'regUserNo', hidden: true },

View File

@ -1,8 +1,8 @@
<template>
<div>
<div
class="d-flex justify-space-between align-center"
style="height: 80px;"
class="d-flex justify-space-between"
style="height: 45px;"
>
<span class="txt custom-subtitle-tab">검침 대상 추가 정보</span>
<Buttons
@ -143,7 +143,6 @@ export default {
class CustomRenderer {
constructor(props) {
//const { min, max } = props.columnInfo.renderer.options;
//console.log('props: %o', props);
const el = document.createElement('input');
if (
@ -215,15 +214,12 @@ export default {
}
$(el).addClass('tui-grid-content-text');
}
// console.log('props: %o', props);
// console.log('el: %o', el);
this.el = el;
this.render(props);
}
change(ev) {
//console.log('props: %o', ev);
if (ev.target.checked) {
ev.target.value = 1;
} else {
@ -245,7 +241,6 @@ export default {
} else {
this.el.value = String(props.value);
}
//console.log('props: %o', props);
}
mounted() {
@ -275,7 +270,7 @@ export default {
{
header: 'Data 구분',
name: 'addInfoDataKind',
align: 'center',
align: 'left',
formatter({ value }) {
let retVal = '';
const newValue = addInfoDataKindList.filter(
@ -323,8 +318,6 @@ export default {
},
//{ header: "추가 정보 값", name: "addInfoVal", align: "center" , editor: "text",
// formatter({ value, row , column}) {
// console.log("addInfoVal row : ", row);
// console.log("addInfoVal state : ", column);
// if(row.addInfoDataKind === "NUM"){
// column.align = "right";
// }else{