feat(pdc):数据收集录入

This commit is contained in:
syngna_qiao 2024-11-20 10:45:57 +08:00
parent 3350b34d5c
commit 37ac21d598
3 changed files with 454 additions and 0 deletions

View File

@ -0,0 +1,18 @@
import request from '@/router/axios'
import { iep, cmp } from '@/api/prefix'
export function getPdcList(data) {
return request({
url: iep('/z-lot-pdc/pdc-list'),
method: 'post',
data: data
})
}
export function pdcConfirm(data) {
return request({
url: iep('/z-lot-pdc/pdc'),
method: 'post',
data: data
})
}

View File

@ -0,0 +1,414 @@
<template>
<div class="execution">
<basic-container>
<el-form
ref="searchForm"
:model="searchForm"
class="search custom-search-form"
label-width="150px"
:rules="rules"
>
<el-row>
<el-col :span="6">
<el-form-item label="工序" prop="operation" :required="true">
<el-input v-model="searchForm.operation" :disabled="operationDisabled" @change="searchChange" placeholder="请输入工序">
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showOperationDialog()"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备编码" prop="resrce" :required="true">
<el-input v-model="searchForm.resrce" :disabled="resrceDisabled" @change="searchChange" placeholder="请输入设备编码">
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showResourceDialog()"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="条码号" prop="lotNo" :required="true">
<el-input v-model="searchForm.lotNo" @change="lotEnter" placeholder="请输入条码">
</el-input>
</el-form-item>
</el-col>
<el-col :span="24" style="text-align: center">
<el-button type="primary" size="small" @click="searchChange">搜索</el-button>
<el-button type="primary" size="small" @click="pdcConfirm">数据收集</el-button>
<el-button size="small" @click="searchReset">{{$t('crud.emptyBtn')}}</el-button>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-tabs v-model="activeName">
<el-tab-pane label="条码的PDC" name="main">
<el-table size="mini" :data="pdcList"
style="width: 100%;"
height="500"
border
row-key="id"
highlight-current-row
:row-style="getRowStyle">
<el-table-column prop="seq" align="center" label="序号" width="60">
</el-table-column>
<el-table-column prop="lotNo" align="center" label="条码" >
</el-table-column>
<el-table-column prop="parameterNo" align="center" label="参数编码" width="110">
</el-table-column>
<el-table-column prop="description" overHidden="true" align="center" label="参数描述" >
</el-table-column>
<el-table-column prop="parameterValue" align="center" label="参数值" width="100">
<template slot-scope="scope" >
<el-input
:ref="scope.row.ref"
@keydown.native.enter="parameterValueEnter(scope.row.ref, scope.row, scope.row.parameterValue)"
v-if="scope.row.dataType != 'B'"
v-model.trim="scope.row.parameterValue"
>
</el-input>
<el-select :ref="scope.row.ref"
@change="parameterValueEnter(scope.row.ref, scope.row, scope.row.parameterValue)"
v-model="scope.row.parameterValue"
v-if="scope.row.dataType == 'B'"
placeholder="请选择参数值" >
<el-option value="" label=""/>
<el-option value="Y" label="OK"/>
<el-option value="N" label="NG"/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="item" overHidden="true" align="center" label="物料编码" >
</el-table-column>
<el-table-column prop="itemDesc" overHidden="true" align="center" label="物料描述" >
</el-table-column>
<el-table-column prop="shopOrder" overHidden="true" align="center" label="工单号" >
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</el-form>
</basic-container>
<input-select-dialog
:modal-obj="operationDialogObj"
:modal-fetch-fun="operationDialogFetchFun"
:modal-show.sync="operationDialogVisible"
@inputDialogSelected="operationSelected"
>
</input-select-dialog>
<input-select-dialog
:modal-obj="resourceDialogObj"
:modal-fetch-fun="resourceDialogFetchFun"
:modal-show.sync="resourceDialogVisible"
@inputDialogSelected="resourceSelected"
>
</input-select-dialog>
</div>
</template>
<script>
import {mapGetters} from 'vuex'
import {setOrder} from '@/util/sort'
import {isBlank} from '@/util/string'
import {getStore} from '@/util/store'
import {dialog} from './init'
import {hideLoading, showLoading} from '@/const/loading'
import {findOperationList as fetchOperationList} from "@/api/mes/prd/operation";
import {
operationDialogObj
} from '@/views/mes/pod/init';
import {copyJSON} from "@/util/util";
import {findResourceList as fetchResourceList} from "@/api/mes/pms/resrce";
import {getPdcList, pdcConfirm} from "@/api/mes/wip-nalinv/lot-pdc";
export default {
name: 'eqp-blanking',
computed: {
...mapGetters(['permissions']),
permissionList() {
return {
addBtn: false,
delBtn: false,
editBtn: false,
copyBtn: false,
}
},
},
beforeRouteEnter(to, from, next) {
next((vm) => {
try {
let me = vm
setTimeout(() => {
me.$nextTick(() => {
let params = copyJSON(me.$route.query)
if (!isBlank(params.operation)) {
me.searchForm.operation = params.operation;
}
if (!isBlank(params.resrce)) {
me.searchForm.resrce = params.resrce;
}
if (!isBlank(params.lotNo)) {
me.searchForm.lotNo = params.lotNo;
me.lotEnter();
}
})
}, 100)
} catch (e) {}
})
},
data() {
return {
operationDisabled: false,
resrceDisabled: false,
operationDialogVisible: false,
resourceDialogVisible: false,
activeName: "main",
pdcList: [],
dialog,
searchForm: {
resrce: "",
operation: "",
lotNo: ""
},
tableLoading: false,
site: getStore({name: 'tenantId'}),
openList: null, //开窗API
rules: {
resrce: [
{
required: true,
message: '设备不能为空',
trigger: ['blur', 'change'],
}
],
operation: [
{
required: true,
message: '工序不能为空',
trigger: ['blur', 'change'],
},
],
lotNo: [
{
required: true,
message: '条码号不能为空',
trigger: ['blur', 'change'],
},
],
},
operationDialogObj,
resourceDialogObj: {
condition: 'searchText',
tableColumn: [
{ prop: 'resrce', label: 'mes.pms.resource', width: '200' },
{ prop: 'description', label: 'mes.description' },
],
title: 'mes.pms.resource',
},
operationDialogFetchFun: fetchOperationList,
resourceDialogFetchFun: fetchResourceList,
}
},
methods: {
// 每页条数改变事件
sizeChange(pageSize) {
this.page.pageSize = pageSize
this.searchChange();
},
// 当前页发生改变事件
currentChange(current) {
this.page.currentPage = current
this.searchChange();
},
//条码回车
lotEnter() {
let me = this;
let lotNo = me.searchForm.lotNo;
if (isBlank(lotNo)) {
return me.$message.error("请先输入条码!");
}
me.searchChange("lot");
},
pdcConfirm() {
let me = this;
showLoading();
let param = {
operation: me.searchForm.operation,
resource: me.searchForm.resrce,
lotNo: me.searchForm.lotNo,
lotPdcList: me.pdcList
};
pdcConfirm(param).then(respData => {
hideLoading();
if (respData.data.code !== 0) {
return this.$message.error(respData.data.msg);
}
me.pdcList = [];
me.$message.success("条码号【" + me.searchForm.lotNo + "】数据收集成功");
}).catch(() => {
hideLoading();
});
},
// 查询事件
searchChange(eventType) {
let me = this;
let searchForm = me.searchForm;
me.$refs['searchForm'].validate((valid) => {
if (valid) {
let param = {
resource: searchForm.resrce,
operation: searchForm.operation,
lotNo: searchForm.lotNo
}
showLoading();
getPdcList(param).then(respData => {
hideLoading();
if (respData.data.code !== 0) {
this.$message.error(respData.data.msg);
if(eventType === 'lot') {
searchForm.lotNo = '';
}
}
let data = respData.data.data;
let list = data.parameterBasisList;
for (let i = 0; i < list.length; i++) {
list[i].item = data.item;
list[i].itemDesc = data.itemDesc;
list[i].shopOrder = data.shopOrder;
//用来区分每一行的ref,便于光标定位下一行
list[i].ref = i+1;
}
me.pdcList = list;
}).catch(() => {
if(eventType === 'lot') {
searchForm.lotNo = '';
}
hideLoading();
});
}
})
},
getRowStyle(data) {
let row = data.row;
let value = row.parameterValue;
let maxValue = row.maxValue;
let minValue = row.minValue;
//不在范围内,底色变黄
if ((maxValue && parseFloat(maxValue) < parseFloat(value)) || (minValue && parseFloat(minValue) > parseFloat(value)) || (row.dataType =='B' && value == "N")) {
row.isYellow = "Y";
return { background: '#f1ee36' };
} else {
row.isYellow = "N";
}
},
parameterValueEnter(ref, row, value) {
let me = this;
let maxValue = row.maxValue;
let minValue = row.minValue;
let number = parseInt(ref) + 1;
//自动换行到下一行
me.$nextTick(() => {
me.$refs[number].focus();
})
},
// 清空
searchReset() {
let me = this;
me.searchForm.lotNo = "";
me.operationDisabled = false;
me.resrceDisabled = false;
me.pdcList = [];
},
// 刷新事件
refreshChange() {
this.searchChange()
},
sortChange(column) {
this.tableData = []
setOrder.call(this, column)
this.orderJson = JSON.stringify([this.order])
this.getList(this.page, {orderJson: this.orderJson})
},
cellStyle (item) {
let row = item.row, column = item.column, rowIndex = item.rowIndex, columnIndex = item.columnIndex
if (!isBlank(row.message) && row.checkOutStatus == 'E') {
return "font-weight:550;color:red";
}
return "";
},
//显示操作弹窗框
showOperationDialog() {
let me = this
me.operationDialogObj.queryParam = {}
this.operationDialogVisible = true
},
//显示物料清单弹窗框
showResourceDialog() {
let me = this
if(isBlank(me.searchForm.operation)) {
return this.$message.error('请先选择工序')
}
me.resourceDialogObj.queryParam = {
operation: me.searchForm.operation,
fab: me.searchForm.fab
}
this.resourceDialogVisible = true
},
resourceSelected(row) {
let me = this
me.searchForm.resrce = row.resrce
me.searchChange()
},
operationSelected(row) {
let me = this
me.searchForm.operation = row.operation
me.searchChange()
}
},
}
</script>
<style scoped lang="scss">
::v-deep .basic-container {
.avue-form__group {
padding-top: 0;
background-color: unset !important;
}
.el-card__body {
padding: 0 !important;
margin-top: 0 !important;
.avue-crud__search {
.el-card__body {
.avue-form {
display: none !important;
}
}
}
}
}
::v-deep .avue-crud__menu {
min-height: 0px;
}
</style>

View File

@ -0,0 +1,22 @@
export const dialog = {
operationDialogObj: {
title: '工序',
condition: 'operation',
tableColumn: [
{prop: 'operation', label: '工序编号'},
{prop: 'description', label: '说明'},
],
queryParam: {},
},
resrceDialogObj: {
title: '设备',
condition: 'resrce',
tableColumn: [
{prop: 'resrce', label: '资源'},
{prop: 'description', label: '描述'},
],
queryParam: {},
},
}