明树Git Lab

Commit cc86f528 authored by zhanghan's avatar zhanghan

回收功能处理

parent d132b74c
......@@ -59,35 +59,70 @@
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleNumberInput(row)"
/>
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
<!-- 计算字段 -->
<span v-else class="calculated-value">
{{ formatCalculatedValue(row[col.prop]) }}
{{ formatCalculatedValue(row[col.prop], rateUnit) }}
</span>
</template>
</el-table-column>
</template>
<!-- 月度更新表格的列 -->
<template v-else>
<template v-else-if="tableType === 'month'">
<!-- 1-12月 -->
<el-table-column
v-for="month in 12"
:key="`month-${month}`"
:label="`${month}月`"
:prop="`m${month}`"
min-width="180"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row[`m${month}`]"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleMonthInput(row)"
/>
</template>
<!-- 应收 -->
<el-table-column
:label="`应收`"
:prop="`m${month}Receivable`"
min-width="150"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row[`m${month}Receivable`]"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleMonthInput(row)"
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
<!-- 实收 -->
<el-table-column
:label="`实收`"
:prop="`m${month}Received`"
min-width="150"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row[`m${month}Received`]"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleMonthInput(row)"
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 本年累计 -->
......@@ -108,7 +143,11 @@
:disabled="isPreview || row.noEdit || row.autoCalcYearTotal"
placeholder="自动计算"
@input="handleYearTotalInput(row)"
/>
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
......@@ -122,7 +161,12 @@
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.yearCompletionRateDecision, "%") }}
{{
formatCalculatedValue(
row.yearCompletionRateDecision,
rateUnit,
)
}}
</span>
</template>
</el-table-column>
......@@ -134,7 +178,9 @@
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.yearCompletionRatePlan, "%") }}
{{
formatCalculatedValue(row.yearCompletionRatePlan, rateUnit)
}}
</span>
</template>
</el-table-column>
......@@ -148,13 +194,12 @@
align="center"
>
<template #default="{ row }">
<el-input
v-model="row.invoiceCompleted"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleInvoiceInput(row)"
/>
<span v-if="row.isTotalRow" class="calculated-value">
{{ formatCalculatedValue(row.invoiceCompleted) }}
</span>
<span v-else class="calculated-value">
{{ formatCalculatedValue(row.invoiceCompleted) }}
</span>
</template>
</el-table-column>
......@@ -169,7 +214,10 @@
<template #default="{ row }">
<span class="calculated-value">
{{
formatCalculatedValue(row.invoiceCompletionRateDecision, "%")
formatCalculatedValue(
row.invoiceCompletionRateDecision,
rateUnit,
)
}}
</span>
</template>
......@@ -182,7 +230,9 @@
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.invoiceCompletionRatePlan, "%") }}
{{
formatCalculatedValue(row.invoiceCompletionRatePlan, rateUnit)
}}
</span>
</template>
</el-table-column>
......@@ -196,9 +246,17 @@
align="center"
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.shortfallAmount) }}
</span>
<el-input
v-model="row.shortfallAmount"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleShortfallAmountInput(row)"
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
......@@ -206,7 +264,7 @@
<el-table-column
label="合同总金额"
prop="contractTotalAmount"
min-width="120"
min-width="150"
align="center"
>
<template #default="{ row }">
......@@ -216,21 +274,133 @@
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleContractAmountInput(row)"
/>
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
<!-- 计划差额 -->
<!-- 实际与计划差异说明 -->
<el-table-column
label="计划差额"
label="实际与计划差异说明"
prop="planDifference"
min-width="120"
min-width="200"
align="center"
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.planDifference) }}
</span>
<el-input
v-model="row.planDifference"
type="textarea"
:rows="2"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handlePlanDifferenceInput"
/>
</template>
</el-table-column>
</template>
<!-- 计划表格的列 -->
<template v-else-if="tableType === 'plan'">
<!-- 1-12月 -->
<el-table-column
v-for="month in 12"
:key="`month-${month}`"
:label="`${month}月`"
align="center"
>
<!-- 决策 -->
<el-table-column
:label="`决策`"
:prop="`m${month}Decision`"
min-width="150"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row[`m${month}Decision`]"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleMonthInput(row)"
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
<!-- 计划 -->
<el-table-column
:label="`计划`"
:prop="`m${month}Plan`"
min-width="150"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row[`m${month}Plan`]"
type="number"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleMonthInput(row)"
>
<template #suffix>
<span>{{ moneyUnit }}</span>
</template>
</el-input>
</template>
</el-table-column>
</el-table-column>
<!-- 合计 -->
<el-table-column label="合计" align="center">
<!-- 决策 -->
<el-table-column
label="决策"
prop="totalDecision"
min-width="180"
align="center"
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.totalDecision) }}
</span>
</template>
</el-table-column>
<!-- 计划 -->
<el-table-column
label="计划"
prop="totalPlan"
min-width="180"
align="center"
>
<template #default="{ row }">
<span class="calculated-value">
{{ formatCalculatedValue(row.totalPlan) }}
</span>
</template>
</el-table-column>
</el-table-column>
<!-- 目标(决策)与计划差异说明 -->
<el-table-column
label="目标(决策)与计划差异说明"
prop="differenceExplanation"
min-width="200"
align="center"
>
<template #default="{ row }">
<el-input
v-model="row.differenceExplanation"
type="textarea"
:rows="2"
:disabled="isPreview || row.noEdit"
placeholder="请输入"
@input="handleTextInput"
/>
</template>
</el-table-column>
</template>
......@@ -252,8 +422,8 @@ const props = defineProps({
},
tableType: {
type: String,
default: "year", // 'year' 或 'month'
validator: (val) => ["year", "month"].includes(val),
default: "year", // 'year' 或 'month' 或 'plan'
validator: (val) => ["year", "month", "plan"].includes(val),
},
tableTitle: {
type: String,
......@@ -279,6 +449,26 @@ const props = defineProps({
type: [String, Number],
default: "",
},
// 投资回收完成情况年度计划数据(用于获取年度计划的合计决策值)
yearlyPlanData: {
type: Object,
default: () => ({}),
},
// 投资回收完成情况年度更新数据(用于获取截至年底实收值)
yearlyCompletionData: {
type: Object,
default: () => ({}),
},
// 金额单位(默认万元)
moneyUnit: {
type: String,
default: "万元",
},
// 利率单位(默认%)
rateUnit: {
type: String,
default: "%",
},
});
const emit = defineEmits(["update:modelValue"]);
......@@ -296,11 +486,18 @@ const yearColumns = computed(() => [
},
{
prop: "actualReceived",
label: "截至年底收",
label: "截至年底计划应收",
width: 140,
isText: false,
isCalculated: false,
},
{
prop: "jzss",
label: "截至(具体年份)年底实收",
width: 180,
isText: false,
isCalculated: false,
},
{
prop: "shortfall",
label: "欠收(决策应收-实收)",
......@@ -334,16 +531,13 @@ const yearColumns = computed(() => [
// 格式化计算值
const formatCalculatedValue = (value, suffix = "") => {
if (value === null || value === undefined || isNaN(value)) return "-";
if (suffix === "%") {
return `${Number(value).toFixed(2)}%`;
}
return Number(value).toFixed(2);
return `${Number(value).toFixed(2)}${suffix}`;
};
// 初始化行数据
const initRowData = (indicator, index, sourceRow = {}) => {
const baseRow = {
serialNumber: index + 1,
serialNumber: indicator.xh || index + 1,
indicatorName: indicator.name,
noEdit: indicator.noEdit || false,
isTotalRow: indicator.isTotalRow || false,
......@@ -358,12 +552,28 @@ const initRowData = (indicator, index, sourceRow = {}) => {
completionRate: sourceRow.completionRate || null,
problems: sourceRow.problems || "",
measures: sourceRow.measures || "",
jzss: sourceRow.jzss || null,
};
} else if (props.tableType === "plan") {
// 计划表格
const monthData = {};
for (let i = 1; i <= 12; i++) {
monthData[`m${i}Decision`] = sourceRow[`m${i}Decision`] || null;
monthData[`m${i}Plan`] = sourceRow[`m${i}Plan`] || null;
}
return {
...baseRow,
...monthData,
totalDecision: sourceRow.totalDecision || null,
totalPlan: sourceRow.totalPlan || null,
differenceExplanation: sourceRow.differenceExplanation || "",
};
} else {
// 月度表格
const monthData = {};
for (let i = 1; i <= 12; i++) {
monthData[`m${i}`] = sourceRow[`m${i}`] || null;
monthData[`m${i}Receivable`] = sourceRow[`m${i}Receivable`] || null;
monthData[`m${i}Received`] = sourceRow[`m${i}Received`] || null;
}
return {
...baseRow,
......@@ -377,7 +587,7 @@ const initRowData = (indicator, index, sourceRow = {}) => {
invoiceCompletionRatePlan: sourceRow.invoiceCompletionRatePlan || null,
shortfallAmount: sourceRow.shortfallAmount || null,
contractTotalAmount: sourceRow.contractTotalAmount || null,
planDifference: sourceRow.planDifference || null,
planDifference: sourceRow.planDifference || "",
yearDecision: sourceRow.yearDecision || null, // 本年决策目标
yearPlan: sourceRow.yearPlan || null, // 本年计划目标
invoiceDecision: sourceRow.invoiceDecision || null, // 开累决策目标
......@@ -389,15 +599,15 @@ const initRowData = (indicator, index, sourceRow = {}) => {
// 指标列表
const indicators = [
{ name: "政府付费", noEdit: false },
{ name: "建设期", noEdit: false },
{ name: "运营期", noEdit: false },
{ name: "使用者付费", noEdit: false },
{ name: "投资价款", noEdit: false },
{ name: "参股项目投资回收", noEdit: false },
{ name: "代建工程款", noEdit: false },
{ name: "其他", noEdit: false },
{ name: "合计", isTotalRow: true, noEdit: true },
{ name: "政府付费", noEdit: false, xh: "1" },
{ name: "建设期", noEdit: false, xh: "1.1" },
{ name: "运营期", noEdit: false, xh: "1.2" },
{ name: "使用者付费", noEdit: false, xh: "2" },
{ name: "投资价款", noEdit: false, xh: "3" },
{ name: "参股项目投资回收", noEdit: false, xh: "4" },
{ name: "代建工程款", noEdit: false, xh: "5" },
{ name: "其他", noEdit: false, xh: "6" },
{ name: "合计", isTotalRow: true, noEdit: true, xh: "7" },
];
// 从计划数据和决策数据中获取对应指标的值
......@@ -492,10 +702,13 @@ const autoFillDecisionAndPlan = () => {
}
});
// 重新计算完成率
// 重新计算完成率(不触发 emitChange,避免循环)
tableDataRef.value.forEach((row) => {
calculateMonthRow(row);
});
// 计算合计行(不触发 emitChange,避免循环)
calculateTotalRow();
};
// 年度表格计算
......@@ -519,56 +732,93 @@ const calculateYearRow = (row) => {
const calculateMonthRow = (row) => {
if (row.noEdit || row.isTotalRow) return;
// 本年累计 = 1-12月之和
// 本年累计 = 1-12月实收之和
if (row.autoCalcYearTotal) {
let monthSum = 0;
for (let i = 1; i <= 12; i++) {
monthSum += parseFloat(row[`m${i}`]) || 0;
monthSum += parseFloat(row[`m${i}Received`]) || 0;
}
row.yearTotal = monthSum;
}
// 本年完成率/本年决策 = 本年累计 / 本年决策 * 100
const yearDecision = parseFloat(row.yearDecision) || 0;
// 从年度计划数据中获取合计计划值
const getYearlyPlanTotalPlan = () => {
if (!props.yearlyPlanData || !props.yearlyPlanData.tableData) return 0;
const totalRow = props.yearlyPlanData.tableData.find((r) => r.isTotalRow);
return totalRow ? parseFloat(totalRow.totalPlan) || 0 : 0;
};
// 从年度更新数据中获取截至年底实收值
const getYearlyJzss = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const targetRow = props.yearlyCompletionData.tableData.find(
(r) => r.indicatorName === row.indicatorName,
);
return targetRow ? parseFloat(targetRow.jzss) || 0 : 0;
};
// 本年完成率/本年决策 = 本年累计 / 年度计划的合计计划值 * 100
const yearlyPlanTotalPlan = getYearlyPlanTotalPlan();
const yearTotal = parseFloat(row.yearTotal) || 0;
if (yearDecision > 0) {
row.yearCompletionRateDecision = (yearTotal / yearDecision) * 100;
if (yearlyPlanTotalPlan > 0) {
row.yearCompletionRateDecision = (yearTotal / yearlyPlanTotalPlan) * 100;
} else {
row.yearCompletionRateDecision = 0;
}
// 本年完成率/本年计划 = 本年累计 / 本年计划 * 100
const yearPlan = parseFloat(row.yearPlan) || 0;
if (yearPlan > 0) {
row.yearCompletionRatePlan = (yearTotal / yearPlan) * 100;
// 自动计算截至本年完成(开累)= 本年累计 + 年度更新的截至年底实收
const yearlyJzss = getYearlyJzss();
row.invoiceCompleted = yearTotal + yearlyJzss;
// 从年度更新数据中获取决策应收和计划应收值
const getYearlyDecisionReceivable = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const targetRow = props.yearlyCompletionData.tableData.find(
(r) => r.indicatorName === row.indicatorName,
);
return targetRow ? parseFloat(targetRow.decisionReceivable) || 0 : 0;
};
const getYearlyActualReceived = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const targetRow = props.yearlyCompletionData.tableData.find(
(r) => r.indicatorName === row.indicatorName,
);
return targetRow ? parseFloat(targetRow.actualReceived) || 0 : 0;
};
// 本年完成率/本年计划 = 本年累计 / 年度更新的计划应收值 * 100
const yearlyActualReceived = getYearlyActualReceived();
if (yearlyActualReceived > 0) {
row.yearCompletionRatePlan = (yearTotal / yearlyActualReceived) * 100;
} else {
row.yearCompletionRatePlan = 0;
}
// 开累完成率/开累决策 = 开累完成 / 开累决策 * 100
const invoiceDecision = parseFloat(row.invoiceDecision) || 0;
// 开累完成率/开累决策 = 截至本年完成(开累) / (year的决策应收 + plan的合计决策值) * 100
const yearlyDecisionReceivable = getYearlyDecisionReceivable();
const invoiceCompleted = parseFloat(row.invoiceCompleted) || 0;
if (invoiceDecision > 0) {
const totalInvoiceDecision = yearlyDecisionReceivable + yearlyPlanTotalPlan;
if (totalInvoiceDecision > 0) {
row.invoiceCompletionRateDecision =
(invoiceCompleted / invoiceDecision) * 100;
(invoiceCompleted / totalInvoiceDecision) * 100;
} else {
row.invoiceCompletionRateDecision = 0;
}
// 开累完成率/本年计划 = 开累完成 / 开累计划 * 100
const invoicePlan = parseFloat(row.invoicePlan) || 0;
if (invoicePlan > 0) {
row.invoiceCompletionRatePlan = (invoiceCompleted / invoicePlan) * 100;
// 开累完成率/开累计划 = 截至本年完成(开累) / (year的计划应收 + plan的合计计划值) * 100
const totalInvoicePlan = yearlyActualReceived + yearlyPlanTotalPlan;
if (totalInvoicePlan > 0) {
row.invoiceCompletionRatePlan = (invoiceCompleted / totalInvoicePlan) * 100;
} else {
row.invoiceCompletionRatePlan = 0;
}
// 欠收金额 = 本年决策 - 本年累计
row.shortfallAmount = yearDecision - yearTotal;
// 计划差额 = 合同总金额 - 本年计划
const contractTotal = parseFloat(row.contractTotalAmount) || 0;
row.planDifference = contractTotal - yearPlan;
// 欠收金额不再自动计算,由用户手动输入
// row.shortfallAmount = yearDecision - yearTotal;
};
// 计算合计行
......@@ -596,24 +846,148 @@ const calculateTotalRow = () => {
} else {
totalRow.completionRate = 0;
}
} else if (props.tableType === "plan") {
// 计划表格合计
for (let i = 1; i <= 12; i++) {
let decisionSum = 0;
let planSum = 0;
tableDataRef.value.forEach((row) => {
if (!row.isTotalRow && !row.noEdit) {
decisionSum += parseFloat(row[`m${i}Decision`]) || 0;
planSum += parseFloat(row[`m${i}Plan`]) || 0;
}
});
totalRow[`m${i}Decision`] = decisionSum;
totalRow[`m${i}Plan`] = planSum;
}
// 计算合计列
let totalDecisionSum = 0;
let totalPlanSum = 0;
for (let i = 1; i <= 12; i++) {
totalDecisionSum += parseFloat(totalRow[`m${i}Decision`]) || 0;
totalPlanSum += parseFloat(totalRow[`m${i}Plan`]) || 0;
}
totalRow.totalDecision = totalDecisionSum;
totalRow.totalPlan = totalPlanSum;
// 计算每行的合计值(1-12月总和)
tableDataRef.value.forEach((row) => {
if (!row.isTotalRow && !row.noEdit) {
let decisionSum = 0;
let planSum = 0;
for (let i = 1; i <= 12; i++) {
decisionSum += parseFloat(row[`m${i}Decision`]) || 0;
planSum += parseFloat(row[`m${i}Plan`]) || 0;
}
row.totalDecision = decisionSum;
row.totalPlan = planSum;
}
});
} else {
// 月度表格合计
for (let i = 1; i <= 12; i++) {
let monthSum = 0;
let receivableSum = 0;
let receivedSum = 0;
tableDataRef.value.forEach((row) => {
if (!row.isTotalRow && !row.noEdit) {
monthSum += parseFloat(row[`m${i}`]) || 0;
receivableSum += parseFloat(row[`m${i}Receivable`]) || 0;
receivedSum += parseFloat(row[`m${i}Received`]) || 0;
}
});
totalRow[`m${i}`] = monthSum;
totalRow[`m${i}Receivable`] = receivableSum;
totalRow[`m${i}Received`] = receivedSum;
}
// 本年累计
// 本年累计(实收合计)
let yearTotalSum = 0;
for (let i = 1; i <= 12; i++) {
yearTotalSum += parseFloat(totalRow[`m${i}`]) || 0;
yearTotalSum += parseFloat(totalRow[`m${i}Received`]) || 0;
}
totalRow.yearTotal = yearTotalSum;
// 计算合计行的完成率
// 从年度计划数据中获取合计计划值
const getYearlyPlanTotalPlan = () => {
if (!props.yearlyPlanData || !props.yearlyPlanData.tableData) return 0;
const yearlyTotalRow = props.yearlyPlanData.tableData.find(
(r) => r.isTotalRow,
);
return yearlyTotalRow ? parseFloat(yearlyTotalRow.totalPlan) || 0 : 0;
};
const yearlyPlanTotalPlan = getYearlyPlanTotalPlan();
// 本年完成率/本年决策 = 本年累计 / 年度计划的合计计划值 * 100
if (yearlyPlanTotalPlan > 0) {
totalRow.yearCompletionRateDecision =
(yearTotalSum / yearlyPlanTotalPlan) * 100;
} else {
totalRow.yearCompletionRateDecision = 0;
}
// 本年完成率/本年计划 = 本年累计 / 本年计划 * 100(合计行暂不计算此值)
totalRow.yearCompletionRatePlan = 0;
// 计算合计行的截至本年完成(开累)
// 从年度更新数据中获取截至年底实收值
const getYearlyJzss = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const yearlyTotalRow = props.yearlyCompletionData.tableData.find(
(r) => r.isTotalRow,
);
return yearlyTotalRow ? parseFloat(yearlyTotalRow.jzss) || 0 : 0;
};
const yearlyJzss = getYearlyJzss();
totalRow.invoiceCompleted = yearTotalSum + yearlyJzss;
// 计算合计行的开累完成率
// 从年度更新数据中获取合计的决策应收和计划应收值
const getYearlyDecisionReceivable = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const yearlyTotalRow = props.yearlyCompletionData.tableData.find(
(r) => r.isTotalRow,
);
return yearlyTotalRow
? parseFloat(yearlyTotalRow.decisionReceivable) || 0
: 0;
};
const getYearlyActualReceived = () => {
if (!props.yearlyCompletionData || !props.yearlyCompletionData.tableData)
return 0;
const yearlyTotalRow = props.yearlyCompletionData.tableData.find(
(r) => r.isTotalRow,
);
return yearlyTotalRow
? parseFloat(yearlyTotalRow.actualReceived) || 0
: 0;
};
const yearlyDecisionReceivable = getYearlyDecisionReceivable();
const yearlyActualReceived = getYearlyActualReceived();
const invoiceCompleted = parseFloat(totalRow.invoiceCompleted) || 0;
const totalInvoiceDecision = yearlyDecisionReceivable + yearlyPlanTotalPlan;
const totalInvoicePlan = yearlyActualReceived + yearlyPlanTotalPlan;
// 开累完成率/开累决策
if (totalInvoiceDecision > 0) {
totalRow.invoiceCompletionRateDecision =
(invoiceCompleted / totalInvoiceDecision) * 100;
} else {
totalRow.invoiceCompletionRateDecision = 0;
}
// 开累完成率/开累计划
if (totalInvoicePlan > 0) {
totalRow.invoiceCompletionRatePlan =
(invoiceCompleted / totalInvoicePlan) * 100;
} else {
totalRow.invoiceCompletionRatePlan = 0;
}
}
};
......@@ -640,18 +1014,22 @@ const handleYearTotalInput = (row) => {
emitChange();
};
const handleInvoiceInput = (row) => {
const handleContractAmountInput = (row) => {
calculateMonthRow(row);
calculateTotalRow();
emitChange();
};
const handleContractAmountInput = (row) => {
const handleShortfallAmountInput = (row) => {
calculateMonthRow(row);
calculateTotalRow();
emitChange();
};
const handlePlanDifferenceInput = () => {
emitChange();
};
const emitChange = () => {
if (props.isPreview) return;
const newModelValue = {
......@@ -702,6 +1080,40 @@ watch(
},
{ deep: true },
);
// 监听年度计划数据变化,重新计算完成率
watch(
() => props.yearlyPlanData,
() => {
nextTick(() => {
if (props.tableType === "month") {
tableDataRef.value.forEach((row) => {
calculateMonthRow(row);
});
calculateTotalRow();
// 不调用 emitChange,避免无限循环
}
});
},
{ deep: true },
);
// 监听年度更新数据变化,重新计算截至本年完成
watch(
() => props.yearlyCompletionData,
() => {
nextTick(() => {
if (props.tableType === "month") {
tableDataRef.value.forEach((row) => {
calculateMonthRow(row);
});
calculateTotalRow();
// 不调用 emitChange,避免无限循环
}
});
},
{ deep: true },
);
</script>
<style scoped lang="scss">
......
......@@ -161,9 +161,27 @@
justify-content: flex-end;
align-items: center;
}
.add-project-content .tab-content .is-transparent {
font-size: 12px;
}
.add-project-content .tab-content .el-button,
.add-project-content .tab-content .count-text,
.add-project-content .tab-content .count-num,
.add-project-content .tab-content .upload-icon,
.add-project-content .tab-content .el-input__suffix,
.add-project-content .tab-content .el-input__suffix-inner {
font-size: 12px;
}
.add-project-content .tab-content .el-table {
margin-bottom: 10px;
}
.add-project-content .tab-content .el-table .cell {
text-align: center;
font-size: 12px;
}
.add-project-content .tab-content .el-table .cell .el-input__inner {
font-size: 12px;
}
.add-project-content .tab-content .el-table tbody tr {
height: 46px;
}
......@@ -184,6 +202,13 @@
}
.add-project-content .tab-content .el-table thead th .cell {
text-align: center;
font-size: 12px;
}
.add-project-content .tab-content .el-table thead th .cell .el-input__inner {
font-size: 12px;
}
.add-project-content .tab-content .el-table th {
background: #e4e8f1;
}
.add-project-content .tab-content .el-table .sums-column {
display: flex;
......@@ -312,7 +337,7 @@
.el-form-item__label {
min-width: 100px;
font-weight: 400;
font-size: 14px;
font-size: 12px;
color: #333333;
height: 32px;
display: flex;
......@@ -347,3 +372,26 @@
font-weight: 600;
font-size: 14px;
}
.table-stripe-colors {
border: 1px solid #ebeef5;
}
.table-stripe-colors .odd-row {
background-color: #f5f5f5 !important;
}
.table-stripe-colors .even-row {
background-color: #edf0f5 !important;
}
.table-stripe-colors .el-table__body tr:hover > td {
background-color: #e8f4ff !important;
}
.table-stripe-colors .el-table__header-wrapper th {
background-color: #f0f2f5 !important;
color: #333;
font-weight: 600;
text-align: center;
border-color: #ebeef5;
}
.table-stripe-colors .el-table__body-wrapper td {
border-color: #ebeef5;
padding: 8px 0;
}
......@@ -171,8 +171,26 @@
justify-content: flex-end;
align-items: center;
}
.is-transparent {
font-size: 12px;
}
.el-button,
.count-text,
.count-num,
.upload-icon,
.el-input__suffix,
.el-input__suffix-inner {
font-size: 12px;
}
.el-table {
margin-bottom: 10px;
.cell {
text-align: center;
font-size: 12px;
.el-input__inner {
font-size: 12px;
}
}
tbody {
tr {
......@@ -195,9 +213,16 @@
background: #e4e8f1;
.cell {
text-align: center;
font-size: 12px;
.el-input__inner {
font-size: 12px;
}
}
}
}
th {
background: #e4e8f1;
}
.sums-column {
display: flex;
flex-direction: column;
......@@ -341,7 +366,7 @@
.el-form-item__label {
min-width: 100px;
font-weight: 400;
font-size: 14px;
font-size: 12px;
color: rgba(51, 51, 51, 1);
height: 32px;
display: flex;
......
<template>
<div class="manage-container">
<div class="manage-wrap">
<search-form @search="handleSearch" />
<search-form :items="searchItems" @search="handleSearch" />
<div class="manage-header">
<div class="header-left"></div>
<div class="header-right">
......@@ -62,6 +62,68 @@ import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
import SearchForm from "@/components/common/SearchForm.vue";
const searchItems = [
{
type: "input",
label: "项目名称",
prop: "projectName",
placeholder: "请输入项目名称",
span: 6,
clearable: true,
},
{
type: "input",
label: "项目编号",
prop: "projectCode",
placeholder: "请输入项目编号",
span: 6,
clearable: true,
},
{
type: "date",
label: "年度",
prop: "nd",
placeholder: "请选择年度",
span: 6,
clearable: true,
},
{
type: "input",
label: "管理主体",
prop: "glzt",
placeholder: "请输入管理主体",
span: 6,
clearable: true,
},
{
type: "input",
label: "联系人",
prop: "lxr",
placeholder: "请输入联系人",
span: 6,
clearable: true,
},
{
type: "dict-select",
label: "项目阶段",
prop: "xmjd",
dictName: "xmjd",
placeholder: "请选择项目阶段",
span: 6,
clearable: true,
},
{
type: "dict-select",
label: "项目区域",
prop: "xmqy",
dictName: "xmqy",
placeholder: "请选择项目区域",
span: 6,
clearable: true,
},
];
const handleSearch = (formData) => {
currentPage.value = 1;
......@@ -78,18 +140,11 @@ let tableColumns = ref([
showOverflowTooltip: true,
},
{
prop: "xmgsmc",
label: "项目公司名称",
prop: "nd",
label: "年度",
showOverflowTooltip: true,
},
{
prop: "ssejqy",
label: "所属二级企业",
showOverflowTooltip: true,
width: 170,
},
{
prop: "operations",
label: "操作",
......
......@@ -171,10 +171,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="260px"
label="投资总额-实际值"
>
<el-form-item label-width="260px" label="投资总额-实际值">
<el-input
precision="2"
v-model="formData.tzzesj"
......@@ -203,10 +200,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="260px"
label="投资总额-计划值"
>
<el-form-item label-width="260px" label="投资总额-计划值">
<el-input
precision="2"
v-model="formData.tzzejhz"
......@@ -221,12 +215,11 @@
</el-row>
</el-collapse-item>
<el-collapse-item
<!-- <el-collapse-item
:title="dynamicTitles.yearlyUpdateTitle"
:name="dynamicTitles.yearlyUpdateTitle"
>
<el-row gutter="20">
<!-- 第一行:决策目标值相关数字项 -->
<el-col :span="12">
<el-form-item
label-width="260px"
......@@ -262,10 +255,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="260px"
label="下一年完成数"
>
<el-form-item label-width="260px" label="下一年完成数">
<el-input
precision="2"
v-model="formData.xynwcs"
......@@ -279,10 +269,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="260px"
label="本年计划"
>
<el-form-item label-width="260px" label="本年计划">
<el-input
precision="2"
v-model="formData.bnjh"
......@@ -296,7 +283,6 @@
</el-form-item>
</el-col>
<!-- 第二行:实际值相关数字项 -->
<el-col :span="12">
<el-form-item
label-width="260px"
......@@ -332,10 +318,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="260px"
label="累计欠收"
>
<el-form-item label-width="260px" label="累计欠收">
<el-input
precision="2"
v-model="formData.ljqs"
......@@ -363,7 +346,6 @@
</el-form-item>
</el-col>
<!-- 第三行及以后:长文本说明项(占满整行) -->
<el-col :span="24">
<el-form-item label="计划与决策目标值差异说明">
<el-input
......@@ -415,9 +397,20 @@
</el-form-item>
</el-col>
</el-row>
</el-collapse-item> -->
<el-collapse-item
:title="dynamicTitles.yearlyUpdateTitle"
:name="dynamicTitles.yearlyUpdateTitle"
>
<InvestmentRecoveryTable
v-model="formData.tzhsjc"
:is-preview="isPreview"
table-type="plan"
:table-title="`${currentYear}年投资回收计划`"
/>
</el-collapse-item>
<el-collapse-item
<!-- <el-collapse-item
title="截止12月末累计应收"
name="截止12月末累计应收"
>
......@@ -435,9 +428,9 @@
v-model="formData.jzymljsh"
:is-preview="isPreview"
/>
</el-collapse-item>
</el-collapse-item> -->
<el-collapse-item
<!-- <el-collapse-item
title="投资回收(计划)"
name="投资回收(计划)"
>
......@@ -448,7 +441,7 @@
:showNameColumn="false"
:showTotalColumn="false"
/>
</el-collapse-item>
</el-collapse-item> -->
<el-collapse-item
:title="dynamicTitles.yearlyCompletionTitle"
......@@ -474,6 +467,8 @@
:plan-data="formData.tzhsjh"
:decision-data="formData.tzhsjc"
:last-year-plan-data="formData.lastyeartzhs"
:yearly-plan-data="formData.tzhsjc"
:yearly-completion-data="formData.tzhswcqkndgx"
:current-year="currentYear"
/>
</el-collapse-item>
......@@ -1194,6 +1189,10 @@ let initTableData = () => {
formData.tzhswcqkydgx = {
tableData: [],
};
formData.tzhsjc = {
tableData: [],
};
};
const formData = reactive({
nd: new Date().getFullYear().toString(), // 年度,默认当前年份
......@@ -1203,6 +1202,7 @@ const formData = reactive({
tzhsjh: {},
tzhswcqkndgx: {},
tzhswcqkydgx: {},
tzhsjc: {}, // 投资回收完成情况年度计划
lastyeartzhs: null, // 去年投资回收计划数据
projectGdxxs: [],
});
......@@ -1221,7 +1221,7 @@ const dynamicTitles = computed(() => ({
// 投资回收累计完成情况-年度更新
yearlyUpdateTitle: `${currentYear.value}年投资回收累计完成情况-年度更新`,
// 投资回收完成情况-年度更新
yearlyCompletionTitle: `${currentYear.value}年投资回收完成情况(年度更新)`,
yearlyCompletionTitle: `${currentYear.value - 1}年投资回收完成情况(年度更新)`,
// 投资回收完成情况-月度更新
monthlyCompletionTitle: `${currentYear.value}年投资回收完成情况(月度更新)`,
}));
......@@ -1237,7 +1237,7 @@ const getActiveCollapseItems = () => [
"投资回收(计划)",
dynamicTitles.value.yearlyUpdateTitle,
"净现金流",
"截止12月末累计应收",
"投资额完成情况(单位:万元)",
"截止12月末累计实收",
"资金流出",
"分红情况",
......@@ -1264,8 +1264,6 @@ const changeProject = (val) => {
url: "/api/project/getProjectFinalInfo",
data: { id: val },
callback: (data) => {
loading.value = false;
// Object.assign(formData, data);
loading.value = false;
formData.projectName = data.projectName || "";
formData.sbdw = data.sbdw || "";
......
......@@ -12,7 +12,7 @@
>
<!-- 项目基本信息:字段完全对齐数据库 -->
<el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="20">
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目信息" required>
<el-select
......@@ -146,7 +146,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item label="建成后成效">
<el-input
v-model="formData.jchcx"
......@@ -166,10 +166,10 @@
<!-- 战略类A:按数据库字段补充所有表单项 -->
<div class="row">
<div class="row_title">战略类(A类)</div>
<el-row :gutter="20">
<el-col :span="18">
<el-row :gutter="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="是否国家中长期规划重大项目(A1)"
>
<CommonSelector
......@@ -179,9 +179,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="是否国家有关部门下达的重点项目(A2)"
>
<CommonSelector
......@@ -191,9 +191,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="大规模设备更新(A3)"
>
<CommonSelector
......@@ -203,9 +203,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="战略性新兴产业百大工程(A4)"
>
<CommonSelector
......@@ -215,9 +215,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="列入央企产业焕新和未来产业启航行动的项目(A5)"
>
<CommonSelector
......@@ -227,9 +227,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="强链补链重点项目(A6)"
>
<CommonSelector
......@@ -239,9 +239,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="对应重大或重点项目名录名称"
>
<el-input
......@@ -250,9 +250,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="战略性新兴产业分类(如有,必填)"
>
<el-input
......@@ -267,10 +267,10 @@
<div class="row_title">发展类(B类)</div>
<!-- 发展类B:按数据库字段补充所有表单项 -->
<el-row :gutter="20">
<el-col :span="24">
<el-row :gutter="24">
<el-col :span="20">
<el-form-item
label-width="380px"
label-width="340px"
label="列入企业发展战略性新兴产业工作方案的项目(B1)"
>
<CommonSelector
......@@ -280,9 +280,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380px"
label-width="340px"
label="粮食、能源、矿产资源保障项目(B2)"
>
<CommonSelector
......@@ -292,9 +292,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380px"
label-width="340px"
label="传统产业高端化、智能化、绿色化转型升级项目(B3)"
>
<CommonSelector
......@@ -304,9 +304,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380px"
label-width="340px"
label="支撑企业发展的重点项目(B4)"
>
<CommonSelector
......@@ -316,9 +316,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380px"
label-width="340px"
label="制造业技术改造项目"
>
<CommonSelector
......@@ -334,10 +334,10 @@
<div class="row_title">关注类(C类)</div>
<!-- 关注类C:按数据库字段补充所有表单项 -->
<el-row :gutter="20">
<el-col :span="24">
<el-row :gutter="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="对外并购类投资项目(C1)"
>
<CommonSelector
......@@ -347,9 +347,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="特别监管类项目(C2)"
>
<CommonSelector
......@@ -359,9 +359,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="境外特别关注类项目(C3)"
>
<CommonSelector
......@@ -371,9 +371,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="对外参股类投资项目(C4)"
>
<CommonSelector
......@@ -383,9 +383,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="房地产投资项目(C5)"
>
<CommonSelector
......@@ -395,9 +395,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="PPP投资项目(C6)"
>
<CommonSelector
......@@ -407,8 +407,11 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label-width="380" label="两高项目(C7)">
<el-col :span="20">
<el-form-item
label-width="340px"
label="两高项目(C7)"
>
<CommonSelector
:radio="true"
v-model="formData.lgxm"
......@@ -422,10 +425,10 @@
<!-- 管控类D:按数据库字段补充所有表单项 -->
<div class="row_title">管控类(D类)</div>
<el-row :gutter="20">
<el-col :span="24">
<el-row :gutter="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="非主业投资项目(D1)"
>
<CommonSelector
......@@ -435,9 +438,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="持牌金融机构(D2)"
>
<CommonSelector
......@@ -447,9 +450,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="类金融机构(D3)"
>
<CommonSelector
......@@ -459,9 +462,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="其他金融机构(D4)"
>
<CommonSelector
......@@ -471,9 +474,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="基金及基金管理公司(D5)"
>
<CommonSelector
......@@ -483,9 +486,9 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="380"
label-width="340px"
label="创业投资基金(D6)"
>
<CommonSelector
......@@ -501,8 +504,8 @@
</el-collapse-item>
<!-- 最终分类情况:补充长文本输入框 -->
<el-collapse-item title="最终分类情况" name="最终分类情况">
<el-row :gutter="20">
<el-col :span="24">
<el-row :gutter="24">
<el-col :span="20">
<el-form-item label="最终分类情况说明">
<el-input
v-model="formData.zzflqk"
......@@ -589,7 +592,7 @@
<!-- 年度投资计划:基础信息 -->
<el-collapse-item title="年度投资计划" name="年度投资计划">
<el-row :gutter="20">
<el-row :gutter="24">
<!-- 基础短字段:span12分栏 -->
<el-col :span="8">
<el-form-item label-width="240px" label="计划年份">
......@@ -722,7 +725,7 @@
</el-form-item>
</el-col>
<!-- 长文本字段:span24通栏,用文本域 -->
<el-col :span="24">
<el-col :span="20">
<el-form-item label-width="240px" label="预期实现效果">
<el-input
v-model="formData.yqSxXg"
......@@ -732,7 +735,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="340px"
label="2025年投资金额(全口径)目标(决算)与计划差异说明"
......@@ -745,7 +748,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="340px"
label="2025年计划投资目标(决算)与计划差异说明"
......@@ -758,7 +761,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="20">
<el-form-item
label-width="340px"
label="项目主要风险及主要风险应对举措"
......@@ -794,7 +797,7 @@
title="项目年度计划(资金支付口径)"
name="项目年度计划(资金支付口径)"
>
<el-row :gutter="20">
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label-width="180px" label="资金支付比例(%)">
<el-input
......@@ -937,7 +940,7 @@
title="2026年参股单位出资情况修正(单位:万元)"
name="2026年参股单位出资情况修正(单位:万元)"
>
<el-row :gutter="20">
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label-width="0">
<DynamicTable
......
......@@ -78,18 +78,11 @@ let tableColumns = ref([
showOverflowTooltip: true,
},
{
prop: "xmgsmc",
label: "项目公司名称",
prop: "nd",
label: "年度",
showOverflowTooltip: true,
},
{
prop: "ssejqy",
label: "所属二级企业",
showOverflowTooltip: true,
width: 170,
},
{
prop: "operations",
label: "操作",
......
......@@ -140,7 +140,7 @@
><el-row gutter="20">
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="项目投资总额(决策值)"
>
<el-input
......@@ -156,7 +156,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="我方资本金出资额-决策值"
>
<el-input
......@@ -171,10 +171,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label="投资总额-实际值"
>
<el-form-item label-width="260px" label="投资总额-实际值">
<el-input
precision="2"
v-model="formData.tzzesj"
......@@ -188,7 +185,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="我方资本金出资额--实际值"
>
<el-input
......@@ -203,10 +200,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label="投资总额-计划值"
>
<el-form-item label-width="260px" label="投资总额-计划值">
<el-input
precision="2"
v-model="formData.tzzejhz"
......@@ -221,15 +215,14 @@
</el-row>
</el-collapse-item>
<el-collapse-item
<!-- <el-collapse-item
:title="dynamicTitles.yearlyUpdateTitle"
:name="dynamicTitles.yearlyUpdateTitle"
>
<el-row gutter="20">
<!-- 第一行:决策目标值相关数字项 -->
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="本年完成 投资回收决策目标值"
>
<el-input
......@@ -246,7 +239,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="截止本年累计(决策目标值)"
>
<el-input
......@@ -262,10 +255,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label="下一年完成数"
>
<el-form-item label-width="260px" label="下一年完成数">
<el-input
precision="2"
v-model="formData.xynwcs"
......@@ -279,10 +269,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label="本年计划"
>
<el-form-item label-width="260px" label="本年计划">
<el-input
precision="2"
v-model="formData.bnjh"
......@@ -296,10 +283,9 @@
</el-form-item>
</el-col>
<!-- 第二行:实际值相关数字项 -->
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="本年完成--投资回收实际值"
>
<el-input
......@@ -316,7 +302,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label-width="260px"
label="截止本年累计--投资回收实际值"
>
<el-input
......@@ -332,10 +318,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label-width="280px"
label="累计欠收"
>
<el-form-item label-width="260px" label="累计欠收">
<el-input
precision="2"
v-model="formData.ljqs"
......@@ -349,7 +332,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="280px" label="完成率">
<el-form-item label-width="260px" label="完成率">
<el-input
precision="2"
v-model="formData.wcl"
......@@ -363,7 +346,6 @@
</el-form-item>
</el-col>
<!-- 第三行及以后:长文本说明项(占满整行) -->
<el-col :span="24">
<el-form-item label="计划与决策目标值差异说明">
<el-input
......@@ -415,9 +397,20 @@
</el-form-item>
</el-col>
</el-row>
</el-collapse-item> -->
<el-collapse-item
:title="dynamicTitles.yearlyUpdateTitle"
:name="dynamicTitles.yearlyUpdateTitle"
>
<InvestmentRecoveryTable
v-model="formData.tzhsjc"
:is-preview="isPreview"
table-type="plan"
:table-title="`${currentYear}年投资回收计划`"
/>
</el-collapse-item>
<el-collapse-item
<!-- <el-collapse-item
title="截止12月末累计应收"
name="截止12月末累计应收"
>
......@@ -435,9 +428,9 @@
v-model="formData.jzymljsh"
:is-preview="isPreview"
/>
</el-collapse-item>
</el-collapse-item> -->
<el-collapse-item
<!-- <el-collapse-item
title="投资回收(计划)"
name="投资回收(计划)"
>
......@@ -448,7 +441,7 @@
:showNameColumn="false"
:showTotalColumn="false"
/>
</el-collapse-item>
</el-collapse-item> -->
<el-collapse-item
:title="dynamicTitles.yearlyCompletionTitle"
......@@ -474,6 +467,8 @@
:plan-data="formData.tzhsjh"
:decision-data="formData.tzhsjc"
:last-year-plan-data="formData.lastyeartzhs"
:yearly-plan-data="formData.tzhsjc"
:yearly-completion-data="formData.tzhswcqkndgx"
:current-year="currentYear"
/>
</el-collapse-item>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment