fix(borrow,outbound): 库管弹窗必显审批人 + HTTP400去重toast

- 审批人 el-form-item 显隐加入 role==WAREHOUSE_MGR 判断
- 提交 catch 仅对无响应(网络)弹错,HTTP错误由全局拦截器按后端 data.msg 弹一次,避免重复
This commit is contained in:
yueli
2026-09-09 16:19:45 +08:00
parent 044e6dbd98
commit a12fcea86d
2 changed files with 28 additions and 20 deletions

View File

@ -394,7 +394,7 @@
</el-table>
<el-form label-width="100px">
<el-form-item v-if="approvalNeedVisible" label="指定审批人">
<el-form-item v-if="approvalNeedVisible || (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR'" label="指定审批人">
<div v-if="approvalNeedText" style="color:#E6A23C; font-size:12px; line-height:1.4; margin-bottom:4px;">
以下物料需审批出库/借库{{ approvalNeedText }}请选择审批人
</div>
@ -1058,8 +1058,8 @@ const openRequestDialog = () => {
requestApproverId.value = null
requestExpectedReturn.value = ''
requestIndefinite.value = false
approvalNeedVisible.value = false // 打开时默认隐藏审批人,命中需审批时由预检显示
approvalNeedText.value = ''
approvalNeedVisible.value = (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR' // 库管代建默认显示审批人
approvalNeedText.value = approvalNeedVisible.value ? '库管代建借库申请需审批,请选择审批人' : ''
loadApprovers()
requestDialogVisible.value = true
}
@ -1125,19 +1125,22 @@ const confirmSubmitRequest = async () => {
is_indefinite: requestIndefinite.value
}))
// ★ 提交前预检:判断所选物料是否需审批 → 只有需审批才显示并必选审批
let needApproval = false
// ★ 提交前预检:库管(WAREHOUSE_MGR)代建一律需审批;否则命中需审批物料才需审批
const isKeeper = (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR'
let needApproval = isKeeper
let flagged: any[] = []
try {
const chk: any = await checkBorrowApproval({ items })
needApproval = !!chk?.data?.need_approval
needApproval = needApproval || !!chk?.data?.need_approval
flagged = chk?.data?.materials || []
} catch (e) { needApproval = false; flagged = [] }
} catch (e) { flagged = [] }
approvalNeedVisible.value = needApproval
approvalNeedText.value = flagged.map((m: any) => `${m.name}${m.spec_model || '-'}`).join('')
approvalNeedText.value = isKeeper && flagged.length === 0
? '库管代建借库申请需审批,请选择审批人'
: flagged.map((m: any) => `${m.name}${m.spec_model || '-'}`).join('')
if (needApproval && !requestApproverId.value) {
ElMessage.warning(`以下物料需审批出库/借库:${approvalNeedText.value}。请先选择审批人`)
ElMessage.warning(`${approvalNeedText.value}。请先选择审批人`)
return
}
@ -1155,7 +1158,8 @@ const confirmSubmitRequest = async () => {
approvalNeedText.value = ''
ElMessage.success('借库申请已提交(含需审批物料时将进入审批,否则直接交库管执行)')
} catch (err: any) {
ElMessage.error(err?.message || err?.msg || '提交申请失败,请重试')
// 拦截器已按后端 data.msg 弹出业务错误(如“库管代建…必须选择审批人”)HTTP 错误不再重复提示
if (!err?.response) ElMessage.error('网络异常,请重试')
} finally {
requestSubmitting.value = false
}

View File

@ -409,7 +409,7 @@
<el-option label="维修出库" value="REPAIR" />
</el-select>
</el-form-item>
<el-form-item v-if="approvalNeedVisible" label="指定审批人">
<el-form-item v-if="approvalNeedVisible || (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR'" label="指定审批人">
<div v-if="approvalNeedText" style="color:#E6A23C; font-size:12px; line-height:1.4; margin-bottom:4px;">
以下物料需审批出库/借库{{ approvalNeedText }}请选择审批人
</div>
@ -1085,8 +1085,8 @@ const openRequestDialog = () => {
}
requestRemark.value = ''
requestApproverId.value = null
approvalNeedVisible.value = false // 打开时默认隐藏审批人,命中需审批时由预检显示
approvalNeedText.value = ''
approvalNeedVisible.value = (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR' // 库管代建默认显示审批人
approvalNeedText.value = approvalNeedVisible.value ? '库管代建出库申请需审批,请选择审批人' : ''
loadApprovers()
requestDialogVisible.value = true
}
@ -1124,19 +1124,22 @@ const confirmSubmitRequest = async () => {
quantity: item.export_quantity || 0
}))
// ★ 提交前预检:判断所选物料是否需审批 → 只有需审批才显示并必选审批
let needApproval = false
// ★ 提交前预检:库管(WAREHOUSE_MGR)代建一律需审批;否则命中需审批物料才需审批
const isKeeper = (userStore.role || '').toUpperCase() === 'WAREHOUSE_MGR'
let needApproval = isKeeper
let flagged: any[] = []
try {
const chk: any = await checkOutboundApproval({ items })
needApproval = !!chk?.data?.need_approval
needApproval = needApproval || !!chk?.data?.need_approval
flagged = chk?.data?.materials || []
} catch (e) { needApproval = false; flagged = [] }
} catch (e) { flagged = [] }
approvalNeedVisible.value = needApproval
approvalNeedText.value = flagged.map((m: any) => `${m.name}${m.spec_model || '-'}`).join('')
approvalNeedText.value = isKeeper && flagged.length === 0
? '库管代建出库申请需审批,请选择审批人'
: flagged.map((m: any) => `${m.name}${m.spec_model || '-'}`).join('')
if (needApproval && !requestApproverId.value) {
ElMessage.warning(`以下物料需审批出库/借库:${approvalNeedText.value}。请先选择审批人`)
ElMessage.warning(`${approvalNeedText.value}。请先选择审批人`)
return
}
@ -1156,7 +1159,8 @@ const confirmSubmitRequest = async () => {
approvalNeedText.value = ''
ElMessage.success('出库申请已提交(含需审批物料时将进入审批,否则直接交库管执行)')
} catch (err: any) {
ElMessage.error(err?.message || err?.msg || '提交申请失败,请重试')
// 拦截器已按后端 data.msg 弹出业务错误(如“库管代建…必须选择审批人”)HTTP 错误不再重复提示
if (!err?.response) ElMessage.error('网络异常,请重试')
} finally {
requestSubmitting.value = false
}