项目基础信息、合约规划、指导价法明细、项目成本测算字段调整、菜单名称调整、专业人员报表与导出内容修复
This commit is contained in:
@@ -10,6 +10,8 @@ export interface ProjectProfitVO {
|
||||
effectiveSettlementAmount?: number
|
||||
comprehensivePlanningAmount?: number
|
||||
subcontractPlanningAmount?: number
|
||||
specialSubcontractPlanningAmount?: number
|
||||
sourceCoopSubcontractPlanningAmount?: number
|
||||
majorOutputValue?: number
|
||||
majorExpectedPerformance?: number
|
||||
innovationOutputRate?: number
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="工程总面积(m²)" prop="planningArea">
|
||||
<el-form-item label="建筑面积(m²)" prop="planningArea">
|
||||
<el-input
|
||||
v-if="showGuideDetailSection"
|
||||
:model-value="formatAmountText(guideDetailSummary.designArea)"
|
||||
@@ -300,30 +300,36 @@
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="设计部位" min-width="120" fixed="left">
|
||||
<template #default="{ row }">
|
||||
<el-select v-model="row.designPart" class="!w-1/1" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in DESIGN_PART_OPTIONS"
|
||||
:key="String(item.value)"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-tooltip
|
||||
:content="row.designPart"
|
||||
:disabled="!hasValue(row.designPart)"
|
||||
placement="top"
|
||||
>
|
||||
<el-select v-model="row.designPart" class="!w-1/1" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in DESIGN_PART_OPTIONS"
|
||||
:key="String(item.value)"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="建筑类型" min-width="140" fixed="left">
|
||||
<el-table-column align="center" label="设计内容/设计类型" min-width="210" fixed="left">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip
|
||||
:content="row.buildingType"
|
||||
:disabled="!hasValue(row.buildingType)"
|
||||
placement="top"
|
||||
>
|
||||
<el-input v-model="row.buildingType" maxlength="100" placeholder="建筑类型" />
|
||||
<el-input v-model="row.buildingType" maxlength="100" placeholder="请输入设计内容/设计类型" />
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 2. 取消 controls 的核心数值列 -->
|
||||
<el-table-column align="center" label="指导单价(元)" min-width="110">
|
||||
<el-table-column align="center" label="内部指导单价(元/m²)" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<el-tooltip
|
||||
:content="formatAmountText(row.internalGuidanceUnitPrice)"
|
||||
@@ -357,55 +363,60 @@
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="楼栋/户型数" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-model="row.buildingOrUnitCount"
|
||||
:min="0"
|
||||
:precision="0"
|
||||
:controls="false"
|
||||
class="!w-1/1"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 3. 多级表头折叠系数配置 -->
|
||||
<el-table-column label="调整系数配置" align="center">
|
||||
<el-table-column align="center" label="套图" min-width="85">
|
||||
<el-table-column align="center" label="楼栋/户型数" min-width="110">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
v-model="row.buildingOrUnitCount"
|
||||
:min="0"
|
||||
:precision="0"
|
||||
:controls="false"
|
||||
class="!w-1/1"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="套图系数" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-input-number v-model="row.drawingSetFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="规模" min-width="85">
|
||||
<el-table-column align="center" label="规模系数" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-input-number v-model="row.scaleFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="修改" min-width="85">
|
||||
<el-table-column align="center" label="修改系数" min-width="100">
|
||||
<template #default="{ row }">
|
||||
<el-input-number v-model="row.modificationFactor" :min="0" :precision="2" :controls="false" class="!w-1/1" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="复杂(%)" min-width="90">
|
||||
<el-table-column align="center" label="复杂系数/复杂等级" min-width="150">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
:model-value="toPercentValue(row.complexityFactor)"
|
||||
v-model="row.complexityFactor"
|
||||
:min="0"
|
||||
:precision="2"
|
||||
:controls="false"
|
||||
class="!w-1/1"
|
||||
@update:model-value="setGuideDetailPercentValue(row, 'complexityFactor', $event)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="合计" min-width="80">
|
||||
<el-table-column align="center" label="小计" min-width="80">
|
||||
<template #default="{ row }">
|
||||
<span class="text-gray-500">{{ formatFactorText(getGuideDetailTotalAdjustmentFactor(row)) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="设计占比(%)" min-width="100">
|
||||
<!-- 4. 结果列靠右显示,用浅色背景区分 -->
|
||||
<el-table-column align="right" label="考核产值面积小计(m²)" min-width="150" class-name="bg-gray-50">
|
||||
<template #default="{ row }">
|
||||
<span class="font-bold">{{ formatAmountText(getGuideDetailAssessmentArea(row)) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="设计阶段占比(%)" min-width="120">
|
||||
<template #default="{ row }">
|
||||
<el-input-number
|
||||
:model-value="toPercentValue(row.designRatio)"
|
||||
@@ -418,13 +429,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- 4. 结果列靠右显示,用浅色背景区分 -->
|
||||
<el-table-column align="right" label="考核面积(m²)" min-width="110" class-name="bg-gray-50">
|
||||
<template #default="{ row }">
|
||||
<span class="font-bold">{{ formatAmountText(getGuideDetailAssessmentArea(row)) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="right" label="考核产值(元)" min-width="120" class-name="bg-gray-50">
|
||||
<el-table-column align="right" label="考核产值小计(元)" min-width="130" class-name="bg-gray-50">
|
||||
<template #default="{ row }">
|
||||
<span class="font-bold text-primary">{{ formatAmountText(getGuideDetailAssessmentOutputValue(row)) }}</span>
|
||||
</template>
|
||||
@@ -469,17 +474,17 @@
|
||||
|
||||
<el-row :gutter="16" class="mt-16px">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="汇总设计面积(m²)">
|
||||
<el-form-item label="设计面积总计(m²)">
|
||||
<el-input :model-value="formatAmountText(guideDetailSummary.designArea)" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="汇总考核面积(m²)">
|
||||
<el-form-item label="考核产值面积总计(m²)">
|
||||
<el-input :model-value="formatAmountText(guideDetailSummary.assessmentArea)" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="汇总考核产值(元)">
|
||||
<el-form-item label="考核产值总计(元)">
|
||||
<el-input
|
||||
:model-value="formatAmountText(guideDetailSummary.assessmentOutputValue)"
|
||||
disabled
|
||||
@@ -578,7 +583,7 @@
|
||||
<el-descriptions-item label="设计部位">
|
||||
{{ activeRemarkRow.designPart || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="建筑类型">
|
||||
<el-descriptions-item label="设计内容/设计类型">
|
||||
{{ activeRemarkRow.buildingType || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="考核产值(元)">
|
||||
@@ -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<FormRules>({
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,12 +84,12 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="项目开始年度" prop="projectStartYear" width="120" />
|
||||
<el-table-column align="center" label="合同产值(元)" width="130">
|
||||
<el-table-column align="center" label="合同总产值(元)" width="130">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.contractAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="工程总面积(㎡)" width="140">
|
||||
<el-table-column align="center" label="建筑面积(㎡)" width="140">
|
||||
<template #default="scope">
|
||||
{{ formatAreaText(scope.row.totalConstructionArea) }}
|
||||
</template>
|
||||
|
||||
@@ -78,21 +78,21 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="开始年度" prop="projectStartYear" width="100" />
|
||||
<el-table-column align="center" label="合同产值(元)" width="120">
|
||||
<el-table-column align="center" label="合同总产值(元)" width="120">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.contractAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="最终结算金额(元)" width="140">
|
||||
<el-table-column align="center" label="结算合同总产值(元)" width="150">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.finalSettlementAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="测算采用金额(元)" width="140">
|
||||
<el-table-column align="center" label="项目预算产值总计(元)" width="160">
|
||||
<template #default="scope">
|
||||
<el-tooltip
|
||||
v-if="isUsingContractAmount(scope.row)"
|
||||
content="最终结算金额未填写,当前暂按合同产值测算"
|
||||
content="结算合同总产值未填写,当前暂按合同总产值测算"
|
||||
placement="top"
|
||||
>
|
||||
<span>{{ formatAmountText(scope.row.effectiveSettlementAmount) }}</span>
|
||||
@@ -100,22 +100,27 @@
|
||||
<span v-else>{{ formatAmountText(scope.row.effectiveSettlementAmount) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="综合所协作金额(元)" width="150">
|
||||
<el-table-column align="center" label="综合所人工成本(元)" width="150">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.comprehensivePlanningAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="专业分包金额(元)" width="150">
|
||||
<el-table-column align="center" label="专项分包人工成本(元)" width="170">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.subcontractPlanningAmount) }}
|
||||
{{ formatAmountText(scope.row.specialSubcontractPlanningAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="专业所产值(元)" width="130">
|
||||
<el-table-column align="center" label="源头合作分包人工成本(元)" width="200">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.sourceCoopSubcontractPlanningAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="专业所考核产值(元)" width="150">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.majorOutputValue) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="专业所预计绩效(元)" width="150">
|
||||
<el-table-column align="center" label="专业所人工成本(元)" width="150">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.majorExpectedPerformance) }}
|
||||
</template>
|
||||
@@ -135,14 +140,14 @@
|
||||
{{ formatAmountText(scope.row.otherCost) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="盈亏值(元)" width="120">
|
||||
<el-table-column align="center" label="预算盈亏值(元)" width="130">
|
||||
<template #default="scope">
|
||||
<span :class="profitLossClass(scope.row.profitLossValue)">
|
||||
{{ formatAmountText(scope.row.profitLossValue) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="盈亏百分比" width="120">
|
||||
<el-table-column align="center" label="预算盈亏百分比" width="140">
|
||||
<template #default="scope">
|
||||
<span :class="profitLossClass(scope.row.profitLossValue)">
|
||||
{{ formatPercentText(scope.row.profitLossRate) }}
|
||||
@@ -166,21 +171,21 @@
|
||||
<div class="text-16px font-600">{{ currentProfit.projectName }}</div>
|
||||
<el-button plain type="primary" @click="openProfitEditDialog">
|
||||
<Icon class="mr-5px" icon="ep:edit" />
|
||||
编辑盈亏参数
|
||||
编辑项目成本参数
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="合同产值(元)">
|
||||
<el-descriptions-item label="合同总产值(元)">
|
||||
{{ formatAmountText(currentProfit.contractAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="最终结算金额(元)">
|
||||
<el-descriptions-item label="结算合同总产值(元)">
|
||||
{{ formatAmountText(currentProfit.finalSettlementAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="测算采用金额(元)">
|
||||
<el-descriptions-item label="项目预算产值总计(元)">
|
||||
<el-tooltip
|
||||
v-if="isUsingContractAmount(currentProfit)"
|
||||
content="最终结算金额未填写,当前暂按合同产值测算"
|
||||
content="结算合同总产值未填写,当前暂按合同总产值测算"
|
||||
placement="top"
|
||||
>
|
||||
<span>{{ formatAmountText(currentProfit.effectiveSettlementAmount) }}</span>
|
||||
@@ -190,16 +195,19 @@
|
||||
<el-descriptions-item label="项目开始年度">
|
||||
{{ currentProfit.projectStartYear || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="综合所协作金额(元)">
|
||||
<el-descriptions-item label="综合所人工成本(元)">
|
||||
{{ formatAmountText(currentProfit.comprehensivePlanningAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="专业分包金额(元)">
|
||||
{{ formatAmountText(currentProfit.subcontractPlanningAmount) }}
|
||||
<el-descriptions-item label="专项分包人工成本(元)">
|
||||
{{ formatAmountText(currentProfit.specialSubcontractPlanningAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="专业所产值(元)">
|
||||
<el-descriptions-item label="源头合作分包人工成本(元)">
|
||||
{{ formatAmountText(currentProfit.sourceCoopSubcontractPlanningAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="专业所考核产值(元)">
|
||||
{{ formatAmountText(currentProfit.majorOutputValue) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="专业所预计绩效(元)">
|
||||
<el-descriptions-item label="专业所人工成本(元)">
|
||||
{{ formatAmountText(currentProfit.majorExpectedPerformance) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="科创产值比例">
|
||||
@@ -211,12 +219,12 @@
|
||||
<el-descriptions-item label="其他成本(元)">
|
||||
{{ formatAmountText(currentProfit.otherCost) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="盈亏值(元)">
|
||||
<el-descriptions-item label="预算盈亏值(元)">
|
||||
<span :class="profitLossClass(currentProfit.profitLossValue)">
|
||||
{{ formatAmountText(currentProfit.profitLossValue) }}
|
||||
</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="盈亏百分比">
|
||||
<el-descriptions-item label="预算盈亏百分比">
|
||||
<span :class="profitLossClass(currentProfit.profitLossValue)">
|
||||
{{ formatPercentText(currentProfit.profitLossRate) }}
|
||||
</span>
|
||||
@@ -224,13 +232,13 @@
|
||||
</el-descriptions>
|
||||
</template>
|
||||
|
||||
<el-empty v-else-if="!detailLoading" description="请选择项目后查看盈亏详情" />
|
||||
<el-empty v-else-if="!detailLoading" description="请选择项目后查看项目成本详情" />
|
||||
</div>
|
||||
</ContentWrap>
|
||||
|
||||
<Dialog v-model="dialogVisible" title="编辑盈亏参数" width="520">
|
||||
<Dialog v-model="dialogVisible" title="编辑项目成本参数" width="520">
|
||||
<el-form ref="formRef" v-loading="dialogLoading" :model="formData" label-width="140px">
|
||||
<el-form-item label="最终结算金额(元)" prop="finalSettlementAmount">
|
||||
<el-form-item label="结算合同总产值(元)" prop="finalSettlementAmount">
|
||||
<el-input-number
|
||||
v-model="formData.finalSettlementAmount"
|
||||
:min="0"
|
||||
|
||||
@@ -158,11 +158,7 @@ import { OWNERSHIP_TYPE_OPTIONS } from '@/views/tjt/shared/planning'
|
||||
|
||||
defineOptions({ name: 'TjtPlanningForm' })
|
||||
|
||||
const OWNERSHIP_TYPE_LABELS = ['专业所', '综合所', '专业分包']
|
||||
const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS.map((item, index) => ({
|
||||
label: OWNERSHIP_TYPE_LABELS[index] || item.label,
|
||||
value: item.value
|
||||
}))
|
||||
const ownershipTypeOptions = OWNERSHIP_TYPE_OPTIONS
|
||||
|
||||
const { t } = useI18n()
|
||||
const message = useMessage()
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程总面积(㎡)" prop="totalConstructionArea">
|
||||
<el-form-item label="建筑面积(㎡)" prop="totalConstructionArea">
|
||||
<el-input-number
|
||||
v-model="formData.totalConstructionArea"
|
||||
:min="0"
|
||||
@@ -49,7 +49,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工程类别" prop="projectCategory">
|
||||
<el-form-item label="设计类型" prop="projectCategory">
|
||||
<el-select
|
||||
v-model="formData.projectCategory"
|
||||
class="!w-1/1"
|
||||
@@ -80,7 +80,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合同产值(元)" prop="contractAmount">
|
||||
<el-form-item label="合同总产值(元)" prop="contractAmount">
|
||||
<el-input-number
|
||||
v-model="formData.contractAmount"
|
||||
:min="0"
|
||||
@@ -459,8 +459,8 @@ watch(
|
||||
|
||||
const formRules = reactive<FormRules>({
|
||||
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: [
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
<el-descriptions-item label="工程类型">
|
||||
{{ getProjectTypeText(currentProject.projectType) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工程类别">
|
||||
<el-descriptions-item label="设计类型">
|
||||
{{ getProjectCategoryText(currentProject.projectCategory) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="合同签订日期">
|
||||
@@ -218,10 +218,10 @@
|
||||
>
|
||||
{{ currentProject.terminateReason || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="合同产值(元)">
|
||||
<el-descriptions-item label="合同总产值(元)">
|
||||
{{ formatAmountText(currentProject.contractAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工程总面积(m²)">
|
||||
<el-descriptions-item label="建筑面积(m²)">
|
||||
{{ formatAreaText(currentProject.totalConstructionArea) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
@@ -353,7 +353,7 @@ const cleanOptionLabels = <T,>(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, [
|
||||
'建筑工程',
|
||||
'精装工程',
|
||||
|
||||
@@ -91,12 +91,12 @@
|
||||
prop="engineeringPrincipalName"
|
||||
/>
|
||||
<el-table-column align="center" label="开始年度" prop="projectStartYear" width="120" />
|
||||
<el-table-column align="center" label="合同产值(元)" width="130">
|
||||
<el-table-column align="center" label="合同总产值(元)" width="130">
|
||||
<template #default="scope">
|
||||
{{ formatAmountText(scope.row.contractAmount) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="工程总面积(㎡)" width="140">
|
||||
<el-table-column align="center" label="建筑面积(㎡)" width="140">
|
||||
<template #default="scope">
|
||||
{{ formatAreaText(scope.row.totalConstructionArea) }}
|
||||
</template>
|
||||
@@ -140,10 +140,10 @@
|
||||
<el-descriptions-item label="工程负责人">
|
||||
{{ currentProject.engineeringPrincipalName || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="合同产值(元)">
|
||||
<el-descriptions-item label="合同总产值(元)">
|
||||
{{ formatAmountText(currentProject.contractAmount) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工程总面积(㎡)">
|
||||
<el-descriptions-item label="建筑面积(㎡)">
|
||||
{{ formatAreaText(currentProject.totalConstructionArea) }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="开始年度">
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<div>
|
||||
<div class="text-16px font-600">{{ currentPlanning.planningContent }}</div>
|
||||
<div class="mt-6px text-12px text-[var(--el-text-color-secondary)]">
|
||||
按当前年度和专业预览专业内人员计取结果
|
||||
按当前合约规划、年度和专业预览专业内人员计取结果
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-10px">
|
||||
@@ -160,10 +160,9 @@
|
||||
<div class="text-12px text-[var(--el-text-color-secondary)]">季度金额单位:万元</div>
|
||||
</div>
|
||||
<el-table
|
||||
v-loading="previewLoading"
|
||||
:data="currentGroupDisplayRows"
|
||||
border
|
||||
empty-text="当前年度暂无可预览的专业人员计取数据"
|
||||
empty-text="当前年度暂无可预览的专业人员考核产值计取数据"
|
||||
:span-method="spanRoleColumns"
|
||||
>
|
||||
<el-table-column align="center" label="角色" min-width="110" prop="roleName" />
|
||||
@@ -205,7 +204,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="季度计取明细(年度预览:比例 / 金额 万元)">
|
||||
<el-table-column align="center" label="季度计取明细(合约规划年度预览:比例 / 金额 万元)">
|
||||
<el-table-column align="center" label="一季度" min-width="150">
|
||||
<template #default="scope">
|
||||
{{
|
||||
|
||||
@@ -6,7 +6,8 @@ export type Option<T = string> = {
|
||||
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<boolean>[] = [
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user