fix(outbound): 「补发给谁」改为必选,并按原申请人精确预填

· 预填顺序改为:① 原出库明细记录的 applicant_id(创建出库时从审批单带出,
  主键无歧义)→ ② 历史单据该字段为 NULL 时,退而按原领用人姓名**唯一命中**
  预填;重名一律留空。
· 「补发给谁」改为**必选**:提交前校验,未选即拦下并提示。
  不再有「留空则挂当前操作人」的兜底 —— 那会把别人的需求记到库管名下。
· 文案同步:明确写「必须选择:补发是原申请人的需求,不能挂到办理退回的库管名下」。
This commit is contained in:
yueli
2026-09-17 12:07:21 +08:00
parent 0005a689dc
commit 07567d2f76

View File

@ -296,18 +296,19 @@
/>
</el-form-item>
<el-form-item label="补发给谁" v-if="returnDialog.form.need_reissue">
<el-form-item label="补发给谁" v-if="returnDialog.form.need_reissue" required>
<el-select
v-model="returnDialog.form.reissue_applicant_id"
filterable
clearable
placeholder="默认取原领用人;找不到时留空"
placeholder="请选择补发给谁"
style="width: 260px"
>
<el-option v-for="u in reissueUsers" :key="u.id" :label="u.name" :value="u.id" />
</el-select>
<div style="color:#909399; font-size:12px; margin-top:4px;">
补发单会挂在此人名下出现在他的我的申请<strong>留空</strong>则挂当前操作人
补发单会挂在此人名下出现在他的我的申请<br>
<strong>必须选择</strong>补发是原申请人的需求不能挂到办理退回的库管名下
</div>
</el-form-item>
</el-form>
@ -566,15 +567,23 @@ const loadReissueUsers = async () => {
}
}
// 勾选补发时:默认补发量 = 本次退回量,并尝试按**原领用人**预选「补发给谁」
// 勾选补发时:默认补发量 = 本次退回量,并预选「补发给谁」
const handleNeedReissueChange = async (val: boolean) => {
if (!val) return
returnDialog.form.reissue_qty = normalizeQty(returnDialog.form.return_qty) || 1
await loadReissueUsers()
if (returnDialog.form.reissue_applicant_id) return
// 按姓名唯一命中才预填;重名一律留空让现场自己选 —— 与借用人回填同口径,
// 宁可多一步,也不猜错人(补发单会挂到错的人名下)。
const want = String(returnDialog.row?.consumer_name || '').split('/')[0].trim()
const row = returnDialog.row || {}
// ① 优先用原出库明细记录的申请人(创建出库时从审批单带出,主键无歧义)
if (row.applicant_id && reissueUsers.value.some((u) => u.id === row.applicant_id)) {
returnDialog.form.reissue_applicant_id = row.applicant_id
return
}
// ② 历史单据该字段为 NULL无从回填退而按原领用人姓名**唯一命中**才预填。
// 重名一律留空让现场选 —— 与借用人回填同口径,宁可多一步也不猜错人
// (补发单会挂到错的人名下,而那是别人的「我的申请」)。
const want = String(row.consumer_name || '').split('/')[0].trim()
if (!want) return
const hits = reissueUsers.value.filter(
(u) => String(u.name || '').split('/')[0].trim() === want,
@ -638,6 +647,11 @@ const submitReturn = async () => {
ElMessage.warning(`补发数量不能超过本次退回数量 ${qty}`)
return
}
// 申请人必须明确指定:补发是原申请人的需求,不能默认挂到办理退回的库管名下
if (!returnDialog.form.reissue_applicant_id) {
ElMessage.warning('请选择「补发给谁」')
return
}
}
returnDialog.submitting = true