fix(erp/prtjectChange): 解决项目变更表单数据加载竞态问题并修复预算数值转换错误

- 添加 isDataLoading 锁防止 onMounted 和 route watch 竞态导致数据被清空
- 在 loadFormData 中实现并发加载保护机制
- 修复进度列表中 completionDegree 的数值转换
dev
Yangk 2 weeks ago
parent e325124627
commit 4112d3bef4

@ -524,7 +524,15 @@ const submitCallback = async () => {
router.go(-1);
};
// onMounted route watch
const isDataLoading = ref(false);
const loadFormData = async () => {
//
if (isDataLoading.value) return;
isDataLoading.value = true;
try {
await resetFormState();
//
routeParams.value = route.query;
@ -542,8 +550,17 @@ const loadFormData = async () => {
Object.assign(form.value, res.data);
const dateOnly = toDateOnly(form.value.applyChangeDate);
form.value.applyChangeDate = dateOnly ?? formatToday();
form.value.budgetList = res.data.budgetList ?? [];
form.value.progressList = res.data.progressList ?? [];
// handleProjectChange/loadProjectDataByProjectId BigDecimal Number el-input-number
form.value.budgetList = (res.data.budgetList ?? []).map((item: any) => ({
...item,
budgetBefore: Number(item.budgetBefore || 0),
budgetAfter: Number(item.budgetAfter || 0),
amountUsed: Number(item.amountUsed || 0)
}));
form.value.progressList = (res.data.progressList ?? []).map((item: any) => ({
...item,
completionDegree: Number(item.completionDegree || 0)
}));
isCodeGenerated.value = !!form.value.projectChangeCode;
if (res.data.changeType) {
changeTypeList.value = res.data.changeType.split(',');
@ -561,6 +578,9 @@ const loadFormData = async () => {
} else if (!showProjectSelect.value) {
proxy?.$modal.msgError('缺少必要的参数项目ID或变更申请ID');
}
} finally {
isDataLoading.value = false;
}
};
watch(
@ -575,7 +595,6 @@ watch(
onMounted(async () => {
await loadFormData();
// loadFormDataloading
});
</script>

@ -258,7 +258,7 @@ const columns = ref<FieldOption[]>([
{ key: 4, label: `项目经理`, visible: true },
{ key: 5, label: `部门负责人`, visible: true },
{ key: 6, label: `付款方式`, visible: true },
{ key: 7, label: `项目计划状态`, visible: false },
{ key: 7, label: `项目计划状态`, visible: true },
{ key: 8, label: `流程状态`, visible: false },
{ key: 9, label: `合同名称`, visible: false },
{ key: 10, label: `排序号`, visible: false },

Loading…
Cancel
Save