明树Git Lab

Commit aebc53b7 authored by zhanghan's avatar zhanghan

年度计划完成

parent 8d55f729
Pipeline #108599 passed with stage
in 20 seconds
{
"permissions": {
"allow": [
"mcp__zai-mcp-server__analyze_image"
]
}
}
<template> <template>
<div class="mixed-table-wrap"> <div class="mixed-table-wrap">
<!-- 调试用:可删除 --> <!-- 总标题(可配置) -->
<!-- {{ tableDataRef }}tableData --> <div
v-if="tableTitle"
class="table-main-title"
:style="{
paddingLeft:
!showSerialColumn && !showNameColumn && !showTotalColumn
? '0'
: '80px',
}"
>
{{ tableTitle }}
</div>
<el-table <el-table
:data="tableDataRef" :data="tableDataRef"
style="width: 100%" style="width: 100%"
...@@ -10,16 +22,18 @@ ...@@ -10,16 +22,18 @@
row-key="serialNumber" row-key="serialNumber"
v-if="validConfig" v-if="validConfig"
> >
<!-- 序号列:保留原逻辑 --> <!-- 序号列:控制参数 showSerialColumn -->
<el-table-column <el-table-column
v-if="showSerialColumn"
prop="serialNumber" prop="serialNumber"
label="序号" label="序号"
width="80" width="80"
fixed="left" fixed="left"
align="center" align="center"
/> />
<!-- 指标项列(层级缩进):保留原逻辑 --> <!-- 指标项列:控制参数 showNameColumn -->
<el-table-column <el-table-column
v-if="showNameColumn"
prop="indicatorName" prop="indicatorName"
label="名称" label="名称"
fixed="left" fixed="left"
...@@ -28,6 +42,7 @@ ...@@ -28,6 +42,7 @@
> >
<template #default="{ row }"> <template #default="{ row }">
<div <div
class="indicatorName"
:style="{ :style="{
textIndent: row.level ? `${row.level * 20}px` : '0px', textIndent: row.level ? `${row.level * 20}px` : '0px',
textAlign: 'left', textAlign: 'left',
...@@ -37,9 +52,14 @@ ...@@ -37,9 +52,14 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 --> <!-- 合计列:控制参数 showTotalColumn -->
<el-table-column
<el-table-column fixed="left" label="合计" width="140" align="right"> v-if="showTotalColumn"
fixed="left"
label="合计"
width="140"
align="right"
>
<template #default="{ row }"> <template #default="{ row }">
<span v-if="!row.noTotal"> <span v-if="!row.noTotal">
{{ row.total ? Number(row.total).toFixed(2) : "0.00" }}万元 {{ row.total ? Number(row.total).toFixed(2) : "0.00" }}万元
...@@ -48,8 +68,7 @@ ...@@ -48,8 +68,7 @@
</template> </template>
</el-table-column> </el-table-column>
<!-- 🌟 新增:多级时间列表头渲染逻辑 --> <!-- 多级时间列表头渲染逻辑 -->
<!-- 有时间列分组 → 渲染多级表头 -->
<template v-if="hasTimeHeaderGroup"> <template v-if="hasTimeHeaderGroup">
<el-table-column <el-table-column
v-for="group in timeColumnGroups" v-for="group in timeColumnGroups"
...@@ -57,7 +76,6 @@ ...@@ -57,7 +76,6 @@
:label="group.label" :label="group.label"
align="right" align="right"
> >
<!-- 二级表头:时间列 -->
<el-table-column <el-table-column
v-for="timeItem in group.children" v-for="timeItem in group.children"
:key="`time-col-${timeItem.prop}`" :key="`time-col-${timeItem.prop}`"
...@@ -66,8 +84,9 @@ ...@@ -66,8 +84,9 @@
align="center" align="center"
> >
<template #default="{ row }"> <template #default="{ row }">
<!-- 🌟 核心修改:优先使用列级isTextRow配置,其次行级 -->
<el-input <el-input
v-if="row.isTextRow" v-if="timeItem.isTextRow || row.isTextRow"
v-model="row[timeItem.prop]" v-model="row[timeItem.prop]"
type="textarea" type="textarea"
:rows="2" :rows="2"
...@@ -76,11 +95,10 @@ ...@@ -76,11 +95,10 @@
style="width: 100%" style="width: 100%"
@input="() => handleTextInput(row)" @input="() => handleTextInput(row)"
/> />
<!-- 2. 数字行:金额输入框 --> <!-- 数字行:金额输入框 -->
<el-input-number <el-input
v-else v-else
v-model="row[timeItem.prop]" v-model="row[timeItem.prop]"
:min="0"
:precision="2" :precision="2"
controls-position="right" controls-position="right"
:disabled="isPreview" :disabled="isPreview"
...@@ -93,19 +111,19 @@ ...@@ -93,19 +111,19 @@
</el-table-column> </el-table-column>
</template> </template>
<!-- 无时间列分组 → 保持原有单级表头逻辑 --> <!-- 无时间列分组 → 单级表头逻辑 -->
<el-table-column <el-table-column
v-else v-else
v-for="time in validDynamicTimeList" v-for="time in validDynamicTimeConfig"
:key="`time-col-${time.prop || time}`" :key="`time-col-${time.prop || time}`"
:label="time.label || time" :label="time.label || time"
min-width="140" min-width="140"
align="center" align="center"
> >
<template #default="{ row }"> <template #default="{ row }">
<!-- 1. 文本行:多行文本输入框 --> <!-- 🌟 核心修改:优先使用列级isTextRow配置,其次行级 -->
<el-input <el-input
v-if="row.isTextRow" v-if="time.isTextRow || row.isTextRow"
v-model="row[time.prop || time]" v-model="row[time.prop || time]"
type="textarea" type="textarea"
:rows="2" :rows="2"
...@@ -114,11 +132,10 @@ ...@@ -114,11 +132,10 @@
style="width: 100%" style="width: 100%"
@input="() => handleTextInput(row)" @input="() => handleTextInput(row)"
/> />
<!-- 2. 数字行:金额输入框 --> <!-- 数字行:金额输入框 -->
<el-input-number <el-input
v-else v-else
v-model="row[time.prop || time]" v-model="row[time.prop || time]"
:min="0"
:precision="2" :precision="2"
controls-position="right" controls-position="right"
:disabled="isPreview" :disabled="isPreview"
...@@ -129,7 +146,6 @@ ...@@ -129,7 +146,6 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 配置不合法提示:保留原逻辑 -->
<div v-else style="text-align: center; padding: 20px; color: #909399"> <div v-else style="text-align: center; padding: 20px; color: #909399">
请传入合法的表格配置(包含indicatorList、dynamicTimeList) 请传入合法的表格配置(包含indicatorList、dynamicTimeList)
</div> </div>
...@@ -139,9 +155,8 @@ ...@@ -139,9 +155,8 @@
<script setup> <script setup>
import { ref, computed, watch, nextTick, defineProps, defineEmits } from "vue"; import { ref, computed, watch, nextTick, defineProps, defineEmits } from "vue";
// 1. 重构Props/Emit:兼容多级表头配置 // 1. 新增总标题Props参数
const props = defineProps({ const props = defineProps({
// 核心配置对象:包含indicatorList/dynamicTimeList/tableData
modelValue: { modelValue: {
type: Object, type: Object,
default: () => ({ indicatorList: [], dynamicTimeList: [], tableData: [] }), default: () => ({ indicatorList: [], dynamicTimeList: [], tableData: [] }),
...@@ -150,70 +165,79 @@ const props = defineProps({ ...@@ -150,70 +165,79 @@ const props = defineProps({
Array.isArray(val.indicatorList) && Array.isArray(val.indicatorList) &&
Array.isArray(val.dynamicTimeList), Array.isArray(val.dynamicTimeList),
}, },
// 预览模式:保留原配置
isPreview: { isPreview: {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
// 控制序号列显示(默认显示)
showSerialColumn: {
type: Boolean,
default: true,
},
// 控制名称列显示(默认显示)
showNameColumn: {
type: Boolean,
default: true,
},
// 控制合计列显示(默认显示)
showTotalColumn: {
type: Boolean,
default: true,
},
// 表格总标题(不传则不显示)
tableTitle: {
type: String,
default: "",
},
}); });
// 定义发射事件:双向绑定+业务事件 const emit = defineEmits(["update:modelValue", "handleTableChange"]);
const emit = defineEmits([
"update:modelValue", // v-model双向绑定更新
"handleTableChange", // 自定义业务变化事件
]);
// 2. 核心:创建组件内部响应式数据
const tableDataRef = ref([]); const tableDataRef = ref([]);
// 3. 🌟 新增:处理动态时间列表(兼容单级/多级配置) // 处理动态时间列表(兼容单级/多级配置,新增isTextRow字段处理)
// 支持两种格式:
// - 单级:["一月", "二月"]
// - 多级:[{ label: "一月", prop: "一月", headerGroup: "一季度" }, ...]
const validDynamicTimeConfig = computed(() => { const validDynamicTimeConfig = computed(() => {
const rawTimeList = props.modelValue.dynamicTimeList || []; const rawTimeList = props.modelValue.dynamicTimeList || [];
if (!Array.isArray(rawTimeList) || rawTimeList.length === 0) { if (!Array.isArray(rawTimeList) || rawTimeList.length === 0) {
// 兜底默认值
return [ return [
{ label: "2025", prop: "2025", headerGroup: "" }, { label: "2025", prop: "2025", headerGroup: "", isTextRow: false },
{ label: "2026", prop: "2026", headerGroup: "" }, { label: "2026", prop: "2026", headerGroup: "", isTextRow: false },
{ label: "2027", prop: "2027", headerGroup: "" }, { label: "2027", prop: "2027", headerGroup: "", isTextRow: false },
]; ];
} }
// 标准化配置:统一转为对象格式(兼容字符串数组)
return rawTimeList return rawTimeList
.map((item) => { .map((item) => {
if (typeof item === "string") { if (typeof item === "string") {
return { return {
label: item.trim(), label: item.trim(),
prop: item.trim(), prop: item.trim(),
headerGroup: "", // 无分组 headerGroup: "",
isTextRow: false, // 字符串格式默认数字列
}; };
} }
return { return {
label: item.label?.trim() || "", label: item.label?.trim() || "",
prop: item.prop?.trim() || item.label?.trim() || "", prop: item.prop?.trim() || item.label?.trim() || "",
headerGroup: item.headerGroup?.trim() || "", headerGroup: item.headerGroup?.trim() || "",
isTextRow: item.isTextRow === true, // 显式转换为布尔值,默认false
}; };
}) })
.filter((item) => !!item.prop); // 过滤空值 .filter((item) => !!item.prop);
}); });
// 🌟 新增:判断是否有时间列分组(多级表头开关) // 判断是否有时间列分组
const hasTimeHeaderGroup = computed(() => { const hasTimeHeaderGroup = computed(() => {
return validDynamicTimeConfig.value.some((item) => !!item.headerGroup); return validDynamicTimeConfig.value.some((item) => !!item.headerGroup);
}); });
// 🌟 新增:时间列分组计算(按headerGroup自动分组,保持原始顺序) // 时间列分组计算
const timeColumnGroups = computed(() => { const timeColumnGroups = computed(() => {
const timeConfig = validDynamicTimeConfig.value; const timeConfig = validDynamicTimeConfig.value;
if (!timeConfig.length) return []; if (!timeConfig.length) return [];
// 构建分组映射
const groupMap = {}; const groupMap = {};
timeConfig.forEach((item) => { timeConfig.forEach((item) => {
// 无headerGroup用唯一标识,避免分组混乱
const groupKey = item.headerGroup || `single_${item.prop}`; const groupKey = item.headerGroup || `single_${item.prop}`;
if (!groupMap[groupKey]) { if (!groupMap[groupKey]) {
groupMap[groupKey] = { groupMap[groupKey] = {
...@@ -225,7 +249,6 @@ const timeColumnGroups = computed(() => { ...@@ -225,7 +249,6 @@ const timeColumnGroups = computed(() => {
groupMap[groupKey].children.push(item); groupMap[groupKey].children.push(item);
}); });
// 保持原始顺序,避免分组后列乱序
const result = []; const result = [];
const addedKeys = new Set(); const addedKeys = new Set();
timeConfig.forEach((item) => { timeConfig.forEach((item) => {
...@@ -239,13 +262,12 @@ const timeColumnGroups = computed(() => { ...@@ -239,13 +262,12 @@ const timeColumnGroups = computed(() => {
return result; return result;
}); });
// 兼容原有逻辑:提取纯时间prop列表(用于数据初始化/计算合计) // 提取纯时间prop列表(用于数据初始化/计算合计)
const validDynamicTimeList = computed(() => { const validDynamicTimeList = computed(() => {
// 兼容多级/单级配置,只提取prop
return validDynamicTimeConfig.value.map((item) => item.prop); return validDynamicTimeConfig.value.map((item) => item.prop);
}); });
// 4. 配置合法性校验:基于标准化后的时间配置 // 配置合法性校验
const validConfig = computed(() => { const validConfig = computed(() => {
const { indicatorList } = props.modelValue; const { indicatorList } = props.modelValue;
return ( return (
...@@ -255,38 +277,50 @@ const validConfig = computed(() => { ...@@ -255,38 +277,50 @@ const validConfig = computed(() => {
); );
}); });
// 5. 工具方法:初始化行的时间字段(适配新的时间配置) // 🌟 核心修改:初始化行的时间字段时,适配列级isTextRow配置
const initRowTimeField = (row) => { const initRowTimeField = (row) => {
if (!row || typeof row !== "object") return; if (!row || typeof row !== "object") return;
validDynamicTimeList.value.forEach((timeProp) => { validDynamicTimeConfig.value.forEach((timeConfig) => {
if (row.isTextRow) { const timeProp = timeConfig.prop;
// 文本行:无值则置空字符串 // 列级配置为文本 → 按文本初始化;否则按行级配置
const isColumnTextRow = timeConfig.isTextRow;
if (isColumnTextRow) {
// 列级文本:置空字符串
row[timeProp] =
row[timeProp] === undefined || row[timeProp] === null
? ""
: String(row[timeProp]);
} else if (row.isTextRow) {
// 行级文本:置空字符串
row[timeProp] = row[timeProp] =
row[timeProp] === undefined || row[timeProp] === null row[timeProp] === undefined || row[timeProp] === null
? "" ? ""
: String(row[timeProp]); : String(row[timeProp]);
} else { } else {
// 数字行:无值/非数字则置0 // 数字列:置0
row[timeProp] = row[timeProp] =
row[timeProp] === undefined || row[timeProp] === undefined ||
row[timeProp] === null || row[timeProp] === null ||
isNaN(Number(row[timeProp])) isNaN(Number(row[timeProp]))
? 0 ? null
: Number(row[timeProp]); : Number(row[timeProp]);
} }
}); });
}; };
// 6. 工具方法:计算单行合计(逻辑不变,适配prop列表 // 计算单行合计(排除文本列
const calculateRowTotal = (row) => { const calculateRowTotal = (row) => {
if (!row || typeof row !== "object" || row.noTotal || row.isTextRow) return 0; if (!row || typeof row !== "object" || row.noTotal || row.isTextRow) return 0;
const total = validDynamicTimeList.value.reduce((sum, timeProp) => { const total = validDynamicTimeConfig.value
.filter((timeConfig) => !timeConfig.isTextRow) // 🌟 过滤文本列,不参与合计
.reduce((sum, timeConfig) => {
const timeProp = timeConfig.prop;
return sum + (Number(row[timeProp]) || 0); return sum + (Number(row[timeProp]) || 0);
}, 0); }, 0);
return Number(total.toFixed(2)); // 解决浮点精度问题 return Number(total.toFixed(2));
}; };
// 7. 核心工具方法:深拷贝+数据处理(逻辑不变) // 核心工具方法:深拷贝+数据处理
const handleTableData = (sourceIndicatorList, sourceTableData) => { const handleTableData = (sourceIndicatorList, sourceTableData) => {
if (!validConfig.value) return []; if (!validConfig.value) return [];
const newData = []; const newData = [];
...@@ -294,7 +328,6 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => { ...@@ -294,7 +328,6 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => {
const { name, isTextRow = false, noTotal = false } = item; const { name, isTextRow = false, noTotal = false } = item;
const level = item?.level || 0; const level = item?.level || 0;
const serialNumber = item?.serialNumber || index + 1; const serialNumber = item?.serialNumber || index + 1;
// 深拷贝源数据行
const originRow = const originRow =
sourceTableData.find((row) => row.indicatorName === name) || {}; sourceTableData.find((row) => row.indicatorName === name) || {};
const rowData = JSON.parse( const rowData = JSON.parse(
...@@ -308,16 +341,14 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => { ...@@ -308,16 +341,14 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => {
...originRow, ...originRow,
}), }),
); );
// 初始化时间字段
initRowTimeField(rowData); initRowTimeField(rowData);
// 计算合计
rowData.total = calculateRowTotal(rowData); rowData.total = calculateRowTotal(rowData);
newData.push(rowData); newData.push(rowData);
}); });
return newData; return newData;
}; };
// 8. 工具方法:数据变化后统一发射(逻辑不变) // 数据变化后统一发射
const emitDataChange = (newInnerData) => { const emitDataChange = (newInnerData) => {
if (props.isPreview) return; if (props.isPreview) return;
const emitData = JSON.parse(JSON.stringify(newInnerData)); const emitData = JSON.parse(JSON.stringify(newInnerData));
...@@ -329,7 +360,7 @@ const emitDataChange = (newInnerData) => { ...@@ -329,7 +360,7 @@ const emitDataChange = (newInnerData) => {
emit("handleTableChange", newModelValue); emit("handleTableChange", newModelValue);
}; };
// 9. 监听Props变化:同步到内部数据(逻辑不变) // 监听Props变化
watch( watch(
() => props.modelValue, () => props.modelValue,
async (newVal) => { async (newVal) => {
...@@ -344,20 +375,20 @@ watch( ...@@ -344,20 +375,20 @@ watch(
{ deep: true, immediate: true }, { deep: true, immediate: true },
); );
// 10. 数字行输入回调(逻辑不变) // 数字行输入回调
const handleFinancialChange = (currentRow) => { const handleFinancialChange = (currentRow) => {
if (props.isPreview || !currentRow || currentRow.noTotal) return; if (props.isPreview || !currentRow || currentRow.noTotal) return;
currentRow.total = calculateRowTotal(currentRow); currentRow.total = calculateRowTotal(currentRow);
emitDataChange(tableDataRef.value); emitDataChange(tableDataRef.value);
}; };
// 11. 文本行输入回调(逻辑不变) // 文本行输入回调
const handleTextInput = (currentRow) => { const handleTextInput = (currentRow) => {
if (props.isPreview || !currentRow) return; if (props.isPreview || !currentRow) return;
emitDataChange(tableDataRef.value); emitDataChange(tableDataRef.value);
}; };
// 12. 表格单元格样式(保留原逻辑) // 表格单元格样式
const tableCellStyle = ({ row }) => { const tableCellStyle = ({ row }) => {
if (row?.isTotal) { if (row?.isTotal) {
return { background: "#f5f7fa", fontWeight: "bold", textAlign: "right" }; return { background: "#f5f7fa", fontWeight: "bold", textAlign: "right" };
...@@ -367,14 +398,24 @@ const tableCellStyle = ({ row }) => { ...@@ -367,14 +398,24 @@ const tableCellStyle = ({ row }) => {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
// 外层容器:适配滚动
.mixed-table-wrap { .mixed-table-wrap {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
overflow-x: auto; overflow-x: auto;
} }
// 数字输入框样式 // 总标题样式
.table-main-title {
font-size: 16px;
font-weight: 600;
color: #1f2937;
border-bottom: 1px solid #ebeef5;
height: 48px;
line-height: 48px;
background: #f5f7fa;
text-align: center;
}
:deep(.el-input-number) { :deep(.el-input-number) {
width: 100%; width: 100%;
} }
...@@ -384,14 +425,12 @@ const tableCellStyle = ({ row }) => { ...@@ -384,14 +425,12 @@ const tableCellStyle = ({ row }) => {
width: 100% !important; width: 100% !important;
} }
// 文本输入框样式
:deep(.el-input__textarea) { :deep(.el-input__textarea) {
resize: none; resize: none;
text-align: left !important; text-align: left !important;
min-height: 40px !important; min-height: 40px !important;
} }
// 表格列头样式
:deep(.el-table__header-cell) { :deep(.el-table__header-cell) {
text-align: right !important; text-align: right !important;
&.el-table__header-cell--align-center { &.el-table__header-cell--align-center {
...@@ -399,14 +438,12 @@ const tableCellStyle = ({ row }) => { ...@@ -399,14 +438,12 @@ const tableCellStyle = ({ row }) => {
} }
} }
// 表格单元格
:deep(.el-table__cell) { :deep(.el-table__cell) {
padding: 4px 8px !important; padding: 4px 8px !important;
height: 48px !important; height: 48px !important;
vertical-align: middle !important; vertical-align: middle !important;
} }
// 表格行高
:deep(.el-table__row) { :deep(.el-table__row) {
height: 48px !important; height: 48px !important;
} }
......
...@@ -315,8 +315,9 @@ ...@@ -315,8 +315,9 @@
} }
.add-project-content .el-collapse-item__header { .add-project-content .el-collapse-item__header {
background-color: #f5f7fa; background-color: #f5f7fa;
height: 48px !important; padding: 0 24px;
padding: 16px;
margin: 0; margin: 0;
margin-bottom: 24px; font-size: 14px;
margin-bottom: 16px;
border-radius: 4px;
} }
...@@ -343,10 +343,11 @@ ...@@ -343,10 +343,11 @@
} }
.el-collapse-item__header { .el-collapse-item__header {
background-color: #f5f7fa; background-color: #f5f7fa;
height: 48px !important; padding: 0 24px;
padding: 16px;
margin: 0; margin: 0;
margin-bottom: 24px; font-size: 14px;
margin-bottom: 16px;
border-radius: 4px;
} }
} }
// ==========================设置定制化样式 end ========================== // ==========================设置定制化样式 end ==========================
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<el-collapse v-model="activeCollapse"> <el-collapse v-model="activeCollapse">
<el-collapse-item title="项目基本信息" name="项目基本信息"> <el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目名称" required> <el-form-item label="项目名称" required>
<el-select <el-select
v-model="formData.projectId" v-model="formData.projectId"
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="所属行业"> <el-form-item label="所属行业">
<CommonSelector <CommonSelector
v-model="formData.sshy" v-model="formData.sshy"
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目公司名称"> <el-form-item label="项目公司名称">
<el-input <el-input
v-model="formData.xmgsmc" v-model="formData.xmgsmc"
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="填报单位名称"> <el-form-item label="填报单位名称">
<el-input <el-input
v-model="formData.sbdw" v-model="formData.sbdw"
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="所属二级企业"> <el-form-item label="所属二级企业">
<el-input <el-input
v-model="formData.ssejqy" v-model="formData.ssejqy"
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目阶段"> <el-form-item label="项目阶段">
<CommonSelector <CommonSelector
v-model="formData.xmjd" v-model="formData.xmjd"
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目类别"> <el-form-item label="项目类别">
<CommonSelector <CommonSelector
v-model="formData.xmlx" v-model="formData.xmlx"
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
></CommonSelector> ></CommonSelector>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="投资模式分类"> <el-form-item label="投资模式分类">
<CommonSelector <CommonSelector
v-model="formData.tzms" v-model="formData.tzms"
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="投资回收方式"> <el-form-item label="投资回收方式">
<CommonSelector <CommonSelector
v-model="formData.tzhsfs" v-model="formData.tzhsfs"
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="下年项目阶段"> <el-form-item label="下年项目阶段">
<CommonSelector <CommonSelector
v-model="formData.xnxmjd" v-model="formData.xnxmjd"
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="财务报表类型"> <el-form-item label="财务报表类型">
<CommonSelector <CommonSelector
v-model="formData.cwbblx" v-model="formData.cwbblx"
...@@ -125,7 +125,8 @@ ...@@ -125,7 +125,8 @@
><el-row gutter="20"> ><el-row gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目投资总额(决策值)(万元)"> <el-form-item label="项目投资总额(决策值)(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.tzzejc" v-model="formData.tzzejc"
placeholder="请输入项目投资总额(决策值)(万元)" placeholder="请输入项目投资总额(决策值)(万元)"
/> />
...@@ -133,7 +134,8 @@ ...@@ -133,7 +134,8 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="我方资本金出资额-决策值(万元)"> <el-form-item label="我方资本金出资额-决策值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.wfzbjczejc" v-model="formData.wfzbjczejc"
placeholder="请输入我方资本金出资额-决策值(万元)" placeholder="请输入我方资本金出资额-决策值(万元)"
/> />
...@@ -141,7 +143,8 @@ ...@@ -141,7 +143,8 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="投资总额-实际值(万元)"> <el-form-item label="投资总额-实际值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.tzzesj" v-model="formData.tzzesj"
placeholder="请输入投资总额-实际值(万元)" placeholder="请输入投资总额-实际值(万元)"
/> />
...@@ -149,7 +152,8 @@ ...@@ -149,7 +152,8 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="我方资本金出资额--实际值(万元)"> <el-form-item label="我方资本金出资额--实际值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.wfzbjczesj" v-model="formData.wfzbjczesj"
placeholder="请输入我方资本金出资额--实际值(万元)" placeholder="请输入我方资本金出资额--实际值(万元)"
/> />
...@@ -157,7 +161,8 @@ ...@@ -157,7 +161,8 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="投资总额-计划值(万元)"> <el-form-item label="投资总额-计划值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.tzzejhz" v-model="formData.tzzejhz"
placeholder="请输入投资总额-计划值(万元)" placeholder="请输入投资总额-计划值(万元)"
/> />
...@@ -174,40 +179,40 @@ ...@@ -174,40 +179,40 @@
<!-- 第一行:决策目标值相关数字项 --> <!-- 第一行:决策目标值相关数字项 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="本年完成 投资回收决策目标值(万元)"> <el-form-item label="本年完成 投资回收决策目标值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.bnwc" v-model="formData.bnwc"
type="number" type="number"
precision="8"
placeholder="请输入本年完成 投资回收决策目标值(万元)" placeholder="请输入本年完成 投资回收决策目标值(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="截止本年累计(决策目标值)"> <el-form-item label="截止本年累计(决策目标值)">
<el-input <el-input-number
precision="2"
v-model="formData.jzbnlj" v-model="formData.jzbnlj"
type="number" type="number"
precision="8"
placeholder="请输入截止本年累计(决策目标值)" placeholder="请输入截止本年累计(决策目标值)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="下一年完成数(万元)"> <el-form-item label="下一年完成数(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.xynwcs" v-model="formData.xynwcs"
type="number" type="number"
precision="8"
placeholder="请输入下一年完成数(万元)" placeholder="请输入下一年完成数(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="本年计划(万元)"> <el-form-item label="本年计划(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.bnjh" v-model="formData.bnjh"
type="number" type="number"
precision="8"
placeholder="请输入本年计划(万元)" placeholder="请输入本年计划(万元)"
/> />
</el-form-item> </el-form-item>
...@@ -216,40 +221,40 @@ ...@@ -216,40 +221,40 @@
<!-- 第二行:实际值相关数字项 --> <!-- 第二行:实际值相关数字项 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="本年完成--投资回收实际值(万元)"> <el-form-item label="本年完成--投资回收实际值(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.bnwcsjz" v-model="formData.bnwcsjz"
type="number" type="number"
precision="8"
placeholder="请输入本年完成--投资回收实际值(万元)" placeholder="请输入本年完成--投资回收实际值(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="截止本年累计--投资回收实际值"> <el-form-item label="截止本年累计--投资回收实际值">
<el-input <el-input-number
precision="2"
v-model="formData.jzbnljsjz" v-model="formData.jzbnljsjz"
type="number" type="number"
precision="8"
placeholder="请输入截止本年累计--投资回收实际值" placeholder="请输入截止本年累计--投资回收实际值"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="累计欠收(万元)"> <el-form-item label="累计欠收(万元)">
<el-input <el-input-number
precision="2"
v-model="formData.ljqs" v-model="formData.ljqs"
type="number" type="number"
precision="8"
placeholder="请输入累计欠收(万元)" placeholder="请输入累计欠收(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="完成率(%)"> <el-form-item label="完成率(%)">
<el-input <el-input-number
precision="2"
v-model="formData.wcl" v-model="formData.wcl"
type="number" type="number"
precision="2"
placeholder="请输入完成率(%)" placeholder="请输入完成率(%)"
/> />
</el-form-item> </el-form-item>
...@@ -328,22 +333,18 @@ ...@@ -328,22 +333,18 @@
:is-preview="isPreview" :is-preview="isPreview"
/> />
</el-collapse-item> </el-collapse-item>
<el-collapse-item
title="投资回收(决策)"
name="投资回收(决策)"
>
<FinancialTable
v-model="formData.tzhsjc"
:is-preview="isPreview"
/>
</el-collapse-item>
<el-collapse-item <el-collapse-item
title="投资回收(计划)" title="投资回收(计划)"
name="投资回收(计划)" name="投资回收(计划)"
> >
<FinancialTable <FinancialTable
v-model="formData.tzhsjh" v-model="formData.tzhsjh"
:showSerialColumn="false"
:is-preview="isPreview" :is-preview="isPreview"
table-title="2026年投资回收计划明细"
:showNameColumn="false"
:showTotalColumn="false"
/> />
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
...@@ -435,79 +436,87 @@ const activeCollapse = ref([ ...@@ -435,79 +436,87 @@ const activeCollapse = ref([
let initTableData = () => { let initTableData = () => {
Object.assign(formData, { Object.assign(formData, {
jzymljys: { jzymljys: {
// 指标列表
indicatorList: [ indicatorList: [
{ name: "政府付费", isTextRow: false, noTotal: false }, { name: "一月", isTextRow: false, noTotal: false },
{ name: "政府补贴", isTextRow: false, noTotal: false }, { name: "二月", isTextRow: false, noTotal: false },
{ name: "使用者付费", isTextRow: false, noTotal: false }, { name: "三月", isTextRow: false, noTotal: false },
{ name: "使用者欠付", isTextRow: false, noTotal: false }, { name: "四月", isTextRow: false, noTotal: false },
{ name: "补贴收入", isTextRow: false, noTotal: false }, { name: "五月", isTextRow: false, noTotal: false },
{ { name: "六月", isTextRow: false, noTotal: false },
name: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)", { name: "七月", isTextRow: false, noTotal: false },
isTextRow: false, { name: "八月", isTextRow: false, noTotal: false },
noTotal: false, { name: "九月", isTextRow: false, noTotal: false },
}, { name: "十月", isTextRow: false, noTotal: false },
{ name: "资产盘活", isTextRow: false, noTotal: false }, { name: "十一月", isTextRow: false, noTotal: false },
{ name: "股权分红", isTextRow: false, noTotal: false }, { name: "十二月", isTextRow: false, noTotal: false },
{ name: "其他", isTextRow: false, noTotal: false },
// 关键:标记为文本行+不需要合计
{ name: "目标(决策)与计划差异说明", isTextRow: true, noTotal: true },
], ],
// 时间列表(月度)
dynamicTimeList: [ dynamicTimeList: [
"一月", { label: "政府付费", prop: "a1" },
"二月", { label: "政府补贴", prop: "a2" },
"三月", { label: "使用者付费", prop: "a3" },
"四月", { label: "使用者欠付", prop: "a4" },
"五月", { label: "补贴收入", prop: "a5" },
"六月", {
"七月", label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
"八月", prop: "a6",
"九月", },
"十月", { label: "资产盘活", prop: "a7" },
"十一月", { label: "股权分红", prop: "a8" },
"十二月", { label: "其他", prop: "a9" },
{
label: "目标(决策)与计划差异说明",
prop: "a10",
isTextRow: true,
},
], ],
// 表格数据(子组件会自动初始化,父组件可传初始值)
// 表格数据(子组件自动初始化,无需手动赋值)
tableData: [], tableData: [],
}, },
jzymljsh: { jzymljsh: {
// 指标列表
indicatorList: [ indicatorList: [
{ name: "政府付费", isTextRow: false, noTotal: false }, { name: "一月", isTextRow: false, noTotal: false },
{ name: "政府补贴", isTextRow: false, noTotal: false }, { name: "二月", isTextRow: false, noTotal: false },
{ name: "使用者付费", isTextRow: false, noTotal: false }, { name: "三月", isTextRow: false, noTotal: false },
{ name: "使用者欠付", isTextRow: false, noTotal: false }, { name: "四月", isTextRow: false, noTotal: false },
{ name: "补贴收入", isTextRow: false, noTotal: false }, { name: "五月", isTextRow: false, noTotal: false },
{ name: "六月", isTextRow: false, noTotal: false },
{ name: "七月", isTextRow: false, noTotal: false },
{ name: "八月", isTextRow: false, noTotal: false },
{ name: "九月", isTextRow: false, noTotal: false },
{ name: "十月", isTextRow: false, noTotal: false },
{ name: "十一月", isTextRow: false, noTotal: false },
{ {
name: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)", name: "十二月",
isTextRow: false, isTextRow: false,
noTotal: false, noTotal: false,
}, },
{ name: "资产盘活", isTextRow: false, noTotal: false },
{ name: "股权分红", isTextRow: false, noTotal: false },
{ name: "其他", isTextRow: false, noTotal: false },
// 关键:标记为文本行+不需要合计
{ name: "目标(决策)与计划差异说明", isTextRow: true, noTotal: true },
], ],
// 时间列表(月度)
dynamicTimeList: [ dynamicTimeList: [
"一月", { label: "政府付费", prop: "a1" },
"二月", { label: "政府补贴", prop: "a2" },
"三月", { label: "使用者付费", prop: "a3" },
"四月", { label: "使用者欠付", prop: "a4" },
"五月", { label: "补贴收入", prop: "a5" },
"六月", {
"七月", label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
"八月", prop: "a6",
"九月", },
"十月", { label: "资产盘活", prop: "a7" },
"十一月", { label: "股权分红", prop: "a8" },
"十二月", { label: "其他", prop: "a9" },
{
label: "目标(决策)与计划差异说明",
prop: "a10",
isTextRow: true,
},
], ],
// 表格数据(子组件会自动初始化,父组件可传初始值)
// 表格数据(子组件自动初始化,无需手动赋值)
tableData: [], tableData: [],
}, },
tzhsjc: { tzhsjc: {
...@@ -543,30 +552,123 @@ let initTableData = () => { ...@@ -543,30 +552,123 @@ let initTableData = () => {
tzhsjh: { tzhsjh: {
// 指标列表 // 指标列表
indicatorList: [ indicatorList: [
{ name: "建设期政府付费", isTextRow: false, noTotal: false },
{ name: "运营期政府付费", isTextRow: false, noTotal: false },
{ name: "投资价差收取", isTextRow: false, noTotal: false },
{ name: "参股项目投资回收", isTextRow: false, noTotal: false },
{ name: "代建工程款回收", isTextRow: false, noTotal: false },
{ name: "政府付费", isTextRow: false, noTotal: false },
{ name: "政府补贴", isTextRow: false, noTotal: false },
{ name: "使用者付费", isTextRow: false, noTotal: false },
{ name: "使用者欠付", isTextRow: false, noTotal: false },
{ name: "补贴收入", isTextRow: false, noTotal: false },
{ {
name: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)", name: " ",
isTextRow: false,
noTotal: false,
}, },
{ name: "资产盘活", isTextRow: false, noTotal: false },
{ name: "股权分红", isTextRow: false, noTotal: false },
{ name: "其他", isTextRow: false, noTotal: false },
// 关键:标记为文本行+不需要合计
{ name: "目标(决策)与计划差异说明", isTextRow: true, noTotal: true },
], ],
// 时间列表(月度) // 时间列表(月度)
dynamicTimeList: ["一季度", "二季度", "三季度", "四季度"], dynamicTimeList: [
// 第一组:2026年
{ label: "合计", prop: "a1", headerGroup: "2026年" },
{ label: "政府付费", prop: "a2", headerGroup: "2026年" },
{ label: "政府补助", prop: "a3", headerGroup: "2026年" },
{ label: "使用者付费", prop: "a4", headerGroup: "2026年" },
{ label: "使用者欠付", prop: "a5", headerGroup: "2026年" },
{ label: "补贴收入", prop: "a6", headerGroup: "2026年" },
{
label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
prop: "a7",
headerGroup: "2026年",
},
{ label: "资产盘活", prop: "a8", headerGroup: "2026年" },
{ label: "股权分红", prop: "a9", headerGroup: "2026年" },
{ label: "其他", prop: "a10", headerGroup: "2026年" },
{
label: "目标(决策)与计划差异说明",
isTextRow: true,
prop: "a11",
headerGroup: "2026年",
},
// 第三组:2026年(一季度)
{ label: "合计", prop: "a23", headerGroup: "2026年(一季度)" },
{ label: "政府付费", prop: "a24", headerGroup: "2026年(一季度)" },
{ label: "政府补助", prop: "a25", headerGroup: "2026年(一季度)" },
{ label: "使用者付费", prop: "a26", headerGroup: "2026年(一季度)" },
{ label: "使用者欠付", prop: "a27", headerGroup: "2026年(一季度)" },
{ label: "补贴收入", prop: "a28", headerGroup: "2026年(一季度)" },
{
label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
prop: "a29",
headerGroup: "2026年(一季度)",
},
{ label: "资产盘活", prop: "a30", headerGroup: "2026年(一季度)" },
{ label: "股权分红", prop: "a31", headerGroup: "2026年(一季度)" },
{ label: "其他", prop: "a32", headerGroup: "2026年(一季度)" },
{
label: "目标(决策)与计划差异说明",
isTextRow: true,
prop: "a33",
headerGroup: "2026年(一季度)",
},
// 第四组:2026年(二季度)
{ label: "合计", prop: "a34", headerGroup: "2026年(二季度)" },
{ label: "政府付费", prop: "a35", headerGroup: "2026年(二季度)" },
{ label: "政府补助", prop: "a36", headerGroup: "2026年(二季度)" },
{ label: "使用者付费", prop: "a37", headerGroup: "2026年(二季度)" },
{ label: "使用者欠付", prop: "a38", headerGroup: "2026年(二季度)" },
{ label: "补贴收入", prop: "a39", headerGroup: "2026年(二季度)" },
{
label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
prop: "a40",
headerGroup: "2026年(二季度)",
},
{ label: "资产盘活", prop: "a41", headerGroup: "2026年(二季度)" },
{ label: "股权分红", prop: "a42", headerGroup: "2026年(二季度)" },
{ label: "其他", prop: "a43", headerGroup: "2026年(二季度)" },
{
label: "目标(决策)与计划差异说明",
isTextRow: true,
prop: "a44",
headerGroup: "2026年(二季度)",
},
// 第五组:2026年(三季度)
{ label: "合计", prop: "a45", headerGroup: "2026年(三季度)" },
{ label: "政府付费", prop: "a46", headerGroup: "2026年(三季度)" },
{ label: "政府补助", prop: "a47", headerGroup: "2026年(三季度)" },
{ label: "使用者付费", prop: "a48", headerGroup: "2026年(三季度)" },
{ label: "使用者欠付", prop: "a49", headerGroup: "2026年(三季度)" },
{ label: "补贴收入", prop: "a50", headerGroup: "2026年(三季度)" },
{
label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
prop: "a51",
headerGroup: "2026年(三季度)",
},
{ label: "资产盘活", prop: "a52", headerGroup: "2026年(三季度)" },
{ label: "股权分红", prop: "a53", headerGroup: "2026年(三季度)" },
{ label: "其他", prop: "a54", headerGroup: "2026年(三季度)" },
{
label: "目标(决策)与计划差异说明",
isTextRow: true,
prop: "a55",
headerGroup: "2026年(三季度)",
},
// 第六组:2026年(四季度)
{ label: "合计", prop: "a56", headerGroup: "2026年(四季度)" },
{ label: "政府付费", prop: "a57", headerGroup: "2026年(四季度)" },
{ label: "政府补助", prop: "a58", headerGroup: "2026年(四季度)" },
{ label: "使用者付费", prop: "a59", headerGroup: "2026年(四季度)" },
{ label: "使用者欠付", prop: "a60", headerGroup: "2026年(四季度)" },
{ label: "补贴收入", prop: "a61", headerGroup: "2026年(四季度)" },
{
label: "销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)",
prop: "a62",
headerGroup: "2026年(四季度)",
},
{ label: "资产盘活", prop: "a63", headerGroup: "2026年(四季度)" },
{ label: "股权分红", prop: "a64", headerGroup: "2026年(四季度)" },
{ label: "其他", prop: "a65", headerGroup: "2026年(四季度)" },
{
label: "目标(决策)与计划差异说明",
isTextRow: true,
prop: "a66",
headerGroup: "2026年(四季度)",
},
],
// 表格数据(子组件会自动初始化,父组件可传初始值) // 表格数据(子组件会自动初始化,父组件可传初始值)
tableData: [], tableData: [],
}, },
......
...@@ -527,7 +527,7 @@ ...@@ -527,7 +527,7 @@
<el-table-column <el-table-column
prop="indicatorName" prop="indicatorName"
label="指标项" label="指标项"
min-width="280" min-width="300"
> >
<template #default="{ row }"> <template #default="{ row }">
<div :style="{ textIndent: `${row.level * 20}px` }"> <div :style="{ textIndent: `${row.level * 20}px` }">
...@@ -606,9 +606,9 @@ ...@@ -606,9 +606,9 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="项目融资落地时间或预计落地时间"> <el-form-item label="项目预计起始时间">
<el-date-picker <el-date-picker
v-model="formData.xmRzLdSjHyyjLdSj" v-model="formData.xmkgsjyj"
type="date" type="date"
placeholder="请选择时间" placeholder="请选择时间"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
...@@ -616,9 +616,9 @@ ...@@ -616,9 +616,9 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="项目融资落地时间或预计落地时间"> <el-form-item label="项目预计完成时间">
<el-date-picker <el-date-picker
v-model="formData.xmRzLdSjHyyjLdSj" v-model="formData.xmjgsjyj"
type="date" type="date"
placeholder="请选择时间" placeholder="请选择时间"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
...@@ -1326,7 +1326,7 @@ const initAnnualPlanTable = () => { ...@@ -1326,7 +1326,7 @@ const initAnnualPlanTable = () => {
if (rcCgqyglId.value) return; if (rcCgqyglId.value) return;
if (annualDynamicTimeList.value.length === 0) return; if (annualDynamicTimeList.value.length === 0) return;
// 生成17行带唯一id的独立数据(保留基础id,子组件会保留所有字段) // 生成17行带唯一id的独立数据(保留基础id,子组件会保留所有字段)
const tableData = Array.from({ length: 17 }, (_, index) => ({ const tableData = Array.from({ length: 24 }, (_, index) => ({
id: index + 1, // 子组件唯一标识,必须保留 id: index + 1, // 子组件唯一标识,必须保留
total: 0, total: 0,
...annualDynamicTimeList.value.reduce( ...annualDynamicTimeList.value.reduce(
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
<tbody> <tbody>
<!-- 计划资金来源(全口径)模块 --> <!-- 计划资金来源(全口径)模块 -->
<tr> <tr>
<td rowspan="18" class="first-col">年度投资计划</td> <!-- 调整rowspan:从18改为26(原15行 + 新增11行) -->
<td rowspan="24" class="first-col">年度投资计划</td>
<!-- 调整rowspan:从16改为26 -->
<td rowspan="16" class="second-col">计划投资完成及资金来源</td> <td rowspan="16" class="second-col">计划投资完成及资金来源</td>
<td rowspan="9" class="third-col">计划资金来源(全口径)</td> <td rowspan="9" class="third-col">计划资金来源(全口径)</td>
<td style="height: 48px"></td> <td style="height: 48px"></td>
...@@ -52,7 +54,7 @@ ...@@ -52,7 +54,7 @@
</tr> </tr>
<!-- 资金来源(新口径)模块 --> <!-- 资金来源(新口径)模块 -->
<tr> <tr>
<td rowspan="6" class="third-col">资金来源(新口径)</td> <td rowspan="7" class="third-col">资金来源(新口径)</td>
<td>合计</td> <td>合计</td>
<td></td> <td></td>
<td>{{ getRowTotal(9) }}万元</td> <td>{{ getRowTotal(9) }}万元</td>
...@@ -83,23 +85,58 @@ ...@@ -83,23 +85,58 @@
<tr> <tr>
<td>其他</td> <td>其他</td>
<td></td> <td></td>
<td></td>
<td>{{ getRowTotal(15) }}万元</td> <td>{{ getRowTotal(15) }}万元</td>
</tr> </tr>
<!-- 合计与政府付费模块 -->
<!-- 新增:计划投资回款及相关模块 -->
<tr> <tr>
<td>合计</td> <td rowspan="5" class="fourth-col">计划投资回款</td>
<td colspan="3">合计</td>
<td>{{ getRowTotal(16) }}万元</td>
</tr>
<tr>
<td colspan="3">政府付费*</td>
<td>{{ getRowTotal(17) }}万元</td>
</tr>
<tr>
<td colspan="3">使用者付费(销售回款)*</td>
<td>{{ getRowTotal(18) }}万元</td>
</tr>
<tr>
<td colspan="3">政府补助*</td>
<td>{{ getRowTotal(19) }}万元</td>
</tr>
<tr>
<td colspan="3">其他*</td>
<td>{{ getRowTotal(20) }}万元</td>
</tr>
<tr>
<td class="fourth-col">计划投资价差*</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td>{{ getRowTotal(16) }}万元</td> <td>{{ getRowTotal(21) }}万元</td>
</tr> </tr>
<tr> <tr>
<td>政府付费*</td> <td class="fourth-col">计划带动工程合同额*</td>
<td></td> <td></td>
<td></td> <td></td>
<td></td> <td></td>
<td>{{ getRowTotal(17) }}万元</td> <td>{{ getRowTotal(22) }}万元</td>
</tr>
<tr>
<td class="fourth-col">计划带动工程收益*</td>
<td></td>
<td></td>
<td></td>
<td>{{ getRowTotal(23) }}万元</td>
</tr>
<tr>
<td class="first-col">年度投资预算</td>
<td class="second-col">本年度投资预算</td>
<td>资本金</td>
<td colspan="2">我方(仅指本单位)</td>
<td>{{ getRowTotal(24) }}万元</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
...@@ -322,6 +359,11 @@ onMounted(() => { ...@@ -322,6 +359,11 @@ onMounted(() => {
font-weight: 500; font-weight: 500;
background-color: #f5f7fa; background-color: #f5f7fa;
} }
// 新增:第四列样式(计划投资回款等模块)
.fourth-col {
background-color: #f5f7fa;
font-weight: 500;
}
// 样式优化:移除不必要的隐藏,确保元素可见 // 样式优化:移除不必要的隐藏,确保元素可见
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
......
...@@ -8,13 +8,14 @@ ...@@ -8,13 +8,14 @@
<div class="tab-content"> <div class="tab-content">
<el-form :model="formData" label-width="150" :disabled="isPreview"> <el-form :model="formData" label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse"> <el-collapse v-model="activeCollapse">
<!-- 基本信息 -->
<el-collapse-item title="基本信息" name="基本信息"> <el-collapse-item title="基本信息" name="基本信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目信息" required> <el-form-item label="参股公司名称" required>
<el-select <el-select
v-model="formData.projectId" v-model="formData.projectId"
placeholder="请选择项目信息" placeholder="请选择参股公司名称"
no-data-text="暂无数据" no-data-text="暂无数据"
@change="changeProject" @change="changeProject"
> >
...@@ -27,449 +28,1463 @@ ...@@ -27,449 +28,1463 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="项目所处阶段"> <el-form-item label="境内/外">
<el-select
v-model="formData.jnw"
placeholder="请选择境内/外"
>
<el-option label="境内" value="境内"></el-option>
<el-option label="境外" value="境外"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="省(境)内/洲(境)外">
<el-input
v-model="formData.sqnzw"
placeholder="请输入省(境)内/洲(境)外"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目名称">
<el-input
v-model="formData.xmmc"
placeholder="请输入项目名称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="项目编号">
<el-input
v-model="formData.xmbh"
placeholder="请输入项目编号"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="区县(境)内/国家(境)外">
<el-input
v-model="formData.qxnzwgw"
placeholder="请输入区县(境)内/国家(境)外"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="申报单位">
<el-input
v-model="formData.sbdw"
placeholder="请输入申报单位"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属二级单位">
<el-input
v-model="formData.ssejdw"
placeholder="请输入所属二级单位"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="是否境外企业">
<el-select
v-model="formData.sfjwqy"
placeholder="请选择是否境外企业"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="形成参股原因">
<el-select <el-select
v-model="formData.xmscjd" v-model="formData.xccgyy"
placeholder="请选择项目所处阶段" placeholder="请选择形成参股原因"
> >
<el-option <el-option
v-for="item in options?.xmjd" label="合资设立"
:key="item.key" value="合资设立"
:label="item.name" ></el-option>
:value="item.key" <el-option
label="股权受让"
value="股权受让"
></el-option>
<el-option
label="增资扩股"
value="增资扩股"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="其他参股原因">
<el-input
v-model="formData.qtcgyy"
placeholder="请输入其他参股原因"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="参股分类">
<el-select
v-model="formData.cgfl"
placeholder="请选择参股分类"
>
<el-option
label="绝对控股"
value="绝对控股"
></el-option> ></el-option>
<el-option
label="相对控股"
value="相对控股"
></el-option>
<el-option label="参股" value="参股"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="6">
<el-form-item label="全称"> <el-form-item label="项目状态">
<el-input <el-input
v-model="formData.qc" v-model="formData.xmzt"
placeholder="请输入全称" placeholder="请输入项目状态"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="简称"> <el-form-item label="是否集团主业">
<el-select
v-model="formData.sfjtzy"
placeholder="请选择是否集团主业"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否属主业关联产业">
<el-select
v-model="formData.sfzyglcy"
placeholder="请选择是否属主业关联产业"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否属于战略性持有或有培育期">
<el-select
v-model="formData.sfgzxccyypyq"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="所属行业">
<el-input <el-input
v-model="formData.jc" v-model="formData.sshy"
placeholder="请输入简称" placeholder="请输入所属行业"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="是否为民营企业">
<el-select
v-model="formData.sfwmqy"
placeholder="请选择是否为民营企业"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否上市公司">
<el-select
v-model="formData.sfssgs"
placeholder="请选择是否上市公司"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否为问题整改项目">
<el-select
v-model="formData.sfwtzgxm"
placeholder="请选择是否为问题整改项目"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="6">
<el-form-item label="内部投资管理主体"> <el-form-item label="是否民营企业实际运营">
<el-select
v-model="formData.sfmqysjyy"
placeholder="请选择是否民营企业实际运营"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否整改完成">
<el-select
v-model="formData.sfzgwc"
placeholder="请选择是否整改完成"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否落号">
<el-select
v-model="formData.sflh"
placeholder="请选择是否落号"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="决策批复时间">
<el-date-picker
v-model="formData.jcpfsj"
type="date"
placeholder="请选择决策批复时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="参股形成时间">
<el-date-picker
v-model="formData.cgxcjsj"
type="date"
placeholder="请选择参股形成时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="计划退出年份">
<el-input <el-input
v-model="formData.nbtzglzt" v-model="formData.jhtcnf"
placeholder="请输入内部投资管理主体" placeholder="请输入计划退出年份"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item label="股权结构"> <el-form-item label="风险金额(万元)">
<el-input-number
precision="2"
v-model="formData.fxje"
placeholder="请输入风险金额(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否我方控股非并表企业">
<el-select
v-model="formData.sfwfkgfbbqy"
placeholder="请选择是否我方控股非并表企业"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="主营业务">
<el-input <el-input
v-model="formData.gqjg" v-model="formData.zyyw"
placeholder="请输入股权结构" type="textarea"
:rows="2"
placeholder="请输入主营业务"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="出资情况" name="出资情况"> <!-- 规模指标及额度 -->
<el-collapse-item title="规模指标及额度" name="规模指标及额度">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="6">
<el-form-item <el-form-item label="十二大业务板块">
label-width="210" <el-select
label="项目资本金总额(亿元)" v-model="formData.sehybk"
placeholder="请选择十二大业务板块"
> >
<el-option
label="E综合交通"
value="E综合交通"
></el-option>
<el-option label="F城建" value="F城建"></el-option>
<el-option label="G能源" value="G能源"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="指标名称">
<el-input <el-input
type="number" v-model="formData.zbmc"
v-model.number="formData.xmzbjze" placeholder="请输入指标名称"
placeholder="请输入项目资本金总额(亿元)"
step="0.01"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="6">
<el-form-item <el-form-item label="数量">
label-width="210" <el-input-number
label="公司资本金应出资总额(亿元)" precision="2"
> v-model="formData.sl"
placeholder="请输入数量"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="单位">
<el-input <el-input
type="number" v-model="formData.dwdw"
v-model.number="formData.gszbjyczze" placeholder="请输入单位"
placeholder="请输入公司资本金应出资总额(亿元)"
step="0.01"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="批复文件">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="营业执照">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合作协议">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 股东信息 -->
<el-collapse-item title="股东信息" name="股东信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item label="是否无实际控制人">
label-width="210" <el-select
label="公司当前应出资额(亿元)" v-model="formData.sfwjskzr"
placeholder="请选择是否无实际控制人"
> >
<el-input <el-option label="是" value="是"></el-option>
type="number" <el-option label="否" value="否"></el-option>
v-model.number="formData.gsdqycze" </el-select>
placeholder="请输入公司当前应出资额(亿元)"
step="0.01"
/>
</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="是否平股">
label-width="210" <el-select
label="公司当前已出资额(亿元)" v-model="formData.sfpg"
placeholder="请选择是否平股"
> >
<el-input <el-option label="是" value="是"></el-option>
type="number" <el-option label="否" value="否"></el-option>
v-model.number="formData.gsdqyjcze" </el-select>
placeholder="请输入公司当前已出资额(亿元)"
step="0.01"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item <el-form-item label="股东名称">
label-width="210"
label="公司当前应出未出金额(亿元)"
>
<el-input <el-input
type="number" v-model="formData.gdmc"
v-model.number="formData.gsdqycwcje" placeholder="请输入股东名称"
placeholder="请输入公司当前应出未出金额(亿元)"
step="0.01"
/> />
</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="股比(%)">
label-width="210" <el-input-number
label="公司当前剩余出资额(亿元)" precision="2"
> v-model="formData.gbl"
<el-input placeholder="请输入股比(%)"
type="number"
v-model.number="formData.gsdqsycze"
placeholder="请输入公司当前剩余出资额(亿元)"
step="0.01"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="8">
<el-form-item label-width="210" label="超股比出资情况"> <el-form-item label="国有股东合计股比(%)">
<el-input-number
precision="2"
v-model="formData.gdgdhjgbl"
placeholder="请输入国有股东合计股比(%)"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新建参股合计(%)">
<el-input-number
precision="2"
v-model="formData.xjcghj"
placeholder="请输入新建参股合计(%)"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="一致行动人股比合计(%)">
<el-input-number
precision="2"
v-model="formData.yzxdrhjhj"
placeholder="请输入一致行动人股比合计(%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="一致行动人单位名称">
<el-input
v-model="formData.yzxdrdwmc"
placeholder="请输入一致行动人单位名称"
/>
</el-form-item>
</el-col>
</el-row>
<!-- 股东信息表格 -->
<div class="tab-handle">
<el-button type="primary" @click="addGdxx">新增</el-button>
<el-button type="primary">章程:上传</el-button>
</div>
<el-table
:data="gdxxList"
style="width: 100%"
empty-text="暂无数据"
border
show-summary
:summary-method="sumGdxxColumns"
>
<el-table-column type="index" width="60" label="序号" />
<el-table-column prop="gdmc" label="股东名称">
<template #default="scope">
<el-input <el-input
v-model="formData.cgbczqk" v-model="scope.row.gdmc"
placeholder="请输入超股比出资情况" placeholder="请输入股东名称"
/>
</template>
</el-table-column>
<el-table-column prop="gdxz" label="股东性质">
<template #default="scope">
<el-select
v-model="scope.row.gdxz"
placeholder="请选择股东性质"
>
<el-option
label="中央企业"
value="中央企业"
></el-option>
<el-option
label="地方国有企业"
value="地方国有企业"
></el-option>
<el-option label="其他" value="其他"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="gbl" label="股比(%)">
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.gbl"
placeholder="请输入股比(%)"
/> />
</template>
</el-table-column>
<el-table-column prop="sfkgdg" label="是否控股股东">
<template #default="scope">
<el-select
v-model="scope.row.sfkgdg"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="sfjtcydw" label="是否集团内成员单位">
<template #default="scope">
<el-select
v-model="scope.row.sfjtcydw"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="sfskdw" label="是否实控单位">
<template #default="scope">
<el-select
v-model="scope.row.sfskdw"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="sfyzxdr" label="是否一致行动人">
<template #default="scope">
<el-select
v-model="scope.row.sfyzxdr"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="deleteGdxx(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<!-- 企业工商注册资本金 -->
<el-collapse-item
title="企业工商注册资本金"
name="企业工商注册资本金"
>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="企业工商注册资本金(万元)">
<el-input-number
precision="2"
v-model="formData.qygszczij"
placeholder="请输入企业工商注册资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="我方参数比例(%)">
<el-input-number
precision="2"
v-model="formData.wfcgbl"
placeholder="请输入我方参数比例(%)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="我方认缴企业工商注册资本金(万元)">
<el-input-number
precision="2"
v-model="formData.wfrjqygszczij"
placeholder="请输入我方认缴企业工商注册资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="工商注册资本金我方实际已出资金额(万元)"
>
<el-input-number
precision="2"
v-model="formData.gszczijwfysjczje"
placeholder="请输入工商注册资本金我方实际已出资金额(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="企业工商注册资本金我方首次出资时间">
<el-date-picker
v-model="formData.qygszczijwfscczsj"
type="date"
placeholder="请选择企业工商注册资本金我方首次出资时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能建合计认缴工商注册资本金比例(%)">
<el-input-number
precision="2"
v-model="formData.njhjrjqygszczijbl"
placeholder="请输入能建合计认缴工商注册资本金比例(%)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能建合计认缴工商注册资本金(万元)">
<el-input-number
precision="2"
v-model="formData.njhjrjqygszczij"
placeholder="请输入能建合计认缴工商注册资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能建合计实缴工商注册资本金(万元)">
<el-input-number
precision="2"
v-model="formData.njhjsjqygszczij"
placeholder="请输入能建合计实缴工商注册资本金(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 项目资本金 -->
<el-collapse-item title="项目资本金" name="项目资本金">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="项目资本金(万元)">
<el-input-number
precision="2"
v-model="formData.xmzbj"
placeholder="请输入项目资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="我方认缴项目资本金比例(%)">
<el-input-number
precision="2"
v-model="formData.wfrjxmzbjbl"
placeholder="请输入我方认缴项目资本金比例(%)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="我方认缴项目资本金(万元)">
<el-input-number
precision="2"
v-model="formData.wfrjxmzbj"
placeholder="请输入我方认缴项目资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="我方实缴项目资本金(万元)">
<el-input-number
precision="2"
v-model="formData.wfsjxmzbj"
placeholder="请输入我方实缴项目资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目资本金能建合计持股比例(%)">
<el-input-number
precision="2"
v-model="formData.xmzbjnjhjcgbll"
placeholder="请输入项目资本金能建合计持股比例(%)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能建合计认缴项目资本金(万元)">
<el-input-number
precision="2"
v-model="formData.njhjrjxmzbj"
placeholder="请输入能建合计认缴项目资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能建合计实缴项目资本金(万元)">
<el-input-number
precision="2"
v-model="formData.njhjsjxmzbj"
placeholder="请输入能建合计实缴项目资本金(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出资文件">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 财务经营信息 -->
<el-collapse-item title="财务经营信息" name="财务经营信息">
<div class="tab-handle">
<el-button type="primary" @click="addCwxx">新增</el-button>
</div>
<el-table
:data="cwxxList"
style="width: 100%"
empty-text="暂无数据"
border
>
<el-table-column type="index" width="60" label="序号" />
<el-table-column prop="nd" label="年度" width="100">
<template #default="scope">
<el-input
v-model="scope.row.nd"
placeholder="请输入年度"
/>
</template>
</el-table-column>
<el-table-column
prop="zzc"
label="总资产(万元)"
width="140"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.zzc"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="jzc"
label="净资产(审计后)(万元)"
width="180"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.jzc"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="gsnjfznc"
label="归属能建方净资产(万元)"
width="180"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.gsnjfznc"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="yysr"
label="营业收入(万元)"
width="140"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.yysr"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="jlr"
label="净利润(万元)"
width="140"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.jlr"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="gsnjfndjdfh"
label="归属能建方年度决策分红(万元)"
width="220"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.gsnjfndjdfh"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="gdhjcdffhsj"
label="股东会决策分红时间"
width="160"
>
<template #default="scope">
<el-date-picker
v-model="scope.row.gdhjcdffhsj"
type="date"
placeholder="请选择"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column
prop="gsnjfndysdfh"
label="归属能建方年度已收到分红(万元)"
width="240"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.gsnjfndysdfh"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="sjsdfhsj"
label="实际收到分红时间"
width="160"
>
<template #default="scope">
<el-date-picker
v-model="scope.row.sjsdfhsj"
type="date"
placeholder="请选择"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column
prop="bndjtnzyjtzttzrb"
label="本年度与集团内投资主体关联交易收入占该被投资企业营业收入比例(%)"
width="360"
>
<template #default="scope">
<el-input-number
precision="2"
v-model="scope.row.bndjtnzyjtzttzrb"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="80" fixed="right">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="deleteCwxx(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-collapse-item>
<!-- 分红与投资情况 -->
<el-collapse-item title="分红与投资情况" name="分红与投资情况">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="2020年以前累计分红金额(万元)">
<el-input-number
precision="2"
v-model="formData.enyqljfhje"
placeholder="请输入2020年以前累计分红金额(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="2019年以前累计收到分红金额(万元)">
<el-input-number
precision="2"
v-model="formData.esnqljsdfhje"
placeholder="请输入2019年以前累计收到分红金额(万元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="历年累计收到分红金额(万元)">
<el-input-number
precision="2"
v-model="formData.lnljsdfhje"
placeholder="请输入历年累计收到分红金额(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计参股投资回报率(%)">
<el-input-number
precision="2"
v-model="formData.ljcgtzhibl"
placeholder="请输入累计参股投资回报率(%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="归属集团内投资主体所有权益(万元)">
<el-input-number
precision="2"
v-model="formData.gsjtntzztzsuyq"
placeholder="请输入归属集团内投资主体所有权益(万元)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总体参股投资保值增值率(%)">
<el-input-number
precision="2"
v-model="formData.ztcgtzbzzzl"
placeholder="请输入总体参股投资保值增值率(%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="拉动营收">
<el-input-number
precision="2"
v-model="formData.ldys"
placeholder="请输入拉动营收"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="拉动利润">
<el-input-number
precision="2"
v-model="formData.ldlr"
placeholder="请输入拉动利润"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="当前持有股数">
<el-input-number
precision="2"
v-model="formData.dqcygs"
placeholder="请输入当前持有股数"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否能够及时掌握财务数据和经营情况">
<el-select
v-model="formData.sfnkjzwsjyjjyqk"
placeholder="请选择是否能够及时掌握财务数据和经营情况"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否满5年未分红">
<el-select
v-model="formData.sfmwnwfkh"
placeholder="请选择是否满5年未分红"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否连续5年长期亏损">
<el-select
v-model="formData.sflxwnlcqks"
placeholder="请选择是否连续5年长期亏损"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否非持续经营">
<el-select
v-model="formData.sffcxjy"
placeholder="请选择是否非持续经营"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否属于低效无效资产">
<el-select
v-model="formData.sfdydwxzc"
placeholder="请选择是否属于低效无效资产"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="财务报表文件">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 法人治理 -->
<el-collapse-item title="法人治理" name="法人治理">
<div class="tab-handle">
<el-button type="primary" @click="addFrzl">新增</el-button>
</div>
<el-table
:data="frzlList"
style="width: 100%"
empty-text="暂无数据"
border
>
<el-table-column type="index" width="60" label="序号" />
<el-table-column
prop="zcypcdrdbprs"
label="章程约定派出股东代表人数"
width="200"
>
<template #default="scope">
<el-input-number
v-model="scope.row.zcypcdrdbprs"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="sjpccrdbprs"
label="实际派出股东代表人数"
width="200"
>
<template #default="scope">
<el-input-number
v-model="scope.row.sjpccrdbprs"
placeholder="请输入"
:controls="false"
/>
</template>
</el-table-column>
<el-table-column
prop="zcypxpcsjqksqk"
label="章程约定选派董事、监事或重要岗位人员情况"
width="280"
>
<template #default="scope">
<el-checkbox-group v-model="scope.row.zcypxpcsjqksqk">
<el-checkbox label="国有股东代表"></el-checkbox>
<el-checkbox label="董事"></el-checkbox>
<el-checkbox label="监事"></el-checkbox>
<el-checkbox label="重要岗位"></el-checkbox>
<el-checkbox label="其他高级管理人员"></el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column
prop="sjxpcsjqksqk"
label="实际选派董事、监事或重要岗位人员情况"
width="280"
>
<template #default="scope">
<el-checkbox-group v-model="scope.row.sjxpcsjqksqk">
<el-checkbox label="国有股东代表"></el-checkbox>
<el-checkbox label="董事"></el-checkbox>
<el-checkbox label="监事"></el-checkbox>
<el-checkbox label="重要岗位"></el-checkbox>
<el-checkbox label="其他高级管理人员"></el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column
prop="sfytdtsfjq"
label="是否有特定事项否决权"
width="150"
>
<template #default="scope">
<el-select
v-model="scope.row.sfytdtsfjq"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column
prop="fjqnr"
label="否决权内容"
width="200"
>
<template #default="scope">
<el-input
v-model="scope.row.fjqnr"
placeholder="请输入否决权内容"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="80" fixed="right">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="deleteFrzl(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="2020年自查整改至今新增或调整参股企业董事监事及重要岗位人员人数"
>
<el-input-number
precision="0"
v-model="formData.ezjzccjtgqdsjcyjsryrs"
placeholder="请输入人数"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="2020年自查整改至今新增或修订参股企业公司章程条款"
>
<el-input-number
precision="0"
v-model="formData.ezjzccjtqsgszxtk"
placeholder="请输入条数"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否建立党的组织">
<el-select
v-model="formData.sfjldjzz"
placeholder="请选择是否建立党的组织"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="2020年自查整改至今是否开展党的活动">
<el-select
v-model="formData.ezjzccsfkzdhd"
placeholder="请选择是否开展党的活动"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="2020年自查整改至今是否开展党的活动次数"
>
<el-input-number
precision="0"
v-model="formData.ezjzccsfkzdhdcs"
placeholder="请输入次数"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="董监高任命文件">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="股东会文件">
<el-button type="primary">上传</el-button>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="董事会决议文件">
<el-button type="primary">上传</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 集团内投资主体相关信息 -->
<el-collapse-item <el-collapse-item
title="合同约定权益获取" title="集团内投资主体相关信息"
name="合同约定权益获取" name="集团内投资主体相关信息"
> >
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="12">
<el-form-item label="我方权益合同条款约定"> <el-form-item
label="是否使用集团内投资主体字号、经营资质"
>
<el-select
v-model="formData.sfssytzztzzhjyzz"
placeholder="请选择"
>
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="字号及经营资质名称">
<el-input <el-input
type="textarea" v-model="formData.zhjyzzmc"
v-model="formData.wfqyhttkyd" placeholder="请输入字号及经营资质名称"
placeholder="请输入我方权益合同条款约定(市场、设计、施工、运营权、养护份额等权益)"
:rows="3"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="12">
<el-form-item label="权益获取进展"> <el-form-item label="是否使用集团内投资主体产品注册商标">
<el-input <el-select
type="textarea" v-model="formData.sfsytzztzcptzcsh"
v-model="formData.qyhqjz" placeholder="请选择"
placeholder="请输入权益获取进展" >
:rows="3" <el-option label="是" value="是"></el-option>
/> <el-option label="否" value="否"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="12">
<el-form-item label="权益获取与约定不一致的情况"> <el-form-item label="是否采取公允价格">
<el-input <el-select
type="textarea" v-model="formData.sfcqgyjg"
v-model="formData.qyhqyyd" placeholder="请选择"
placeholder="请输入权益获取与约定不一致的情况" >
:rows="3" <el-option label="是" value="是"></el-option>
/> <el-option label="否" value="否"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="12">
<el-form-item label="督办情况"> <el-form-item label="集团内投资主体实际担保">
<el-input <el-select
type="textarea" v-model="formData.sftzztjcsjdb"
v-model="formData.dbqk" placeholder="请选择"
placeholder="请输入督办情况" >
:rows="3" <el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="担保金额(万元)">
<el-input-number
precision="2"
v-model="formData.dbje"
placeholder="请输入担保金额(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item>
<el-collapse-item title="分红情况" name="分红情况">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="利润分配/分红约定"> <el-form-item label="其中:超股权比例担保金额">
<el-input <el-input-number
v-model="formData.lrfp" precision="2"
placeholder="请输入利润分配/分红约定" v-model="formData.cgqblcjedbje"
:rows="2" placeholder="请输入超股权比例担保金额"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="是否达到利润分配条件"> <el-form-item label="是否办理国有产权登记">
<el-radio-group <el-select
placeholder="请选择是否达到利润分配条件" v-model="formData.sfblgqcqdj"
v-model="formData.sfddlrfptj" placeholder="请选择"
>
<el-radio
v-for="item in options?.sf"
:key="item.id"
:id="item.name"
:value="item.key"
>{{ item.name }}</el-radio
> >
</el-radio-group> <el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item>
<!-- 股权退出信息 -->
<el-collapse-item title="股权退出信息" name="股权退出信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="累计获取分红(万元)"> <el-form-item label="股权是否退出" required>
<el-input <el-select
type="number" v-model="formData.gqsfct"
v-model.number="formData.ljhqfh" placeholder="请选择股权是否退出"
placeholder="请输入累计获取分红(万元)" >
step="0.01" <el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="股权退出收回资金(万元)">
<el-input-number
precision="2"
v-model="formData.gqcthszj"
placeholder="请输入股权退出收回资金(万元)"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item>
<el-collapse-item title="资金流出" name="资金流出">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="应投入资金(万元)"> <el-form-item label="股权退出时间">
<el-input <el-date-picker
type="number" v-model="formData.gqctsj"
v-model.number="formData.ytrzj" type="date"
placeholder="请输入应投入资金(万元)" placeholder="请选择股权退出时间"
step="0.01" format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="累计投入资金(万元)"> <el-form-item label="股权退出收回资金到账金额(万元)">
<el-input <el-input-number
type="number" precision="2"
v-model.number="formData.ljtrzj" v-model="formData.gqcthszjdzje"
placeholder="请输入累计投入资金(万元)" placeholder="请输入股权退出收回资金到账金额(万元)"
step="0.01"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="尚需投入资金(万元)"> <el-form-item label="股权退出收回资金到账时间">
<el-input <el-date-picker
type="number" v-model="formData.gqcthszjdzsj"
v-model.number="formData.sxtrzj" type="date"
placeholder="请输入尚需投入资金(万元)" placeholder="请选择股权退出收回资金到账时间"
step="0.01" format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item>
<el-collapse-item title="资金流入" name="资金流入">
<div class="tab-handle">
<el-button type="primary" @click="addPfyjlsqk"
>新增</el-button
>
</div>
<el-table
:data="wtyys"
style="width: 100%"
empty-text="暂无数据"
show-summary
:summary-method="sumWtyysColumns"
border
>
<el-table-column type="index" width="60" label="序号" />
<el-table-column prop="lx" label="类型">
<template #default="scope">
<el-select
v-model="scope.row.lx"
placeholder="请选择"
no-data-text="暂无数据"
>
<el-option
v-for="item in options?.participation_capital"
:key="item.key"
:label="item.name"
:value="item.key"
></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="fwsj" label="服务时间">
<template #default="scope">
<el-date-picker
v-model="scope.row.fwsj"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column prop="htje" label="合同金额(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.htje"
placeholder="请输入合同金额(万元)"
step="0.01"
/>
</template>
</el-table-column>
<el-table-column prop="ywlr" label="业务利润(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.ywlr"
placeholder="请输入业务利润(万元)"
step="0.01"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="60">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="deletePfyjlsqk(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div class="tab-handle">
<el-button type="primary" @click="addTzfhs">新增</el-button>
</div>
<el-table
:data="tzfhs"
style="width: 100%"
empty-text="暂无数据"
show-summary
:summary-method="sumTzfhsColumns"
border
>
<el-table-column type="index" width="60" label="序号" />
<el-table-column prop="fhsj" label="分红时间">
<template #default="scope">
<el-date-picker
v-model="scope.row.fhsj"
type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column prop="fhje" label="分红金额(万元)">
<template #default="scope">
<el-input
type="number"
v-model.number="scope.row.fhje"
placeholder="请输入分红金额"
step="0.01"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="60">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click="deleteTzfhs(scope.$index)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div class="subtotal">
<div class="label">流入小计</div>
<div class="value">{{ subtotalNum }}(万元)</div>
</div>
</el-collapse-item>
<el-collapse-item title="净现金流" name="净现金流">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="静态"> <el-form-item label="退出文件">
<el-input <el-button type="primary">上传</el-button>
type="number"
v-model.number="formData.jt"
placeholder="请输入静态"
step="0.01"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-form-item label="折现(3.5%)"> <el-row :gutter="20">
<el-col :span="24">
<el-form-item label="股权退出原因">
<el-input <el-input
type="number" v-model="formData.gqctyy"
v-model.number="formData.zx" type="textarea"
placeholder="请输入折现(3.5%)" :rows="3"
step="0.01" placeholder="请输入股权退出原因"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item>
<!-- 自查问题整改信息 -->
<el-collapse-item
title="自查问题整改信息"
name="自查问题整改信息"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="联系人"> <el-form-item label="自查是否发现问题" required>
<el-input <el-select
v-model="formData.lxr" v-model="formData.zcsffjwt"
placeholder="请输入联系人" placeholder="请选择自查是否发现问题"
/> >
<el-option label="是" value="是"></el-option>
<el-option label="否" value="否"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-form-item label="联系方式"> <el-row :gutter="20">
<el-col :span="24">
<el-form-item label="自查发现的主要问题及整改计划">
<el-input <el-input
v-model="formData.lxfs" v-model="formData.zcfxdzzywtjzgjh"
placeholder="请输入联系方式" type="textarea"
:rows="4"
placeholder="请输入自查发现的主要问题及整改计划"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -478,10 +1493,10 @@ ...@@ -478,10 +1493,10 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注"> <el-form-item label="备注">
<el-input <el-input
type="textarea"
v-model="formData.bz" v-model="formData.bz"
placeholder="请输入备注" type="textarea"
:rows="4" :rows="4"
placeholder="请输入备注"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -509,188 +1524,236 @@ ...@@ -509,188 +1524,236 @@
import { reactive, ref, onMounted, getCurrentInstance, h, computed } from "vue"; import { reactive, ref, onMounted, getCurrentInstance, h, computed } from "vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import routerBack from "@/components/common/routerBack.vue"; import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const userStore = useUserStore();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const token = ref(
userStore.authToken || sessionStorage.getItem("authToken") || "",
);
// 小记金额
const subtotalNum = computed(() => {
let totalHtje = tzfhs.value.reduce((sum, item) => {
const num = Number(item.fhje) || 0; // 兼容空值/非数字
return sum + num;
}, 0);
let totalYwlr = wtyys.value.reduce((sum, item) => {
const num = Number(item.ywlr) || 0; // 兼容空值/非数字
return sum + num;
}, 0);
return (totalHtje + totalYwlr).toFixed(2);
});
// 折叠面板默认展开项 // 折叠面板默认展开项
const activeCollapse = ref([ const activeCollapse = ref([
"基本信息", "基本信息",
"出资情况", "规模指标及额度",
"合同约定权益获取", "股东信息",
"分红情况", "企业工商注册资本金",
"资金流入", "项目资本金",
"净现金流", "财务经营信息",
"资金流出", "分红与投资情况",
"分红情况", "法人治理",
"集团内投资主体相关信息",
"股权退出信息",
"自查问题整改信息",
]); ]);
// 表单数据 - 数值字段初始化为数字类型(0) // 表单数据
const formData = reactive({ const formData = reactive({
// projectName: "", projectId: "",
// qc: "", jnw: "",
// jc: "", sqnzw: "",
// nbtzglzt: "", xmmc: "",
// xmscjd: "", xmbh: "",
// gqjg: "", qxnzwgw: "",
// xmzbjze: 0, sbdw: "",
// gszbjyczze: 0, ssejdw: "",
// gsdqycze: 0, sfjwqy: "",
// gsdqyjcze: 0, xccgyy: "",
// gsdqycwcje: 0, qtcgyy: "",
// gsdqsycze: 0, cgfl: "",
// cgbczqk: "", xmzt: "",
// wfqyhttkyd: "", sfjtzy: "",
// qyhqjz: "", sfzyglcy: "",
// qyhqyyd: "", sfgzxccyypyq: "",
// dbqk: "", sshy: "",
// lrfp: "", sfwmqy: "",
// sfddlrfptj: "", sfssgs: "",
// ljhqfh: 0, sfwtzgxm: "",
// ytrzj: 0, sfmqysjyy: "",
// ljtrzj: 0, sfzgwc: "",
// sxtrzj: 0, sflh: "",
// jt: 0, jcpfsj: "",
// zx: 0, cgxcjsj: "",
// lxr: "", jhtcnf: "",
// lxfs: "", fxje: null,
// bz: "", sfwfkgfbbqy: "",
// projectId: "", zyyw: "",
// del: 0, // del字段保留0默认值(删除标记,0为正常) sehybk: "",
zbmc: "",
sl: null,
dwdw: "",
sfwjskzr: "",
sfpg: "",
gdmc: "",
gbl: null,
gdgdhjgbl: null,
xjcghj: null,
yzxdrhjhj: null,
yzxdrdwmc: "",
qygszczij: null,
wfcgbl: null,
wfrjqygszczij: null,
gszczijwfysjczje: null,
qygszczijwfscczsj: "",
njhjrjqygszczijbl: null,
njhjrjqygszczij: null,
njhjsjqygszczij: null,
xmzbj: null,
wfrjxmzbjbl: null,
wfrjxmzbj: null,
wfsjxmzbj: null,
xmzbjnjhjcgbll: null,
njhjrjxmzbj: null,
njhjsjxmzbj: null,
enyqljfhje: null,
esnqljsdfhje: null,
lnljsdfhje: null,
ljcgtzhibl: null,
gsjtntzztzsuyq: null,
ztcgtzbzzzl: null,
ldys: null,
ldlr: null,
dqcygs: null,
sfnkjzwsjyjjyqk: "",
sfmwnwfkh: "",
sflxwnlcqks: "",
sffcxjy: "",
sfdydwxzc: "",
ezjzccjtgqdsjcyjsryrs: null,
ezjzccjtqsgszxtk: null,
sfjldjzz: "",
ezjzccsfkzdhd: "",
ezjzccsfkzdhdcs: null,
sfssytzztzzhjyzz: "",
zhjyzzmc: "",
sfsytzztzcptzcsh: "",
sfcqgyjg: "",
sftzztjcsjdb: "",
dbje: null,
cgqblcjedbje: null,
sfblgqcqdj: "",
gqsfct: "",
gqcthszj: null,
gqctsj: "",
gqcthszjdzje: null,
gqcthszjdzsj: "",
gqctyy: "",
zcsffjwt: "",
zcfxdzzywtjzgjh: "",
bz: "",
}); });
let options = ref(); // 股东信息列表
const gdxxList = ref([]);
function sumWtyysColumns(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = h("div", "合计");
return;
}
const prop = column.property;
if (prop === "lx" || prop === "fwsj" || !prop) {
sums[index] = "";
return;
}
if (prop === "htje") { // 财务信息列表
const values = data.map((item) => Number(item.htje) || 0); const cwxxList = ref([]);
const total = values.reduce((prev, curr) => prev + curr, 0);
sums[index] = total.toFixed(2) + "(万元)";
return;
}
if (prop === "ywlr") { // 法人治理列表
const values = data.map((item) => Number(item.ywlr) || 0); const frzlList = ref([]);
const total = values.reduce((prev, curr) => prev + curr, 0);
sums[index] = total.toFixed(2) + "(万元)";
return;
}
sums[index] = ""; // 新增股东信息
const addGdxx = () => {
gdxxList.value.push({
gdmc: "",
gdxz: "",
gbl: null,
sfkgdg: "",
sfjtcydw: "",
sfskdw: "",
sfyzxdr: "",
}); });
};
return sums; // 删除股东信息
} const deleteGdxx = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
gdxxList.value.splice(index, 1);
});
};
function sumTzfhsColumns(param) { // 股东信息表格合计
const sumGdxxColumns = (param) => {
const { columns, data } = param; const { columns, data } = param;
const sums = []; const sums = [];
columns.forEach((column, index) => { columns.forEach((column, index) => {
if (index === 0) { if (index === 0) {
sums[index] = h("div", "合计"); sums[index] = h("div", "合计");
return; return;
} }
if (column.property === "gbl") {
const prop = column.property; const values = data.map((item) => Number(item.gbl) || 0);
if (prop === "fhsj" || !prop) {
sums[index] = "";
return;
}
// 分红金额合计
if (prop === "fhje") {
const values = data.map((item) => Number(item.fhje) || 0);
const total = values.reduce((prev, curr) => prev + curr, 0); const total = values.reduce((prev, curr) => prev + curr, 0);
sums[index] = total.toFixed(2) + "(万元)"; sums[index] = total.toFixed(2) + "%";
return; return;
} }
sums[index] = ""; sums[index] = "";
}); });
return sums; return sums;
} };
// 加载状态
const loading = ref(false);
// 是否预览模式
const isPreview = ref(!!route.query.isPreview);
// 项目列表数据
const projectList = ref([]);
// 当前编辑的记录ID
const rcCgqyglId = ref(route.query.id || "");
let wtyys = ref([]); // 新增财务信息
const addPfyjlsqk = () => { const addCwxx = () => {
// 新增行时数值字段初始化为0 cwxxList.value.push({
wtyys.value.push({ htje: 0, ywlr: 0 }); nd: "",
zzc: null,
jzc: null,
gsnjfznc: null,
yysr: null,
jlr: null,
gsnjfndjdfh: null,
gdhjcdffhsj: "",
gsnjfndysdfh: null,
sjsdfhsj: "",
bndjtnzyjtzttzrb: null,
});
}; };
const deletePfyjlsqk = (index) => {
// 删除财务信息
const deleteCwxx = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", { ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认", confirmButtonText: "确认",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => { }).then(() => {
wtyys.value.splice(index, 1); cwxxList.value.splice(index, 1);
}); });
}; };
let tzfhs = ref([]); // 新增法人治理
// 新增 const addFrzl = () => {
const addTzfhs = () => { frzlList.value.push({
// 新增行时数值字段初始化为0 zcypcdrdbprs: null,
tzfhs.value.push({ fhje: 0 }); sjpccrdbprs: null,
zcypxpcsjqksqk: [],
sjxpcsjqksqk: [],
sfytdtsfjq: "",
fjqnr: "",
});
}; };
// 删除
const deleteTzfhs = (index) => { // 删除法人治理
const deleteFrzl = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示", { ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认", confirmButtonText: "确认",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => { }).then(() => {
tzfhs.value.splice(index, 1); frzlList.value.splice(index, 1);
}); });
}; };
// 加载状态
const loading = ref(false);
// 是否预览模式
const isPreview = ref(!!route.query.isPreview);
// 项目列表数据
const projectList = ref([]);
// 当前编辑的记录ID
const rcCgqyglId = ref(route.query.id || "");
// 获取项目列表 // 获取项目列表
const getProjectData = (params = {}) => { const getProjectData = (params = {}) => {
proxy.$post({ proxy.$post({
...@@ -726,45 +1789,21 @@ const getRcCgqyglDetail = () => { ...@@ -726,45 +1789,21 @@ const getRcCgqyglDetail = () => {
data: { id: rcCgqyglId.value }, data: { id: rcCgqyglId.value },
callback: (data) => { callback: (data) => {
loading.value = false; loading.value = false;
// 处理数值字段,确保为数字类型 Object.assign(formData, data);
const formatNumberFields = (obj) => {
const numberFields = [
"xmzbjze",
"gszbjyczze",
"gsdqycze",
"gsdqyjcze",
"gsdqycwcje",
"gsdqsycze",
"ljhqfh",
"ytrzj",
"ljtrzj",
"sxtrzj",
"jt",
"zx",
];
numberFields.forEach((field) => {
obj[field] = Number(obj[field]) || 0;
});
return obj;
};
Object.assign(formData, formatNumberFields(data)); // 处理股东信息列表
if (data.gdxxList) {
gdxxList.value = data.gdxxList;
}
// 处理wtyys数组的数值字段 // 处理财务信息列表
if (data.wtyys) { if (data.cwxxList) {
wtyys.value = data.wtyys.map((item) => ({ cwxxList.value = data.cwxxList;
...item,
htje: Number(item.htje) || 0,
ywlr: Number(item.ywlr) || 0,
}));
} }
// 处理tzfhs数组的数值字段 // 处理法人治理列表
if (data.tzfhs) { if (data.frzlList) {
tzfhs.value = data.tzfhs.map((item) => ({ frzlList.value = data.frzlList;
...item,
fhje: Number(item.fhje) || 0,
}));
} }
}, },
}); });
...@@ -788,49 +1827,14 @@ const saveClick = () => { ...@@ -788,49 +1827,14 @@ const saveClick = () => {
? "/api/project/updateCgqygl" ? "/api/project/updateCgqygl"
: "/api/project/createCgqygl"; : "/api/project/createCgqygl";
// 处理空数字字段:确保所有数值字段为数字类型
const formatSubmitData = (data) => {
const numberFields = [
"xmzbjze",
"gszbjyczze",
"gsdqycze",
"gsdqyjcze",
"gsdqycwcje",
"gsdqsycze",
"ljhqfh",
"ytrzj",
"ljtrzj",
"sxtrzj",
"jt",
"zx",
];
numberFields.forEach((field) => {
data[field] = Number(data[field]) || 0;
});
// 处理数组中的数值字段
data.wtyys = data.wtyys.map((item) => ({
...item,
htje: Number(item.htje) || 0,
ywlr: Number(item.ywlr) || 0,
}));
data.tzfhs = data.tzfhs.map((item) => ({
...item,
fhje: Number(item.fhje) || 0,
}));
return data;
};
// 组装提交数据 // 组装提交数据
const submitData = formatSubmitData({ const submitData = {
...formData, ...formData,
projectId: formData.projectId + "", projectId: formData.projectId + "",
wtyys: wtyys.value, gdxxList: gdxxList.value,
tzfhs: tzfhs.value, cwxxList: cwxxList.value,
}); frzlList: frzlList.value,
};
proxy.$post({ proxy.$post({
url: url, url: url,
...@@ -847,7 +1851,6 @@ const saveClick = () => { ...@@ -847,7 +1851,6 @@ const saveClick = () => {
onMounted(() => { onMounted(() => {
// 获取项目列表 // 获取项目列表
getProjectData(); getProjectData();
options.value = JSON.parse(sessionStorage.getItem("resourceData"));
// 如果有ID则加载详情 // 如果有ID则加载详情
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
getRcCgqyglDetail(); getRcCgqyglDetail();
...@@ -856,21 +1859,7 @@ onMounted(() => { ...@@ -856,21 +1859,7 @@ onMounted(() => {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.subtotal { .tab-handle {
background-color: #f5f7fa; margin-bottom: 10px;
height: 40px;
display: flex;
.label {
width: 100px;
height: 40px;
text-align: center;
line-height: 40px;
border-right: 1px solid #ebeef5;
}
.value {
padding-left: 16px;
width: 100%;
line-height: 40px;
}
} }
</style> </style>
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