|
|
|
|
@ -148,9 +148,60 @@ export default { |
|
|
|
|
], |
|
|
|
|
|
|
|
|
|
// 数组中每一项的 |
|
|
|
|
reworkCode: [{ required: true, message: '请输入', trigger: ['blur', 'submit'] }], |
|
|
|
|
quantity: [{ required: true, message: '请输入', trigger: ['blur', 'submit'] }], |
|
|
|
|
reworkCode: [ |
|
|
|
|
{ |
|
|
|
|
validator: (rule, value, callback) => { |
|
|
|
|
// 获取当前校验的行索引 |
|
|
|
|
// rule.field 格式为 "tableData[0].reworkCode" |
|
|
|
|
const match = rule.field.match(/tableData\[(\d+)\]/); |
|
|
|
|
if (match) { |
|
|
|
|
const index = parseInt(match[1]); |
|
|
|
|
const row = this.form.tableData[index]; |
|
|
|
|
|
|
|
|
|
// 如果该行被选中 (_select 为 true),则必须填写 |
|
|
|
|
if (row && row._select) { |
|
|
|
|
if (!value) { |
|
|
|
|
callback(new Error('请输入返工单号')); |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// 如果未选中,直接通过 |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
trigger: ['blur', 'change'], |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
quantity: [ |
|
|
|
|
{ |
|
|
|
|
validator: (rule, value, callback) => { |
|
|
|
|
const match = rule.field.match(/tableData\[(\d+)\]/); |
|
|
|
|
if (match) { |
|
|
|
|
const index = parseInt(match[1]); |
|
|
|
|
const row = this.form.tableData[index]; |
|
|
|
|
|
|
|
|
|
if (row && row._select) { |
|
|
|
|
if (!value) { |
|
|
|
|
callback(new Error('请输入数量')); |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
callback(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
trigger: ['blur', 'change'], |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
selectTableData: [], //选中数据 |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
mounted() { |
|
|
|
|
@ -164,10 +215,7 @@ export default { |
|
|
|
|
this.batchLoading = true; |
|
|
|
|
queryBatch({ partCode: this.form.partCode }) |
|
|
|
|
.then(res => { |
|
|
|
|
if (res.data.data) { |
|
|
|
|
this.form.tableData.push(res.data.data); |
|
|
|
|
} |
|
|
|
|
// this.form.tableData = res.data.data || []; |
|
|
|
|
this.form.tableData = res.data.data || []; |
|
|
|
|
this.batchLoading = false; |
|
|
|
|
}) |
|
|
|
|
.catch(err => { |
|
|
|
|
@ -181,19 +229,18 @@ export default { |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
selectChange(list, row) { |
|
|
|
|
if (list.length > 0) { |
|
|
|
|
list.forEach(item => { |
|
|
|
|
item.quantity = null; |
|
|
|
|
item.woCode = null; |
|
|
|
|
item.reworkCode = null; |
|
|
|
|
item.remark = null; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
this.selectTableData = list; |
|
|
|
|
row._select = !row._select; |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 新增一行(直接push到表单模型的 tableData 中) |
|
|
|
|
addTable() { |
|
|
|
|
this.form.tableData.push({ |
|
|
|
|
_select: false, // 选择状态 |
|
|
|
|
wcId: '', // 作业中心ID |
|
|
|
|
batchNo: '', // 槽号/检查项 |
|
|
|
|
preserveContent: '', // 维护内容 |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
// 删除选中行 |
|
|
|
|
delTable() { |
|
|
|
|
this.form.tableData = this.form.tableData.filter(row => !row._select); |
|
|
|
|
@ -212,48 +259,57 @@ export default { |
|
|
|
|
submitForm() { |
|
|
|
|
this.formError = ''; |
|
|
|
|
|
|
|
|
|
// 调用单个 Form 的校验方法 |
|
|
|
|
this.$refs.tableForm.validate((isValid, invalidFields) => { |
|
|
|
|
if (!isValid) { |
|
|
|
|
// 校验失败:显示提示并滚动到第一个错误字段 |
|
|
|
|
this.formError = '存在未完善的字段,请检查表格中的红色提示'; |
|
|
|
|
// 1. 获取选中的行 |
|
|
|
|
const selectedRows = this.form.tableData.filter(row => row._select); |
|
|
|
|
|
|
|
|
|
// 2. 如果没有选中任何行,提示用户 |
|
|
|
|
if (selectedRows.length === 0) { |
|
|
|
|
this.$message.warning('请至少选择一行数据进行申报'); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 3. 调用全量校验 |
|
|
|
|
// 由于我们在 validator 中已经判断了 row._select, |
|
|
|
|
// 所以未选中的行会自动通过校验 |
|
|
|
|
this.$refs.tableForm.validate(valid => { |
|
|
|
|
if (valid) { |
|
|
|
|
this.saveLoading = true; |
|
|
|
|
let query = [] |
|
|
|
|
selectedRows.forEach(row => { |
|
|
|
|
query.push({ |
|
|
|
|
useCode: row.useCode,//领用单号 |
|
|
|
|
woCode: row.woCode,//车间订单号 |
|
|
|
|
reworkCode: row.reworkCode,//返工单号 |
|
|
|
|
partCode: row.prtno,//零件号 |
|
|
|
|
batchNo: row.splcode,//批次号 |
|
|
|
|
quaLevel: row.prtlotno,//生产标识 |
|
|
|
|
quantity: row.quantity,//数量 |
|
|
|
|
remark: row.remark,//备注 |
|
|
|
|
keeper: row.warctlr,//保管员 |
|
|
|
|
planMan: row.schemer,//计划员 |
|
|
|
|
locationNo:row.warlocno,//库位 |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
saveDeclare({orderDeclares:query}) |
|
|
|
|
.then(res => { |
|
|
|
|
this.$message.success('操作成功'); |
|
|
|
|
this.saveLoading = false; |
|
|
|
|
this.closeDialog(); |
|
|
|
|
}) |
|
|
|
|
.catch(err => { |
|
|
|
|
this.saveLoading = false; |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
this.formError = '选中数据存在未完善的字段,请检查表格中的红色提示'; |
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
// 找到第一个错误字段并滚动到视图 |
|
|
|
|
const firstError = document.querySelector('.el-form-item.is-error'); |
|
|
|
|
if (firstError) { |
|
|
|
|
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' }); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
return; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
this.saveLoading = true; |
|
|
|
|
|
|
|
|
|
// 调用接口提交(实际项目替换) |
|
|
|
|
saveDeclare(this.form.tableData) |
|
|
|
|
.then(res => { |
|
|
|
|
this.$message.success('操作成功'); |
|
|
|
|
this.saveLoading = false; |
|
|
|
|
|
|
|
|
|
this.closeDialog(); |
|
|
|
|
}) |
|
|
|
|
.catch(err => { |
|
|
|
|
this.saveLoading = false; |
|
|
|
|
}); |
|
|
|
|
// try { |
|
|
|
|
// const res = saveDeclare(this.form.tableData); |
|
|
|
|
// if (res.code === 200) { |
|
|
|
|
// this.$message.success('操作成功'); |
|
|
|
|
// this.closeDialog(); |
|
|
|
|
// this.$emit('submitSuccess', submitData); |
|
|
|
|
// } else { |
|
|
|
|
// this.$message.error(res.msg || '操作失败'); |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
// } catch (err) { |
|
|
|
|
// this.$message.error(err); |
|
|
|
|
// console.error('提交失败:', err); |
|
|
|
|
// } |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
|