From 81d259b44aa42278e6bd21cf4b1cd984c6a64c6d Mon Sep 17 00:00:00 2001 From: lzm <2316711944@qq.com> Date: Tue, 2 Jun 2026 10:24:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=86=E9=85=8D=E4=B8=8E?= =?UTF-8?q?=E5=AE=9E=E6=96=BD=E6=96=B9=E6=A1=88=E6=96=B0=E5=A2=9E=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/tjt/project/index.vue | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/views/tjt/project/index.vue b/src/views/tjt/project/index.vue index 7c0f8ca..ca888a8 100644 --- a/src/views/tjt/project/index.vue +++ b/src/views/tjt/project/index.vue @@ -221,6 +221,17 @@ {{ formatAmountText(currentProject.contractAmount) }} + + {{ formatAmountText(planningAmountTotal) }} + + + + {{ formatAmountText(contractBalanceDisplayAmount) }} + + + + {{ contractAllocationProgressText }} + {{ formatAreaText(currentProject.totalConstructionArea) }} @@ -410,6 +421,46 @@ const queryParams = reactive({ const getProjectRowIndex = (index: number) => ((queryParams.pageNo ?? 1) - 1) * (queryParams.pageSize ?? 10) + index + 1 +const toAmountNumber = (value?: number | string | null) => { + const numericValue = Number(value ?? 0) + return Number.isNaN(numericValue) ? 0 : numericValue +} + +const roundAmount = (value: number) => Math.round((Number(value) || 0) * 100) / 100 + +const contractAmountValue = computed(() => toAmountNumber(currentProject.value?.contractAmount)) + +const planningAmountTotal = computed(() => + roundAmount( + planningList.value.reduce((sum, item) => sum + toAmountNumber(item.planningAmount), 0) + ) +) + +const contractBalanceAmount = computed(() => + roundAmount(contractAmountValue.value - planningAmountTotal.value) +) + +const contractOverAllocated = computed(() => contractBalanceAmount.value < 0) + +const contractBalanceDisplayAmount = computed(() => + contractOverAllocated.value ? Math.abs(contractBalanceAmount.value) : contractBalanceAmount.value +) + +const contractBalanceLabel = computed(() => + contractOverAllocated.value ? '已超出合同总产值(元)' : '剩余未分配合同产值(元)' +) + +const contractBalanceClass = computed(() => + contractOverAllocated.value ? 'text-[var(--el-color-danger)] font-600' : 'text-[var(--el-color-success)] font-600' +) + +const contractAllocationProgressText = computed(() => { + if (contractAmountValue.value <= 0) { + return planningAmountTotal.value > 0 ? '合同总产值为 0,无法计算' : '0.00%' + } + return formatPercentText(planningAmountTotal.value / contractAmountValue.value) +}) + const queryProjectStartYearValue = computed({ get: () => (queryParams.projectStartYear ? String(queryParams.projectStartYear) : undefined), set: (value?: string) => {