明树Git Lab
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jt_front
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
jt_front
Commits
7d1f1f9a
Commit
7d1f1f9a
authored
Jan 29, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
菜单创建
parent
5c1447f5
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
3678 additions
and
138 deletions
+3678
-138
routes.js
src/router/routes.js
+74
-2
evaluateAdd.vue
src/views/castbehind/evaluateAdd.vue
+40
-136
annual.vue
src/views/everydayPage/annual.vue
+5
-0
annualAdd.vue
src/views/everydayPage/annualAdd.vue
+5
-0
everyday.vue
src/views/everydayPage/everyday.vue
+188
-0
everydayAdd.vue
src/views/everydayPage/everydayAdd.vue
+781
-0
investment.vue
src/views/everydayPage/investment.vue
+188
-0
investmentAdd.vue
src/views/everydayPage/investmentAdd.vue
+781
-0
record.vue
src/views/everydayPage/record.vue
+5
-0
recordAdd.vue
src/views/everydayPage/recordAdd.vue
+5
-0
system.vue
src/views/everydayPage/system.vue
+192
-0
systemAdd.vue
src/views/everydayPage/systemAdd.vue
+445
-0
vscouncil.vue
src/views/everydayPage/vscouncil.vue
+188
-0
vscouncilAdd.vue
src/views/everydayPage/vscouncilAdd.vue
+781
-0
No files found.
src/router/routes.js
View file @
7d1f1f9a
...
@@ -202,15 +202,87 @@ const routes = [
...
@@ -202,15 +202,87 @@ const routes = [
{
{
path
:
"/share"
,
path
:
"/share"
,
name
:
"share"
,
name
:
"share"
,
title
:
"
投资目标责任书
"
,
title
:
"
参股企业管理
"
,
component
:
()
=>
import
(
"@/views/everydayPage/share.vue"
),
component
:
()
=>
import
(
"@/views/everydayPage/share.vue"
),
},
},
{
{
path
:
"/shareAdd"
,
path
:
"/shareAdd"
,
name
:
"shareAdd"
,
name
:
"shareAdd"
,
title
:
"
投资目标责任书
"
,
title
:
"
参股企业管理
"
,
component
:
()
=>
import
(
"@/views/everydayPage/shareAdd.vue"
),
component
:
()
=>
import
(
"@/views/everydayPage/shareAdd.vue"
),
},
},
{
path
:
"/system"
,
name
:
"system"
,
title
:
"体系建设"
,
component
:
()
=>
import
(
"@/views/everydayPage/system.vue"
),
},
{
path
:
"/systemAdd"
,
name
:
"systemAdd"
,
title
:
"体系建设"
,
component
:
()
=>
import
(
"@/views/everydayPage/systemAdd.vue"
),
},
{
path
:
"/investment"
,
name
:
"investment"
,
title
:
"投资规划"
,
component
:
()
=>
import
(
"@/views/everydayPage/investment.vue"
),
},
{
path
:
"/investmentAdd"
,
name
:
"investmentAdd"
,
title
:
"投资规划"
,
component
:
()
=>
import
(
"@/views/everydayPage/investmentAdd.vue"
),
},
{
path
:
"/everyday"
,
name
:
"everyday"
,
title
:
"日常信息"
,
component
:
()
=>
import
(
"@/views/everydayPage/everyday.vue"
),
},
{
path
:
"/everydayAdd"
,
name
:
"everydayAdd"
,
title
:
"日常信息"
,
component
:
()
=>
import
(
"@/views/everydayPage/everydayAdd.vue"
),
},
{
path
:
"/vscouncil"
,
name
:
"vscouncil"
,
title
:
"投委会管理"
,
component
:
()
=>
import
(
"@/views/everydayPage/vscouncil.vue"
),
},
{
path
:
"/vscouncilAdd"
,
name
:
"vscouncilAdd"
,
title
:
"投委会管理"
,
component
:
()
=>
import
(
"@/views/everydayPage/vscouncilAdd.vue"
),
},
{
path
:
"/record"
,
name
:
"record"
,
title
:
"投资档案管理"
,
component
:
()
=>
import
(
"@/views/everydayPage/record.vue"
),
},
{
path
:
"/recordAdd"
,
name
:
"recordAdd"
,
title
:
"投资档案管理"
,
component
:
()
=>
import
(
"@/views/everydayPage/recordAdd.vue"
),
},
{
path
:
"/annual"
,
name
:
"annual"
,
title
:
"年度计划"
,
component
:
()
=>
import
(
"@/views/everydayPage/annual.vue"
),
},
{
path
:
"/annualAdd"
,
name
:
"annualAdd"
,
title
:
"年度计划"
,
component
:
()
=>
import
(
"@/views/everydayPage/annualAdd.vue"
),
},
// {
// {
// path: "/bigScreen",
// path: "/bigScreen",
// name: "bigScreen",
// name: "bigScreen",
...
...
src/views/castbehind/evaluateAdd.vue
View file @
7d1f1f9a
...
@@ -14,145 +14,49 @@
...
@@ -14,145 +14,49 @@
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-row
:gutter=
"20"
>
<!-- 项目信息 -->
<el-col
:span=
"12"
>
<el-collapse-item
title=
"项目信息"
name=
"项目信息"
>
<el-form-item
label=
"文件名称"
>
<el-row
:gutter=
"20"
>
<el-input
<el-col
:span=
"12"
>
v-model=
"formData.qsmbgbzdw"
<el-form-item
label-width=
"0"
required
>
placeholder=
"请输入文件名称"
<el-select
/>
v-model=
"formData.projectId"
</el-form-item>
placeholder=
"请选择项目信息"
</el-col>
no-data-text=
"暂无数据"
<el-col
:span=
"12"
>
@
change=
"changeProject"
<el-form-item
label=
"颁布时间"
>
>
<el-date-picker
<el-option
v-model=
"formData.qsmsj"
v-for=
"item in projectList"
type=
"datetime"
:key=
"item.key"
format=
"YYYY-MM-DD HH:mm:ss"
:label=
"item.projectName"
value-format=
"YYYY-MM-DD HH:mm:ss"
:value=
"item.id"
placeholder=
"请选择颁布时间"
></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-collapse-item>
<el-input
v-model=
"formData.qsmpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.qsmpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
<el-collapse-item
<el-col
:span=
"24"
>
title=
"项目公司自查报告"
name=
"项目公司自查报告"
>
<el-form-item
label-width=
"0"
label=
""
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.
xmgszcbg
"
/>
<FileUploader
v-model=
"formData.
qsmzqpj
"
/>
</el-form-item>
</el-form-item>
</el-collapse-item>
</el-col>
</el-row>
<el-collapse-item
title=
"投资后评价报告"
name=
"投资后评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.hpjbg"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.hpjsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"报告编制单位"
>
<el-input
v-model=
"formData.hpjbgbzdw"
placeholder=
"请输入报告编制单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评审单位"
>
<el-input
v-model=
"formData.hpjpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.hpjpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"问题整改"
name=
"问题整改"
>
<DynamicTable
v-model=
"formData.tzhpjwtzgs"
:columns=
"problemColumns"
:default-row=
"problemDefaultRow"
:select-options=
"selectOptions"
:show-import-export=
"true"
export-name=
"问题整改数据"
:scrollbar-always-on=
"true"
:disabled=
"isPreview"
/>
</el-collapse-item>
<el-collapse-item
title=
"全生命周期评价报告"
name=
"全生命周期评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.qsmzqpj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.qsmsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"报告编制单位"
>
<el-input
v-model=
"formData.qsmbgbzdw"
placeholder=
"请输入报告编制单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评审单位"
>
<el-input
v-model=
"formData.qsmpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.qsmpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</el-form>
</div>
</div>
</div>
</div>
...
...
src/views/everydayPage/annual.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div>
annual
</div>
</
template
>
<
script
setup
></
script
>
<
style
scoped
lang=
"scss"
></
style
>
src/views/everydayPage/annualAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div>
annualAdd
</div>
</
template
>
<
script
setup
></
script
>
<
style
scoped
lang=
"scss"
></
style
>
src/views/everydayPage/everyday.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"manage-container"
>
<div
class=
"manage-wrap"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"shareAdd"
>
新增
</el-button>
</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=
"previewStatement(row)"
>
查看
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editStatement(row)"
>
编辑
</el-button
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteStatement(row)"
>
删除
</el-button
>
</
template
>
</common-table>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
let
tableData
=
ref
([]);
let
tableColumns
=
ref
([
{
prop
:
"qc"
,
label
:
"项目全称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"jc"
,
label
:
"项目简称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"nbtzglzt"
,
label
:
"内部投资管理主体"
,
showOverflowTooltip
:
true
,
width
:
170
,
},
{
prop
:
"xmscjd"
,
label
:
"项目所处阶段"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"gqjg"
,
label
:
"股权结构"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"xmzbjze"
,
label
:
"项目资本金总额(亿元)"
,
showOverflowTooltip
:
true
,
width
:
180
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
170
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
},
]);
let
loading
=
ref
(
false
);
let
total
=
ref
(
0
);
let
currentPage
=
ref
(
1
);
let
pageSize
=
ref
(
10
);
// 获取列表数据
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqyglList"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
});
};
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getStatementData
();
};
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getStatementData
();
};
const
shareAdd
=
()
=>
{
router
.
push
(
"/shareAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteCgqygl"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
</
style
>
src/views/everydayPage/everydayAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"default"
@
click=
"backClick"
>
返回
</el-button>
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
@
click=
"saveClick"
>
保存
</el-button>
</
template
>
</div>
</div>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"基本信息"
name=
"基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.key"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目所处阶段"
>
<el-select
v-model=
"formData.xmscjd"
placeholder=
"请选择项目所处阶段"
>
<el-option
v-for=
"item in options?.xmjd"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"全称"
>
<el-input
v-model=
"formData.qc"
placeholder=
"请输入全称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"简称"
>
<el-input
v-model=
"formData.jc"
placeholder=
"请输入简称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"内部投资管理主体"
>
<el-input
v-model=
"formData.nbtzglzt"
placeholder=
"请输入内部投资管理主体"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"股权结构"
>
<el-input
v-model=
"formData.gqjg"
placeholder=
"请输入股权结构"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"出资情况"
name=
"出资情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"项目资本金总额(亿元)"
>
<el-input
v-model
.
number=
"formData.xmzbjze"
placeholder=
"请输入项目资本金总额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司资本金应出资总额(亿元)"
>
<el-input
v-model
.
number=
"formData.gszbjyczze"
placeholder=
"请输入公司资本金应出资总额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycze"
placeholder=
"请输入公司当前应出资额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前已出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqyjcze"
placeholder=
"请输入公司当前已出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出未出金额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycwcje"
placeholder=
"请输入公司当前应出未出金额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前剩余出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqsycze"
placeholder=
"请输入公司当前剩余出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"超股比出资情况"
>
<el-input
v-model=
"formData.cgbczqk"
placeholder=
"请输入超股比出资情况"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"合同约定权益获取"
name=
"合同约定权益获取"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"我方权益合同条款约定"
>
<el-input
type=
"textarea"
v-model=
"formData.wfqyhttkyd"
placeholder=
"请输入我方权益合同条款约定(市场、设计、施工、运营权、养护份额等权益)"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取进展"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqjz"
placeholder=
"请输入权益获取进展"
:rows=
"3"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取与约定不一致的情况"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqyyd"
placeholder=
"请输入权益获取与约定不一致的情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"督办情况"
>
<el-input
type=
"textarea"
v-model=
"formData.dbqk"
placeholder=
"请输入督办情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"分红情况"
name=
"分红情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"利润分配/分红约定"
>
<el-input
v-model=
"formData.lrfp"
placeholder=
"请输入利润分配/分红约定"
:rows=
"2"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否达到利润分配条件"
>
<el-radio-group
placeholder=
"请选择是否达到利润分配条件"
v-model=
"formData.sfddlrfptj"
>
<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-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计获取分红(万元)"
>
<el-input
v-model
.
number=
"formData.ljhqfh"
placeholder=
"请输入累计获取分红(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"资金流出"
name=
"资金流出"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"应投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ytrzj"
placeholder=
"请输入应投入资金(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ljtrzj"
placeholder=
"请输入累计投入资金(万元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"尚需投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.sxtrzj"
placeholder=
"请输入尚需投入资金(万元)"
/>
</el-form-item>
</el-col>
</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
v-model
.
number=
"scope.row.htje"
placeholder=
"请输入合同金额(万元)"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ywlr"
label=
"业务利润(万元)"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.ywlr"
placeholder=
"请输入业务利润(万元)"
/>
</
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
v-model
.
number=
"scope.row.fhje"
placeholder=
"请输入分红金额"
/>
</
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-col
:span=
"12"
>
<el-form-item
label=
"静态"
>
<el-input
v-model
.
number=
"formData.jt"
placeholder=
"请输入静态"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"折现(3.5%)"
>
<el-input
v-model
.
number=
"formData.zx"
placeholder=
"请输入折现(3.5%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系人"
>
<el-input
v-model=
"formData.lxr"
placeholder=
"请输入联系人"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系方式"
>
<el-input
v-model=
"formData.lxfs"
placeholder=
"请输入联系方式"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
>
<el-input
type=
"textarea"
v-model=
"formData.bz"
placeholder=
"请输入备注"
:rows=
"4"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
,
computed
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
number
}
from
"echarts"
;
// 初始化全局变量
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
route
=
useRoute
();
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
formData
=
reactive
({
projectName
:
""
,
qc
:
""
,
jc
:
""
,
nbtzglzt
:
""
,
xmscjd
:
""
,
gqjg
:
""
,
xmzbjze
:
""
,
gszbjyczze
:
""
,
gsdqycze
:
""
,
gsdqyjcze
:
""
,
gsdqycwcje
:
""
,
gsdqsycze
:
""
,
cgbczqk
:
""
,
wfqyhttkyd
:
""
,
qyhqjz
:
""
,
qyhqyyd
:
""
,
dbqk
:
""
,
lrfp
:
""
,
sfddlrfptj
:
""
,
ljhqfh
:
""
,
ytrzj
:
""
,
ljtrzj
:
""
,
sxtrzj
:
""
,
jt
:
""
,
zx
:
""
,
lxr
:
""
,
lxfs
:
""
,
bz
:
""
,
projectId
:
""
,
del
:
0
,
// del字段保留0默认值(删除标记,0为正常)
createdAt
:
""
,
updatedAt
:
""
,
});
let
options
=
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
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
total
=
values
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
,
0
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
return
sums
;
}
function
sumTzfhsColumns
(
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
===
"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
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
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
=
()
=>
{
wtyys
.
value
.
push
({});
};
const
deletePfyjlsqk
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
wtyys
.
value
.
splice
(
index
,
1
);
});
};
let
tzfhs
=
ref
([]);
// 新增
const
addTzfhs
=
()
=>
{
tzfhs
.
value
.
push
({});
};
// 删除
const
deleteTzfhs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
tzfhs
.
value
.
splice
(
index
,
1
);
});
};
// 获取项目列表
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
,
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
||
[];
},
});
};
// 选择项目后同步项目名称
const
changeProject
=
(
val
)
=>
{
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
{
formData
.
projectName
=
selectItem
.
projectName
;
}
};
// 获取单条记录详情(编辑/预览)
const
getRcCgqyglDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqygl"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
Object
.
assign
(
formData
,
{
...
data
,
});
if
(
data
.
wtyys
)
{
Object
.
assign
(
wtyys
.
value
,
data
.
wtyys
);
}
// 新增:加载
if
(
data
.
tzfhs
)
{
Object
.
assign
(
tzfhs
.
value
,
data
.
tzfhs
);
}
},
});
};
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
// 基础校验
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
// 区分新增/编辑
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateCgqygl"
:
"/api/project/createCgqygl"
;
// 处理空数字字段:空值转为null,避免提交空字符串
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
wtyys
:
wtyys
.
value
,
tzfhs
:
tzfhs
.
value
,
};
proxy
.
$post
({
url
:
url
,
data
:
submitData
,
callback
:
(
res
)
=>
{
loading
.
value
=
false
;
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
});
};
// 页面初始化
onMounted
(()
=>
{
// 获取项目列表
getProjectData
();
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
// 如果有ID则加载详情
if
(
rcCgqyglId
.
value
)
{
getRcCgqyglDetail
();
}
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
// @import "@/styles/manage.less";
.subtotal {
background-color: #f5f7fa;
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
>
src/views/everydayPage/investment.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"manage-container"
>
<div
class=
"manage-wrap"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"shareAdd"
>
新增
</el-button>
</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=
"previewStatement(row)"
>
查看
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editStatement(row)"
>
编辑
</el-button
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteStatement(row)"
>
删除
</el-button
>
</
template
>
</common-table>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
let
tableData
=
ref
([]);
let
tableColumns
=
ref
([
{
prop
:
"qc"
,
label
:
"项目全称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"jc"
,
label
:
"项目简称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"nbtzglzt"
,
label
:
"内部投资管理主体"
,
showOverflowTooltip
:
true
,
width
:
170
,
},
{
prop
:
"xmscjd"
,
label
:
"项目所处阶段"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"gqjg"
,
label
:
"股权结构"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"xmzbjze"
,
label
:
"项目资本金总额(亿元)"
,
showOverflowTooltip
:
true
,
width
:
180
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
170
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
},
]);
let
loading
=
ref
(
false
);
let
total
=
ref
(
0
);
let
currentPage
=
ref
(
1
);
let
pageSize
=
ref
(
10
);
// 获取列表数据
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqyglList"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
});
};
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getStatementData
();
};
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getStatementData
();
};
const
shareAdd
=
()
=>
{
router
.
push
(
"/shareAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteCgqygl"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
</
style
>
src/views/everydayPage/investmentAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"default"
@
click=
"backClick"
>
返回
</el-button>
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
@
click=
"saveClick"
>
保存
</el-button>
</
template
>
</div>
</div>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"基本信息"
name=
"基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.key"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目所处阶段"
>
<el-select
v-model=
"formData.xmscjd"
placeholder=
"请选择项目所处阶段"
>
<el-option
v-for=
"item in options?.xmjd"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"全称"
>
<el-input
v-model=
"formData.qc"
placeholder=
"请输入全称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"简称"
>
<el-input
v-model=
"formData.jc"
placeholder=
"请输入简称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"内部投资管理主体"
>
<el-input
v-model=
"formData.nbtzglzt"
placeholder=
"请输入内部投资管理主体"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"股权结构"
>
<el-input
v-model=
"formData.gqjg"
placeholder=
"请输入股权结构"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"出资情况"
name=
"出资情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"项目资本金总额(亿元)"
>
<el-input
v-model
.
number=
"formData.xmzbjze"
placeholder=
"请输入项目资本金总额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司资本金应出资总额(亿元)"
>
<el-input
v-model
.
number=
"formData.gszbjyczze"
placeholder=
"请输入公司资本金应出资总额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycze"
placeholder=
"请输入公司当前应出资额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前已出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqyjcze"
placeholder=
"请输入公司当前已出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出未出金额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycwcje"
placeholder=
"请输入公司当前应出未出金额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前剩余出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqsycze"
placeholder=
"请输入公司当前剩余出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"超股比出资情况"
>
<el-input
v-model=
"formData.cgbczqk"
placeholder=
"请输入超股比出资情况"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"合同约定权益获取"
name=
"合同约定权益获取"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"我方权益合同条款约定"
>
<el-input
type=
"textarea"
v-model=
"formData.wfqyhttkyd"
placeholder=
"请输入我方权益合同条款约定(市场、设计、施工、运营权、养护份额等权益)"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取进展"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqjz"
placeholder=
"请输入权益获取进展"
:rows=
"3"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取与约定不一致的情况"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqyyd"
placeholder=
"请输入权益获取与约定不一致的情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"督办情况"
>
<el-input
type=
"textarea"
v-model=
"formData.dbqk"
placeholder=
"请输入督办情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"分红情况"
name=
"分红情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"利润分配/分红约定"
>
<el-input
v-model=
"formData.lrfp"
placeholder=
"请输入利润分配/分红约定"
:rows=
"2"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否达到利润分配条件"
>
<el-radio-group
placeholder=
"请选择是否达到利润分配条件"
v-model=
"formData.sfddlrfptj"
>
<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-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计获取分红(万元)"
>
<el-input
v-model
.
number=
"formData.ljhqfh"
placeholder=
"请输入累计获取分红(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"资金流出"
name=
"资金流出"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"应投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ytrzj"
placeholder=
"请输入应投入资金(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ljtrzj"
placeholder=
"请输入累计投入资金(万元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"尚需投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.sxtrzj"
placeholder=
"请输入尚需投入资金(万元)"
/>
</el-form-item>
</el-col>
</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
v-model
.
number=
"scope.row.htje"
placeholder=
"请输入合同金额(万元)"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ywlr"
label=
"业务利润(万元)"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.ywlr"
placeholder=
"请输入业务利润(万元)"
/>
</
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
v-model
.
number=
"scope.row.fhje"
placeholder=
"请输入分红金额"
/>
</
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-col
:span=
"12"
>
<el-form-item
label=
"静态"
>
<el-input
v-model
.
number=
"formData.jt"
placeholder=
"请输入静态"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"折现(3.5%)"
>
<el-input
v-model
.
number=
"formData.zx"
placeholder=
"请输入折现(3.5%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系人"
>
<el-input
v-model=
"formData.lxr"
placeholder=
"请输入联系人"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系方式"
>
<el-input
v-model=
"formData.lxfs"
placeholder=
"请输入联系方式"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
>
<el-input
type=
"textarea"
v-model=
"formData.bz"
placeholder=
"请输入备注"
:rows=
"4"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
,
computed
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
number
}
from
"echarts"
;
// 初始化全局变量
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
route
=
useRoute
();
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
formData
=
reactive
({
projectName
:
""
,
qc
:
""
,
jc
:
""
,
nbtzglzt
:
""
,
xmscjd
:
""
,
gqjg
:
""
,
xmzbjze
:
""
,
gszbjyczze
:
""
,
gsdqycze
:
""
,
gsdqyjcze
:
""
,
gsdqycwcje
:
""
,
gsdqsycze
:
""
,
cgbczqk
:
""
,
wfqyhttkyd
:
""
,
qyhqjz
:
""
,
qyhqyyd
:
""
,
dbqk
:
""
,
lrfp
:
""
,
sfddlrfptj
:
""
,
ljhqfh
:
""
,
ytrzj
:
""
,
ljtrzj
:
""
,
sxtrzj
:
""
,
jt
:
""
,
zx
:
""
,
lxr
:
""
,
lxfs
:
""
,
bz
:
""
,
projectId
:
""
,
del
:
0
,
// del字段保留0默认值(删除标记,0为正常)
createdAt
:
""
,
updatedAt
:
""
,
});
let
options
=
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
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
total
=
values
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
,
0
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
return
sums
;
}
function
sumTzfhsColumns
(
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
===
"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
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
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
=
()
=>
{
wtyys
.
value
.
push
({});
};
const
deletePfyjlsqk
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
wtyys
.
value
.
splice
(
index
,
1
);
});
};
let
tzfhs
=
ref
([]);
// 新增
const
addTzfhs
=
()
=>
{
tzfhs
.
value
.
push
({});
};
// 删除
const
deleteTzfhs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
tzfhs
.
value
.
splice
(
index
,
1
);
});
};
// 获取项目列表
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
,
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
||
[];
},
});
};
// 选择项目后同步项目名称
const
changeProject
=
(
val
)
=>
{
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
{
formData
.
projectName
=
selectItem
.
projectName
;
}
};
// 获取单条记录详情(编辑/预览)
const
getRcCgqyglDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqygl"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
Object
.
assign
(
formData
,
{
...
data
,
});
if
(
data
.
wtyys
)
{
Object
.
assign
(
wtyys
.
value
,
data
.
wtyys
);
}
// 新增:加载
if
(
data
.
tzfhs
)
{
Object
.
assign
(
tzfhs
.
value
,
data
.
tzfhs
);
}
},
});
};
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
// 基础校验
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
// 区分新增/编辑
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateCgqygl"
:
"/api/project/createCgqygl"
;
// 处理空数字字段:空值转为null,避免提交空字符串
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
wtyys
:
wtyys
.
value
,
tzfhs
:
tzfhs
.
value
,
};
proxy
.
$post
({
url
:
url
,
data
:
submitData
,
callback
:
(
res
)
=>
{
loading
.
value
=
false
;
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
});
};
// 页面初始化
onMounted
(()
=>
{
// 获取项目列表
getProjectData
();
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
// 如果有ID则加载详情
if
(
rcCgqyglId
.
value
)
{
getRcCgqyglDetail
();
}
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
// @import "@/styles/manage.less";
.subtotal {
background-color: #f5f7fa;
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
>
src/views/everydayPage/record.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div>
record
</div>
</
template
>
<
script
setup
></
script
>
<
style
scoped
lang=
"scss"
></
style
>
src/views/everydayPage/recordAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div>
recordAdd
</div>
</
template
>
<
script
setup
></
script
>
<
style
scoped
lang=
"scss"
></
style
>
src/views/everydayPage/system.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"manage-container"
>
<div
class=
"manage-wrap"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"evaluateAdd"
>
新增
</el-button>
</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=
"previewStatement(row)"
>
查看
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editStatement(row)"
>
编辑
</el-button
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteStatement(row)"
>
删除
</el-button
>
</
template
>
</common-table>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
let
tableData
=
ref
([]);
let
tableColumns
=
ref
([
{
prop
:
"projectName"
,
label
:
"项目信息"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"xmgszcbgLen"
,
label
:
"文件名称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"hpjbgLen"
,
label
:
"文件层级"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"qsmzqpjLen"
,
label
:
"文件类别"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"附件上传"
,
label
:
"文件类别"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"颁布时间"
,
label
:
"文件类别"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
170
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
},
]);
let
loading
=
ref
(
false
);
let
total
=
ref
(
0
);
let
currentPage
=
ref
(
1
);
let
pageSize
=
ref
(
10
);
// 获取列表数据
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getTzhpjList"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
tableData
.
value
=
data
.
rows
.
map
((
it
)
=>
{
return
{
...
it
,
xmgszcbgLen
:
it
.
xmgszcbg
?.
length
+
"个"
,
hpjbgLen
:
it
.
hpjbg
?.
length
+
"个"
,
qsmzqpjLen
:
it
.
qsmzqpj
?.
length
+
"个"
,
};
});
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
});
};
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getStatementData
();
};
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getStatementData
();
};
const
evaluateAdd
=
()
=>
{
router
.
push
(
"/evaluateAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"evaluateAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"evaluateAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteTzhpj"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
</
style
>
src/views/everydayPage/systemAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"default"
@
click=
"backClick"
>
返回
</el-button>
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
@
click=
"saveClick"
>
保存
</el-button>
</
template
>
</div>
</div>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<!-- 项目信息 -->
<el-collapse-item
title=
"项目信息"
name=
"项目信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"0"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.key"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"项目公司自查报告"
name=
"项目公司自查报告"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.xmgszcbg"
/>
</el-form-item>
</el-collapse-item>
<el-collapse-item
title=
"投资后评价报告"
name=
"投资后评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.hpjbg"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.hpjsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"报告编制单位"
>
<el-input
v-model=
"formData.hpjbgbzdw"
placeholder=
"请输入报告编制单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评审单位"
>
<el-input
v-model=
"formData.hpjpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.hpjpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"问题整改"
name=
"问题整改"
>
<DynamicTable
v-model=
"formData.tzhpjwtzgs"
:columns=
"problemColumns"
:default-row=
"problemDefaultRow"
:select-options=
"selectOptions"
:show-import-export=
"true"
export-name=
"问题整改数据"
:scrollbar-always-on=
"true"
:disabled=
"isPreview"
/>
</el-collapse-item>
<el-collapse-item
title=
"全生命周期评价报告"
name=
"全生命周期评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.qsmzqpj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.qsmsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"报告编制单位"
>
<el-input
v-model=
"formData.qsmbgbzdw"
placeholder=
"请输入报告编制单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评审单位"
>
<el-input
v-model=
"formData.qsmpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.qsmpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
FileUploader
from
"../../components/FileUploader/index.vue"
;
// 引入增强后的DynamicTable组件
import
DynamicTable
from
"../../components/FormDynamicTable/index.vue"
;
// 初始化全局变量
const
router
=
useRouter
();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
// 折叠面板默认展开项
const
activeCollapse
=
ref
([
"项目信息"
,
"项目公司自查报告"
,
"投资后评价报告"
,
"问题整改"
,
"全生命周期评价报告"
,
]);
// ========== 问题整改表格配置 ==========
// 列配置(包含input、textarea、datetime、radio类型)
const
problemColumns
=
ref
([
{
prop
:
"ccwt"
,
label
:
"存在的问题"
,
type
:
"input"
,
placeholder
:
"请输入存在的问题"
,
minWidth
:
140
,
},
{
prop
:
"wtxs"
,
label
:
"问题详述"
,
type
:
"textarea"
,
placeholder
:
"请输入问题详述"
,
rows
:
2
,
minWidth
:
140
,
},
{
prop
:
"zgcs"
,
label
:
"整改措施"
,
type
:
"textarea"
,
placeholder
:
"请输入整改措施"
,
rows
:
2
,
minWidth
:
140
,
},
{
prop
:
"lsqk"
,
label
:
"落实情况"
,
type
:
"textarea"
,
placeholder
:
"请输入落实情况"
,
rows
:
2
,
minWidth
:
140
,
},
{
prop
:
"zrbm"
,
label
:
"责任部门"
,
type
:
"input"
,
placeholder
:
"请输入责任部门"
,
minWidth
:
140
,
},
{
prop
:
"zrr"
,
label
:
"责任人"
,
type
:
"input"
,
placeholder
:
"请输入责任人"
,
minWidth
:
140
,
},
{
prop
:
"zgqx"
,
label
:
"整改期限"
,
type
:
"datetime"
,
// 日期时间选择器
placeholder
:
"请选择整改期限"
,
format
:
"YYYY-MM-DD HH:mm:ss"
,
valueFormat
:
"YYYY-MM-DD HH:mm:ss"
,
minWidth
:
140
,
},
{
prop
:
"sfgb"
,
label
:
"是否关闭"
,
type
:
"radio"
,
// 单选框组
optionKey
:
"sf"
,
// 对应selectOptions中的sf选项
align
:
"center"
,
minWidth
:
140
,
},
]);
// 问题整改默认行数据
const
problemDefaultRow
=
ref
({
ccwt
:
""
,
wtxs
:
""
,
zgcs
:
""
,
lsqk
:
""
,
zrbm
:
""
,
zrr
:
""
,
zgqx
:
""
,
sfgb
:
""
,
fjcl
:
[],
});
// 单选框选项配置
const
selectOptions
=
ref
({
sf
:
[
{
key
:
1
,
name
:
"是"
},
{
key
:
2
,
name
:
"否"
},
],
});
// ========== 表单数据 ==========
const
formData
=
reactive
({
xmgszcbg
:
[],
hpjbg
:
[],
qsmzqpj
:
[],
// 问题整改列表(由DynamicTable自动维护)
tzhpjwtzgs
:
[],
});
// 加载状态
const
loading
=
ref
(
false
);
// 是否预览模式
const
isPreview
=
ref
(
!!
route
.
query
.
isPreview
);
// 项目列表数据
const
projectList
=
ref
([]);
// 当前编辑的记录ID
const
rcCgqyglId
=
ref
(
route
.
query
.
id
||
""
);
// ========== 原有方法保留(移除手动新增/删除) ==========
// 获取项目列表
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
,
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
||
[];
},
});
};
// 选择项目后同步项目名称
const
changeProject
=
(
val
)
=>
{
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
{
formData
.
projectName
=
selectItem
.
projectName
;
}
};
// 获取单条记录详情
const
getJsqtzjcDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getTzhpjInfo"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
Object
.
assign
(
formData
,
data
);
// 确保数组字段有默认值
formData
.
tzhpjwtzgs
=
data
.
tzhpjwtzgs
||
[];
formData
.
xmgszcbg
=
data
.
xmgszcbg
||
[];
formData
.
hpjbg
=
data
.
hpjbg
||
[];
formData
.
qsmzqpj
=
data
.
qsmzqpj
||
[];
// 同步单选选项(如果从接口获取)
if
(
data
.
sfOptions
)
{
selectOptions
.
value
.
sf
=
data
.
sfOptions
;
}
},
});
};
// 返回上一页
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateTzhpj"
:
"/api/project/createTzhpj"
;
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
tzhpjwtzgs
:
formData
.
tzhpjwtzgs
,
};
proxy
.
$post
({
url
:
url
,
data
:
submitData
,
callback
:
()
=>
{
loading
.
value
=
false
;
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
error
:
()
=>
{
loading
.
value
=
false
;
ElMessage
.
error
(
"操作失败,请稍后重试"
);
},
});
};
let
options
=
ref
();
// 页面初始化
onMounted
(()
=>
{
getProjectData
();
try
{
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
))
||
{};
// 合并全局选项到selectOptions
if
(
options
.
value
.
sf
)
{
selectOptions
.
value
.
sf
=
options
.
value
.
sf
;
}
}
catch
(
e
)
{
options
.
value
=
{};
console
.
warn
(
"解析resourceData失败:"
,
e
);
}
if
(
rcCgqyglId
.
value
)
{
getJsqtzjcDetail
();
}
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
min-height: calc(100vh - 60px);
}
.add-project-content {
background: #fff;
border-radius: 4px;
padding: 20px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #ebeef5;
}
.tab-handle {
margin-bottom: 10px;
text-align: left;
}
:deep(.el-table) {
--el-table-header-text-color: #303133;
--el-table-row-hover-bg-color: #f8f9fa;
}
:deep(.el-collapse-item__header) {
font-weight: 600;
font-size: 14px;
}
:deep(.el-form-item__label) {
font-weight: 500;
}
</
style
>
src/views/everydayPage/vscouncil.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"manage-container"
>
<div
class=
"manage-wrap"
>
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"shareAdd"
>
新增
</el-button>
</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=
"previewStatement(row)"
>
查看
</el-button
>
<el-button
link
type=
"primary"
size=
"small"
@
click=
"editStatement(row)"
>
编辑
</el-button
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteStatement(row)"
>
删除
</el-button
>
</
template
>
</common-table>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
CommonTable
from
"@/components/common/commonTable.vue"
;
const
router
=
useRouter
();
const
{
proxy
}
=
getCurrentInstance
();
let
tableData
=
ref
([]);
let
tableColumns
=
ref
([
{
prop
:
"qc"
,
label
:
"项目全称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"jc"
,
label
:
"项目简称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"nbtzglzt"
,
label
:
"内部投资管理主体"
,
showOverflowTooltip
:
true
,
width
:
170
,
},
{
prop
:
"xmscjd"
,
label
:
"项目所处阶段"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"gqjg"
,
label
:
"股权结构"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
prop
:
"xmzbjze"
,
label
:
"项目资本金总额(亿元)"
,
showOverflowTooltip
:
true
,
width
:
180
,
},
{
prop
:
"operations"
,
label
:
"操作"
,
width
:
170
,
slot
:
"operations"
,
fixed
:
"right"
,
align
:
"center"
,
},
]);
let
loading
=
ref
(
false
);
let
total
=
ref
(
0
);
let
currentPage
=
ref
(
1
);
let
pageSize
=
ref
(
10
);
// 获取列表数据
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqyglList"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
tableData
.
value
=
data
.
rows
;
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
});
};
// 分页
const
handleSizeChange
=
(
size
)
=>
{
pageSize
.
value
=
size
;
currentPage
.
value
=
1
;
getStatementData
();
};
const
handleCurrentPageChange
=
(
page
)
=>
{
currentPage
.
value
=
page
;
getStatementData
();
};
const
shareAdd
=
()
=>
{
router
.
push
(
"/shareAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"shareAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteCgqygl"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
</
style
>
src/views/everydayPage/vscouncilAdd.vue
0 → 100644
View file @
7d1f1f9a
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"default"
@
click=
"backClick"
>
返回
</el-button>
<template
v-if=
"!loading && !isPreview"
>
<el-button
type=
"primary"
@
click=
"saveClick"
>
保存
</el-button>
</
template
>
</div>
</div>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"基本信息"
name=
"基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
no-data-text=
"暂无数据"
@
change=
"changeProject"
>
<el-option
v-for=
"item in projectList"
:key=
"item.key"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目所处阶段"
>
<el-select
v-model=
"formData.xmscjd"
placeholder=
"请选择项目所处阶段"
>
<el-option
v-for=
"item in options?.xmjd"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"全称"
>
<el-input
v-model=
"formData.qc"
placeholder=
"请输入全称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"简称"
>
<el-input
v-model=
"formData.jc"
placeholder=
"请输入简称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"内部投资管理主体"
>
<el-input
v-model=
"formData.nbtzglzt"
placeholder=
"请输入内部投资管理主体"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"股权结构"
>
<el-input
v-model=
"formData.gqjg"
placeholder=
"请输入股权结构"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"出资情况"
name=
"出资情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"项目资本金总额(亿元)"
>
<el-input
v-model
.
number=
"formData.xmzbjze"
placeholder=
"请输入项目资本金总额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司资本金应出资总额(亿元)"
>
<el-input
v-model
.
number=
"formData.gszbjyczze"
placeholder=
"请输入公司资本金应出资总额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycze"
placeholder=
"请输入公司当前应出资额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前已出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqyjcze"
placeholder=
"请输入公司当前已出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前应出未出金额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqycwcje"
placeholder=
"请输入公司当前应出未出金额(亿元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"公司当前剩余出资额(亿元)"
>
<el-input
v-model
.
number=
"formData.gsdqsycze"
placeholder=
"请输入公司当前剩余出资额(亿元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"210"
label=
"超股比出资情况"
>
<el-input
v-model=
"formData.cgbczqk"
placeholder=
"请输入超股比出资情况"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"合同约定权益获取"
name=
"合同约定权益获取"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"我方权益合同条款约定"
>
<el-input
type=
"textarea"
v-model=
"formData.wfqyhttkyd"
placeholder=
"请输入我方权益合同条款约定(市场、设计、施工、运营权、养护份额等权益)"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取进展"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqjz"
placeholder=
"请输入权益获取进展"
:rows=
"3"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"权益获取与约定不一致的情况"
>
<el-input
type=
"textarea"
v-model=
"formData.qyhqyyd"
placeholder=
"请输入权益获取与约定不一致的情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"督办情况"
>
<el-input
type=
"textarea"
v-model=
"formData.dbqk"
placeholder=
"请输入督办情况"
:rows=
"3"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"分红情况"
name=
"分红情况"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"利润分配/分红约定"
>
<el-input
v-model=
"formData.lrfp"
placeholder=
"请输入利润分配/分红约定"
:rows=
"2"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"是否达到利润分配条件"
>
<el-radio-group
placeholder=
"请选择是否达到利润分配条件"
v-model=
"formData.sfddlrfptj"
>
<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-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计获取分红(万元)"
>
<el-input
v-model
.
number=
"formData.ljhqfh"
placeholder=
"请输入累计获取分红(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"资金流出"
name=
"资金流出"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"应投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ytrzj"
placeholder=
"请输入应投入资金(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.ljtrzj"
placeholder=
"请输入累计投入资金(万元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"尚需投入资金(万元)"
>
<el-input
v-model
.
number=
"formData.sxtrzj"
placeholder=
"请输入尚需投入资金(万元)"
/>
</el-form-item>
</el-col>
</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
v-model
.
number=
"scope.row.htje"
placeholder=
"请输入合同金额(万元)"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ywlr"
label=
"业务利润(万元)"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.ywlr"
placeholder=
"请输入业务利润(万元)"
/>
</
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
v-model
.
number=
"scope.row.fhje"
placeholder=
"请输入分红金额"
/>
</
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-col
:span=
"12"
>
<el-form-item
label=
"静态"
>
<el-input
v-model
.
number=
"formData.jt"
placeholder=
"请输入静态"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"折现(3.5%)"
>
<el-input
v-model
.
number=
"formData.zx"
placeholder=
"请输入折现(3.5%)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系人"
>
<el-input
v-model=
"formData.lxr"
placeholder=
"请输入联系人"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系方式"
>
<el-input
v-model=
"formData.lxfs"
placeholder=
"请输入联系方式"
/>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
>
<el-input
type=
"textarea"
v-model=
"formData.bz"
placeholder=
"请输入备注"
:rows=
"4"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
,
computed
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
number
}
from
"echarts"
;
// 初始化全局变量
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
route
=
useRoute
();
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
formData
=
reactive
({
projectName
:
""
,
qc
:
""
,
jc
:
""
,
nbtzglzt
:
""
,
xmscjd
:
""
,
gqjg
:
""
,
xmzbjze
:
""
,
gszbjyczze
:
""
,
gsdqycze
:
""
,
gsdqyjcze
:
""
,
gsdqycwcje
:
""
,
gsdqsycze
:
""
,
cgbczqk
:
""
,
wfqyhttkyd
:
""
,
qyhqjz
:
""
,
qyhqyyd
:
""
,
dbqk
:
""
,
lrfp
:
""
,
sfddlrfptj
:
""
,
ljhqfh
:
""
,
ytrzj
:
""
,
ljtrzj
:
""
,
sxtrzj
:
""
,
jt
:
""
,
zx
:
""
,
lxr
:
""
,
lxfs
:
""
,
bz
:
""
,
projectId
:
""
,
del
:
0
,
// del字段保留0默认值(删除标记,0为正常)
createdAt
:
""
,
updatedAt
:
""
,
});
let
options
=
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
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
total
=
values
.
reduce
((
prev
,
curr
)
=>
prev
+
curr
,
0
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
return
sums
;
}
function
sumTzfhsColumns
(
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
===
"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
);
sums
[
index
]
=
total
.
toFixed
(
2
)
+
"(万元)"
;
return
;
}
sums
[
index
]
=
""
;
});
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
=
()
=>
{
wtyys
.
value
.
push
({});
};
const
deletePfyjlsqk
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
wtyys
.
value
.
splice
(
index
,
1
);
});
};
let
tzfhs
=
ref
([]);
// 新增
const
addTzfhs
=
()
=>
{
tzfhs
.
value
.
push
({});
};
// 删除
const
deleteTzfhs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
tzfhs
.
value
.
splice
(
index
,
1
);
});
};
// 获取项目列表
const
getProjectData
=
()
=>
{
proxy
.
$post
({
url
:
"/api/project/listProject"
,
data
:
{
page
:
1
,
pagesize
:
1000
,
attributes
:
[],
menuType
:
"xmjc"
,
},
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
||
[];
},
});
};
// 选择项目后同步项目名称
const
changeProject
=
(
val
)
=>
{
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
{
formData
.
projectName
=
selectItem
.
projectName
;
}
};
// 获取单条记录详情(编辑/预览)
const
getRcCgqyglDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getCgqygl"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
Object
.
assign
(
formData
,
{
...
data
,
});
if
(
data
.
wtyys
)
{
Object
.
assign
(
wtyys
.
value
,
data
.
wtyys
);
}
// 新增:加载
if
(
data
.
tzfhs
)
{
Object
.
assign
(
tzfhs
.
value
,
data
.
tzfhs
);
}
},
});
};
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
// 基础校验
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
// 区分新增/编辑
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateCgqygl"
:
"/api/project/createCgqygl"
;
// 处理空数字字段:空值转为null,避免提交空字符串
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
wtyys
:
wtyys
.
value
,
tzfhs
:
tzfhs
.
value
,
};
proxy
.
$post
({
url
:
url
,
data
:
submitData
,
callback
:
(
res
)
=>
{
loading
.
value
=
false
;
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
});
};
// 页面初始化
onMounted
(()
=>
{
// 获取项目列表
getProjectData
();
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
// 如果有ID则加载详情
if
(
rcCgqyglId
.
value
)
{
getRcCgqyglDetail
();
}
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
// @import "@/styles/manage.less";
.subtotal {
background-color: #f5f7fa;
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
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment