fix(自动拆包机托盘上料):手动呼叫AGV

This commit is contained in:
liaohechuan 2025-05-19 09:19:45 +08:00
parent 00f168bdd2
commit c0959c8b3e
4 changed files with 150 additions and 43 deletions

View File

@ -31,3 +31,11 @@ export function subResource (query) {
params: query
})
}
export function getMaterialLotByResource (query) {
return request({
url: iep('/z-task-detail/getMaterialLotByResource'),
method: 'get',
params: query
})
}

View File

@ -59,6 +59,17 @@ export const subResourceDialogObj = {
]
}
export const carrierOrInventoryDialogObj = {
page: false,
searchText: 'searchText',
tableColumn: [
{
prop: 'materialLot',
label: '条码',
}
]
}
export const materialLotDialogObj = {
condition: 'materialLot',
tableColumn: [

View File

@ -14,6 +14,20 @@
top="100px"
>
<div class="execution">
<!-- 目标位置弹窗 -->
<input-select-dialog
:modal-obj="subResourceDialogObj"
:modal-fetch-fun="subResourceDialogFetchFun"
:modal-show.sync="subResourceShow"
@inputDialogSelected="subResourceSelected"
></input-select-dialog>
<!-- 托盘号/条码号弹窗 -->
<input-select-dialog
:modal-obj="carrierOrInventoryDialogObj"
:modal-fetch-fun="carrierOrInventoryDialogFetchFun"
:modal-show.sync="carrierOrInventoryShow"
@inputDialogSelected="carrierOrInventorySelected"
></input-select-dialog>
<el-form
ref="form"
:model="mainForm"
@ -23,13 +37,43 @@
>
<el-row :gutter="5">
<el-col :span="12">
<el-form-item label="设备编号" prop="resource">
<el-input v-model="mainForm.resource" :disabled="true"></el-input>
<el-form-item label="目标位置" prop="subResource">
<el-input v-model="mainForm.subResource" readonly>
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showDialog('subResource')"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="上料点" prop="subResource">
<el-input v-model="mainForm.subResource" :disabled="true"></el-input>
<el-form-item label="托盘号/条码号" prop="carrierOrInventory">
<el-input v-model="mainForm.carrierOrInventory">
<i v-if="showCarrierOrInventoryInput === 'Y'"
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showDialog('carrierOrInventory')"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="数量" prop="qtyOnHand">
<el-input v-model="mainForm.qtyOnHand" :disabled="true">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料编码" prop="item">
<el-input v-model="mainForm.item" :disabled="true">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="物料描述" prop="itemDesc">
<el-input v-model="mainForm.itemDesc" :disabled="true">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@ -50,19 +94,6 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="任务标识" prop="taskMark">
<el-select v-model="mainForm.taskMark">
<el-option key="A" label="大卷" value="A"/>
<el-option key="B" label="小卷" value="B"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="AGV自动呼叫阈值" prop="taskTriggerValue">
<el-input v-model="mainForm.taskTriggerValue" :disabled="true"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
@ -84,12 +115,14 @@
</div>
</template>
<script>
import {clearValidate, copyJSON} from '@/util/util'
import {clearValidate} from '@/util/util'
import {showLoading, hideLoading} from '@/const/loading'
import {agvReelingManualCall, reelingComplete} from '@/api/mes/wip-nalinv/jm-auto-reeling';
import {findResourceList as fetchResourceList} from "@/api/mes/pms/resrce";
import {getByCode as getFastCode} from '@/api/mes/sys/fast-code-detail';
import {agvReelingManualCall} from '@/api/mes/wip-nalinv/jm-auto-reeling';
import {subResource, getMaterialLotByResource} from "@/api/mes/smd/eqp-combine";
import {subResourceDialogObj, carrierOrInventoryDialogObj} from "@/views/mes/wip/resource-feeding-extension/init";
import {isBlank} from "@/util/string";
import {fetchCustomFieldsByResrce} from "@/api/mes/prd/operation-out";
import {getStore} from "@/util/store";
export default {
components: {},
@ -101,26 +134,37 @@ export default {
data() {
return {
rules: {
subResource: [{required: true, message: '目标位置不能为空', trigger: ['change']}],
carrierOrInventory: [{required: true, message: '托盘号/条码号不能为空', trigger: ['change']}],
taskType: [{required: true, message: '任务类别不能为空', trigger: ['change']}],
taskTypeId: [{required: true, message: '任务类型不能为空', trigger: ['change']}],
taskMark: [{required: true, message: '任务标识', trigger: ['change']}]
taskTypeId: [{required: true, message: '任务类型不能为空', trigger: ['change']}]
},
site: getStore({name: 'tenantId'}),
visible: false,
open: '',
mainForm: this.form,
taskTypeList: [],
taskTypeIdList: []
taskTypeIdList: [],
subResourceShow: false,
subResourceDialogObj,
subResourceDialogFetchFun: subResource,
carrierOrInventoryShow: false,
carrierOrInventoryDialogObj,
carrierOrInventoryDialogFetchFun: getMaterialLotByResource,
showCarrierOrInventoryInput: 'N'
}
},
watch: {
'form.id': {
handler() {
this.mainForm = this.form
this.mainForm.subResource = ''
this.mainForm.carrierOrInventory = ''
this.showCarrierOrInventoryInput = 'N'
this.processTaskTypeList()
this.handleTaskTypeChange(this.form.taskType, true)
this.setAgvAutomaticCallThreshold(this.form.subResource)
this.$nextTick(() => {
clearValidate.call(this, 'form', ['taskType', 'taskTypeId', 'taskMark'])
clearValidate.call(this, 'form', ['subResource', 'carrierOrInventory', 'taskType', 'taskTypeId'])
})
},
immediate: true,
@ -132,6 +176,64 @@ export default {
},
},
methods: {
// 開窗
showDialog(key) {
let me = this;
switch (key) {
case 'subResource':
if (isBlank(me.mainForm.resource)) {
return this.$message.error('请先选择设备')
}
this.subResourceDialogObj.queryParam = {
resrce: me.mainForm.resource,
subEqpType: me.mainForm.subResourceType
}
this.subResourceShow = true
break;
case 'carrierOrInventory':
this.carrierOrInventoryDialogObj.queryParam = {
subResource: me.mainForm.subResource
}
this.carrierOrInventoryShow = true
break;
}
},
// 上料点選擇開窗資料
subResourceSelected(row) {
let me = this;
me.mainForm.subResource = row.resrce;
me.mainForm.carrierOrInventory = '';
me.getCustomFieldsByResrce(me.site, row.resrce, "IS_CACHE_LOCATION");
},
// 托盘号/条码号選擇開窗資料
carrierOrInventorySelected(row) {
let me = this;
me.mainForm.carrierOrInventory = row.materialLot;
this.mainForm = Object.assign({}, this.mainForm)
},
// 获取设备自定义字段
getCustomFieldsByResrce(site, resrce, fieldName) {
showLoading();
fetchCustomFieldsByResrce({
site: site,
resrce: resrce,
fieldName: fieldName,
}).then((response) => {
hideLoading();
if (response.data.code !== 0) {
this.$message.error(response.data.message);
} else {
if (fieldName === "IS_CACHE_LOCATION") {
// 基膜5#6#区分缓存位、周转位、拆包位
if (response.data.data === 'Z' || response.data.data === 'H') {
this.showCarrierOrInventoryInput = 'N';
} else {
this.showCarrierOrInventoryInput = 'Y';
}
}
}
});
},
processTaskTypeList() {
let me = this
let taskTypeList = me.mainForm.taskTypeList;
@ -172,20 +274,6 @@ export default {
}
}
},
setAgvAutomaticCallThreshold(resrce) {
let params = {
fastCode: 'SLOT_DELIVERY_RULES',
code: resrce
};
showLoading();
getFastCode(params).then(response => {
hideLoading();
let data = response.data.data;
this.mainForm.taskTriggerValue = data ? data.ef1 : '';
}).catch(() => {
hideLoading();
})
},
handleConfirm() {
let me = this;
this.$refs['form'].validate((valid) => {

View File

@ -126,7 +126,7 @@ import {findResourceList as fetchResourceList} from "@/api/mes/pms/resrce";
import {getByCode as getFastCode} from '@/api/mes/sys/fast-code-detail';
import {listNewTask} from "@/api/mes/wip-nalinv/task-detail";
import {subResource} from "@/api/mes/smd/eqp-combine";
import agvDeliveryCall from "@/views/mes/wip/resource-feeding-extension/content/agv-delivery-call.vue";
import agvDeliveryCall from "@/views/mes/wip/resource-feeding-extension/task/agv-material-call.vue";
import {subResourceDialogObj} from "@/views/mes/wip/resource-feeding-extension/init";
import {isBlank} from "@/util/string";
@ -164,7 +164,7 @@ export default {
id: '',
resource: '',
subResource: '',
taskType: '1',
taskType: '3',
taskTypeId: '',
taskMark: '',
taskTriggerValue: null
@ -177,7 +177,7 @@ export default {
this.mainForm = this.form
this.getTaskDetailList()
this.$nextTick(() => {
clearValidate.call(this, 'form', ['taskType', 'taskTypeId', 'taskDestination'])
clearValidate.call(this, 'form')
})
},
deep: true,