diff --git a/src/views/finance/purchasingrequisition/accept/PurchasingAcceptModal.vue b/src/views/finance/purchasingrequisition/accept/PurchasingAcceptModal.vue index da8fdc6..5fb98d0 100644 --- a/src/views/finance/purchasingrequisition/accept/PurchasingAcceptModal.vue +++ b/src/views/finance/purchasingrequisition/accept/PurchasingAcceptModal.vue @@ -137,6 +137,8 @@ const commonForm = ref>({}) /** 每次打开自增,用于强制 AcceptCommonForm 重新挂载,确保公共信息彻底清空 */ const openToken = ref(0) const batchForms = reactive>({}) +/** 记录哪些期已保存到服务器,用于控制“下一期可填”:只有上一期已保存才允许填下一期 */ +const batchSavedFlags = ref>({}) const setBatchFormRef = (batch: number, el: any) => { if (el) batchFormRefMap.value[batch] = el @@ -158,22 +160,22 @@ const getPreviousBatchesTeams = (batchNum: number) => { return list } +/** 是否允许编辑该期:第 1 期始终可编辑;第 N 期仅当第 1~N-1 期均已保存后才可编辑 */ const canEditBatch = (batch: number) => { if (batch === 1) return true for (let i = 1; i < batch; i++) { - if (!isBatchCompletedByIdx(i)) return false + if (!batchSavedFlags.value[i]) return false } return true } +/** 该期是否已保存(用于 tab 上显示“已填”标签) */ const isBatchCompleted = (b: any) => { - const form = batchForms[b.batch] - return !!(form?.acceptType && form?.acceptDate) + return !!batchSavedFlags.value[b.batch] } const isBatchCompletedByIdx = (batch: number) => { - const b = batches.value.find((x: any) => x.batch === batch) - return b ? isBatchCompleted(b) : false + return !!batchSavedFlags.value[batch] } const loadData = async () => { @@ -237,11 +239,17 @@ const loadData = async () => { } const loadBatchDetails = async () => { + for (const b of batches.value) { + batchSavedFlags.value[b.batch] = false + } for (const b of batches.value) { try { const res = await getDetail(String(purchaseId.value), b.batch) const d = res?.data if (d?.accept) { + // 仅当该期在服务端有验收日期(且验收方式)时才视为已保存,避免空结构被当成“已填” + const hasSaved = !!(d.accept.acceptDate && d.accept.acceptType) + batchSavedFlags.value[b.batch] = hasSaved const itemMap = (acceptanceItems.value || []).reduce((acc: any, it: any) => { acc[it.id] = it return acc @@ -360,6 +368,7 @@ const saveCurrentBatch = async () => { acceptTeam: team, }) useMessage().success('保存成功') + batchSavedFlags.value[curBatch] = true await loadData() } catch (e: any) { useMessage().error(e?.msg || '保存失败') @@ -398,6 +407,7 @@ const resetAllToDefault = () => { acceptanceItems.value = [] canFillForm.value = true Object.keys(batchForms).forEach((k) => delete batchForms[Number(k)]) + batchSavedFlags.value = {} } const open = async (row: any) => {