明树Git Lab

Commit 918db535 authored by zhanghan's avatar zhanghan

代码补全

parent f71a1732
Pipeline #108022 passed with stage
in 20 seconds
...@@ -15,21 +15,31 @@ ...@@ -15,21 +15,31 @@
prop="serialNumber" prop="serialNumber"
label="序号" label="序号"
width="80" width="80"
fixed="left"
align="center" align="center"
/> />
<!-- 指标项列(层级缩进):保留原逻辑 --> <!-- 指标项列(层级缩进):保留原逻辑 -->
<el-table-column <el-table-column
prop="indicatorName" prop="indicatorName"
label="名称" label="名称"
fixed="left"
align="left" align="left"
min-width="260" min-width="260"
> >
<template #default="{ row }"> <template #default="{ row }">
<div style="text-align: left">{{ row.indicatorName }}</div> <div
:style="{
textIndent: row.level ? `${row.level * 20}px` : '0px',
textAlign: 'left',
}"
>
{{ row.indicatorName }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 --> <!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 -->
<el-table-column label="合计" width="140" align="right">
<el-table-column 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" }}万元
...@@ -56,7 +66,6 @@ ...@@ -56,7 +66,6 @@
align="center" align="center"
> >
<template #default="{ row }"> <template #default="{ row }">
<!-- 1. 文本行:多行文本输入框 -->
<el-input <el-input
v-if="row.isTextRow" v-if="row.isTextRow"
v-model="row[timeItem.prop]" v-model="row[timeItem.prop]"
...@@ -283,13 +292,15 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => { ...@@ -283,13 +292,15 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => {
const newData = []; const newData = [];
sourceIndicatorList.forEach((item, index) => { sourceIndicatorList.forEach((item, index) => {
const { name, isTextRow = false, noTotal = false } = item; const { name, isTextRow = false, noTotal = false } = item;
const level = item?.level || 0;
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(
JSON.stringify({ JSON.stringify({
serialNumber: index + 1, serialNumber,
level: 0, level,
indicatorName: name, indicatorName: name,
isTextRow, isTextRow,
noTotal, noTotal,
...@@ -333,20 +344,6 @@ watch( ...@@ -333,20 +344,6 @@ watch(
{ deep: true, immediate: true }, { deep: true, immediate: true },
); );
// 监听时间配置变化:更新内部数据
watch(
() => validDynamicTimeList.value,
() => {
if (!validConfig.value || tableDataRef.value.length === 0) return;
tableDataRef.value.forEach((row) => {
initRowTimeField(row);
row.total = calculateRowTotal(row);
});
emitDataChange(tableDataRef.value);
},
{ deep: true, immediate: true },
);
// 10. 数字行输入回调(逻辑不变) // 10. 数字行输入回调(逻辑不变)
const handleFinancialChange = (currentRow) => { const handleFinancialChange = (currentRow) => {
if (props.isPreview || !currentRow || currentRow.noTotal) return; if (props.isPreview || !currentRow || currentRow.noTotal) return;
......
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
} }
::v-deep.add-project-content .tab-content .upload-file-wrap .delete-btn { ::v-deep.add-project-content .tab-content .upload-file-wrap .delete-btn {
cursor: pointer; cursor: pointer;
color: #F56C6C; color: #f56c6c;
} }
::v-deep.add-project-content .tab-content .el-select__wrapper .el-select__selection.is-near { ::v-deep.add-project-content .tab-content .el-select__wrapper .el-select__selection.is-near {
max-height: 120px; max-height: 120px;
...@@ -254,12 +254,18 @@ ...@@ -254,12 +254,18 @@
} }
.add-project-header { .add-project-header {
margin-bottom: 10px; margin-bottom: 10px;
padding-left: 24px;
}
.add-project-header .header-left:hover {
color: #409eff;
cursor: pointer;
} }
::v-deep.el-form-item { ::v-deep.el-form-item {
display: block; display: block;
} }
::v-deep.el-form-item .el-form-item__label { ::v-deep.el-form-item .el-form-item__label {
width: auto !important; width: auto !important;
color: #333;
} }
.tab-handle { .tab-handle {
margin-bottom: 10px; margin-bottom: 10px;
...@@ -280,9 +286,25 @@ ...@@ -280,9 +286,25 @@
align-items: center; align-items: center;
margin-bottom: 24px; margin-bottom: 24px;
} }
::v-deep .el-collapse-item__title { ::v-deep .el-collapse-item .el-collapse-item__title {
color: #333;
font-size: 16px;
flex: auto; flex: auto;
text-align: left; text-align: left;
padding-left: 16px;
position: relative;
}
::v-deep .el-collapse-item .el-collapse-item__title::after {
position: absolute;
content: "";
left: 0;
top: 15px;
width: 2px;
height: 19px;
background-color: #409eff;
}
::v-deep .el-collapse-item .el-icon {
font-size: 16px;
} }
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
...@@ -291,3 +313,6 @@ ...@@ -291,3 +313,6 @@
:deep(.el-upload) { :deep(.el-upload) {
width: 100%; width: 100%;
} }
::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
.system-manage-container{ .system-manage-container {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
}
.system-manage-header {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 12px 20px 0;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
.header-left {
flex: 1;
width: 0;
.el-input,
.el-select {
width: 220px;
}
}
}
.system-manage-content {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.manage-content {
flex: 1;
height: 0;
.common-table {
height: 100%;
display: flex;
flex-direction: column;
.table-container {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.el-table {
flex: 1;
height: 0;
}
}
}
}
.manage {
&-container {
width: 100%;
height: 100%;
padding: 20px; padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
}
&-wrap {
width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
box-sizing: border-box;
}
.system-manage-header{
background: rgba(255, 255, 255, 0.9); background: rgba(255, 255, 255, 0.9);
border-radius: 8px; border-radius: 8px;
padding: 12px 20px 0; padding: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
&-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
.header-left{ }
&-content {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.common-table {
height: 100%;
display: flex;
flex-direction: column;
.table-container {
flex: 1; flex: 1;
width: 0; height: 0;
.el-input, .el-select{ display: flex;
width: 220px; flex-direction: column;
.el-table {
flex: 1;
height: 0;
} }
}
} }
}
} }
.system-manage-content{
background: rgba(255, 255, 255, 0.9); ::v-deep.add-project {
border-radius: 8px; &-container {
width: 100%;
height: 100%;
padding: 20px; padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-sizing: border-box;
} display: flex;
.manage-content{ flex-direction: column;
.el-collapse-item__header {
color: var(--el-color-primary);
}
}
&-header {
display: flex;
justify-content: space-between;
}
&-content {
flex: 1; flex: 1;
height: 0; height: 0;
.common-table{ display: flex;
height: 100%; flex-direction: column;
display: flex; .tabs-content {
flex-direction: column; flex: 1;
.table-container{ height: 0;
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.el-table{
flex: 1;
height: 0;
}
}
} }
} .el-tabs {
.manage{ height: 100%;
&-container{
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
background: rgba(157, 188, 218, 0.1);
} }
&-wrap{ .el-tab-pane {
width: 100%; height: 100%;
height: 100%;
display: flex;
flex-direction: column;
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
} }
.tab-content {
&-header{ height: 100%;
overflow: auto;
padding: 0 10px;
.col-title {
height: 24px;
line-height: 24px;
font-weight: bold;
text-align: center;
}
.tab-handle {
margin-bottom: 16px;
display: flex; display: flex;
justify-content: space-between; justify-content: flex-end;
align-items: center;
}
.el-table {
margin-bottom: 10px; margin-bottom: 10px;
} thead {
&-content{ color: #000;
flex: 1; th {
height: 0; background: #f5f7fa;
display: flex; .cell {
flex-direction: column; text-align: center;
.common-table{
height: 100%;
display: flex;
flex-direction: column;
.table-container{
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.el-table{
flex: 1;
height: 0;
}
} }
}
} }
} .sums-column {
} display: flex;
flex-direction: column;
::v-deep.add-project{ justify-content: flex-start;
&-container{ & > div {
width: 100%; height: 26px;
height: 100%; line-height: 26px;
padding: 20px; text-align: center;
box-sizing: border-box; }
display: flex;
flex-direction: column;
.el-collapse-item__header{
color: var(--el-color-primary);
} }
} }
&-header{ .upload-file-wrap {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} flex-wrap: wrap;
&-content{ .file-name {
flex: 1; flex: 1;
height: 0; width: 0;
display: flex; color: #409eff;
flex-direction: column; cursor: pointer;
.tabs-content{ -webkit-background-clip: text;
flex: 1; white-space: nowrap;
height: 0; overflow: hidden;
} text-overflow: ellipsis;
.el-tabs{
height: 100%;
} }
.el-tab-pane{ .delete-btn {
height: 100%; cursor: pointer;
color: #f56c6c;
} }
.tab-content{ }
height: 100%; .el-select__wrapper {
overflow: auto; .el-select__selection.is-near {
padding: 0 10px; max-height: 120px;
.col-title{ overflow: auto;
height: 24px;
line-height: 24px;
font-weight: bold;
text-align: center;
}
.tab-handle{
margin-bottom: 16px;;
display: flex;
justify-content: flex-end;
align-items: center;
}
.el-table{
margin-bottom: 10px;
thead {
color: #000;
th{
background: #f5f7fa;
.cell{
text-align: center;
}
}
}
.sums-column{
display: flex;
flex-direction: column;
justify-content: flex-start;
&>div{
height: 26px;
line-height: 26px;
text-align: center;
}
}
}
.upload-file-wrap{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.file-name{
flex: 1;
width: 0;
color: #409eff;
cursor: pointer;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.delete-btn{
cursor: pointer;
color: #F56C6C;
}
}
.el-select__wrapper{
.el-select__selection.is-near{
max-height: 120px;
overflow: auto;
}
}
}
.always-click{
padding: 2px;
font-size: 12px;
cursor: pointer !important;
color: var(--el-color-primary);
font-weight: 500;
font-family: Arial, sans-serif;
display: inline-flex;
align-items: center;
}
.project-tab-content{
padding: 0 20px;
height: 100%;
} }
}
} }
.always-click {
padding: 2px;
font-size: 12px;
cursor: pointer !important;
color: var(--el-color-primary);
font-weight: 500;
font-family: Arial, sans-serif;
display: inline-flex;
align-items: center;
}
.project-tab-content {
padding: 0 20px;
height: 100%;
}
}
} }
::v-deep .el-input{ ::v-deep .el-input {
width: 100% !important; width: 100% !important;
} }
.add-dialog{ .add-dialog {
.el-tree{ .el-tree {
width: 100%; width: 100%;
} }
} }
.tree-content { .tree-content {
overflow: auto; overflow: auto;
position: relative; position: relative;
.el-tree { .el-tree {
// max-height: 700px; // max-height: 700px;
// overflow-y: auto; // overflow-y: auto;
// 只有当内容超过700px时才显示滚动条 // 只有当内容超过700px时才显示滚动条
&:not(:hover) { &:not(:hover) {
scrollbar-width: none; scrollbar-width: none;
-ms-overflow-style: none; -ms-overflow-style: none;
&::-webkit-scrollbar { &::-webkit-scrollbar {
display: none; display: none;
}
} }
&:hover { }
scrollbar-width: thin; &:hover {
&::-webkit-scrollbar { scrollbar-width: thin;
display: block; &::-webkit-scrollbar {
width: 6px; display: block;
} width: 6px;
&::-webkit-scrollbar-thumb { }
background-color: rgba(144, 147, 153, 0.3); &::-webkit-scrollbar-thumb {
border-radius: 3px; background-color: rgba(144, 147, 153, 0.3);
} border-radius: 3px;
&::-webkit-scrollbar-track { }
background-color: transparent; &::-webkit-scrollbar-track {
} background-color: transparent;
} }
} }
.custom-tree-node { }
flex: 1; .custom-tree-node {
display: flex; flex: 1;
align-items: center; display: flex;
justify-content: space-between; align-items: center;
font-size: 14px; justify-content: space-between;
padding-right: 8px; font-size: 14px;
.node-name{ padding-right: 8px;
flex: 1; .node-name {
width: 0; flex: 1;
-webkit-background-clip: text; width: 0;
white-space: nowrap; -webkit-background-clip: text;
overflow: hidden; white-space: nowrap;
text-overflow: ellipsis; overflow: hidden;
} text-overflow: ellipsis;
.node-key{ }
font-size: 12px; .node-key {
color: #969696; font-size: 12px;
} color: #969696;
} }
} }
.add-project-header { }
.add-project-header {
margin-bottom: 10px; margin-bottom: 10px;
padding-left: 24px;
.header-left {
&:hover {
color: #409eff;
cursor: pointer;
}
// position: relative;
// &::before {
// position: absolute;
// content: "<";
// left: -26px;
// top: -3px;
// width: 2px;
// height: 19px;
// font-size: 19px;
// }
}
} }
::v-deep.el-form-item { ::v-deep.el-form-item {
display: block; display: block;
.el-form-item__label { .el-form-item__label {
width: auto !important; width: auto !important;
} color: #333;
// font-weight: 600;
}
} }
.tab-handle { .tab-handle {
margin-bottom: 10px; margin-bottom: 10px;
text-align: right; text-align: right;
...@@ -293,8 +314,6 @@ ...@@ -293,8 +314,6 @@
} }
} }
.add-project-header { .add-project-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -302,14 +321,30 @@ ...@@ -302,14 +321,30 @@
margin-bottom: 24px; margin-bottom: 24px;
} }
// 动态表格样式适配 ::v-deep .el-collapse-item {
:deep(.el-collapse-item__content) { .el-collapse-item__title {
// padding: 16px; color: #333;
} font-size: 16px;
::v-deep .el-collapse-item__title{ flex: auto;
flex: auto;
text-align: left; text-align: left;
padding-left: 16px;
position: relative;
&::after {
position: absolute;
content: "";
left: 0;
top: 15px;
width: 2px;
height: 19px;
background-color: #409eff;
}
}
.el-icon {
font-size: 16px;
}
} }
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
width: 100%; width: 100%;
...@@ -317,4 +352,7 @@ ...@@ -317,4 +352,7 @@
:deep(.el-upload) { :deep(.el-upload) {
width: 100%; width: 100%;
} }
\ No newline at end of file ::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
...@@ -11,660 +11,857 @@ ...@@ -11,660 +11,857 @@
</div> </div>
</div> </div>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <el-collapse v-model="activeCollapse">
<div class="tab-content"> <el-tabs v-model="pageActiveName" type="border-card">
<el-form :model="formData" :label-width="200" :disabled="isPreview"> <el-tab-pane label="基础信息" name="基础信息">
<el-collapse v-model="activeCollapse"> <div class="project-tab-content">
<!-- 1. 项目基本信息 --> <el-form
<el-collapse-item title="项目基本信息" name="项目基本信息"> :model="formData"
<el-row :gutter="20"> :label-width="200"
<el-col :span="8"> :disabled="isPreview"
<el-form-item label="项目名称" required> >
<el-select <!-- 1. 项目基本信息 -->
v-model="formData.projectId" <el-collapse-item title="项目基本信息" name="项目基本信息">
placeholder="请选择项目名称" <el-row :gutter="20">
no-data-text="暂无数据" <el-col :span="8">
@change="changeProject" <el-form-item label="项目名称" required>
> <el-select
<el-option v-model="formData.projectId"
v-for="item in projectList" placeholder="请选择项目名称"
:key="item.id" no-data-text="暂无数据"
:label="item.projectName" @change="changeProject"
:value="item.id" >
></el-option> <el-option
</el-select> v-for="item in projectList"
</el-form-item> :key="item.id"
</el-col> :label="item.projectName"
<el-col :span="8"> :value="item.id"
<el-form-item label="项目编号"> ></el-option>
<el-input </el-select>
v-model="formData.projectCode" </el-form-item>
placeholder="请输入项目编号" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="项目编号">
</el-col> <el-input
<el-col :span="8"> v-model="formData.projectCode"
<el-form-item label="是否再决策"> placeholder="请输入项目编号"
<CommonSelector />
:radio="true" </el-form-item>
v-model="formData.isReDecision" </el-col>
dictName="sf" <el-col :span="8">
/> <el-form-item label="是否再决策">
</el-form-item> <CommonSelector
</el-col> :radio="true"
<el-col :span="8"> v-model="formData.isReDecision"
<el-form-item label="项目外文名称"> dictName="sf"
<el-input />
v-model="formData.projectForeignName" </el-form-item>
placeholder="请输入项目外文名称" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="项目外文名称">
</el-col> <el-input
<el-col :span="8"> v-model="formData.projectForeignName"
<el-form-item label="是否能建联合体项目"> placeholder="请输入项目外文名称"
<CommonSelector />
:radio="true" </el-form-item>
v-model="formData.isUnionProject" </el-col>
dictName="sf" <el-col :span="8">
/> <el-form-item label="是否能建联合体项目">
</el-form-item> <CommonSelector
</el-col> :radio="true"
<el-col :span="8"> v-model="formData.isUnionProject"
<el-form-item label="投资主体"> dictName="sf"
<el-input />
v-model="formData.investmentSubject" </el-form-item>
placeholder="请输入投资主体" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="投资主体">
</el-col> <el-input
<el-col :span="8"> v-model="formData.investmentSubject"
<el-form-item label="是否一体化子项目"> placeholder="请输入投资主体"
<CommonSelector />
:radio="true" </el-form-item>
v-model="formData.isIntegratedSubProject" </el-col>
dictName="sf" <el-col :span="8">
/> <el-form-item label="是否一体化子项目">
</el-form-item> <CommonSelector
</el-col> :radio="true"
<el-col :span="8"> v-model="formData.isIntegratedSubProject"
<el-form-item label="直属企业"> dictName="sf"
<el-input />
v-model="formData.directEnterprise" </el-form-item>
placeholder="请输入直属企业" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="直属企业">
</el-col> <el-input
<el-col :span="8"> v-model="formData.directEnterprise"
<el-form-item label="是否能建重大或重要投资项目"> placeholder="请输入直属企业"
<CommonSelector />
:radio="true" </el-form-item>
v-model="formData.isImportantInvestProject" </el-col>
dictName="sf" <el-col :span="8">
/> <el-form-item label="是否能建重大或重要投资项目">
</el-form-item> <CommonSelector
</el-col> :radio="true"
<el-col :span="8"> v-model="formData.isImportantInvestProject"
<el-form-item label="决策审批单位"> dictName="sf"
<el-input />
v-model="formData.approvalUnit" </el-form-item>
placeholder="请输入决策审批单位" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="决策审批单位">
</el-col> <el-input
<el-col :span="8"> v-model="formData.approvalUnit"
<el-form-item label="财务报表类型"> placeholder="请输入决策审批单位"
<el-input />
v-model="formData.financialReportType" </el-form-item>
placeholder="请输入财务报表类型" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="财务报表类型">
</el-col> <el-input
<el-col :span="8"> v-model="formData.financialReportType"
<el-form-item label="政府(核准、备案)审批级别"> placeholder="请输入财务报表类型"
<el-input />
v-model="formData.governmentApprovalLevel" </el-form-item>
placeholder="请输入审批级别" </el-col>
/> <el-col :span="8">
</el-form-item> <el-form-item label="政府(核准、备案)审批级别">
</el-col> <el-input
<el-col :span="8"> v-model="formData.governmentApprovalLevel"
<el-form-item label="是否自主决策"> placeholder="请输入审批级别"
<CommonSelector />
:radio="true" </el-form-item>
v-model="formData.isIndependentDecision" </el-col>
dictName="sf" <el-col :span="8">
/> <el-form-item label="是否自主决策">
</el-form-item> <CommonSelector
</el-col> :radio="true"
<el-col :span="8"> v-model="formData.isIndependentDecision"
<el-form-item label="主业/非主业"> dictName="sf"
<el-select />
v-model="formData.businessType" </el-form-item>
placeholder="请选择" </el-col>
> <el-col :span="8">
<el-option label="主业" value="主业"></el-option> <el-form-item label="主业/非主业">
<el-option label="非主业" value="非主业"></el-option> <el-select
</el-select> v-model="formData.businessType"
</el-form-item> placeholder="请选择"
</el-col> >
<el-col :span="8"> <el-option label="主业" value="主业"></el-option>
<el-form-item label="联系人"> <el-option
<el-input label="非主业"
v-model="formData.contactPerson" value="非主业"
placeholder="请输入联系人" ></el-option>
/> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="联系电话"> <el-form-item label="联系人">
<el-input <el-input
v-model="formData.contactPhone" v-model="formData.contactPerson"
placeholder="请输入联系电话" placeholder="请输入联系人"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
</el-collapse-item> <el-form-item label="联系电话">
<el-input
v-model="formData.contactPhone"
placeholder="请输入联系电话"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 2. 项目所在地 --> <!-- 2. 项目所在地 -->
<el-collapse-item title="项目所在地" name="项目所在地"> <el-collapse-item title="项目所在地" name="项目所在地">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="境内/外"> <el-form-item label="境内/外">
<el-select <el-select
v-model="formData.domesticOverseas" v-model="formData.domesticOverseas"
placeholder="请选择" placeholder="请选择"
> >
<el-option label="境内" value="境内"></el-option> <el-option label="境内" value="境内"></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-col :span="8"> <el-col :span="8">
<el-form-item label="省(境内)/洲际(境外)"> <el-form-item label="省(境内)/洲际(境外)">
<el-input <el-input
v-model="formData.provinceContinent" v-model="formData.provinceContinent"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="地市(境内)/国家(境外)"> <el-form-item label="地市(境内)/国家(境外)">
<el-input <el-input
v-model="formData.cityCountry" v-model="formData.cityCountry"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="区县(境内)/国家(境外)"> <el-form-item label="区县(境内)/国家(境外)">
<el-input <el-input
v-model="formData.districtCountry" v-model="formData.districtCountry"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目区域"> <el-form-item label="项目区域">
<el-input <el-input
v-model="formData.projectArea" v-model="formData.projectArea"
placeholder="请输入项目区域" placeholder="请输入项目区域"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="是否一带一路沿线国家"> <el-form-item label="是否一带一路沿线国家">
<CommonSelector <CommonSelector
:radio="true" :radio="true"
v-model="formData.isBeltRoadCountry" v-model="formData.isBeltRoadCountry"
dictName="sf" dictName="sf"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 3. 计量币种 --> <!-- 3. 计量币种 -->
<el-collapse-item title="计量币种" name="计量币种"> <el-collapse-item title="计量币种" name="计量币种">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="币种"> <el-form-item label="币种">
<el-select <el-select
v-model="formData.currencyType" v-model="formData.currencyType"
placeholder="请选择币种" placeholder="请选择币种"
> >
<el-option label="人民币" value="CNY"></el-option> <el-option label="人民币" value="CNY"></el-option>
<el-option label="美元" value="USD"></el-option> <el-option label="美元" value="USD"></el-option>
<el-option label="欧元" value="EUR"></el-option> <el-option label="欧元" value="EUR"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="汇率"> <el-form-item label="汇率">
<el-input <el-input
v-model="formData.exchangeRate" v-model="formData.exchangeRate"
placeholder="请输入汇率" placeholder="请输入汇率"
:precision="6" :precision="6"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 4. 实施时间 --> <!-- 4. 实施时间 -->
<el-collapse-item title="实施时间" name="实施时间"> <el-collapse-item title="实施时间" name="实施时间">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目建设期 (月)"> <el-form-item label="项目建设期 (月)">
<el-input <el-input
v-model="formData.constructionPeriod" v-model="formData.constructionPeriod"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="运营年限 (年)"> <el-form-item label="运营年限 (年)">
<el-input <el-input
v-model="formData.operationYears" v-model="formData.operationYears"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目合作期 (年)"> <el-form-item label="项目合作期 (年)">
<el-input <el-input
v-model="formData.cooperationPeriod" v-model="formData.cooperationPeriod"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目开工时间(预计)"> <el-form-item label="项目开工时间(预计)">
<el-date-picker <el-date-picker
v-model="formData.plannedStartDate" v-model="formData.plannedStartDate"
type="date" type="date"
placeholder="请选择" placeholder="请选择"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目交工时间(预计)"> <el-form-item label="项目交工时间(预计)">
<el-date-picker <el-date-picker
v-model="formData.plannedCompletionDate" v-model="formData.plannedCompletionDate"
type="date" type="date"
placeholder="请选择" placeholder="请选择"
value-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>
<!-- 5. 投资分类 --> <!-- 5. 投资分类 -->
<el-collapse-item title="投资分类" name="投资分类"> <el-collapse-item title="投资分类" name="投资分类">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-tabs v-model="activeInvestTab"> <el-tabs v-model="activeInvestTab">
<el-tab-pane label="投资属性分类" name="attribute"> <el-tab-pane label="投资属性分类" name="attribute">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="一级分类"> <el-form-item label="一级分类">
<el-input <el-input
v-model="formData.investAttributeFirst" v-model="formData.investAttributeFirst"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="二级分类"> <el-form-item label="二级分类">
<el-input <el-input
v-model="formData.investAttributeSecond" v-model="formData.investAttributeSecond"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="投资板块"> <el-form-item label="投资板块">
<el-input <el-input
v-model="formData.investPlate1" v-model="formData.investPlate1"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="投资板块"> <el-form-item label="投资板块">
<el-input <el-input
v-model="formData.investPlate2" v-model="formData.investPlate2"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="投资目的分类" name="purpose"> <el-tab-pane label="投资目的分类" name="purpose">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="一级分类"> <el-form-item label="一级分类">
<el-input <el-input
v-model="formData.investPurposeFirst" v-model="formData.investPurposeFirst"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="2+9布局分类"> <el-form-item label="2+9布局分类">
<el-input <el-input
v-model="formData.layout29" v-model="formData.layout29"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="二级分类"> <el-form-item label="二级分类">
<el-input <el-input
v-model="formData.investPurposeSecond" v-model="formData.investPurposeSecond"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="国民经济行业"> <el-form-item label="国民经济行业">
<el-input <el-input
v-model="formData.nationalEconomicIndustry" v-model="formData.nationalEconomicIndustry"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="四新分类"> <el-form-item label="四新分类">
<el-input <el-input
v-model="formData.fourNewClassification" v-model="formData.fourNewClassification"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 6. 特别关注、特别监管类等信息 --> <!-- 6. 特别关注、特别监管类等信息 -->
<el-collapse-item <el-collapse-item
title="特别关注、特别监管类等信息" title="特别关注、特别监管类等信息"
name="特别关注、特别监管类等信息" name="特别关注、特别监管类等信息"
> >
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="是否须报国家发展改革委和商务部核准"> <el-form-item
<CommonSelector label="是否须报国家发展改革委和商务部核准"
:radio="true" >
v-model="formData.isReportedToNDRC" <CommonSelector
dictName="sf" :radio="true"
/> v-model="formData.isReportedToNDRC"
</el-form-item> dictName="sf"
</el-col> />
<el-col :span="8"> </el-form-item>
<el-form-item label="是否国家领导见签"> </el-col>
<CommonSelector <el-col :span="8">
:radio="true" <el-form-item label="是否国家领导见签">
v-model="formData.isLeaderSigned" <CommonSelector
dictName="sf" :radio="true"
/> v-model="formData.isLeaderSigned"
</el-form-item> dictName="sf"
</el-col> />
<el-col :span="8"> </el-form-item>
<el-form-item label="是否境内特别监管类"> </el-col>
<CommonSelector <el-col :span="8">
:radio="true" <el-form-item label="是否境内特别监管类">
v-model="formData.isDomesticSpecialSupervision" <CommonSelector
dictName="sf" :radio="true"
/> v-model="formData.isDomesticSpecialSupervision"
</el-form-item> dictName="sf"
</el-col> />
<el-col :span="8"> </el-form-item>
<el-form-item label="是否列入国资委负面清单"> </el-col>
<CommonSelector <el-col :span="8">
:radio="true" <el-form-item label="是否列入国资委负面清单">
v-model="formData.isInSASACNegaticveList" <CommonSelector
dictName="sf" :radio="true"
/> v-model="formData.isInSASACNegaticveList"
</el-form-item> dictName="sf"
</el-col> />
</el-row> </el-form-item>
</el-collapse-item> </el-col>
</el-row>
</el-collapse-item>
<!-- 7. 建设规模(实物量指标) --> <!-- 7. 建设规模(实物量指标) -->
<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="24">
<el-form-item label=" "> <el-form-item label=" ">
<DynamicTable <DynamicTable
:showAddButton="!isPreview" :showAddButton="!isPreview"
:columns="constructionScaleColumns" :columns="constructionScaleColumns"
:disabled="isPreview" :disabled="isPreview"
v-model="formData.constructionScaleList" v-model="formData.constructionScaleList"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 8. 股东信息 --> <!-- 8. 股东信息 -->
<el-collapse-item title="股东信息" name="股东信息"> <el-collapse-item title="股东信息" name="股东信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label=" "> <el-form-item label=" ">
<DynamicTable <DynamicTable
:showAddButton="!isPreview" :showAddButton="!isPreview"
:columns="shareholderColumns" :columns="shareholderColumns"
:disabled="isPreview" :disabled="isPreview"
v-model="formData.shareholderList" v-model="formData.shareholderList"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 9. 我方担保及股权融资情况 --> <!-- 9. 我方担保及股权融资情况 -->
<el-collapse-item <el-collapse-item
title="我方担保及股权融资情况" title="我方担保及股权融资情况"
name="我方担保及股权融资情况" name="我方担保及股权融资情况"
> >
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="我方负责的股权融资金额(万元)"> <el-form-item label="我方负责的股权融资金额(万元)">
<el-input <el-input
v-model="formData.equityFinancingAmount" v-model="formData.equityFinancingAmount"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
:precision="2" :precision="2"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="融资成本(%)"> <el-form-item label="融资成本(%)">
<el-input <el-input
v-model="formData.equityFinancingCost" v-model="formData.equityFinancingCost"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
:precision="2" :precision="2"
min="0" min="0"
max="100" max="100"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="期限(年)"> <el-form-item label="期限(年)">
<el-input <el-input
v-model="formData.equityFinancingTerm" v-model="formData.equityFinancingTerm"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="担保金额(万元)"> <el-form-item label="担保金额(万元)">
<el-input <el-input
v-model="formData.guaranteeAmount" v-model="formData.guaranteeAmount"
placeholder="请输入" placeholder="请输入"
type="number" type="number"
:precision="2" :precision="2"
min="0" min="0"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 10. 我方担保及债权融资情况 --> <!-- 10. 我方担保及债权融资情况 -->
<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="24">
<el-form-item label=" "> <el-form-item label=" ">
<DynamicTable <DynamicTable
:showAddButton="!isPreview" :showAddButton="!isPreview"
:columns="debtFinancingColumns" :columns="debtFinancingColumns"
:disabled="isPreview" :disabled="isPreview"
v-model="formData.debtFinancingList" v-model="formData.debtFinancingList"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 11. 项目内容及必要性 --> <!-- 11. 项目内容及必要性 -->
<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="24">
<el-form-item label="建设内容及规模"> <el-form-item label="建设内容及规模">
<el-input <el-input
v-model="formData.constructionContent" v-model="formData.constructionContent"
type="textarea" type="textarea"
rows="4" rows="4"
placeholder="请输入" placeholder="请输入"
/> />
</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
v-model="formData.projectNecessity" v-model="formData.projectNecessity"
type="textarea" type="textarea"
rows="4" rows="4"
placeholder="请输入" placeholder="请输入"
/> />
</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
v-model="formData.otherDescription" v-model="formData.otherDescription"
type="textarea" type="textarea"
rows="4" rows="4"
placeholder="请输入" placeholder="请输入"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 12. 风险管理 --> <!-- 12. 风险管理 -->
<el-collapse-item title="风险管理" name="风险管理"> <el-collapse-item title="风险管理" name="风险管理">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label=" "> <el-form-item label=" ">
<DynamicTable <DynamicTable
:showAddButton="!isPreview" :showAddButton="!isPreview"
:columns="riskManagementColumns" :columns="riskManagementColumns"
:disabled="isPreview" :disabled="isPreview"
v-model="formData.riskManagementList" v-model="formData.riskManagementList"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 13. 里程碑节点 --> <!-- 13. 里程碑节点 -->
<el-collapse-item title="里程碑节点" name="里程碑节点"> <el-collapse-item title="里程碑节点" name="里程碑节点">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label=" "> <el-form-item label=" ">
<DynamicTable <DynamicTable
:showAddButton="!isPreview" :showAddButton="!isPreview"
:columns="milestoneColumns" :columns="milestoneColumns"
:disabled="isPreview" :disabled="isPreview"
v-model="formData.milestoneList" v-model="formData.milestoneList"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" style="margin-top: 20px"> <el-col :span="24" style="margin-top: 20px">
<el-form-item label="里程碑计划审批表"> <el-form-item label="里程碑计划审批表">
<FileUploader <FileUploader
v-model="formData.milestoneApprovalFile" v-model="formData.milestoneApprovalFile"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<!-- 14. 投决申报材料 -->
<el-collapse-item title="投决申报材料" name="投决申报材料">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="可研材料">
<FileUploader
v-model="formData.feasibilityStudyFile"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="经济指标初步测算资料">
<FileUploader
v-model="formData.economicIndicatorFile"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="补充相关支撑材料">
<FileUploader
v-model="formData.supplementarySupportFile"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="其他相关支撑材料">
<FileUploader v-model="formData.otherSupportFile" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="上会议案">
<FileUploader
v-model="formData.meetingProposalFile"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane label="财务评价" name="财务评价">
<div class="project-tab-content">
<FinancialTable
v-model="formData.cwpj"
:is-preview="isPreview"
/>
<!-- 14. 投决申报材料 --> <el-collapse-item title="项目可行性" name="项目可行性">
<el-collapse-item title="投决申报材料" name="投决申报材料"> <el-tabs v-model="kxxName">
<el-row :gutter="20"> <el-tab-pane
<el-col :span="24"> label="项目投资现金流量表"
<el-form-item label="可研材料"> name="项目投资现金流量表"
<FileUploader v-model="formData.feasibilityStudyFile" /> >
</el-form-item> <!-- 测试数据 -->
</el-col> <!-- {{
<el-col :span="24"> formData.jzymljsh?.tableData?.length > 0 &&
<el-form-item label="经济指标初步测算资料"> formData.jzymljsh.tableData[0]
<FileUploader }} -->
v-model="formData.economicIndicatorFile" <FinancialTable
/> v-model="formData.jzymljsh"
</el-form-item> :is-preview="isPreview"
</el-col> />
<el-col :span="24"> </el-tab-pane>
<el-form-item label="补充相关支撑材料"> <el-tab-pane
<FileUploader label="项目资本金现金流量表"
v-model="formData.supplementarySupportFile" name="项目资本金现金流量表"
/> >项目资本金现金流量表</el-tab-pane
</el-form-item> >
</el-col> <el-tab-pane
<el-col :span="24"> label="投资各方现金流量表"
<el-form-item label="其他相关支撑材料"> name="投资各方现金流量表"
<FileUploader v-model="formData.otherSupportFile" /> >投资各方现金流量表</el-tab-pane
</el-form-item> >
</el-col> <el-tab-pane label="利润表" name="利润表"
<el-col :span="24"> >利润表</el-tab-pane
<el-form-item label="上会议案"> >
<FileUploader v-model="formData.meetingProposalFile" /> </el-tabs>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item> </el-collapse-item>
</el-collapse>
</el-form> <el-col :span="24" style="margin-top: 20px">
</div> 投屏报告以及测试表
</div> <FileUploader v-model="formData.milestoneApprovalFile" />
</el-col>
</div>
</el-tab-pane>
<el-tab-pane label="决策批复" name="决策批复">
<el-collapse-item
title="项目投资总额(全口径)"
name="项目投资总额(全口径)"
>
<FinancialTable
v-model="formData.tzze"
:is-preview="isPreview"
/>
</el-collapse-item>
<el-collapse-item
title="财务评价指标(已评审指标请必填)"
name="财务评价指标(已评审指标请必填)"
>
<FinancialTable
v-model="formData.cwpjzb"
:is-preview="isPreview"
/>
</el-collapse-item>
<el-collapse-item title="核心边界条件 " name="核心边界条件 ">
<el-form-item label=" ">
<DynamicTable
:showAddButton="!isPreview"
:columns="transferColumns"
:disabled="isPreview"
v-model="formData.projectGdxxs"
/>
</el-form-item>
</el-collapse-item>
<el-collapse-item
title="投资主体审核情况 "
name="投资主体审核情况 "
>
<DynamicTable
:showAddButton="!isPreview"
:columns="shqkColumns"
:disabled="isPreview"
v-model="formData.projectTzztshqk"
/>
</el-collapse-item>
<el-collapse-item title="项目批复信息 " name="项目批复信息 ">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="最终审批意见">
<el-input
v-model="formData.projectCode"
placeholder="请输入最终审批意见"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目批复时间">
<el-input
v-model="formData.projectCode"
placeholder="请输入项目批复时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目批复编号">
<el-input
v-model="formData.projectCode"
placeholder="请输入项目批复编号"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="未通过主要原因和要求">
<el-input
v-model="formData.projectCode"
placeholder="请输入未通过主要原因和要求"
type="textarea"
rows="3"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="批复文件">
<FileUploader v-model="formData.pfwj" />
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="审批意见 " name="审批意见 ">
<DynamicTable
:showAddButton="!isPreview"
:columns="spyjColumns"
:disabled="isPreview"
v-model="formData.projectSpyj"
/>
</el-collapse-item>
<el-collapse-item title="其他 " name="其他 ">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="投资主体首次申报时间">
<el-input
v-model="formData.projectCode"
placeholder="请输入投资主体首次申报时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="会签完成时间">
<el-input
v-model="formData.projectCode"
placeholder="请输入会签完成时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="首次发函时间">
<el-input
v-model="formData.projectCode"
placeholder="请输入首次发函时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="补充材料时间">
<el-input
v-model="formData.projectCode"
placeholder="请输入补充材料时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审核人">
<el-input
v-model="formData.projectCode"
placeholder="请输入审核人"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-tab-pane>
<el-tab-pane label="申请报告" name="申请报告">申请报告</el-tab-pane>
</el-tabs>
</el-collapse>
</div> </div>
</div> </div>
</div> </div>
...@@ -675,10 +872,14 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue"; ...@@ -675,10 +872,14 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue"; import DynamicTable from "@/components/FormDynamicTable/index.vue";
import FileUploader from "@/components/FileUploader/index.vue"; import FileUploader from "@/components/FileUploader/index.vue";
import FinancialTable from "@/components/FinancialTable.vue";
const pageActiveName = ref("基础信息");
const kxxName = ref("项目投资现金流量表");
// ========== 动态表格列配置 ==========
// 7. 建设规模列配置
const constructionScaleColumns = ref([ const constructionScaleColumns = ref([
{ {
prop: "indicatorName", prop: "indicatorName",
...@@ -753,6 +954,138 @@ const shareholderColumns = ref([ ...@@ -753,6 +954,138 @@ const shareholderColumns = ref([
{ prop: "remark", label: "备注", type: "input", placeholder: "请输入备注" }, { prop: "remark", label: "备注", type: "input", placeholder: "请输入备注" },
]); ]);
const transferColumns = ref([
{
prop: "njfcgbl",
label: "业务类型",
type: "input",
headerGroup: " ",
placeholder: "请填写能建方持股比例",
},
{
prop: "szdt",
label: "数值",
type: "input",
headerGroup: "单位工程造价(动态)",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "dwdt",
label: "单位",
type: "input",
headerGroup: "单位工程造价(动态)",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "zjsz",
label: "数值",
type: "input",
headerGroup: "单位工程造价(静态)",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "zjdw",
label: "单位",
type: "input",
headerGroup: "单位工程造价(静态)",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "xsfwsz",
label: "数值",
type: "input",
headerGroup: "销售/服务能力",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "xsfwdw",
label: "造价",
type: "input",
headerGroup: "销售/服务能力",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "fhsz",
label: "数值",
type: "input",
headerGroup: "年均负荷率",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "fhdw",
label: "造价",
type: "input",
headerGroup: "年均负荷率",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "scfwsz",
label: "数值",
type: "input",
headerGroup: "单位生产/服务总成本",
placeholder: "请填写能建方持股比例情况",
},
{
prop: "scfwzj",
label: "造价",
type: "input",
headerGroup: "单位生产/服务总成本",
placeholder: "请填写能建方持股比例情况",
},
]);
const shqkColumns = ref([
{
prop: "shareholderType",
label: "会议类型",
type: "input",
placeholder: "请输入会议类型",
},
{
prop: "shareholderName",
label: "会议届次",
type: "input",
placeholder: "请输入会议届次",
},
{
prop: "shareholderName",
label: "审核时间",
type: "input",
placeholder: "请输入审核时间",
},
{
prop: "shareholderName",
label: "结论",
type: "input",
placeholder: "请输入结论",
},
{
prop: "shareholderName",
label: "附件",
type: "input",
placeholder: "请输入附件",
},
]);
const spyjColumns = ref([
{
prop: "shareholderType",
label: "类型",
type: "input",
placeholder: "请输入类型",
},
{
prop: "shareholderName",
label: "审批意见",
type: "input",
placeholder: "请输入审批意见",
},
{
prop: "shareholderName",
label: "批复意见时间",
type: "input",
placeholder: "请输入批复意见时间",
},
]);
// 10. 债权融资列配置 // 10. 债权融资列配置
const debtFinancingColumns = ref([ const debtFinancingColumns = ref([
{ {
...@@ -842,6 +1175,7 @@ const activeCollapse = ref([ ...@@ -842,6 +1175,7 @@ const activeCollapse = ref([
"计量币种", "计量币种",
"实施时间", "实施时间",
"投资分类", "投资分类",
"项目可行性",
"特别关注、特别监管类等信息", "特别关注、特别监管类等信息",
"建设规模(实物量指标)", "建设规模(实物量指标)",
"股东信息", "股东信息",
...@@ -938,6 +1272,7 @@ const formData = reactive({ ...@@ -938,6 +1272,7 @@ const formData = reactive({
equityFinancingCost: "", equityFinancingCost: "",
equityFinancingTerm: "", equityFinancingTerm: "",
guaranteeAmount: "", guaranteeAmount: "",
projectGdxxs: [],
// 10. 我方担保及债权融资情况 - 动态表格 // 10. 我方担保及债权融资情况 - 动态表格
debtFinancingList: [ debtFinancingList: [
...@@ -973,6 +1308,8 @@ const formData = reactive({ ...@@ -973,6 +1308,8 @@ const formData = reactive({
// 其他关联字段 // 其他关联字段
projectName: "", projectName: "",
// ------------------ 财务评价
jzymljsh: {},
}); });
// ========== 业务方法:获取项目列表 ========== // ========== 业务方法:获取项目列表 ==========
...@@ -1087,12 +1424,584 @@ const saveClick = () => { ...@@ -1087,12 +1424,584 @@ const saveClick = () => {
// ========== 辅助方法 ========== // ========== 辅助方法 ==========
const backClick = () => router.back(-1); const backClick = () => router.back(-1);
let initTableData = () => {
Object.assign(formData, {
jzymljsh: {
// 指标列表
indicatorList: [
{
name: "现金流入",
isTextRow: false,
noTotal: false,
level: 1,
},
{
name: "现金流出",
isTextRow: false,
noTotal: false,
},
{
name: "所得税前净现金流量",
isTextRow: false,
noTotal: false,
},
{
name: "调整所得税",
isTextRow: false,
noTotal: false,
},
{
name: "所得税后净现金流量",
isTextRow: false,
noTotal: false,
},
],
// 时间列表(月度)
dynamicTimeList: [
"2021",
"2022",
"2023",
"2024",
"2025",
"2026",
"2027",
"2028",
"2029",
"2030",
"2031",
"2032",
"2033",
"2034",
"2035",
"2036",
"2037",
"2038",
"2039",
"2040",
"2041",
"2042",
"2043",
"2044",
"2045",
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData: [],
},
tzze: {
// 指标列表
indicatorList: [
{
name: "项目造价构成",
isTextRow: true,
noTotal: true,
serialNumber: "",
},
{
name: "建安设备费",
isTextRow: false,
noTotal: false,
serialNumber: "1",
},
{
name: "其他费用",
isTextRow: false,
noTotal: false,
serialNumber: "2",
},
{
name: "其中:土地相关费用",
isTextRow: false,
noTotal: false,
serialNumber: "2.1",
},
{
name: "基本预备费",
isTextRow: false,
noTotal: false,
serialNumber: "3",
},
{
name: "建设期利息",
isTextRow: false,
noTotal: false,
serialNumber: "4",
},
{
name: "项目资金构成",
isTextRow: false,
noTotal: false,
serialNumber: "",
},
{
name: "项目资本金",
isTextRow: false,
noTotal: false,
serialNumber: "1",
},
{
name: "能建方出资",
isTextRow: false,
noTotal: false,
serialNumber: "1.1",
},
{
name: "外部股东",
isTextRow: false,
noTotal: false,
serialNumber: "1.2",
},
{
name: "贷款",
isTextRow: false,
noTotal: false,
serialNumber: "2",
},
{
name: "其中:非并表项目我方贷款/担保额",
isTextRow: false,
noTotal: false,
serialNumber: "2.1",
},
{
name: "其他出资",
isTextRow: false,
noTotal: false,
serialNumber: "3",
},
{
name: "其中:能建方出资",
isTextRow: false,
noTotal: false,
serialNumber: "3.1",
},
{
name: "单位工程造价",
isTextRow: false,
noTotal: false,
serialNumber: "4",
},
{
name: "批复总投资",
isTextRow: false,
noTotal: false,
serialNumber: "",
},
],
// 时间列表(月度)
dynamicTimeList: ["人民币计价"],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData: [],
},
cwpjzb: {
// 指标列表
indicatorList: [
{
name: "项目投资内容部收益率(税前)",
isTextRow: false,
noTotal: false,
serialNumber: "",
},
{
name: "项目投资内容部收益率(税后)",
isTextRow: false,
noTotal: false,
serialNumber: "1",
},
{
name: "项目投资动态回收期(税前)",
isTextRow: false,
noTotal: false,
serialNumber: "2",
},
{
name: "能建方内部收益率",
isTextRow: false,
noTotal: false,
serialNumber: "2.1",
},
{
name: "净现金流首次回证年份",
isTextRow: false,
noTotal: false,
serialNumber: "3",
},
{
name: "净利润流首次回证年份",
isTextRow: false,
noTotal: false,
serialNumber: "4",
},
{
name: "可分配利润首次回证年份",
isTextRow: false,
noTotal: false,
serialNumber: "",
},
],
// 时间列表(月度)
dynamicTimeList: ["投资评估阶段批复值"],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData: [],
},
cwpj: {
// 指标列表
indicatorList: [
{
name: "项目筹资(建设期投资)",
level: 1,
serialNumber: "1",
isTextRow: false,
noTotal: false,
},
{
name: "项目资本金(股权融资)",
level: 2,
serialNumber: "1.1",
isTextRow: false,
noTotal: false,
},
{
name: "能建方",
level: 3,
serialNumber: "1.1.1",
isTextRow: false,
noTotal: false,
},
{
name: "其他社会资本方",
level: 3,
serialNumber: "1.1.2",
isTextRow: false,
noTotal: false,
},
{
name: "借款(债权融资)",
level: 2,
serialNumber: "1.2",
isTextRow: false,
noTotal: false,
},
{
name: "银行贷款",
level: 3,
serialNumber: "1.2.1",
isTextRow: false,
noTotal: false,
},
{
name: "其中:非并表项目我方贷款/担保额",
level: 4,
serialNumber: "1.2.1.1",
isTextRow: false,
noTotal: false,
},
{
name: "其他出资",
level: 2,
serialNumber: "1.3",
isTextRow: false,
noTotal: false,
},
{
name: "其中:能建方出资",
level: 3,
serialNumber: "1.3.1",
isTextRow: false,
noTotal: false,
},
{
name: "筹资总额",
level: 1,
serialNumber: " ",
isTextRow: false,
noTotal: false,
},
// 2. 经营情况 相关
{
name: "经营情况",
level: 1,
serialNumber: "2",
isTextRow: false,
noTotal: false,
},
{
name: "营业总收入",
level: 2,
serialNumber: "2.1",
isTextRow: false,
noTotal: false,
},
{
name: "营业总成本",
level: 2,
serialNumber: "2.2",
isTextRow: false,
noTotal: false,
},
{
name: "其中:营业成本",
level: 3,
serialNumber: "2.2.1",
isTextRow: false,
noTotal: false,
},
{
name: "其中:折旧及摊销",
level: 3,
serialNumber: "2.2.2",
isTextRow: false,
noTotal: false,
},
{
name: "利润总额",
level: 2,
serialNumber: "2.3",
isTextRow: false,
noTotal: false,
},
{
name: "所得税",
level: 2,
serialNumber: "2.4",
isTextRow: false,
noTotal: false,
},
{
name: "净利润",
level: 2,
serialNumber: "2.5",
isTextRow: false,
noTotal: false,
},
{
name: "能建方分红(税前)",
level: 2,
serialNumber: "2.6",
isTextRow: false,
noTotal: false,
},
{
name: "能建方分红(税后)",
level: 2,
serialNumber: "2.7",
isTextRow: false,
noTotal: false,
},
{
name: "未分配利润",
level: 2,
serialNumber: "2.8",
isTextRow: false,
noTotal: false,
},
// 3. 资金偿还 相关
{
name: "资金偿还",
level: 1,
serialNumber: "3",
isTextRow: false,
noTotal: false,
},
{
name: "银行贷款",
level: 2,
serialNumber: "3.1",
isTextRow: false,
noTotal: false,
},
{
name: "项目贷",
level: 3,
serialNumber: "3.1.1",
isTextRow: false,
noTotal: false,
},
{
name: "项目贷利息",
level: 3,
serialNumber: "3.1.2",
isTextRow: false,
noTotal: false,
},
{
name: "其他资金",
level: 2,
serialNumber: "3.2",
isTextRow: false,
noTotal: false,
},
{
name: "其他资金本金",
level: 3,
serialNumber: "3.2.1",
isTextRow: false,
noTotal: false,
},
{
name: "其他资金利息(融资费用)",
level: 3,
serialNumber: "3.2.2",
isTextRow: false,
noTotal: false,
},
// 4. 项目公司其他财务指标 相关
{
name: "项目公司其他财务指标",
level: 1,
serialNumber: "4",
isTextRow: false,
noTotal: false,
},
{
name: "资产总额(期末值)",
level: 2,
serialNumber: "4.1",
isTextRow: false,
noTotal: false,
},
{
name: "负债总额(期末值)",
level: 2,
serialNumber: "4.2",
isTextRow: false,
noTotal: false,
},
{
name: "经营活动产生的现金流净额",
level: 2,
serialNumber: "4.3",
isTextRow: false,
noTotal: false,
},
{
name: "经营活动产生的现金流入",
level: 3,
serialNumber: "4.3.1",
isTextRow: false,
noTotal: false,
},
{
name: "经营活动产生的现金流出",
level: 3,
serialNumber: "4.3.2",
isTextRow: false,
noTotal: false,
},
{
name: "投资活动产生的现金流净额",
level: 2,
serialNumber: "4.4",
isTextRow: false,
noTotal: false,
},
{
name: "投资活动产生的现金流入",
level: 3,
serialNumber: "4.4.1",
isTextRow: false,
noTotal: false,
},
{
name: "投资活动产生的现金流出",
level: 3,
serialNumber: "4.4.2",
isTextRow: false,
noTotal: false,
},
{
name: "筹资活动产生的现金流净额",
level: 2,
serialNumber: "4.5",
isTextRow: false,
noTotal: false,
},
{
name: "筹资活动产生的现金流入",
level: 3,
serialNumber: "4.5.1",
isTextRow: false,
noTotal: false,
},
{
name: "筹资活动产生的现金流出",
level: 3,
serialNumber: "4.5.2",
isTextRow: false,
noTotal: false,
},
{
name: "利息备付率",
level: 2,
serialNumber: "4.6",
isTextRow: false,
noTotal: false,
},
{
name: "偿债备付率",
level: 2,
serialNumber: "4.7",
isTextRow: false,
noTotal: false,
},
{
name: "投资回收额",
level: 2,
serialNumber: "4.8",
isTextRow: false,
noTotal: false,
},
],
// 时间列表(月度)
dynamicTimeList: [
"2021",
"2022",
"2023",
"2024",
"2025",
"2026",
"2027",
"2028",
"2029",
"2030",
"2031",
"2032",
"2033",
"2034",
"2035",
"2036",
"2037",
"2038",
"2039",
"2040",
"2041",
"2042",
"2043",
"2044",
"2045",
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData: [],
},
});
};
onMounted(() => { onMounted(() => {
getProjectData(); getProjectData();
if (rcCgqyglId.value) { if (rcCgqyglId.value) {
// 编辑/预览:拉取接口数据 // 编辑/预览:拉取接口数据
getJsqtzjcDetail(); getJsqtzjcDetail();
} else {
initTableData();
} }
}); });
</script> </script>
......
...@@ -19,12 +19,7 @@ ...@@ -19,12 +19,7 @@
<el-collapse-item title="选择类型" name="选择类型"> <el-collapse-item title="选择类型" name="选择类型">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="请选择登记类型"> <el-form-item label="请选择登记类型" required>
<!-- <CommonSelector
:radio="true"
v-model="formData.djlx"
dictName="xmtc_djlx"
/> -->
<el-radio-group v-model="formData.djlx"> <el-radio-group v-model="formData.djlx">
<el-radio value="1">中止</el-radio> <el-radio value="1">中止</el-radio>
<el-radio value="2">重启</el-radio> <el-radio value="2">重启</el-radio>
...@@ -276,7 +271,11 @@ ...@@ -276,7 +271,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目中止内容" name="项目中止内容"> <el-collapse-item
v-if="formData.djlx == 1"
title="项目中止内容"
name="项目中止内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -327,7 +326,11 @@ ...@@ -327,7 +326,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目重启内容" name="项目重启内容"> <el-collapse-item
v-if="formData.djlx == 2"
title="项目重启内容"
name="项目重启内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -378,7 +381,11 @@ ...@@ -378,7 +381,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目终止内容" name="项目终止内容"> <el-collapse-item
v-if="formData.djlx == 3"
title="项目终止内容"
name="项目终止内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -429,7 +436,11 @@ ...@@ -429,7 +436,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目退出内容" name="项目退出内容"> <el-collapse-item
v-if="formData.djlx == 4"
title="项目退出内容"
name="项目退出内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
......
<template> <template>
<div class="manage-container"> <div class="manage-container">
<div class="manage-wrap"> <div class="manage-wrap">
<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">
<el-button type="primary" @click="showFieldsModal">表头筛选</el-button> <el-button type="primary" @click="showFieldsModal"
</div> >表头筛选</el-button
</div> >
<div class="manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="previewProject(row)">查看</el-button>
</template>
</common-table>
</div>
<el-dialog v-model="filedsModalShow"
modal-class="fields-modal"
title="筛选查询" width="50%" top="10vh"
:close-on-click-modal="false" :close-on-press-escape="false"
>
<el-table :data="tableFields" style="width: 100%; height: 500px;" empty-text="暂无数据" border
@selection-change="handleFieldsSelectChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="comment" label="名称" />
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelFieldsModal">取消</el-button>
<el-button type="primary" @click="confirmFieldsModal">确定</el-button>
</div>
</template>
</el-dialog>
</div> </div>
</div>
<div class="manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button
link
type="primary"
size="small"
@click="previewProject(row)"
>查看</el-button
>
</template>
</common-table>
</div>
<el-dialog
v-model="filedsModalShow"
modal-class="fields-modal"
title="筛选查询"
width="50%"
top="10vh"
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-table
:data="tableFields"
style="width: 100%; height: 500px"
empty-text="暂无数据"
border
@selection-change="handleFieldsSelectChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="comment" label="名称" />
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelFieldsModal">取消</el-button>
<el-button type="primary" @click="confirmFieldsModal"
>确定</el-button
>
</div>
</template>
</el-dialog>
</div> </div>
</div>
</template> </template>
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus"; import CommonTable from "@/components/common/commonTable.vue";
import CommonTable from "@/components/common/commonTable.vue";
const router = useRouter();
const { proxy } = getCurrentInstance();
const router = useRouter();
// 计算表格高度 const { proxy } = getCurrentInstance();
let tableData = ref([]);
let tableColumns = ref([ // 计算表格高度
{ let tableData = ref([]);
prop: "projectName", let tableColumns = ref([
label: "项目名称", {
showOverflowTooltip: true prop: "projectName",
}, label: "项目名称",
{ showOverflowTooltip: true,
prop: "projectCode", },
label: "项目编号", {
showOverflowTooltip: true prop: "projectCode",
}, label: "项目编号",
{ showOverflowTooltip: true,
prop: "projectLzType", },
label: "状态", {
width: 120, prop: "projectLzType",
align: "center", label: "状态",
formatter: (data) => { width: 120,
return data.projectLzType === "1" ? "待立项" : data.projectLzType === "3" ? "立项审批中" : align: "center",
data.projectLzType === "5" ? "已立项" : data.projectLzType === "7" ? "决策填报中" : formatter: (data) => {
data.projectLzType === "8" ? "决策审批中" : data.projectLzType === "9" ? "已决策" : "待立项" return data.projectLzType === "1"
} ? "待立项"
: data.projectLzType === "3"
? "立项审批中"
: data.projectLzType === "5"
? "已立项"
: data.projectLzType === "7"
? "决策填报中"
: data.projectLzType === "8"
? "决策审批中"
: data.projectLzType === "9"
? "已决策"
: "待立项";
},
},
{
prop: "operations",
label: "操作",
width: 90,
slot: "operations",
fixed: "right",
align: "center",
},
]);
// 获取可显示表头项
let filedsModalShow = ref(false);
let tableFields = reactive([]);
const getTableFields = () => {
proxy.$post({
url: "/api/project/getProjectFields",
data: {},
callback: (data) => {
tableFields = (data[0] && data[0].attributes) || [];
},
});
};
const showFieldsModal = () => {
filedsModalShow.value = true;
};
let selectFields = ref([]);
const handleFieldsSelectChange = (datas) => {
selectFields.value = datas;
};
const cancelFieldsModal = () => {
selectFields.value = [];
filedsModalShow.value = false;
};
const confirmFieldsModal = () => {
tableColumns.value = selectFields.value
.map((item) => {
return {
prop: item.fieldName,
label: item.comment,
showOverflowTooltip: true,
};
})
.concat([
{
prop: "projectLzType",
label: "状态",
width: 120,
align: "center",
formatter: (data) => {
return data.projectLzType === "1"
? "待立项"
: data.projectLzType === "3"
? "立项审批中"
: data.projectLzType === "5"
? "已立项"
: data.projectLzType === "7"
? "决策填报中"
: data.projectLzType === "8"
? "决策审批中"
: data.projectLzType === "9"
? "已决策"
: "待立项";
}, },
{ },
prop: "operations",
label: "操作",
width: 90,
slot: "operations",
fixed: "right",
align: "center"
}
]); ]);
// 获取可显示表头项 filedsModalShow.value = false;
let filedsModalShow = ref(false); };
let tableFields = reactive([]);
const getTableFields = () => {
proxy.$post({
url: "/api/project/getProjectFields",
data: {},
callback: (data) => {
tableFields = (data[0] && data[0].attributes) || [];
}
})
};
const showFieldsModal = () => {
filedsModalShow.value = true;
}
let selectFields = ref([]);
const handleFieldsSelectChange = (datas) => {
selectFields.value = datas;
};
const cancelFieldsModal = () => {
selectFields.value = [];
filedsModalShow.value = false;
}
const confirmFieldsModal = () => {
tableColumns.value = selectFields.value.map(item => {
return {
prop: item.fieldName,
label: item.comment,
showOverflowTooltip: true
};
}).concat([
{
prop: "projectLzType",
label: "状态",
width: 120,
align: "center",
formatter: (data) => {
return data.projectLzType === "1" ? "待立项" : data.projectLzType === "3" ? "立项审批中" :
data.projectLzType === "5" ? "已立项" : data.projectLzType === "7" ? "决策填报中" :
data.projectLzType === "8" ? "决策审批中" : data.projectLzType === "9" ? "已决策" : "待立项"
}
}
]);
filedsModalShow.value = false;
};
let loading = ref(false);
let total = ref(0);
let currentPage = ref(1);
let pageSize = ref(10);
// 获取列表数据
const getProjectData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/listProject",
data: {
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
menuType: "xmdak",
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
},
});
};
let loading = ref(false); onMounted(() => {
let total = ref(0); getTableFields();
let currentPage = ref(1); getProjectData();
let pageSize = ref(10); });
// 获取列表数据 // 分页
const getProjectData = () => { const handleSizeChange = (size) => {
loading.value = true; pageSize.value = size;
proxy.$post({ currentPage.value = 1;
url: "/api/project/listProject", getProjectData();
data: { };
page: currentPage.value, const handleCurrentPageChange = (page) => {
pagesize: pageSize.value, currentPage.value = page;
attributes: [], getProjectData();
menuType: "xmdak" };
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
}
})
};
onMounted(() => {
getTableFields();
getProjectData();
})
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getProjectData();
}
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getProjectData();
}
const previewProject = (item) => { const previewProject = (item) => {
router.push({ router.push({
name: "addProject", name: "addProject",
query: { query: {
isPreview: true, isPreview: true,
projectId: item.id projectId: item.id,
} },
}) });
} };
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
</style> </style>
...@@ -2,14 +2,16 @@ ...@@ -2,14 +2,16 @@
<div class="depart-manage" v-loading="loading"> <div class="depart-manage" v-loading="loading">
<div class="manage-left"> <div class="manage-left">
<div class="handle-btn"> <div class="handle-btn">
<el-button type="primary" size="small" @click="handleAdd">新增</el-button> <el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
</div> </div>
<div class="tree-content"> <div class="tree-content">
<el-tree <el-tree
:data="treeData" :data="treeData"
node-key="id" node-key="id"
default-expand-all default-expand-all
:props="{label: 'name'}" :props="{ label: 'name' }"
@node-click="handleNodeClick" @node-click="handleNodeClick"
> >
<template #default="{ node, data }"> <template #default="{ node, data }">
...@@ -45,8 +47,12 @@ ...@@ -45,8 +47,12 @@
<div class="search-container"> <div class="search-container">
<el-form :inline="true" :model="searchForm"> <el-form :inline="true" :model="searchForm">
<el-form-item label="关键字查询"> <el-form-item label="关键字查询">
<el-input v-model="searchForm.name" :style="{width: '220px'}" clearable <el-input
placeholder="请输入用户姓名" @keydown.enter="handleSearch" v-model="searchForm.name"
:style="{ width: '220px' }"
clearable
placeholder="请输入用户姓名"
@keydown.enter="handleSearch"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
...@@ -78,18 +84,24 @@ ...@@ -78,18 +84,24 @@
:title="dialogTitle" :title="dialogTitle"
width="400px" width="400px"
@close="cancelDepartForm" @close="cancelDepartForm"
:close-on-click-modal="false" :close-on-press-escape="false" :close-on-click-modal="false"
:close-on-press-escape="false"
> >
<el-form :model="departFormData" ref="departForm" :rules="departRules" label-width="100"> <el-form
:model="departFormData"
ref="departForm"
:rules="departRules"
label-width="100"
>
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="departFormData.name" /> <el-input v-model="departFormData.name" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancelDepartForm">取消</el-button> <el-button @click="cancelDepartForm">取消</el-button>
<el-button type="primary" @click="saveDepartForm">保存</el-button> <el-button type="primary" @click="saveDepartForm">保存</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
...@@ -113,9 +125,7 @@ let departFormData = ref({}); ...@@ -113,9 +125,7 @@ let departFormData = ref({});
const departForm = ref(); const departForm = ref();
// 表单验证规则 // 表单验证规则
const departRules = { const departRules = {
name: [ name: [{ required: true, message: "请输入部门名称", trigger: "blur" }],
{ required: true, message: "请输入部门名称", trigger: "blur" }
]
}; };
// 新增部门 // 新增部门
const handleAdd = () => { const handleAdd = () => {
...@@ -127,37 +137,36 @@ const handleAddChild = (data) => { ...@@ -127,37 +137,36 @@ const handleAddChild = (data) => {
dialogTitle.value = "新增子部门"; dialogTitle.value = "新增子部门";
departFormData.value.parentId = data.id; departFormData.value.parentId = data.id;
dialogVisible.value = true; dialogVisible.value = true;
} };
const handleEdit = (data) => { const handleEdit = (data) => {
departFormData.value = {...data}; departFormData.value = { ...data };
dialogTitle.value = "编辑部门"; dialogTitle.value = "编辑部门";
dialogVisible.value = true; dialogVisible.value = true;
} };
const handleDelete = (data) => { const handleDelete = (data) => {
ElMessageBox.confirm(`确定删除${data.name}?`, "提示", { ElMessageBox.confirm(`确定删除${data.name}?`, "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}).then(() => { }).then(() => {
proxy.$post({ proxy.$post({
url: "/api/user/depart/deleteDepart", url: "/api/user/depart/deleteDepart",
data: { id: data.id }, data: { id: data.id },
callback: (data) => { callback: (data) => {
ElMessage.success("删除成功"); ElMessage.success("删除成功");
loadTreeData(); loadTreeData();
}, },
error: (err) => { error: (err) => {
ElMessage.error("删除失败:", err); ElMessage.error("删除失败:", err);
}, },
});
}); });
} });
};
const saveDepartForm = () => { const saveDepartForm = () => {
departForm.value.validate(valid => { departForm.value.validate((valid) => {
if (valid) { if (valid) {
let url = departFormData.value.id ? "updateDepart" : "createDepart" let url = departFormData.value.id ? "updateDepart" : "createDepart";
proxy.$post({ proxy.$post({
url: "/api/user/depart/" + url, url: "/api/user/depart/" + url,
data: departFormData.value, data: departFormData.value,
...@@ -171,7 +180,7 @@ const saveDepartForm = () => { ...@@ -171,7 +180,7 @@ const saveDepartForm = () => {
}, },
}); });
} }
}) });
}; };
const cancelDepartForm = () => { const cancelDepartForm = () => {
departForm.value.resetFields(); departForm.value.resetFields();
...@@ -179,10 +188,6 @@ const cancelDepartForm = () => { ...@@ -179,10 +188,6 @@ const cancelDepartForm = () => {
dialogVisible.value = false; dialogVisible.value = false;
}; };
// 处理树节点点击事件 // 处理树节点点击事件
const handleNodeClick = (data, node, element) => { const handleNodeClick = (data, node, element) => {
selectedNode.value = data; selectedNode.value = data;
...@@ -210,7 +215,6 @@ const loadTreeData = () => { ...@@ -210,7 +215,6 @@ const loadTreeData = () => {
}); });
}; };
// 人员信息 // 人员信息
const handleUserData = () => { const handleUserData = () => {
userLoading.value = true; userLoading.value = true;
...@@ -299,15 +303,13 @@ const handleCurrentPageChange = (page) => { ...@@ -299,15 +303,13 @@ const handleCurrentPageChange = (page) => {
handleUserData(); handleUserData();
}; };
onMounted(() => { onMounted(() => {
loadTreeData(); loadTreeData();
}); });
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
.depart-manage { .depart-manage {
padding: 20px; padding: 20px;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
...@@ -325,7 +327,7 @@ onMounted(() => { ...@@ -325,7 +327,7 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.handle-btn{ .handle-btn {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
...@@ -343,24 +345,24 @@ onMounted(() => { ...@@ -343,24 +345,24 @@ onMounted(() => {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.search-container{ .search-container {
padding: 0 20px; padding: 0 20px;
} }
.common-table{ .common-table {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.table-container {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.table-container{ .el-table {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex;
flex-direction: column;
.el-table{
flex: 1;
height: 0;
}
} }
}
} }
} }
} }
......
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