init dev-push code ui base design

This commit is contained in:
leonard
2025-07-22 09:58:38 +07:00
parent ffdf5ccb66
commit eedbf94d56
214 changed files with 42170 additions and 28040 deletions

View File

@ -3,89 +3,61 @@
<v-row ref="searchFilter">
<v-col :cols="12">
<v-card class="searchFilter">
<v-row align="center" no-gutters>
<v-row align="end" no-gutters>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox1"
:propsValue="selectValue01"
:itemList="selectValueList01"
:label="'설비종류'"
@update:propsValue="selectValue01 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox1" :propsValue="selectValue01"
:itemList="selectValueList01" :label="'설비종류'" :iconShow="true"
@update:propsValue="selectValue01 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" />
</v-col>
<v-col :cols="3">
<component
:is="'SelectBox'"
ref="SelectBox2"
:propsValue="selectValue02"
:itemList="selectValueList02"
:label="'설비그룹'"
@update:propsValue="selectValue02 = $event"
/>
<component :is="'SelectBox'" ref="SelectBox2" :propsValue="selectValue02"
:itemList="selectValueList02" :label="'설비그룹'" :iconShow="true"
@update:propsValue="selectValue02 = $event" :labelCols="12" :textCols="12"
:customClass="'select-large'" />
</v-col>
<v-col :cols="3">
<InputText
:parentPrgmId="myPrgmId"
label="가이드명"
:textCols="8"
valueNm="gdIdxNm"
:searchOption="true"
/>
<InputText :parentPrgmId="myPrgmId" label="가이드명" :textCols="12" valueNm="gdIdxNm"
:searchOption="true" :iconShow="true" :labelCols="12" :customClass="'input-large'"/>
</v-col>
<v-col :cols="3" class="text-right">
<BtnSearch @click="search" />
<a-button icon="search" type="primary" @click="search()" class="search-button" size="large">조회</a-button>
</v-col>
</v-row>
</v-card>
</v-col>
</v-row>
<v-row ref="contents">
<v-col :cols="12" style="height: 100%">
<!-- <v-card class="py-5"> -->
<v-col :cols="12" style="height: 40%">
<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
>
<Buttons
:parentPrgmId="myPrgmId"
:bindingData="gridName"
:detailList="detailList"
:btnActionsFnc="btnActions"
/>
<v-row ref="contents" class="mt-4">
<!-- <v-card class="py-5"> -->
<v-col :cols="12">
<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>
<Buttons :parentPrgmId="myPrgmId" :bindingData="gridName" :detailList="detailList"
:btnActionsFnc="btnActions" />
</div>
<div class="h100 px-4" style="height:calc(100% - 70px)">
<div ref="gridParent" >
<component :ref="gridName" :is="loadGrid ? 'Grid' : null" :gridName="gridName"
:parentPrgmId="myPrgmId" @getRowsData="getRowData" :dataPath="dataPathExample" />
</div>
<div class="h100 px-5" style="height:calc(100% - 70px)">
<div ref="gridParent" class="w100 h100">
<component
:ref="gridName"
:is="loadGrid ? 'Grid' : null"
:gridName="gridName"
:parentPrgmId="myPrgmId"
@getRowsData="getRowData"
/>
</div>
<div class="d-flex py-4">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</div>
</v-card>
</v-col>
<v-col :cols="12" style="height: 60%">
<v-card class="pb-5">
<v-row
:cols="12"
class="d-flex align-center justify-space-between pa-3"
>
<component
:is="'Form'"
:parentPrgmId="myPrgmId"
:detailList="detailList"
@gridEditingFinish="gridEditingFinish"
/>
</v-row>
</v-card>
</v-col>
<!-- </v-card> -->
</div>
</v-card>
</v-col>
<!-- <v-col :cols="12" style="height: 60%">
<v-card class="pb-5">
<v-row :cols="12" class="d-flex align-center justify-space-between pa-3">
<component :is="'Form'" :parentPrgmId="myPrgmId" :detailList="detailList"
@gridEditingFinish="gridEditingFinish" />
</v-row>
</v-card>
</v-col> -->
<!-- </v-card> -->
</v-row>
</div>
</template>
@ -140,7 +112,7 @@ export default {
myPrgmId: myPrgmId,
initedFlag: false,
gridName: 'rowGrid',
loadGrid: false,
loadGrid: true,
detailList: myDetail,
selectValue01: null,
selectValueList01: [],
@ -153,6 +125,102 @@ export default {
// pysclQtyId3 : null,
// pysclQtyId4 : null
// }
dataPathExample: {
"rowGrid": {
data: [
{
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
careStndVal: 50,
warnStndVal: 70,
alrmMsg: '온도가 기준치를 초과했습니다.',
},
{
gdIdxId: 'GD002',
gdIdxNm: '습도 가이드',
eqpmGrpId: 'EQ002',
upTotMeth: 'MAX',
careStndVal: 30,
warnStndVal: 60,
alrmMsg: '습도가 기준치를 초과했습니다.',
},
{
gdIdxId: 'GD003',
gdIdxNm: '압력 가이드',
eqpmGrpId: 'EQ003',
upTotMeth: 'SUM',
careStndVal: 100,
warnStndVal: 150,
alrmMsg: '압력이 기준치를 초과했습니다.',
}
],
column: [
{
header: '가이드',
name: 'gdIdxId',
width: 100,
align: 'center',
},
{
header: '가이드명',
name: 'gdIdxNm',
width: 210,
align: 'left',
},
{
header: '설비그룹ID',
name: 'eqpmGrpId',
width: 100,
align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.eqpmGrpList.filter(item => item.value == value);
// if (newValue.length > 0) {
// retVal = newValue[0].text;
// }
// return retVal;
// },
},
{
header: '상위집계방법',
name: 'upTotMeth',
width: 100,
align: 'center',
// formatter({ value }) {
// let retVal = '';
// const newValue = _this.pageData.upTotMethList.filter(item => item.commCd == value);
// if (newValue.length > 0) {
// retVal = newValue[0].commCdNm;
// }
// return retVal;
// },
},
{
header: '주의기준',
name: 'careStndVal',
width: 100,
align: 'right',
},
{
header: '경고기준',
name: 'warnStndVal',
width: 100,
align: 'right',
},
{
header: '알람메세지',
name: 'alrmMsg',
minWidth: 860,
align: 'left',
}
]
}
}
};
},
computed: {
@ -284,46 +352,61 @@ export default {
});
},
async getEqpmKind() {
let res = await this.postApiReturn({
apiKey: 'selectEqpmKindCodeList',
resKey: 'eqpmKindCodeLists',
sendParam: {},
});
if (res.length > 0) {
this.selectValueList01 = await res.map(item => {
return {
text: item.eqpmKindNm,
value: item.eqpmKindId,
};
});
this.selectValue01 = this.selectValueList01[0].value;
} else {
this.selectValueList01 = [];
this.selectValue01 = null;
}
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmKindCodeList',
// resKey: 'eqpmKindCodeLists',
// sendParam: {},
// });
// if (res.length > 0) {
// this.selectValueList01 = await res.map(item => {
// return {
// text: item.eqpmKindNm,
// value: item.eqpmKindId,
// };
// });
// this.selectValue01 = this.selectValueList01[0].value;
// } else {
// this.selectValueList01 = [];
// this.selectValue01 = null;
// }
this.selectValueList01 = [
{ label: 'Etcher', value: 'EQK001' },
{ label: 'Deposition', value: 'EQK002' },
{ label: 'Inspection', value: 'EQK003' },
];
this.selectValue01 = 'EQK001';
this.setPageData({
eqpmKindList: this.selectValueList01,
eqpmKindId: this.selectValue01,
});
},
async getEqpmGrp() {
let res = await this.postApiReturn({
apiKey: 'selectEqpmGrpCodeList',
resKey: 'eqpmGrpCodeLists',
sendParam: { eqpmKindId: this.selectValue01 },
});
if (res.length > 0) {
this.selectValueList02 = await res.map(item => {
return {
text: item.eqpmGrpNm,
value: item.eqpmGrpId,
};
});
this.selectValue02 = this.selectValueList02[0].value;
} else {
this.selectValueList02 = [];
this.selectValue02 = null;
}
// let res = await this.postApiReturn({
// apiKey: 'selectEqpmGrpCodeList',
// resKey: 'eqpmGrpCodeLists',
// sendParam: { eqpmKindId: this.selectValue01 },
// });
// if (res.length > 0) {
// this.selectValueList02 = await res.map(item => {
// return {
// text: item.eqpmGrpNm,
// value: item.eqpmGrpId,
// };
// });
// this.selectValue02 = this.selectValueList02[0].value;
// } else {
// this.selectValueList02 = [];
// this.selectValue02 = null;
// }
this.selectValueList02 = [
{ label: '냉동기고온', value: '냉동기고온' },
{ label: '냉동기저온', value: '냉동기저온' },
{ label: '공조기', value: '공조기' },
{ label: '보일러', value: '보일러' }
];
this.setPageData({
eqpmGrpList: this.selectValueList02,
eqpmGrpId: this.selectValue02,
@ -553,48 +636,100 @@ export default {
async getRowGridData() {
this.loadGrid = false;
let res = [];
res = await this.postApiReturn({
apiKey: 'selectEqpmGdIdxDataList',
resKey: 'eqpmGdIdxDataList',
sendParam: {
eqpmGrpId: this.selectValue02,
gdIdxNmLike: this.pageData.gdIdxNm,
},
});
const newRes = res.map(item => {
const newObj = {
...item,
const newRes = [
{
comId: 'COM001',
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
sortSeq: 1,
pysclQtyId1: 'TEMP',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '내부',
careStndVal: 50,
warnStndVal: 70,
gdMeth: '자동',
useFg: '1',
alrmMsg: '온도가 기준치를 초과했습니다.',
calcProc: 'PROC001',
calcDesc: '평균 계산',
calcMeth: '(A+B)/2',
unit: 'C',
argCnt: 2,
rowStat: null,
};
return newObj;
});
},
{
comId: 'COM002',
gdIdxId: 'GD002',
gdIdxNm: '습도 가이드',
eqpmGrpId: 'EQ002',
upTotMeth: 'MAX',
sortSeq: 2,
pysclQtyId1: 'HUMID',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '외부',
careStndVal: 30,
warnStndVal: 60,
gdMeth: '수동',
useFg: '0',
alrmMsg: '습도가 기준치를 초과했습니다.',
calcProc: 'PROC002',
calcDesc: '최대값 계산',
calcMeth: 'MAX(A,B)',
unit: '%',
argCnt: 2,
rowStat: null,
},
];
// res = await this.postApiReturn({
// apiKey: 'selectEqpmGdIdxDataList',
// resKey: 'eqpmGdIdxDataList',
// sendParam: {
// eqpmGrpId: this.selectValue02,
// gdIdxNmLike: this.pageData.gdIdxNm,
// },
// });
// const newRes = res.map(item => {
// const newObj = {
// ...item,
// rowStat: null,
// };
// return newObj;
// });
this.setGridData({
gridKey: this.gridName,
value: newRes,
});
//this.loadGrid = true;
this.$nextTick(() => {
if (newRes.length > 0) {
try {
this.$refs[this.gridName].focus({
//rowKey: 0,
rowKey:
this.pageData.rowGridSelectKey == '' ||
this.pageData.rowGridSelectKey == null
? 0
: this.pageData.rowGridSelectKey ==
this.$refs[this.gridName].getData().length - 1
? this.pageData.rowGridSelectKey
: 0,
columnName: 'gdIdxId',
setScroll: true,
});
} catch (error) {}
} else {
this.detailDataInit();
}
});
// this.$nextTick(() => {
// if (newRes.length > 0) {
// try {
// this.$refs[this.gridName].focus({
// //rowKey: 0,
// rowKey:
// this.pageData.rowGridSelectKey == '' ||
// this.pageData.rowGridSelectKey == null
// ? 0
// : this.pageData.rowGridSelectKey ==
// this.$refs[this.gridName].getData().length - 1
// ? this.pageData.rowGridSelectKey
// : 0,
// columnName: 'gdIdxId',
// setScroll: true,
// });
// } catch (error) { }
// } else {
// this.detailDataInit();
// }
// });
this.loadGrid = true;
},
async getRowData(data) {
@ -1035,7 +1170,60 @@ const defaultData = {
/* data 세팅 */
// 로컬 gridName 값과 동일한 이름으로 세팅
rowGrid: {
data: [],
// data: [],
data: [
{
comId: 'COM001',
gdIdxId: 'GD001',
gdIdxNm: '온도 가이드',
eqpmGrpId: 'EQ001',
upTotMeth: 'AVG',
sortSeq: 1,
pysclQtyId1: 'TEMP',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '내부',
careStndVal: 50,
warnStndVal: 70,
gdMeth: '자동',
useFg: '1',
alrmMsg: '온도가 기준치를 초과했습니다.',
calcProc: 'PROC001',
calcDesc: '평균 계산',
calcMeth: '(A+B)/2',
unit: 'C',
argCnt: 2,
rowStat: null,
},
{
comId: 'COM002',
gdIdxId: 'GD002',
gdIdxNm: '습도 가이드',
eqpmGrpId: 'EQ002',
upTotMeth: 'MAX',
sortSeq: 2,
pysclQtyId1: 'HUMID',
pysclQtyId2: null,
pysclQtyId3: null,
pysclQtyId4: null,
ctgr1: '환경',
ctgr2: '외부',
careStndVal: 30,
warnStndVal: 60,
gdMeth: '수동',
useFg: '0',
alrmMsg: '습도가 기준치를 초과했습니다.',
calcProc: 'PROC002',
calcDesc: '최대값 계산',
calcMeth: 'MAX(A,B)',
unit: '%',
argCnt: 2,
rowStat: null,
},
],
column: [], // myColumns,
option: {}, // myOptions
defaultRow: {
@ -1078,30 +1266,34 @@ const myDetail = [
label: '가이드',
valueNm: 'gdIdxId',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: false,
readonly: true,
placeholder: '시스템 자동입력',
iconShow: true,
labelCols: 12,
textCols: 12,
},
{
type: 'InputText',
label: '가이드 명',
valueNm: 'gdIdxNm',
disabled: false,
cols: 6,
labelCols: 2,
textCols: 9,
class: 'py-2',
cols: 9,
labelCols: 12,
textCols: 12,
class: 'py-3 pl-3',
required: true,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 3,
class: 'py-2',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
// {
// // 공백 처리
// type: 'Label',
// cols: 3,
// class: 'py-2',
// // label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
// disabled: false,
// },
// {
// type: 'CheckBox',
// label: '설비기준적용',
@ -1118,12 +1310,15 @@ const myDetail = [
valueNm: 'eqpmGrpId',
disabled: false,
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
list: 'eqpmGrpList',
itemText: 'text',
itemValue: 'value',
required: true,
readonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
@ -1131,11 +1326,14 @@ const myDetail = [
valueNm: 'upTotMeth',
disabled: false,
cols: 3,
class: 'py-2',
class: 'pa-3',
list: 'upTotMethList',
itemText: 'commCdNm',
itemValue: 'commCd',
required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'SelectBox',
@ -1143,19 +1341,25 @@ const myDetail = [
valueNm: 'unit',
disabled: false,
cols: 3,
class: 'py-2',
class: 'pa-3',
list: 'unitList',
itemText: 'commCdNm',
itemValue: 'commCd',
// required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '정렬순번',
valueNm: 'sortSeq',
cols: 3,
class: 'py-2',
class: 'pa-3 pr-2',
// required: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
// {
// // 공백 처리
@ -1191,17 +1395,20 @@ const myDetail = [
valueNm: 'calcProc', // textField 바인딩을 위해 필요
valueNm2: 'argCnt',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: true,
openMode: 'G',
disabled: false,
modalTitle: '계산코드',
labelCols: 12,
textCols: 12,
iconShow: true
},
{
// 공백 처리
type: 'Label',
cols: 9,
class: 'py-2',
class: 'py-3',
// label: "* '주의기준값' 또는 '경고기준값' 중 하나는 필수로 입력해 주세요.",
disabled: false,
},
@ -1210,9 +1417,10 @@ const myDetail = [
label: '계산설명',
valueNm: 'calcDesc',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
iconShow: true
// required: true,
},
{
@ -1227,7 +1435,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId1','pysclQtyNm1'], // page의 grid 컬럼
// popupBindingList: ['pysclQtyId','pysclQtyNm'], // popup의 grid 컬럼
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
required: true,
openMode: 'ALL',
disabled: false,
@ -1235,6 +1443,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1248,7 +1459,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId2','pysclQtyNm2'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'pa-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1256,6 +1467,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1269,7 +1483,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId3','pysclQtyNm3'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'pa-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1277,6 +1491,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'EgrpPysclQtyPop',
@ -1290,7 +1507,7 @@ const myDetail = [
// gridBindingList: ['pysclQtyId4','pysclQtyNm4'],
// popupBindingList: ['pysclQtyId','pysclQtyNm'],
cols: 3,
class: 'py-2',
class: 'py-3 pl-3',
// required: true,
openMode: 'ALL',
disabled: false,
@ -1298,6 +1515,9 @@ const myDetail = [
eqpmGrpId: '',
closeBtnFg: true,
selectBoxReadonly: true,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
@ -1305,34 +1525,46 @@ const myDetail = [
label: '카테고리1',
valueNm: 'ctgr1',
cols: 3,
class: 'py-2',
class: 'py-3 pr-3',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '카테고리2',
valueNm: 'ctgr2',
cols: 3,
class: 'py-2',
class: 'pa-3',
disabled: false,
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '주의기준값',
valueNm: 'careStndVal',
cols: 3,
class: 'py-2',
class: 'pa-3',
required: true,
inputType: 'number',
labelCols: 12,
textCols: 12,
iconShow: true
},
{
type: 'InputText',
label: '경고기준값',
valueNm: 'warnStndVal',
cols: 3,
class: 'py-2',
class: 'py-3 pl-3',
required: true,
inputType: 'number',
labelCols: 12,
textCols: 12,
iconShow: true
},
// {
// // 공백 처리
@ -1355,23 +1587,28 @@ const myDetail = [
label: '가이드방법',
valueNm: 'gdMeth',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
required: true,
iconShow: true
},
{
type: 'InputText',
label: '알람메세지',
valueNm: 'alrmMsg',
cols: 12,
labelCols: 1,
textCols: 11,
class: 'py-2',
labelCols: 12,
textCols: 12,
class: 'py-3',
required: true,
iconShow: true
},
];
</script>
<style lang="scss">
@import '@/assets/scss/common.scss';
<style lang="scss" scoped>
.searchFilter {
border-radius: 6px;
box-shadow: none;
}
</style>