feat(outbound): 退回弹窗增加「需要补发」勾选与补发数量
· 退回对话框新增「退回后自动生成补发单」勾选框 + 补发数量(勾选时默认 = 本次 退回量,可调小;上限即退回量)。 · 文案明写两条关键后果:生成的是**免审批**出库单;**库存不足时整笔退回会一并 取消**,取消勾选即可只做退回过账 —— 避免库管对着失败提示发懵。 · 提交前做同口径前置校验(数量 > 0 且 <= 退回量),不白跑一趟。 · resetReturnDialog / openReturnDialog 同步重置这两个字段。 默认**不勾选**:有些退回是项目结束退还,根本不需要补,不该默认给所有人挂上。
This commit is contained in:
@ -18,13 +18,24 @@ import request from '@/utils/request'
|
||||
* return_qty: number 必填,本次退回数量(>0)
|
||||
* is_defective: boolean 必填,true=不良品转在管台账,false=良品加回库存
|
||||
* reason: string 可选,退回原因
|
||||
* need_reissue: boolean 可选,退回后是否自动生成补发单(默认 false)
|
||||
* reissue_qty: number 可选,补发数量,默认 = return_qty
|
||||
* }
|
||||
*
|
||||
* ★ 补发(need_reissue=true):后端直接生成一张**免审批**出库单并关联回本笔退回,
|
||||
* 申请人取**当前操作人**(trans_outbound 没有申请人字段,也无指回原审批单的
|
||||
* 关联,无法可靠判定原申请人;原领用人写入备注)。
|
||||
* ★ 补发库存不足时**整笔退回一并回滚**并返回明确提示 —— 取消勾选即可只做退回过账。
|
||||
*
|
||||
* @returns data.reissue 为 { id, request_no, quantity } 或 null
|
||||
*/
|
||||
export function returnFromOutbound(data: {
|
||||
outbound_id: number
|
||||
return_qty: number
|
||||
is_defective: boolean
|
||||
reason?: string
|
||||
need_reissue?: boolean
|
||||
reissue_qty?: number
|
||||
}) {
|
||||
return request({
|
||||
url: '/inbound/stock/return-from-outbound',
|
||||
|
||||
@ -269,6 +269,32 @@
|
||||
placeholder="请填写退回原因(必填)"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<!-- ★ 补发:退回后申请人往往**仍然需要这件东西**(尤其坏件 ——
|
||||
原需求并未被满足)。勾选即自动生成一张免审批出库单并关联回本笔退回,
|
||||
不必再靠人记住、另建一张与原单毫无关系的单。 -->
|
||||
<el-form-item label="需要补发">
|
||||
<el-checkbox
|
||||
v-model="returnDialog.form.need_reissue"
|
||||
@change="handleNeedReissueChange"
|
||||
>退回后自动生成补发单</el-checkbox>
|
||||
<div style="color:#909399; font-size:12px; line-height:1.6; margin-top:4px;">
|
||||
勾选后系统直接生成一张<strong>免审批</strong>的出库单(原领用人写入备注),
|
||||
库管即可扫码补发。<br>
|
||||
若<strong>库存不足,整笔退回会一并取消</strong>并给出提示 ——
|
||||
取消勾选即可只做退回过账。
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="补发数量" v-if="returnDialog.form.need_reissue" required>
|
||||
<el-input-number
|
||||
v-model="returnDialog.form.reissue_qty"
|
||||
:min="1"
|
||||
:max="normalizeQty(returnDialog.form.return_qty)"
|
||||
:step="1"
|
||||
style="width: 200px"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
@ -501,9 +527,17 @@ const returnDialog = reactive({
|
||||
return_qty: 1,
|
||||
is_defective: false,
|
||||
reason: '',
|
||||
// 补发:默认**不勾选** —— 有些退回是项目结束退还,根本不需要补
|
||||
need_reissue: false,
|
||||
reissue_qty: 1,
|
||||
},
|
||||
})
|
||||
|
||||
// 勾选补发时,默认补发量 = 本次退回量(最常见的情况),用户可再调小
|
||||
const handleNeedReissueChange = (val: boolean) => {
|
||||
if (val) returnDialog.form.reissue_qty = normalizeQty(returnDialog.form.return_qty) || 1
|
||||
}
|
||||
|
||||
const openReturnDialog = (row: any) => {
|
||||
returnDialog.row = row
|
||||
// 默认带入「本次可退最大」,业务上整行退回最常见;用户可再调小做部分退回
|
||||
@ -511,6 +545,8 @@ const openReturnDialog = (row: any) => {
|
||||
returnDialog.form.return_qty = normalizeQty(row?.returnable_quantity)
|
||||
returnDialog.form.is_defective = false
|
||||
returnDialog.form.reason = ''
|
||||
returnDialog.form.need_reissue = false
|
||||
returnDialog.form.reissue_qty = 1
|
||||
returnDialog.visible = true
|
||||
}
|
||||
|
||||
@ -520,6 +556,8 @@ const resetReturnDialog = () => {
|
||||
returnDialog.form.return_qty = 1
|
||||
returnDialog.form.is_defective = false
|
||||
returnDialog.form.reason = ''
|
||||
returnDialog.form.need_reissue = false
|
||||
returnDialog.form.reissue_qty = 1
|
||||
}
|
||||
|
||||
const submitReturn = async () => {
|
||||
@ -542,6 +580,20 @@ const submitReturn = async () => {
|
||||
return
|
||||
}
|
||||
|
||||
// 补发的前置校验:与后端同口径,避免白跑一趟
|
||||
const needReissue = !!returnDialog.form.need_reissue
|
||||
const reissueQty = normalizeQty(returnDialog.form.reissue_qty)
|
||||
if (needReissue) {
|
||||
if (!reissueQty || reissueQty <= 0) {
|
||||
ElMessage.warning('请填写补发数量')
|
||||
return
|
||||
}
|
||||
if (reissueQty > qty) {
|
||||
ElMessage.warning(`补发数量不能超过本次退回数量 ${qty}`)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
returnDialog.submitting = true
|
||||
try {
|
||||
const res = await returnFromOutbound({
|
||||
@ -549,6 +601,8 @@ const submitReturn = async () => {
|
||||
return_qty: qty,
|
||||
is_defective: returnDialog.form.is_defective,
|
||||
reason,
|
||||
need_reissue: needReissue,
|
||||
reissue_qty: needReissue ? reissueQty : undefined,
|
||||
})
|
||||
ElMessage.success(res?.msg || '退回成功')
|
||||
returnDialog.visible = false
|
||||
|
||||
Reference in New Issue
Block a user