437 lines
14 KiB
Vue
437 lines
14 KiB
Vue
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<uni-collapse>
|
|||
|
|
<uni-forms :modelValue="jobInForm" ref="jobInForm" :rules="rules">
|
|||
|
|
<uni-collapse-item title="上机转入单" :open="true">
|
|||
|
|
<uni-forms-item label="作业编码" :labelWidth="90" name="pwoJobCode">
|
|||
|
|
<!-- <utils-input prefixIcon="scan" @iconClick="scanBar" type="text" @confirm="scanJobCode"
|
|||
|
|
v-model="jobInForm.pwoJobCode" @focus="focus" :focus='true' @click="focus" @input="handleInput" :key="input.boolean"></utils-input> -->
|
|||
|
|
<uni-easyinput
|
|||
|
|
prefixIcon="scan"
|
|||
|
|
@iconClick="scanBar"
|
|||
|
|
type="text"
|
|||
|
|
@confirm="scanJobCode"
|
|||
|
|
v-model="jobInForm.pwoJobCode"
|
|||
|
|
@click="focus"
|
|||
|
|
@input="handleInput"
|
|||
|
|
:key="input.boolean"
|
|||
|
|
></uni-easyinput>
|
|||
|
|
<!-- <uni-easyinput type="text" prefixIcon="scan"
|
|||
|
|
ref="saleCode"
|
|||
|
|
class="Number"
|
|||
|
|
placeholder="请扫描销售单号!"
|
|||
|
|
placeholderStyle="color:black"
|
|||
|
|
v-model="getCode.saleCode"
|
|||
|
|
@iconClick="iconClick('number')"
|
|||
|
|
@input="getNumberCode"
|
|||
|
|
:focus='open'
|
|||
|
|
clearable
|
|||
|
|
/> -->
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="工单" :labelWidth="90" name="pwoCode">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="jobInForm.pwoCode"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="工位编码" :labelWidth="90" name="stationCode">
|
|||
|
|
<uni-easyinput suffixIcon="scan" type="text" v-model="stationCode" @iconClick="scanBarStationCode" @input="scanStationCode"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="设备编码" :labelWidth="90" name="equipmentCode">
|
|||
|
|
<uni-easyinput suffixIcon="scan" :disabled="flag" ref="equipmentCode" @iconClick="scanBar1" type="text" v-model="equipmentCode"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item v-show="show" :labelWidth="90" style="text-align: center" name="">
|
|||
|
|
<button type="primary" size="mini" style="text-align: center; font-size: 18px" @click="eqpBind">绑定</button>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="选择状态" :labelWidth="90">
|
|||
|
|
<u-radio-group v-model="radiovalue1" placement="row">
|
|||
|
|
<u-radio v-for="(item, index) in radiolist1" :key="index" :label="item.name" :name="item.name"></u-radio>
|
|||
|
|
</u-radio-group>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item :label="radiovalue1 + '时间'" :labelWidth="90">
|
|||
|
|
<view class="example-body">
|
|||
|
|
<uni-datetime-picker type="datetime" v-model="value1" />
|
|||
|
|
</view>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="操作人编码" :labelWidth="90" name="operateByCode">
|
|||
|
|
<uni-easyinput suffixIcon="scan" @confirm="scanBarOperateBy" @iconClick="scanBar2" type="text" v-model="operateByCode"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="操作人" :labelWidth="90" name="operateBy">
|
|||
|
|
<uni-easyinput disabled type="text" v-model="operateBy"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="转移单类型" :labelWidth="90" name="type">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="jobInForm.type"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="备注" :labelWidth="90" name="remark">
|
|||
|
|
<uni-easyinput autoHeight type="textarea" v-model="jobInForm.remark"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
</uni-collapse-item>
|
|||
|
|
<uni-collapse-item title="上机转入单明细" :open="true">
|
|||
|
|
<uni-swipe-action>
|
|||
|
|
<uni-swipe-action-item
|
|||
|
|
:rightOptions="rightOptions"
|
|||
|
|
v-for="(item, index) in jobInForm.mesPwoJobCvDetailList"
|
|||
|
|
:key="index"
|
|||
|
|
@click="(data) => clickDetail(index, data)"
|
|||
|
|
@change="swipChange"
|
|||
|
|
>
|
|||
|
|
<!-- <uni-badge :text="index+1" type="primary"><u-tag text="未核销" size="large" type="error" plain
|
|||
|
|
plainFill></u-tag></uni-badge> -->
|
|||
|
|
<!-- <div><u-tag text="未核销" size="mini" type="error" plain plainFill></u-tag></div> -->
|
|||
|
|
<uni-forms-item label="物料编码" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.materialCode'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.materialCode"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="物料名称" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.materialName'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.materialName"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="物料批号" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.materialBatch'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.materialBatch"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="目标仓库" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.whCodeDest'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.whCodeDest"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="目标库位" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.locCodeDest'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.locCodeDest"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="可转入数量" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.availableNum'">
|
|||
|
|
<uni-easyinput type="text" disabled v-model="item.availableNum"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
<uni-forms-item label="转移数量" :labelWidth="90" :name="'mesPwoJobCvDetailList.' + index + '.number'">
|
|||
|
|
<uni-easyinput type="text" v-model="item.number"></uni-easyinput>
|
|||
|
|
</uni-forms-item>
|
|||
|
|
</uni-swipe-action-item>
|
|||
|
|
</uni-swipe-action>
|
|||
|
|
</uni-collapse-item>
|
|||
|
|
</uni-forms>
|
|||
|
|
</uni-collapse>
|
|||
|
|
<view style="text-align: center; margin: 10px 0" v-show="jobInForm.mesPwoJobCvDetailList.length > 0">
|
|||
|
|
<button type="primary" size="mini" style="text-align: center; font-size: 18px" @click="byDetailAdd">照单领</button>
|
|||
|
|
</view>
|
|||
|
|
<u-button type="primary" @click="jobInSubmit">提交</u-button>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { handleConvert, getEquipment, addConversion, listEmpEqpHistory, listEmployee, listConversion, pwoStart, pwoStop } from '@/api/mes/jobIn.js';
|
|||
|
|
import { updatePwoJob, listEquipment, getPwoJob, listPwoJob } from '@/api/mes/jobReport.js';
|
|||
|
|
import { listStation, addCustomizeEsop } from '@/api/esop/esop.js';
|
|||
|
|
import { listPwoLike } from '@/api/mes/pwoIn.js';
|
|||
|
|
import utilsInput from '@/utils/uniapp/utilsInput.vue';
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
utilsInput
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
input: {
|
|||
|
|
boolean: 0,
|
|||
|
|
inputValue: ''
|
|||
|
|
},
|
|||
|
|
value1: null,
|
|||
|
|
radiolist1: [
|
|||
|
|
{
|
|||
|
|
name: '开工',
|
|||
|
|
disabled: false
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
name: '暂停',
|
|||
|
|
disabled: false
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
radiovalue1: '开工',
|
|||
|
|
stationCode: null,
|
|||
|
|
jobInForm: {
|
|||
|
|
mesPwoJobCvDetailList: []
|
|||
|
|
},
|
|||
|
|
stationId: null,
|
|||
|
|
number: null,
|
|||
|
|
equipmentCode: null,
|
|||
|
|
flag: true,
|
|||
|
|
show: false,
|
|||
|
|
operateBy: null,
|
|||
|
|
operateByCode: null,
|
|||
|
|
rightOptions: [
|
|||
|
|
{
|
|||
|
|
text: '删除',
|
|||
|
|
style: {
|
|||
|
|
backgroundColor: '#ff2a17'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
rules: {
|
|||
|
|
pwoJobCode: {
|
|||
|
|
rules: [
|
|||
|
|
{
|
|||
|
|
required: true,
|
|||
|
|
errorMessage: '请输入作业编码!'
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
// materialName: [{
|
|||
|
|
// required: false,
|
|||
|
|
// errorMessage: '请输入物料名称!'
|
|||
|
|
// }],
|
|||
|
|
// number: [{
|
|||
|
|
// required: true,
|
|||
|
|
// errorMessage: '请输入转移数量!'
|
|||
|
|
// }],
|
|||
|
|
// equipmentCode: {
|
|||
|
|
// rules: [{
|
|||
|
|
// pattern: '^[A-Z0-9]+$',
|
|||
|
|
// errorMessage: '请输入正确格式的设备编码!',
|
|||
|
|
// trigger: 'blur',
|
|||
|
|
// }]
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
mounted() {
|
|||
|
|
listEquipment().then((response) => {
|
|||
|
|
this.equipmentList = response.rows;
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
//照单领
|
|||
|
|
byDetailAdd() {
|
|||
|
|
if (this.jobInForm.mesPwoJobCvDetailList.length > 0) {
|
|||
|
|
for (var i in this.jobInForm.mesPwoJobCvDetailList) {
|
|||
|
|
this.jobInForm.mesPwoJobCvDetailList[i].number = this.jobInForm.mesPwoJobCvDetailList[i].availableNum;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
deleteDetail(index) {
|
|||
|
|
this.jobInForm.mesPwoJobCvDetailList.splice(index, 1);
|
|||
|
|
},
|
|||
|
|
clickDetail(itemIndex, { position, index }) {
|
|||
|
|
if (index == 0) {
|
|||
|
|
this.deleteDetail(itemIndex);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
reset(code) {
|
|||
|
|
this.jobInForm = {
|
|||
|
|
pwoJobCode: code,
|
|||
|
|
mesPwoJobCvDetailList: []
|
|||
|
|
};
|
|||
|
|
this.equipmentCode = null;
|
|||
|
|
this.operateBy = null;
|
|||
|
|
this.operateByCode = null;
|
|||
|
|
},
|
|||
|
|
eqpBind() {
|
|||
|
|
let id = Number(this.jobInForm.pwoJobCode.substring(4));
|
|||
|
|
//判断是否有该设备
|
|||
|
|
if (this.equipmentCode != '' && this.equipmentCode) {
|
|||
|
|
let query = {
|
|||
|
|
equipmentCode: this.equipmentCode
|
|||
|
|
};
|
|||
|
|
listEquipment(query).then(async (res) => {
|
|||
|
|
if (res.rows.length != 0) {
|
|||
|
|
//绑定设备
|
|||
|
|
let data = {
|
|||
|
|
id: this.jobInForm.pwoJobCode.slice(4),
|
|||
|
|
eqpId: res.rows[0].id
|
|||
|
|
};
|
|||
|
|
this.$modal.loading('提交中');
|
|||
|
|
updatePwoJob(data).then((res) => {
|
|||
|
|
this.$modal.closeLoading();
|
|||
|
|
this.$modal.msgSuccess('绑定成功!');
|
|||
|
|
this.show = false;
|
|||
|
|
this.flag = true;
|
|||
|
|
this.scanJobCode(this.jobInForm.pwoJobCode);
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
this.$modal.msg('未查询到该设备编码!');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
} else {
|
|||
|
|
this.$modal.msg('请输入设备编码!');
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
scanJobCode(code) {
|
|||
|
|
if (code) {
|
|||
|
|
this.reset(code);
|
|||
|
|
// let id = Number(code.substring(4));
|
|||
|
|
listPwoJob({
|
|||
|
|
code: code
|
|||
|
|
}).then(async (res) => {
|
|||
|
|
if (res.rows.length != 0) {
|
|||
|
|
if (!res.rows[0].eqpId) {
|
|||
|
|
//未绑定设备,设备编码框可用,绑定按钮显示
|
|||
|
|
this.$modal.msg('该作业未绑定设备,请绑定设备!');
|
|||
|
|
this.flag = false;
|
|||
|
|
this.show = true;
|
|||
|
|
} else {
|
|||
|
|
//已绑定设备,
|
|||
|
|
handleConvert(res.rows[0].id).then(async (response) => {
|
|||
|
|
this.equipmentCode = this.equipmentList.find((item) => item.id == response.jobInfo.eqpId).equipmentCode; //赋值设备编码
|
|||
|
|
listEmpEqpHistory({
|
|||
|
|
equipmentCode: this.equipmentCode
|
|||
|
|
}).then(async (res) => {
|
|||
|
|
if (res.rows.length != 0) {
|
|||
|
|
//取上机且未下机的人员
|
|||
|
|
if (res.rows[res.rows.length - 1].startTime && !res.rows[res.rows.length - 1].endTime) {
|
|||
|
|
this.operateBy = res.rows[res.rows.length - 1].empName;
|
|||
|
|
this.operateByCode = res.rows[res.rows.length - 1].empCode;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
this.jobInForm.pwoJobId = response.jobInfo.id;
|
|||
|
|
this.jobInForm.powJobCode = response.jobInfo.code;
|
|||
|
|
this.jobInForm.pwoId = response.jobInfo.pwoId;
|
|||
|
|
this.jobInForm.pwoCode = response.jobInfo.pwoCode;
|
|||
|
|
this.jobInForm.type = 2;
|
|||
|
|
|
|||
|
|
if (response.materials != null && response.materials.length > 0) {
|
|||
|
|
for (let i in response.materials) {
|
|||
|
|
let obj = {};
|
|||
|
|
(obj.type = response.materials[i].type),
|
|||
|
|
(obj.materialBatchNo = response.materials[i].batchNo),
|
|||
|
|
(obj.productionVersion = response.materials[i].productionVersion),
|
|||
|
|
(obj.materialCode = response.materials[i].cPtNo);
|
|||
|
|
obj.materialName = response.materials[i].cTitle;
|
|||
|
|
obj.materialBatch = response.materials[i].batchNo;
|
|||
|
|
obj.whCodeDest = 'op-' + response.jobInfo.opCode;
|
|||
|
|
obj.availableNum = response.materials[i].availableNum;
|
|||
|
|
obj.locCodeDest = this.equipmentCode + '-01';
|
|||
|
|
obj.number = null;
|
|||
|
|
this.jobInForm.mesPwoJobCvDetailList.push(obj);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
this.$modal.msg('未查询到可转入的原材料!');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
scanBarOperateBy() {
|
|||
|
|
let obj = {
|
|||
|
|
empCode: this.operateByCode
|
|||
|
|
};
|
|||
|
|
listEmployee(obj).then(async (res) => {
|
|||
|
|
if (res.rows.length != 0) {
|
|||
|
|
this.operateBy = res.rows[0].name;
|
|||
|
|
} else {
|
|||
|
|
this.$modal.msg('未查询到该人员信息!');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
//工位编码
|
|||
|
|
scanBarStationCode() {
|
|||
|
|
const _this = this;
|
|||
|
|
uni.scanCode({
|
|||
|
|
scanType: ['barCode', 'qrCode'],
|
|||
|
|
success: function (res) {
|
|||
|
|
_this.stationCode = res.result;
|
|||
|
|
_this.scanStationCode(_this.stationCode);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
scanStationCode(code) {
|
|||
|
|
let obj = {
|
|||
|
|
stationCode: code
|
|||
|
|
};
|
|||
|
|
listStation(obj).then((res) => {
|
|||
|
|
if (res.rows.length > 0) {
|
|||
|
|
this.stationId = res.rows[0].id;
|
|||
|
|
} else {
|
|||
|
|
this.$modal.msg('未查询到该工位,无法同步ESOP!');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
jobInSubmit() {
|
|||
|
|
//判断是否输入工位,并进行同步esop
|
|||
|
|
if (this.stationCode && this.stationCode != '' && this.stationId && this.stationId != '') {
|
|||
|
|
addCustomizeEsop({
|
|||
|
|
pwoJobId: this.jobInForm.pwoJobId,
|
|||
|
|
stationId: this.stationId,
|
|||
|
|
stationCode: this.stationCode,
|
|||
|
|
pwoJobCode: this.jobInForm.pwoJobCode
|
|||
|
|
}).then((resp) => {
|
|||
|
|
this.$modal.msgSuccess('ESOP同步成功!');
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
//判断是否输入时间
|
|||
|
|
if (this.value1 && this.value1 != '') {
|
|||
|
|
switch (this.radiovalue1) {
|
|||
|
|
case '开工':
|
|||
|
|
pwoStart(this.jobInForm.pwoJobId, this.value1).then((res) => {
|
|||
|
|
this.$modal.msgSuccess('作业开工成功!');
|
|||
|
|
});
|
|||
|
|
break;
|
|||
|
|
case '暂停':
|
|||
|
|
pwoStop(this.jobInForm.pwoJobId, this.value1).then((res) => {
|
|||
|
|
this.$modal.msgSuccess('作业暂停成功!');
|
|||
|
|
});
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
this.jobInForm.operateBy = this.operateBy;
|
|||
|
|
this.$refs['jobInForm'].validate().then((valid) => {
|
|||
|
|
//作业转入
|
|||
|
|
this.$modal.loading('提交中');
|
|||
|
|
addConversion(this.jobInForm).then((response) => {
|
|||
|
|
this.$modal.closeLoading();
|
|||
|
|
this.$modal.msgSuccess('转入成功!');
|
|||
|
|
setTimeout(() => {
|
|||
|
|
this.$tab.switchTab('/pages/work/index');
|
|||
|
|
}, 500);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
//作业编码
|
|||
|
|
scanBar() {
|
|||
|
|
const _this = this;
|
|||
|
|
uni.scanCode({
|
|||
|
|
scanType: ['barCode', 'qrCode'],
|
|||
|
|
success: function (res) {
|
|||
|
|
_this.jobInForm.pwoJobCode = res.result;
|
|||
|
|
_this.scanJobCode(_this.jobInForm.pwoJobCode);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
//设备编码
|
|||
|
|
scanBar1() {
|
|||
|
|
const _this = this;
|
|||
|
|
uni.scanCode({
|
|||
|
|
scanType: ['barCode', 'qrCode'],
|
|||
|
|
success: function (res) {
|
|||
|
|
_this.equipmentCode = res.result;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
//操作人编码
|
|||
|
|
scanBar2() {
|
|||
|
|
const _this = this;
|
|||
|
|
uni.scanCode({
|
|||
|
|
scanType: ['barCode', 'qrCode'],
|
|||
|
|
success: function (res) {
|
|||
|
|
_this.operateByCode = res.result;
|
|||
|
|
_this.scanBarOperateBy();
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 隐藏软键盘
|
|||
|
|
*/
|
|||
|
|
focus() {
|
|||
|
|
uni.hideKeyboard();
|
|||
|
|
},
|
|||
|
|
/**
|
|||
|
|
* 不让手动输入
|
|||
|
|
* @param {Object} value
|
|||
|
|
*/
|
|||
|
|
handleInput(value) {
|
|||
|
|
const { inputValue } = this.input;
|
|||
|
|
if (value.length - inputValue.length == 1 || inputValue.length - value.length == 1) {
|
|||
|
|
this.$modal.msg('请扫描');
|
|||
|
|
this.jobInForm.pwoJobCode = null;
|
|||
|
|
this.input.inputValue = value;
|
|||
|
|
this.input.boolean = this.input.boolean == 0 ? 10 : 0;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
this.input.inputValue = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style></style>
|