更新履约验收界面期数判断

This commit is contained in:
吴红兵
2026-02-08 21:23:24 +08:00
parent f209700fa9
commit 9397da2ba3

View File

@@ -137,6 +137,8 @@ const commonForm = ref<Record<string, any>>({})
/** 每次打开自增,用于强制 AcceptCommonForm 重新挂载,确保公共信息彻底清空 */
const openToken = ref(0)
const batchForms = reactive<Record<number, any>>({})
/** 记录哪些期已保存到服务器,用于控制“下一期可填”:只有上一期已保存才允许填下一期 */
const batchSavedFlags = ref<Record<number, boolean>>({})
const setBatchFormRef = (batch: number, el: any) => {
if (el) batchFormRefMap.value[batch] = el
@@ -158,22 +160,22 @@ const getPreviousBatchesTeams = (batchNum: number) => {
return list
}
/** 是否允许编辑该期:第 1 期始终可编辑;第 N 期仅当第 1N-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) => {