resolve confict

This commit is contained in:
Tran Van Dung/(Tran Van Dung)/현장대리인/SK
2025-08-06 09:26:53 +07:00
27 changed files with 358 additions and 323 deletions

View File

@ -803,7 +803,7 @@ export default {
header: "NO",
name: "rowNum",
width: 70,
align: "center",
align: "right",
// hidden: true,
},
{

View File

@ -18,7 +18,7 @@
</v-col>
</v-row>
<v-row ref="contents" class="pt-2">
<v-col :cols="5" style="height:100%" class="pr-2">
<v-col :cols="5" class="pr-2">
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">효율지표 리스트</v-card-title>
@ -33,11 +33,11 @@
</div>
</v-card>
</v-col>
<v-col :cols="7" style="height:100%" class="pl-2">
<v-col :cols="7" class="pl-2">
<v-card class="pb-5">
<v-card-title class="custom-title-4 pa-4 pb-2">효율지표 상세
</v-card-title>
<div class="px-4" style="height:calc(100% - 76px)">
<div class="px-4" >
<v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.id" :disabled="(item.id == 'EffcIdxAddInfoTab'
? isInfoTabDisabled
@ -162,7 +162,7 @@ import EffcIdxAddInfoTab from '@/components/pages/ems/EffcIdxInfo/EffcIdxAddInfo
import Grid from '~/components/common/Grid';
import Utility from '~/plugins/utility';
import SelectBox from '@/components/common/select/SelectBox';
import CheckBox from '~/components/common/checkbox/CheckBox';
import CheckBox from '~/components/common/CheckBox';
import EqpmCalcPop from '~/components/common/modal/EqpmCalcPop';
import TextArea from '@/components/common/form/TextArea';
@ -214,64 +214,6 @@ export default {
},
],
loadGrid: false,
// "effcIdxGrid": {
// data: [
// {
// "effcIdxId": "E001",
// "effcIdxNm": "에너지 소비 효율",
// "effcKind": "환경"
// },
// {
// "effcIdxId": "E002",
// "effcIdxNm": "작업 시간 대비 생산량",
// "effcKind": "생산성"
// },
// {
// "effcIdxId": "E003",
// "effcIdxNm": "장비 가동률",
// "effcKind": "운영"
// },
// {
// "effcIdxId": "E004",
// "effcIdxNm": "불량률",
// "effcKind": "품질"
// },
// {
// "effcIdxId": "E005",
// "effcIdxNm": "재고 회전율",
// "effcKind": "물류"
// }
// ]
// ,
// column: [
// {
// header: '효율지표 ID',
// name: 'effcIdxId',
// align: 'center',
// // hidden:true
// },
// {
// header: '효율지표명',
// name: 'effcIdxNm',
// align: 'left',
// minWidth: 150,
// // hidden:true
// },
// {
// header: '효율지표종류',
// name: 'effcKind',
// align: 'left',
// // hidden: true,
// },
// // { header: '등록 사용자', name: 'regUserNo', hidden: true },
// // { header: '등록 일자', name: 'regDttm', hidden: true },
// // { header: '수정 사용자', name: 'procUserNo', hidden: true },
// // { header: '수정 일자', name: 'procDttm', hidden: true },
// ],
// }
// },
initFlag: false,
selectValueList01: [],
selectValueList02: [],
@ -919,7 +861,6 @@ export default {
{
header: '효율지표 ID',
name: 'effcIdxId',
align: 'center',
// hidden:true
},
{

View File

@ -4,7 +4,7 @@
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-col :cols="3">
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -14,7 +14,7 @@
:addAll="true"
/>
</v-col>
<v-col :cols="3">
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -24,8 +24,8 @@
:addAll="true"
/>
</v-col>
<v-col :cols="3">
<!-- 사업장 -->
<!-- 사업장 -->
<!-- <v-col :cols="3">
<div style="visibility:hidden">
<component
:is="'SelectBlocMstr'"
@ -33,13 +33,8 @@
:parentPrgmId="myPrgmId"
/>
</div>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
<v-col :cols="3">
</v-col> -->
<v-col :cols="2.5">
<component
:is="'selectCodeList'"
:parentPrgmId="myPrgmId"
@ -49,7 +44,7 @@
:addAll="true"
/>
</v-col>
<v-col :cols="6">
<v-col :cols="2.5">
<InputText
:parentPrgmId="myPrgmId"
label="공정명"
@ -59,6 +54,12 @@
:searchOption="true"
/>
</v-col>
<v-col class="text-right">
<BtnSearch @click="search" />
</v-col>
</v-row>
<v-row align="center" no-gutters>
</v-row>
</v-card>
</v-col>

View File

@ -342,7 +342,6 @@ export default {
header: '개소 종류',
name: 'plcKind',
minWidth: 100,
align: 'center',
formatter({ value }) {
let retVal = '';
const newValue = _this.pageData.plcKindList.filter(
@ -392,7 +391,6 @@ export default {
header: '사용 여부',
name: 'useFg',
minWidth: 100,
align: 'center',
formatter({ value }) {
value = value === true ? '1' : '0';
const newValue = _this.pageData.useFgList.filter(

View File

@ -980,7 +980,7 @@ export default {
var columnList = [
{ header: '회사 ID', name: 'comId', hidden: true },
{ header: '물리량 ID', name: 'pysclQtyId', hidden: true },
{ header: '순번', name: 'argSeq', editor: 'text' },
{ header: '순번', name: 'argSeq', editor: 'text', align: 'right' },
{ header: '물리량 ID', name: 'argPysclQtyId' },
{
header: '설비그룹',

View File

@ -9,7 +9,7 @@
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'" :iconShow="true"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" />
:customClass="'select-large'" />
</v-col>
<v-col :cols="3">
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
@ -19,10 +19,11 @@
</v-col>
<v-col :cols="3">
<InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm"
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'"/>
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'" />
</v-col>
<v-col :cols="3" class="text-right">
<a-button icon="search" type="primary" @click="search()" class="search-button" size="large">조회</a-button>
<a-button icon="search" type="primary" @click="search()" class="search-button"
size="large">조회</a-button>
</v-col>
</v-row>
</v-card>
@ -38,13 +39,13 @@
:btnActionsFnc="btnActions" />
</div>
<div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" style="height: 30%">
<div ref="gridParent" style="height: 26%">
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div>
<div class="d-flex py-4 mt-4" >
<div class="d-flex py-4 mt-4">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
@gridEditingFinish="gridEditingFinish" />
</div>
</div>
@ -326,14 +327,12 @@ export default {
header: 'COM ID',
name: 'comId',
width: 100,
aling: 'center',
hidden: true,
},
{
header: '가이드',
name: 'gdIdxId',
width: 100,
align: 'center',
},
{
header: '가이드명',
@ -345,7 +344,6 @@ export default {
header: '설비그룹ID',
name: 'eqpmGrpId',
width: 100,
align: 'center',
// hidden: true,
formatter({ value }) {
let retVal = '';
@ -362,7 +360,6 @@ export default {
header: '상위집계방법',
name: 'upTotMeth',
width: 100,
align: 'center',
// hidden: true,
formatter({ value }) {
let retVal = '';
@ -524,7 +521,7 @@ export default {
async getRowGridData() {
this.loadGrid = false;
let res = [];
res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxDataList',
resKey: 'eqpmGdIdxDataList',
@ -1122,14 +1119,7 @@ const myDetail = [
required: true,
iconShow: true
},
// {
// // 공백 처리
// type: 'Label',
// cols: 3,
// class: 'py-2',
// // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
// disabled: false,
// },
// {
// type: 'CheckBox',
// label: '설비기준적용',
@ -1195,7 +1185,8 @@ const myDetail = [
// required: true,
labelCols: 12,
textCols: 12,
iconShow: true
iconShow: true,
inputType: 'number',
},
// {
// // 공백 처리
@ -1243,7 +1234,15 @@ const myDetail = [
{
// 공백 처리
type: 'Label',
cols: 9,
cols: 3,
class: 'py-2',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
{
// 공백 처리
type: 'Label',
cols: 6,
class: 'py-3',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
@ -1442,9 +1441,3 @@ const myDetail = [
},
];
</script>
<style lang="scss" scoped>
.searchFilter {
border-radius: 6px;
box-shadow: none;
}
</style>

View File

@ -33,11 +33,11 @@
<v-row ref="contents" class="mt-3">
<v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> -->
<v-card style="height: 60%">
<v-card style="height: auto;">
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">가이드 정보</v-card-title>
</div>
<div class="d-flex align-end justify-space-between px-4 py-2">
<div class="d-flex align-end justify-space-between px-4 py-2 pb-4">
<v-row :cols="12" class="align-end">
<!-- 가이드 설비그룹 라인 시작 -->
<v-col :cols="3" class="pa-2">
@ -116,9 +116,9 @@
</v-card>
<v-row style="height: 40%" class="mt-3">
<v-col :cols="6" style="height: 100%" class="pr-2">
<v-card class="pb-5">
<v-row class="mt-3" >
<v-col :cols="6" class="pr-2">
<v-card >
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4 ">설비상세 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
@ -132,8 +132,8 @@
</div>
</v-card>
</v-col>
<v-col :cols="6" style="height: 100%" class="pl-2">
<v-card class="pb-5">
<v-col :cols="6" class="pl-2">
<v-card >
<div class="d-flex align-center justify-space-between pa-4">
<v-card-title class="pa-0 custom-title-4">설비가이드 기준 정보</v-card-title>
</div>

View File

@ -10,15 +10,15 @@
</v-col>
<v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01" :itemList="selectValueList01"
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="false" customClass="select-large" />
:label="'FAB'" @update:propsValue="selectValue01 = $event" :iconShow="true" customClass="select-large" />
</v-col>
<v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02" :itemList="selectValueList02"
:label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="false" customClass="select-large"/>
:label="'설비종류'" @update:propsValue="selectValue02 = $event" :iconShow="true" customClass="select-large"/>
</v-col>
<v-col :cols="2.5">
<component :is="'SelectBox'" ref="SelectBox3" :propsValue="selectValue03" :itemList="selectValueList03"
:label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="false" customClass="select-large" />
:label="'설비그룹'" @update:propsValue="selectValue03 = $event" :iconShow="true" customClass="select-large" />
</v-col>
<BtnSearch size="large" @click="search" />
@ -33,7 +33,7 @@
<v-row ref="contents">
<v-col :cols="12" >
<v-card class="pb-5">
<div class="d-flex align-center justify-space-between pa-4">
<div class="d-flex align-center justify-space-between py-4 px-4">
<v-card-title class="pa-0 custom-title-4">설비별 에너지 계획 리스트</v-card-title>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :btnActionsFnc="btnActions" />
</div>
@ -291,7 +291,7 @@ export default {
},
};
class CustumButton {
class CustomButton {
constructor(props) {
const { grid, rowKey, columnInfo } = props;
@ -304,7 +304,7 @@ export default {
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text');
el2.innerText = 'Edit';
el2.innerText = '편집하다';
elDiv.appendChild(el2);
this.el = elDiv;
@ -352,7 +352,7 @@ export default {
header: 'NO',
name: 'rowNum',
width: 40,
align: 'center',
align: 'right',
// hidden: true,
},
{
@ -389,7 +389,7 @@ export default {
// `;
// }
renderer: {
type: CustumButton,
type: CustomButton,
options: {
value: '계획수정',
},
@ -402,7 +402,7 @@ export default {
align: 'center',
hidden: true,
renderer: {
type: CustumButton,
type: CustomButton,
options: {
value: '계획수정',
},

View File

@ -104,7 +104,6 @@
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@dblClick="gridDoubleClickEvent"
/>
<!--
<component
@ -143,7 +142,6 @@ import SelectBox from "@/components/common/select/SelectBox";
import SelectCmCycle from "@/components/common/select/SelectCmCycle";
import DatePicker from "@/components/common/Datepicker";
import Grid from "~/components/common/Grid";
import PageTitle from "@/components/common/PageTitle";
let myTitle;
let myPrgmId;
@ -170,7 +168,6 @@ export default {
SelectCmCycle,
DatePicker,
Grid,
PageTitle,
},
data() {
return {
@ -204,6 +201,7 @@ export default {
computed: {
...mapState({
pageData: (state) => state.pageData[myPrgmId],
isDarkMode: "isDarkMode",
}),
fromDt() {
return this.pageData.fromDt;
@ -237,6 +235,16 @@ export default {
await this.search();
}
},
isDarkMode(newVal) {
// Switch mode for 10 tooltips
for (let i = 0; i < 10; i++) {
const tooltipEl = document.getElementById(`tooltipElement_${i}`);
if (tooltipEl) {
tooltipEl.classList.remove("light-mode", "dark-mode");
tooltipEl.classList.add(newVal ? "dark-mode" : "light-mode");
}
}
},
},
async beforeCreate() {
myPrgmId = this.$route.query.prgmId;
@ -357,13 +365,79 @@ export default {
gridInit() {
const gridHeight = this.$refs.gridParent.offsetHeight - 30;
const _this = this;
// Define custom button
class CustomButton {
constructor(props,pageData) {
const { grid, rowKey, columnInfo } = props;
const gridData = grid.store.data.rawData;
const value = gridData[rowKey][columnInfo.name];
const onClickCallback = columnInfo.renderer.options.onClick;
this.disabled = columnInfo.renderer.options.disabled || false;
const elDiv = document.createElement('div');
elDiv.innerHTML = `<span>${value}</span>`;
$(elDiv).addClass('tui-grid-cell-content d-flex justify-space-between');
const el2 = document.createElement('button');
$(el2).addClass('edit-btn blue--text');
el2.innerText = '보기';
elDiv.appendChild(el2);
this.el = elDiv;
if (!this.disabled && typeof onClickCallback === 'function') {
// click 이벤트
this.el.addEventListener('click', function(event) {
onClickCallback(rowKey);
});
}
}
getElement() {
return this.el;
}
getValue() {
// return this.el.value;
}
mounted() {
// this.el.focus();
}
}
var columnList = [
{ header: "NO", name: "no", align: "right", width: 80 },
{ header: "fabId", name: "fabId", hidden: true },
{ header: "FAB", name: "fabNm", align: "left" },
{ header: "eqpmGrpId", name: "eqpmGrpId", hidden: true },
{ header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200 },
{ header: "설비그룹", name: "eqpmGrpNm", align: "left", width: 200,
// Render custom button to switch page instead of double click on row
renderer: {
type: CustomButton,
options: {
value: '보기',
onClick: (rowKey) => {
const gridInstance = this.$refs[this.gridName].gridInstance;
const eventRowData = gridInstance.invoke("getRow", rowKey);
const data = {
cmCycle: this.pageData.cmCycle,
fromDt: this.pageData.fromDt,
fabId: this.selectValue01,
eqpmKindId: this.selectValue02,
eqpmGrpId: this.selectValue03,
eqpmId: eventRowData.eqpmId,
};
const key = "tick_" + Math.random();
this.$router.push({
name: "ems-effc-EnrgUseEqpmDetlMntrPage",
query: {
prgmId: "PRG0082",
},
params: {
...data,
key: key,
},
});
}
}
}
},
{ header: "eqpmId", name: "eqpmId", hidden: true },
{ header: "설비명", name: "eqpmNm", align: "left", width: 200 },
{
@ -472,6 +546,10 @@ export default {
},
],
},
pageOptions: {
useClient: true,
perPage: 3,
}
};
this.setGridOption({
@ -693,53 +771,83 @@ function numberFormatter({ value }) {
}
</script>
<style lang="scss" scoped>
@for $i from 0 through 9 {
#gridParent > * {
// .tui-grid-content-area{
background-color: red;
color: red;
overflow: visible;
position: relative;
}
#tooltipTargetElement_#{$i} {
overflow: visible;
position: relative; // 테스트3번쨰
white-space: nowrap; // 테스트3번쨰
}
#tooltipElement_#{$i} {
display: none;
overflow: visible;
position: relative;
}
#tooltipTargetElement_#{$i}:hover #tooltipElement_#{$i} {
display: block;
position: absolute;
min-width: 100%;
bottom: 30px;
z-index: 1000000000;
align: "center";
color: #f2f2f2;
background-color: #7f7f7f;
// width : 77px;
width: 200%;
left: -50%;
border-radius: 3px;
word-break: keep-all;
white-space: pre-wrap;
}
.tui-grid-rside-area {
display: none;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
}
.tui-grid-header-area {
border-style: solid;
border-width: 0 0 1px;
position: relative;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
::v-deep {
@for $i from 0 through 9 {
#gridParent > * {
// .tui-grid-content-area{
background-color: red;
color: red;
overflow: visible;
position: relative;
}
#tooltipTargetElement_#{$i} {
overflow: visible;
position: relative; // 테스트3번쨰
white-space: nowrap; // 테스트3번쨰
}
#tooltipElement_#{$i} {
display: none;
overflow: visible;
position: relative;
}
#tooltipTargetElement_#{$i}:hover #tooltipElement_#{$i} {
display: block;
position: absolute;
min-width: 100%;
bottom: 40px;
z-index: 1000000000;
align: "center";
color: #f2f2f2;
background-color: #000000d9;
// width : 77px;
width: 200%;
left: -50%;
border-radius: 4px;
padding: 6px 0px;
word-break: keep-all;
white-space: pre-wrap;
// Light mode
&.light-mode {
background-color: #000000d9;
}
// Dark mode
&.dark-mode {
background-color: #424242;
}
&::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -6px;
border-width: 6px;
border-style: solid;
}
&.light-mode::after {
border-color: #000000d9 transparent transparent transparent;
}
&.dark-mode::after {
border-color: #424242 transparent transparent transparent;
}
}
.tui-grid-rside-area {
display: none;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
}
.tui-grid-header-area {
border-style: solid;
border-width: 0 0 1px;
position: relative;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
}
}
}
</style>