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

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

@ -524,42 +524,62 @@ const submitCallback = async () => {
router.go(-1); router.go(-1);
}; };
// onMounted route watch
const isDataLoading = ref(false);
const loadFormData = async () => { const loadFormData = async () => {
await resetFormState(); //
// if (isDataLoading.value) return;
routeParams.value = route.query; isDataLoading.value = true;
buttonLoading.value = false;
const id = routeParams.value.id as string; try {
const projectId = routeParams.value.projectId as string; await resetFormState();
//
routeParams.value = route.query;
buttonLoading.value = false;
// // const id = routeParams.value.id as string;
if (id && id !== '0' && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) { const projectId = routeParams.value.projectId as string;
try {
proxy?.$modal.loading('正在加载数据,请稍后...'); // //
const res = await getErpProjectChange(id); if (id && id !== '0' && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) {
if (res.data) { try {
Object.assign(form.value, res.data); proxy?.$modal.loading('正在加载数据,请稍后...');
const dateOnly = toDateOnly(form.value.applyChangeDate); const res = await getErpProjectChange(id);
form.value.applyChangeDate = dateOnly ?? formatToday(); if (res.data) {
form.value.budgetList = res.data.budgetList ?? []; Object.assign(form.value, res.data);
form.value.progressList = res.data.progressList ?? []; const dateOnly = toDateOnly(form.value.applyChangeDate);
isCodeGenerated.value = !!form.value.projectChangeCode; form.value.applyChangeDate = dateOnly ?? formatToday();
if (res.data.changeType) { // handleProjectChange/loadProjectDataByProjectId BigDecimal Number el-input-number
changeTypeList.value = res.data.changeType.split(','); 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(',');
}
} }
proxy?.$modal.closeLoading();
} catch (error) {
proxy?.$modal.closeLoading();
proxy?.$modal.msgError('加载变更申请数据失败');
console.error(error);
} }
proxy?.$modal.closeLoading(); } else if (projectId) {
} catch (error) { // ID
proxy?.$modal.closeLoading(); await loadProjectDataByProjectId(projectId);
proxy?.$modal.msgError('加载变更申请数据失败'); } else if (!showProjectSelect.value) {
console.error(error); proxy?.$modal.msgError('缺少必要的参数项目ID或变更申请ID');
} }
} else if (projectId) { } finally {
// ID isDataLoading.value = false;
await loadProjectDataByProjectId(projectId);
} else if (!showProjectSelect.value) {
proxy?.$modal.msgError('缺少必要的参数项目ID或变更申请ID');
} }
}; };
@ -575,7 +595,6 @@ watch(
onMounted(async () => { onMounted(async () => {
await loadFormData(); await loadFormData();
// loadFormDataloading
}); });
</script> </script>

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

Loading…
Cancel
Save