fix:生产管理:工单排程,生产队列修改

This commit is contained in:
17630416519 2025-12-17 09:46:27 +08:00
parent 71a92fb720
commit 8b6050b9ae
3 changed files with 84 additions and 55 deletions

View File

@ -79,7 +79,11 @@
<el-col :lg="12">
<el-form-item label="三色灯颜色" prop="lightColor">
<el-input v-model="form.lightColor" placeholder="请输入三色灯颜色" />
<!-- <el-input v-model="form.lightColor" placeholder="请输入三色灯颜色" /> -->
<el-select v-model="form.lightColor" placeholder="请选择三色灯颜色">
<el-option v-for="item in lightColorOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -184,6 +188,11 @@
{ index: 7, key: 'updatedBy', label: `更新人`, checked: true },
{ index: 8, key: 'updatedTime', label: `更新时间`, checked: true },
],
lightColorOptions:[
{ value: '红色', label: '红色' },
{ value: '黄色', label: '黄色' },
{ value: '绿色', label: '绿色' },
],
//
dataList: [],
//

View File

@ -110,8 +110,8 @@
<vxe-column field="pQualifiedRate" title="预计合格率(%)" type="html">
<template #default="{ row }">
<!-- 移除反向计算的 handleQualifiedRateInput 事件 -->
<el-input v-model="row.pQualifiedRate" size="small"
placeholder="请输入预计合格率" @blur="formatQualifiedRate(row)" />
<el-input v-model="row.pQualifiedRate" size="small" placeholder="请输入预计合格率"
@blur="formatQualifiedRate(row)" />
</template>
</vxe-column>
<vxe-column field="cylinderNumber" title="双组号缸号"></vxe-column>
@ -183,8 +183,8 @@
v-model="workorderItem.remark2" placeholder="备注2"></el-input> </el-form-item></el-col>
</el-row>
<el-row>
<el-col :span="8"><el-form-item label="年" prop="year"> <el-input
v-model="workorderItem.year" placeholder="年"></el-input> </el-form-item></el-col>
<el-col :span="8"><el-form-item label="年" prop="year"> <el-input v-model="workorderItem.year"
placeholder="年"></el-input> </el-form-item></el-col>
<el-col :span="8"><el-form-item label="周" prop="week"> <el-input v-model="workorderItem.week"
placeholder="周"></el-input> </el-form-item></el-col>
<el-col :span="8"><el-form-item label="日" prop="date">
@ -295,7 +295,9 @@ export default {
{ state: 5, color: '#ffffd5', text: '物料不包含此描述' },
],
tableAllData: [],
debounceTimers: {},
//
updateQueue: new Map(), //
updateTimer: null, //
isEditing: false
}
},
@ -355,8 +357,7 @@ export default {
this.getList()
},
getList() {
if (this.isEditing) return;
// isEditing
const query = { ...this.search, ...this.pagination }
query.week = query.week ?? -1;
query.year = query.year ?? -1;
@ -370,8 +371,8 @@ export default {
this.workorder_table_data = pageRes.data.item1.map(item => {
return {
...item,
pQualifiedNum: item.pQualifiedNum !== null && item.pQualifiedNum !== undefined
? Number(item.pQualifiedNum)
pQualifiedNum: item.pQualifiedNum !== null && item.pQualifiedNum !== undefined
? Number(item.pQualifiedNum)
: 0,
pQualifiedRate: item.pQualifiedRate !== null && item.pQualifiedRate !== undefined
? parseFloat(item.pQualifiedRate).toFixed(2)
@ -404,12 +405,14 @@ export default {
const previousNum = parseFloat(row.previousNumber) || 0;
if (previousNum > 0 && !isNaN(qualifiedNum)) {
const rate = (qualifiedNum / previousNum)
const rate = (qualifiedNum / previousNum) * 100;
this.$set(row, 'pQualifiedRate', rate.toFixed(2));
} else {
this.$set(row, 'pQualifiedRate', '0.00');
}
this.autoUpdateWorkorder(row);
//
this.addToUpdateQueue(row);
},
formatQualifiedNum(row) {
@ -424,41 +427,62 @@ export default {
const rate = parseFloat(row.pQualifiedRate);
this.$set(row, 'pQualifiedRate', isNaN(rate) ? '0.00' : rate.toFixed(2));
this.isEditing = false;
this.autoUpdateWorkorder(row);
//
this.addToUpdateQueue(row);
},
autoUpdateWorkorder(row) {
if (this.debounceTimers[row.id]) {
clearTimeout(this.debounceTimers[row.id]);
//
addToUpdateQueue(row) {
//
this.updateQueue.set(row.id, {...row});
//
if (this.updateTimer) {
clearTimeout(this.updateTimer);
}
this.debounceTimers[row.id] = setTimeout(() => {
const updateData = { ...row };
updateData.pQualifiedNum = Number(updateData.pQualifiedNum) || 0;
let rate = Number(updateData.pQualifiedRate);
updateData.pQualifiedRate = isNaN(rate) ? '0.00' : rate.toFixed(2);
updateData.vehicleNumber = Number(updateData.vehicleNumber) || 0;
updateData.hangNumber = Number(updateData.hangNumber) || 0;
updateData.previousNumber = Number(updateData.previousNumber) || 0;
updateworkorder(updateData).then(res => {
if (res.code === 200) {
this.$notify.success('更新成功');
setTimeout(() => {
this.getList();
}, 300);
} else {
this.$notify.error(res.msg || '更新失败');
}
}).catch(error => {
console.error('更新失败:', error);
this.$notify.error('网络异常,更新失败');
}).finally(() => {
delete this.debounceTimers[row.id];
});
//
this.updateTimer = setTimeout(() => {
this.processUpdateQueue();
}, 1500);
},
//
async processUpdateQueue() {
//
const rowsToUpdate = Array.from(this.updateQueue.values());
//
this.updateQueue.clear();
try {
//
for (const row of rowsToUpdate) {
const updateData = { ...row };
updateData.pQualifiedNum = Number(updateData.pQualifiedNum) || 0;
let rate = Number(updateData.pQualifiedRate);
updateData.pQualifiedRate = isNaN(rate) ? '0.00' : rate.toFixed(2);
updateData.vehicleNumber = Number(updateData.vehicleNumber) || 0;
updateData.hangNumber = Number(updateData.hangNumber) || 0;
updateData.previousNumber = Number(updateData.previousNumber) || 0;
const res = await updateworkorder(updateData);
if (res.code !== 200) {
this.$notify.error(res.msg || '更新失败');
}
}
//
this.$notify.success('更新成功');
this.getList();
} catch (error) {
console.error('更新失败:', error);
this.$notify.error('网络异常,更新失败');
}
},
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},

View File

@ -39,18 +39,14 @@
<vxe-column field="previousNumber" title="上件数" type="html"></vxe-column>
<vxe-column field="pQualifiedNum" title="预计合格数" type="html">
<template #default="{ row }">
<el-input v-model="row.pQualifiedNum" size="small" placeholder="请输入预计合格数"
@input="calculateQualifiedRate(row)" @blur="formatQualifiedNum(row)" />
<el-input v-model="row.pQualifiedNum" size="small" placeholder="请输入预计合格数" @input="calculateQualifiedRate(row)"
@blur="formatQualifiedNum(row)" />
</template>
</vxe-column>
<vxe-column field="pQualifiedRate" title="预计合格率(%)" type="html">
<template #default="{ row }">
<el-input
@input="handleQualifiedRateInput(row)"
v-model="row.pQualifiedRate"
size="small"
placeholder="请输入预计合格率"
@blur="formatQualifiedRate(row)" />
<el-input @input="handleQualifiedRateInput(row)" v-model="row.pQualifiedRate" size="small"
placeholder="请输入预计合格率" @blur="formatQualifiedRate(row)" />
</template>
</vxe-column>
<vxe-column field="cylinderNumber" title="双组号缸号" type="html"></vxe-column>
@ -133,8 +129,8 @@ export default {
this.workorder_table_data = res.data.item1.map(item => {
return {
...item,
pQualifiedRate: item.pQualifiedRate !== null && item.pQualifiedRate !== undefined
? parseFloat(item.pQualifiedRate).toFixed(2)
pQualifiedRate: item.pQualifiedRate !== null && item.pQualifiedRate !== undefined
? parseFloat(item.pQualifiedRate).toFixed(2)
: '0.00'
}
})
@ -153,9 +149,9 @@ export default {
const pQualifiedNum = parseFloat(row.pQualifiedNum);
if (!isNaN(previousNumber) && previousNumber !== 0 && !isNaN(pQualifiedNum)) {
const rate = (pQualifiedNum / previousNumber);
const rate = (pQualifiedNum / previousNumber) * 100;
row.pQualifiedRate = rate.toFixed(2);
console.log(row.pQualifiedRate,'显示的合格率');
console.log(row.pQualifiedRate, '显示的合格率');
} else {
row.pQualifiedRate = '0.00';
}
@ -170,7 +166,7 @@ export default {
this.calculateQualifiedRate(row);
}
},
//
formatQualifiedRate(row) {
if (row.pQualifiedRate !== '' && !isNaN(row.pQualifiedRate)) {