|
|
|
|
@ -524,42 +524,62 @@ const submitCallback = async () => {
|
|
|
|
|
router.go(-1);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 加载锁,防止 onMounted 和 route watch 竞态导致数据被清空
|
|
|
|
|
const isDataLoading = ref(false);
|
|
|
|
|
|
|
|
|
|
const loadFormData = async () => {
|
|
|
|
|
await resetFormState();
|
|
|
|
|
// 获取路由参数(与项目信息保持一致)
|
|
|
|
|
routeParams.value = route.query;
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
// 防止并发加载:若上一次加载仍在进行中,直接跳过本次调用
|
|
|
|
|
if (isDataLoading.value) return;
|
|
|
|
|
isDataLoading.value = true;
|
|
|
|
|
|
|
|
|
|
const id = routeParams.value.id as string;
|
|
|
|
|
const projectId = routeParams.value.projectId as string;
|
|
|
|
|
try {
|
|
|
|
|
await resetFormState();
|
|
|
|
|
// 获取路由参数(与项目信息保持一致)
|
|
|
|
|
routeParams.value = route.query;
|
|
|
|
|
buttonLoading.value = false;
|
|
|
|
|
|
|
|
|
|
// 判断是否为查看/审批/编辑模式(与项目信息保持一致)
|
|
|
|
|
if (id && id !== '0' && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) {
|
|
|
|
|
try {
|
|
|
|
|
proxy?.$modal.loading('正在加载数据,请稍后...');
|
|
|
|
|
const res = await getErpProjectChange(id);
|
|
|
|
|
if (res.data) {
|
|
|
|
|
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 ?? [];
|
|
|
|
|
isCodeGenerated.value = !!form.value.projectChangeCode;
|
|
|
|
|
if (res.data.changeType) {
|
|
|
|
|
changeTypeList.value = res.data.changeType.split(',');
|
|
|
|
|
const id = routeParams.value.id as string;
|
|
|
|
|
const projectId = routeParams.value.projectId as string;
|
|
|
|
|
|
|
|
|
|
// 判断是否为查看/审批/编辑模式(与项目信息保持一致)
|
|
|
|
|
if (id && id !== '0' && (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval')) {
|
|
|
|
|
try {
|
|
|
|
|
proxy?.$modal.loading('正在加载数据,请稍后...');
|
|
|
|
|
const res = await getErpProjectChange(id);
|
|
|
|
|
if (res.data) {
|
|
|
|
|
Object.assign(form.value, res.data);
|
|
|
|
|
const dateOnly = toDateOnly(form.value.applyChangeDate);
|
|
|
|
|
form.value.applyChangeDate = dateOnly ?? formatToday();
|
|
|
|
|
// 与 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(',');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
proxy?.$modal.closeLoading();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
proxy?.$modal.closeLoading();
|
|
|
|
|
proxy?.$modal.msgError('加载变更申请数据失败');
|
|
|
|
|
console.error(error);
|
|
|
|
|
}
|
|
|
|
|
proxy?.$modal.closeLoading();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
proxy?.$modal.closeLoading();
|
|
|
|
|
proxy?.$modal.msgError('加载变更申请数据失败');
|
|
|
|
|
console.error(error);
|
|
|
|
|
} else if (projectId) {
|
|
|
|
|
// 新增模式:根据项目ID加载项目计划信息
|
|
|
|
|
await loadProjectDataByProjectId(projectId);
|
|
|
|
|
} else if (!showProjectSelect.value) {
|
|
|
|
|
proxy?.$modal.msgError('缺少必要的参数:项目ID或变更申请ID');
|
|
|
|
|
}
|
|
|
|
|
} else if (projectId) {
|
|
|
|
|
// 新增模式:根据项目ID加载项目计划信息
|
|
|
|
|
await loadProjectDataByProjectId(projectId);
|
|
|
|
|
} else if (!showProjectSelect.value) {
|
|
|
|
|
proxy?.$modal.msgError('缺少必要的参数:项目ID或变更申请ID');
|
|
|
|
|
} finally {
|
|
|
|
|
isDataLoading.value = false;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@ -575,7 +595,6 @@ watch(
|
|
|
|
|
|
|
|
|
|
onMounted(async () => {
|
|
|
|
|
await loadFormData();
|
|
|
|
|
// loadFormData内部已处理loading提示
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|