明树Git Lab

Commit cc86f528 authored by zhanghan's avatar zhanghan

回收功能处理

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