From 4a0ff379630b88da522675c23e7c1a73008a01c6 Mon Sep 17 00:00:00 2001 From: lzm <2316711944@qq.com> Date: Fri, 15 May 2026 17:57:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=9F=BA=E7=A1=80=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E3=80=81=E5=90=88=E7=BA=A6=E8=A7=84=E5=88=92=E3=80=81?= =?UTF-8?q?=E6=8C=87=E5=AF=BC=E4=BB=B7=E6=B3=95=E6=98=8E=E7=BB=86=E3=80=81?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=88=90=E6=9C=AC=E6=B5=8B=E7=AE=97=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=B0=83=E6=95=B4=E3=80=81=E8=8F=9C=E5=8D=95=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E8=B0=83=E6=95=B4=E3=80=81=E4=B8=93=E4=B8=9A=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E6=8A=A5=E8=A1=A8=E4=B8=8E=E5=AF=BC=E5=87=BA=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/tjt/profit/index.ts | 2 + src/views/tjt/output/PlanningOutputForm.vue | 101 +++++++++--------- src/views/tjt/output/index.vue | 4 +- src/views/tjt/profit/index.vue | 60 ++++++----- src/views/tjt/project/PlanningForm.vue | 6 +- src/views/tjt/project/ProjectForm.vue | 10 +- src/views/tjt/project/index.vue | 8 +- src/views/tjt/report-budget/index.vue | 8 +- .../tjt/report-specialty-person/index.vue | 7 +- src/views/tjt/shared/planning.ts | 21 +++- 10 files changed, 124 insertions(+), 103 deletions(-) diff --git a/src/api/tjt/profit/index.ts b/src/api/tjt/profit/index.ts index d9cfd5f..92ecd93 100644 --- a/src/api/tjt/profit/index.ts +++ b/src/api/tjt/profit/index.ts @@ -10,6 +10,8 @@ export interface ProjectProfitVO { effectiveSettlementAmount?: number comprehensivePlanningAmount?: number subcontractPlanningAmount?: number + specialSubcontractPlanningAmount?: number + sourceCoopSubcontractPlanningAmount?: number majorOutputValue?: number majorExpectedPerformance?: number innovationOutputRate?: number diff --git a/src/views/tjt/output/PlanningOutputForm.vue b/src/views/tjt/output/PlanningOutputForm.vue index 9a54da4..ac370d1 100644 --- a/src/views/tjt/output/PlanningOutputForm.vue +++ b/src/views/tjt/output/PlanningOutputForm.vue @@ -105,7 +105,7 @@ - + - - - + + + + + - + - + - + - - - - - - - + + + + + + - + - + - + - + {{ formatFactorText(getGuideDetailTotalAdjustmentFactor(row)) }} - + + + + {{ formatAmountText(getGuideDetailAssessmentArea(row)) }} + + + + - - - - {{ formatAmountText(getGuideDetailAssessmentArea(row)) }} - - - + {{ formatAmountText(getGuideDetailAssessmentOutputValue(row)) }} @@ -469,17 +474,17 @@ - + - + - + {{ activeRemarkRow.designPart || '-' }} - + {{ activeRemarkRow.buildingType || '-' }} @@ -934,7 +939,7 @@ const formatQuantityText = (value?: number, digits = 4) => { const setGuideDetailPercentValue = ( row: GuideDetailRow, - field: 'complexityFactor' | 'designRatio', + field: 'designRatio', value?: number | string | null ) => { row[field] = fromPercentValue(value, 4) @@ -953,7 +958,7 @@ const formRules = reactive({ return } if (!hasValue(value)) { - callback(new Error('工程总面积不能为空')) + callback(new Error('建筑面积不能为空')) return } callback() @@ -1153,7 +1158,7 @@ const validateGuideDetails = () => { return false } if (!row.buildingType) { - message.warning(`${rowText}建筑类型不能为空`) + message.warning(`${rowText}设计内容/设计类型不能为空`) return false } if (!hasValue(row.designArea)) { @@ -1177,11 +1182,11 @@ const validateGuideDetails = () => { return false } if (!hasValue(row.complexityFactor)) { - message.warning(`${rowText}复杂系数不能为空`) + message.warning(`${rowText}复杂系数/复杂等级不能为空`) return false } if (!hasValue(row.designRatio)) { - message.warning(`${rowText}设计占比不能为空`) + message.warning(`${rowText}设计阶段占比不能为空`) return false } } diff --git a/src/views/tjt/output/index.vue b/src/views/tjt/output/index.vue index 6f9f1a5..d38e601 100644 --- a/src/views/tjt/output/index.vue +++ b/src/views/tjt/output/index.vue @@ -84,12 +84,12 @@ - + {{ formatAmountText(scope.row.contractAmount) }} - + {{ formatAreaText(scope.row.totalConstructionArea) }} diff --git a/src/views/tjt/profit/index.vue b/src/views/tjt/profit/index.vue index d7ee701..a73908d 100644 --- a/src/views/tjt/profit/index.vue +++ b/src/views/tjt/profit/index.vue @@ -78,21 +78,21 @@ - + {{ formatAmountText(scope.row.contractAmount) }} - + {{ formatAmountText(scope.row.finalSettlementAmount) }} - + {{ formatAmountText(scope.row.effectiveSettlementAmount) }} @@ -100,22 +100,27 @@ {{ formatAmountText(scope.row.effectiveSettlementAmount) }} - + {{ formatAmountText(scope.row.comprehensivePlanningAmount) }} - + - {{ formatAmountText(scope.row.subcontractPlanningAmount) }} + {{ formatAmountText(scope.row.specialSubcontractPlanningAmount) }} - + + + {{ formatAmountText(scope.row.sourceCoopSubcontractPlanningAmount) }} + + + {{ formatAmountText(scope.row.majorOutputValue) }} - + {{ formatAmountText(scope.row.majorExpectedPerformance) }} @@ -135,14 +140,14 @@ {{ formatAmountText(scope.row.otherCost) }} - + {{ formatAmountText(scope.row.profitLossValue) }} - + {{ formatPercentText(scope.row.profitLossRate) }} @@ -166,21 +171,21 @@ {{ currentProfit.projectName }} - 编辑盈亏参数 + 编辑项目成本参数 - + {{ formatAmountText(currentProfit.contractAmount) }} - + {{ formatAmountText(currentProfit.finalSettlementAmount) }} - + {{ formatAmountText(currentProfit.effectiveSettlementAmount) }} @@ -190,16 +195,19 @@ {{ currentProfit.projectStartYear || '-' }} - + {{ formatAmountText(currentProfit.comprehensivePlanningAmount) }} - - {{ formatAmountText(currentProfit.subcontractPlanningAmount) }} + + {{ formatAmountText(currentProfit.specialSubcontractPlanningAmount) }} - + + {{ formatAmountText(currentProfit.sourceCoopSubcontractPlanningAmount) }} + + {{ formatAmountText(currentProfit.majorOutputValue) }} - + {{ formatAmountText(currentProfit.majorExpectedPerformance) }} @@ -211,12 +219,12 @@ {{ formatAmountText(currentProfit.otherCost) }} - + {{ formatAmountText(currentProfit.profitLossValue) }} - + {{ formatPercentText(currentProfit.profitLossRate) }} @@ -224,13 +232,13 @@ - + - + - + ({ - label: OWNERSHIP_TYPE_LABELS[index] || item.label, - value: item.value -})) +const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS const { t } = useI18n() const message = useMessage() diff --git a/src/views/tjt/project/ProjectForm.vue b/src/views/tjt/project/ProjectForm.vue index e0ae6d0..371a931 100644 --- a/src/views/tjt/project/ProjectForm.vue +++ b/src/views/tjt/project/ProjectForm.vue @@ -16,7 +16,7 @@ - + - + - + ({ projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }], - contractAmount: [{ required: true, message: '合同产值不能为空', trigger: 'blur' }], - totalConstructionArea: [{ required: true, message: '工程总面积不能为空', trigger: 'blur' }], + contractAmount: [{ required: true, message: '合同总产值不能为空', trigger: 'blur' }], + totalConstructionArea: [{ required: true, message: '建筑面积不能为空', trigger: 'blur' }], projectStartYear: [{ required: true, message: '项目开始年度不能为空', trigger: 'change' }], projectStatus: [{ required: true, message: '项目状态不能为空', trigger: 'change' }], pauseReason: [ diff --git a/src/views/tjt/project/index.vue b/src/views/tjt/project/index.vue index 63f6f7e..7c0f8ca 100644 --- a/src/views/tjt/project/index.vue +++ b/src/views/tjt/project/index.vue @@ -188,7 +188,7 @@ {{ getProjectTypeText(currentProject.projectType) }} - + {{ getProjectCategoryText(currentProject.projectCategory) }} @@ -218,10 +218,10 @@ > {{ currentProject.terminateReason || '-' }} - + {{ formatAmountText(currentProject.contractAmount) }} - + {{ formatAreaText(currentProject.totalConstructionArea) }} @@ -353,7 +353,7 @@ const cleanOptionLabels = (options: Array<{ label: string; value: T }>, labe })) const contractSignOptions = cleanOptionLabels(CONTRACT_SIGN_OPTIONS, ['已签约', '未签约']) -const ownershipTypeOptions = cleanOptionLabels(OWNERSHIP_TYPE_OPTIONS, ['专业所', '综合所', '专业分包']) +const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS const projectTypeOptions = cleanOptionLabels(PROJECT_TYPE_OPTIONS, [ '建筑工程', '精装工程', diff --git a/src/views/tjt/report-budget/index.vue b/src/views/tjt/report-budget/index.vue index be344ff..bf84469 100644 --- a/src/views/tjt/report-budget/index.vue +++ b/src/views/tjt/report-budget/index.vue @@ -91,12 +91,12 @@ prop="engineeringPrincipalName" /> - + {{ formatAmountText(scope.row.contractAmount) }} - + {{ formatAreaText(scope.row.totalConstructionArea) }} @@ -140,10 +140,10 @@ {{ currentProject.engineeringPrincipalName || '-' }} - + {{ formatAmountText(currentProject.contractAmount) }} - + {{ formatAreaText(currentProject.totalConstructionArea) }} diff --git a/src/views/tjt/report-specialty-person/index.vue b/src/views/tjt/report-specialty-person/index.vue index bf3abbc..87ab8c0 100644 --- a/src/views/tjt/report-specialty-person/index.vue +++ b/src/views/tjt/report-specialty-person/index.vue @@ -112,7 +112,7 @@ {{ currentPlanning.planningContent }} - 按当前年度和专业预览专业内人员计取结果 + 按当前合约规划、年度和专业预览专业内人员计取结果 @@ -160,10 +160,9 @@ 季度金额单位:万元 @@ -205,7 +204,7 @@ - + {{ diff --git a/src/views/tjt/shared/planning.ts b/src/views/tjt/shared/planning.ts index bbece3d..63e6cbe 100644 --- a/src/views/tjt/shared/planning.ts +++ b/src/views/tjt/shared/planning.ts @@ -6,7 +6,8 @@ export type Option = { export const OWNERSHIP_TYPE = { major: '专业所', comprehensive: '综合所', - subcontract: '专业分包' + specialSubcontract: '专项分包', + sourceCoopSubcontract: '源头合作分包' } as const export const CALCULATION_METHOD = { @@ -29,7 +30,8 @@ export const DESIGN_STAGE = { export const DESIGN_PART = { realEstate: '地上部分', - underground: '地下部分' + underground: '地下部分', + other: '其他' } as const export const PROJECT_TYPE = { @@ -100,7 +102,11 @@ export const normalizeProjectStatus = (value?: string) => export const OWNERSHIP_TYPE_OPTIONS: Option[] = [ { label: OWNERSHIP_TYPE.major, value: OWNERSHIP_TYPE.major }, { label: OWNERSHIP_TYPE.comprehensive, value: OWNERSHIP_TYPE.comprehensive }, - { label: OWNERSHIP_TYPE.subcontract, value: OWNERSHIP_TYPE.subcontract } + { label: OWNERSHIP_TYPE.specialSubcontract, value: OWNERSHIP_TYPE.specialSubcontract }, + { + label: OWNERSHIP_TYPE.sourceCoopSubcontract, + value: OWNERSHIP_TYPE.sourceCoopSubcontract + } ] export const CALCULATION_METHOD_OPTIONS: Option[] = [ @@ -132,7 +138,8 @@ export const DESIGN_STAGE_OPTIONS: Option[] = [ export const DESIGN_PART_OPTIONS: Option[] = [ { label: DESIGN_PART.realEstate, value: DESIGN_PART.realEstate }, - { label: DESIGN_PART.underground, value: DESIGN_PART.underground } + { label: DESIGN_PART.underground, value: DESIGN_PART.underground }, + { label: DESIGN_PART.other, value: DESIGN_PART.other } ] export const CONTRACT_SIGN_OPTIONS: Option[] = [ @@ -221,8 +228,12 @@ export const isMajorOwnership = (value?: string) => normalizeOwnershipType(value) === OWNERSHIP_TYPE.major export const isComprehensiveOwnership = (value?: string) => normalizeOwnershipType(value) === OWNERSHIP_TYPE.comprehensive +export const isSpecialSubcontractOwnership = (value?: string) => + normalizeOwnershipType(value) === OWNERSHIP_TYPE.specialSubcontract +export const isSourceCoopSubcontractOwnership = (value?: string) => + normalizeOwnershipType(value) === OWNERSHIP_TYPE.sourceCoopSubcontract export const isSubcontractOwnership = (value?: string) => - normalizeOwnershipType(value) === OWNERSHIP_TYPE.subcontract + isSpecialSubcontractOwnership(value) || isSourceCoopSubcontractOwnership(value) export const isGuidancePriceMethod = (value?: string) => normalizeCalculationMethod(value) === CALCULATION_METHOD.guidancePrice