优化
This commit is contained in:
@@ -145,6 +145,8 @@ async function load() {
|
||||
|
||||
async function loadFeeItems() {
|
||||
if (!canViewFeeItems.value || feeItemsLoading.value) return
|
||||
// 刷新期间移除旧候选,加载失败时不能继续使用过期默认价格。
|
||||
feeItems.value = []
|
||||
feeItemsLoading.value = true; feeItemsError.value = null
|
||||
try { feeItems.value = await listInboundFeeItemOptions() }
|
||||
catch (error) { feeItemsError.value = getApiErrorDetails(error, '费用项目加载失败') }
|
||||
@@ -181,11 +183,19 @@ function assignForm(row?: InboundFeeDetail) {
|
||||
voucherError.value = null
|
||||
}
|
||||
|
||||
// 仅在用户主动选费时带价,编辑回显不覆盖已保存的单价和金额。
|
||||
function applyFeeItemDefaultPrice() {
|
||||
const price = selectedFeeItem.value?.defaultPrice ?? 0
|
||||
form.unitPrice = price
|
||||
form.amount = price
|
||||
}
|
||||
|
||||
async function openEditor(mode: 'create' | 'edit' | 'adjust', row?: InboundFeeDetail) {
|
||||
editorMode.value = mode; target.value = row || null; assignForm(row); actionError.value = null
|
||||
feeItemsError.value = null; suppliersError.value = null
|
||||
editorOpen.value = true
|
||||
if (!feeItems.value.length) await loadFeeItems()
|
||||
// 每次进入录入窗口都读取当前项目配置,不修改已有费用的回显金额。
|
||||
await loadFeeItems()
|
||||
if (form.direction === 'PAYABLE') await loadSuppliers()
|
||||
}
|
||||
|
||||
@@ -225,7 +235,9 @@ async function finishAction(message: string) {
|
||||
async function save() {
|
||||
if (!await formRef.value?.validate()) return
|
||||
if (!canViewFeeItems.value) { actionError.value = { message: '当前账号缺少费用项目查看权限,无法保存费用' }; return }
|
||||
if (feeItemsLoading.value || feeItemsError.value) { actionError.value = { message: feeItemsLoading.value ? '费用项目正在加载,请稍候' : '费用项目加载失败,请重新打开费用窗口后重试' }; return }
|
||||
const selectedItem = feeItems.value.find((item) => String(item.id) === String(form.feeItemId))
|
||||
if (!selectedItem) { actionError.value = { message: '所选费用项目不可用,请重新选择' }; return }
|
||||
if (form.direction === 'PAYABLE' && !canViewSuppliers.value) { actionError.value = { message: '当前账号缺少供应商查看权限,无法维护应付费用' }; return }
|
||||
if (form.direction === 'PAYABLE' && suppliersError.value) { actionError.value = { message: '供应商列表加载失败,无法校验应付费用供应商' }; return }
|
||||
if (form.direction === 'PAYABLE' && loadedSupplierCategory.value !== selectedItem?.supplierCategory) { actionError.value = { message: '供应商候选尚未按费用项目类别加载完成,无法保存' }; return }
|
||||
@@ -334,7 +346,7 @@ onMounted(() => void load())
|
||||
<el-alert v-if="actionError" type="error" :closable="true" @close="actionError = null"><template #title>{{ actionError.message }}</template><ApiErrorMeta :details="actionError" /></el-alert>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-position="top" class="fee-form density-form">
|
||||
<el-form-item label="应收/应付" prop="direction"><el-segmented v-model="form.direction" :options="directionOptions" /></el-form-item>
|
||||
<el-form-item label="费用项目" prop="feeItemId"><el-select v-model="form.feeItemId" filterable :loading="feeItemsLoading" :disabled="!canViewFeeItems"><el-option v-for="item in applicableItems" :key="item.id" :label="item.feeTypeName" :value="item.id" /></el-select></el-form-item>
|
||||
<el-form-item label="费用项目" prop="feeItemId"><el-select v-model="form.feeItemId" filterable :loading="feeItemsLoading" :disabled="!canViewFeeItems || feeItemsLoading" @change="applyFeeItemDefaultPrice"><el-option v-for="item in applicableItems" :key="item.id" :label="item.feeTypeName" :value="item.id" /></el-select></el-form-item>
|
||||
<el-form-item v-if="form.direction === 'PAYABLE'" label="供应商" required><el-select v-model="form.supplierId" filterable :loading="suppliersLoading" :disabled="!canViewSuppliers || !selectedFeeItem || !!suppliersError" placeholder="请先选择费用项目"><el-option v-for="supplier in suppliers" :key="supplier.id" :label="supplier.supplierName" :value="supplier.id" /></el-select></el-form-item>
|
||||
<el-form-item v-if="form.direction === 'PAYABLE'" label="结算方式" required><el-radio-group v-model="settlementModeModel"><el-radio-button value="ON_ACCOUNT">账期应付</el-radio-button><el-radio-button value="DIRECT_PAID">已付成本</el-radio-button></el-radio-group></el-form-item>
|
||||
<template v-if="form.direction === 'PAYABLE' && form.settlementMode === 'DIRECT_PAID'">
|
||||
|
||||
Reference in New Issue
Block a user