feat(pdc):数据收集录入
This commit is contained in:
parent
3350b34d5c
commit
37ac21d598
18
src/api/mes/wip-nalinv/lot-pdc.js
Normal file
18
src/api/mes/wip-nalinv/lot-pdc.js
Normal 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
|
||||
})
|
||||
}
|
||||
414
src/views/mes/wip-nalinv/pdc/index.vue
Normal file
414
src/views/mes/wip-nalinv/pdc/index.vue
Normal 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>
|
||||
22
src/views/mes/wip-nalinv/pdc/init.js
Normal file
22
src/views/mes/wip-nalinv/pdc/init.js
Normal 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: {},
|
||||
},
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user