明树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
f5c92dfa
Commit
f5c92dfa
authored
Feb 09, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
需求开发
parent
a172f9f8
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
940 additions
and
2 deletions
+940
-2
FinancialTable.vue
src/components/FinancialTable.vue
+2
-2
routes.js
src/router/routes.js
+14
-0
constructionTime.vue
src/views/investingManage/constructionTime.vue
+178
-0
constructionTimeAdd.vue
src/views/investingManage/constructionTimeAdd.vue
+746
-0
No files found.
src/components/FinancialTable.vue
View file @
f5c92dfa
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
prop=
"indicatorName"
prop=
"indicatorName"
label=
"名称"
label=
"名称"
align=
"left"
align=
"left"
width=
"260"
min-
width=
"260"
>
>
<template
#
default=
"
{ row }">
<template
#
default=
"
{ row }">
<div
style=
"text-align: left"
>
{{
row
.
indicatorName
}}
</div>
<div
style=
"text-align: left"
>
{{
row
.
indicatorName
}}
</div>
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
v-for=
"time in validDynamicTimeList"
v-for=
"time in validDynamicTimeList"
:key=
"`time-col-${time}`"
:key=
"`time-col-${time}`"
:label=
"time"
:label=
"time"
width=
"140"
min-
width=
"140"
align=
"center"
align=
"center"
>
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
...
...
src/router/routes.js
View file @
f5c92dfa
...
@@ -116,6 +116,20 @@ const routes = [
...
@@ -116,6 +116,20 @@ const routes = [
title
:
"重大风险防控"
,
title
:
"重大风险防控"
,
component
:
()
=>
import
(
"@/views/investingManage/majorRisk.vue"
),
component
:
()
=>
import
(
"@/views/investingManage/majorRisk.vue"
),
},
},
{
path
:
"/constructionTime"
,
name
:
"constructionTime"
,
title
:
"建设期投资回收"
,
component
:
()
=>
import
(
"@/views/investingManage/constructionTime.vue"
),
},
{
path
:
"/constructionTimeAdd"
,
name
:
"constructionTimeAdd"
,
title
:
"建设期投资回收"
,
component
:
()
=>
import
(
"@/views/investingManage/constructionTimeAdd.vue"
),
},
{
{
path
:
"/addRisk"
,
path
:
"/addRisk"
,
name
:
"addRisk"
,
name
:
"addRisk"
,
...
...
src/views/investingManage/constructionTime.vue
0 → 100644
View file @
f5c92dfa
<
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=
"constructionTimeAdd"
>
新增
</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
:
"xmgsmc"
,
label
:
"项目公司名称"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"ssejqy"
,
label
:
"所属二级企业"
,
showOverflowTooltip
:
true
,
width
:
170
,
},
{
prop
:
"xmgsmc"
,
label
:
"项目公司名称"
,
showOverflowTooltip
:
true
,
width
:
120
,
},
{
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/getJsqtzhsList"
,
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
constructionTimeAdd
=
()
=>
{
router
.
push
(
"/constructionTimeAdd"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"constructionTimeAdd"
,
query
:
{
id
:
item
.
id
,
},
});
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"constructionTimeAdd"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
},
});
};
const
deleteStatement
=
(
item
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/deleteJsqtzhs"
,
data
:
{
id
:
item
.
id
,
},
callback
:
(
data
)
=>
{
ElMessage
.
success
(
"删除成功"
);
getStatementData
();
},
});
})
.
catch
(()
=>
{});
};
onMounted
(()
=>
{
getStatementData
();
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/manage.less";
</
style
>
src/views/investingManage/constructionTimeAdd.vue
0 → 100644
View file @
f5c92dfa
<
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=
"24"
>
<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.id"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属行业"
>
<CommonSelector
v-model=
"formData.sshy"
dictName=
"participation_industry"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目公司名称"
>
<el-input
v-model=
"formData.xmgsmc"
placeholder=
"请输入项目公司名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"填报单位名称"
>
<el-input
v-model=
"formData.sbdw"
placeholder=
"请输入填报单位名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属二级企业"
>
<el-input
v-model=
"formData.ssejqy"
placeholder=
"请输入所属二级企业"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目阶段"
>
<CommonSelector
v-model=
"formData.xmjd"
dictName=
"project_phase"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目类别"
>
<CommonSelector
v-model=
"formData.xmlx"
dictName=
"xmlx"
></CommonSelector>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"投资模式分类"
>
<CommonSelector
v-model=
"formData.tzms"
dictName=
"tzms"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"投资回收方式"
>
<CommonSelector
v-model=
"formData.tzhsfs"
dictName=
"tzhsfs"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"下年项目阶段"
>
<CommonSelector
v-model=
"formData.xnxmjd"
dictName=
"xmjd"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"财务报表类型"
>
<CommonSelector
v-model=
"formData.cwbblx"
dictName=
"cwbblx"
/>
</el-form-item>
</el-col>
</el-row>
<DynamicTable
:columns=
"transferColumns"
:disabled=
"isPreview"
v-model=
"formData.projectGdxxs"
>
</DynamicTable>
</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.tzzejc"
placeholder=
"请输入项目投资总额(决策值)(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"我方资本金出资额-决策值(万元)"
>
<el-input
v-model=
"formData.wfzbjczejc"
placeholder=
"请输入我方资本金出资额-决策值(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"投资总额-实际值(万元)"
>
<el-input
v-model=
"formData.tzzesj"
placeholder=
"请输入投资总额-实际值(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"我方资本家出资额--实际值(万元)"
>
<el-input
v-model=
"formData.wfzbjczesj"
placeholder=
"请输入我方资本家出资额--实际值(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"投资总额-计划值(万元)"
>
<el-input
v-model=
"formData.tzzejhz"
placeholder=
"请输入投资总额-计划值(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"2025年投资回收累计完成情况-年度更新"
name=
"2025年投资回收累计完成情况-年度更新"
>
<el-row
gutter=
"20"
>
<!-- 第一行:决策目标值相关数字项 -->
<el-col
:span=
"12"
>
<el-form-item
label=
"本年完成 投资回收决策目标值(万元)"
>
<el-input
v-model=
"formData.bnwc"
type=
"number"
precision=
"8"
placeholder=
"请输入本年完成 投资回收决策目标值(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"截止本年累计(决策目标值)"
>
<el-input
v-model=
"formData.jzbnlj"
type=
"number"
precision=
"8"
placeholder=
"请输入截止本年累计(决策目标值)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"下一年完成数(万元)"
>
<el-input
v-model=
"formData.xynwcs"
type=
"number"
precision=
"8"
placeholder=
"请输入下一年完成数(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"本年计划(万元)"
>
<el-input
v-model=
"formData.bnjh"
type=
"number"
precision=
"8"
placeholder=
"请输入本年计划(万元)"
/>
</el-form-item>
</el-col>
<!-- 第二行:实际值相关数字项 -->
<el-col
:span=
"12"
>
<el-form-item
label=
"本年完成--投资回收实际值(万元)"
>
<el-input
v-model=
"formData.bnwcsjz"
type=
"number"
precision=
"8"
placeholder=
"请输入本年完成--投资回收实际值(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"截止本年累计--投资回收实际值"
>
<el-input
v-model=
"formData.jzbnljsjz"
type=
"number"
precision=
"8"
placeholder=
"请输入截止本年累计--投资回收实际值"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"累计欠收(万元)"
>
<el-input
v-model=
"formData.ljqs"
type=
"number"
precision=
"8"
placeholder=
"请输入累计欠收(万元)"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"完成率(%)"
>
<el-input
v-model=
"formData.wcl"
type=
"number"
precision=
"2"
placeholder=
"请输入完成率(%)"
/>
</el-form-item>
</el-col>
<!-- 第三行及以后:长文本说明项(占满整行) -->
<el-col
:span=
"24"
>
<el-form-item
label=
"计划与决策目标值差异说明"
>
<el-input
v-model=
"formData.jhyjcmbcysm"
type=
"textarea"
rows=
"3"
placeholder=
"请输入计划与决策目标值差异说明"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"实际与计划差异说明"
>
<el-input
v-model=
"formData.sjyjhcysm"
type=
"textarea"
rows=
"3"
placeholder=
"请输入实际与计划差异说明"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"存在主要问题"
>
<el-input
v-model=
"formData.czdzywt"
type=
"textarea"
rows=
"3"
placeholder=
"请输入存在主要问题"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"采取措施及开展情况"
>
<el-input
v-model=
"formData.cqcsjgzkzqk"
type=
"textarea"
rows=
"3"
placeholder=
"请输入采取措施及开展情况"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"formData.bz"
type=
"textarea"
rows=
"3"
placeholder=
"请输入备注"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"截止12月末累计应收"
name=
"截止12月末累计应收"
>
<FinancialTable
v-model=
"formData.jzymljys"
:is-preview=
"isPreview"
/>
</el-collapse-item>
<el-collapse-item
title=
"截止12月末累计实收"
name=
"截止12月末累计实收"
>
<FinancialTable
v-model=
"formData.jzymljsh"
:is-preview=
"isPreview"
/>
</el-collapse-item>
<el-collapse-item
title=
"投资回收(决策)"
name=
"投资回收(决策)"
>
<FinancialTable
v-model=
"formData.tzhsjc"
:is-preview=
"isPreview"
/>
</el-collapse-item>
<el-collapse-item
title=
"投资回收(计划)"
name=
"投资回收(计划)"
>
<FinancialTable
v-model=
"formData.tzhsjh"
:is-preview=
"isPreview"
/>
</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
}
from
"element-plus"
;
import
DynamicTable
from
"@/components/FormDynamicTable/index.vue"
;
import
FinancialTable
from
"@/components/FinancialTable.vue"
;
const
transferColumns
=
ref
([
{
prop
:
"njfcgbl"
,
label
:
"能建方持股比例"
,
type
:
"input"
,
headerGroup
:
"能建内容"
,
placeholder
:
"请填写能建方持股比例"
,
},
{
prop
:
"njfcgblqk"
,
label
:
"能建方持股比例情况"
,
type
:
"input"
,
headerGroup
:
"能建内容"
,
placeholder
:
"请填写能建方持股比例情况"
,
},
{
prop
:
"njfcgblqk_nt"
,
label
:
"能建方持股比例情况"
,
type
:
"input"
,
headerGroup
:
"能建以外"
,
placeholder
:
"请填写能建方持股比例情况"
,
},
{
prop
:
"zwfcgbl"
,
label
:
"政府方持股比例"
,
type
:
"input"
,
headerGroup
:
"能建以外"
,
placeholder
:
"请填写政府方持股比例"
,
},
{
prop
:
"jjcgbl"
,
label
:
"基金持股比例"
,
type
:
"input"
,
headerGroup
:
"能建以外"
,
placeholder
:
"请输入基金持股比例"
,
min
:
0
,
},
{
prop
:
"njfglmc"
,
label
:
"能建方关联名称"
,
headerGroup
:
"能建以外"
,
type
:
"textarea"
,
placeholder
:
"请输入能建方关联名称"
,
},
]);
const
router
=
useRouter
();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
// 折叠面板默认展开项
const
activeCollapse
=
ref
([
"项目基本信息"
,
"出资情况"
,
"合同约定权益获取"
,
"分红情况"
,
"投资额完成情况(万元)"
,
"投资回收(决策)"
,
"投资回收(计划)"
,
"2025年投资回收累计完成情况-年度更新"
,
"净现金流"
,
"截止12月末累计应收"
,
"截止12月末累计实收"
,
"资金流出"
,
"分红情况"
,
]);
// 表单数据
let
initTableData
=
()
=>
{
Object
.
assign
(
formData
,
{
jzymljys
:
{
// 指标列表
indicatorList
:
[
{
name
:
"政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府补贴"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者欠付"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"补贴收入"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)"
,
isTextRow
:
false
,
noTotal
:
false
,
},
{
name
:
"资产盘活"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"股权分红"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"其他"
,
isTextRow
:
false
,
noTotal
:
false
},
// 关键:标记为文本行+不需要合计
{
name
:
"目标(决策)与计划差异说明"
,
isTextRow
:
true
,
noTotal
:
true
},
],
// 时间列表(月度)
dynamicTimeList
:
[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
,
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData
:
[],
},
jzymljsh
:
{
// 指标列表
indicatorList
:
[
{
name
:
"政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府补贴"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者欠付"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"补贴收入"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)"
,
isTextRow
:
false
,
noTotal
:
false
,
},
{
name
:
"资产盘活"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"股权分红"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"其他"
,
isTextRow
:
false
,
noTotal
:
false
},
// 关键:标记为文本行+不需要合计
{
name
:
"目标(决策)与计划差异说明"
,
isTextRow
:
true
,
noTotal
:
true
},
],
// 时间列表(月度)
dynamicTimeList
:
[
"一月"
,
"二月"
,
"三月"
,
"四月"
,
"五月"
,
"六月"
,
"七月"
,
"八月"
,
"九月"
,
"十月"
,
"十一月"
,
"十二月"
,
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData
:
[],
},
tzhsjc
:
{
// 指标列表
indicatorList
:
[
{
name
:
"建设期政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"运营期政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"投资价差收取"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"参股项目投资回收"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"代建工程款回收"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府补贴"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者欠付"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"补贴收入"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)"
,
isTextRow
:
false
,
noTotal
:
false
,
},
{
name
:
"资产盘活"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"股权分红"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"其他"
,
isTextRow
:
false
,
noTotal
:
false
},
// 关键:标记为文本行+不需要合计
{
name
:
"目标(决策)与计划差异说明"
,
isTextRow
:
true
,
noTotal
:
true
},
],
// 时间列表(月度)
dynamicTimeList
:
[
"一季度"
,
"二季度"
,
"三季度"
,
"四季度"
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData
:
[],
},
tzhsjh
:
{
// 指标列表
indicatorList
:
[
{
name
:
"建设期政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"运营期政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"投资价差收取"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"参股项目投资回收"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"代建工程款回收"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"政府补贴"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者付费"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"使用者欠付"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"补贴收入"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"销售回款(含房地产、水泥、新能源售电、其他生产制造收入等)"
,
isTextRow
:
false
,
noTotal
:
false
,
},
{
name
:
"资产盘活"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"股权分红"
,
isTextRow
:
false
,
noTotal
:
false
},
{
name
:
"其他"
,
isTextRow
:
false
,
noTotal
:
false
},
// 关键:标记为文本行+不需要合计
{
name
:
"目标(决策)与计划差异说明"
,
isTextRow
:
true
,
noTotal
:
true
},
],
// 时间列表(月度)
dynamicTimeList
:
[
"一季度"
,
"二季度"
,
"三季度"
,
"四季度"
],
// 表格数据(子组件会自动初始化,父组件可传初始值)
tableData
:
[],
},
});
};
const
formData
=
reactive
({
jzymljys
:
{},
jzymljsh
:
{},
tzhsjc
:
{},
tzhsjh
:
{},
projectGdxxs
:
[],
});
let
options
=
ref
();
// ========== 选择项目同步名称(通用) ==========
const
changeProject
=
(
val
)
=>
{
proxy
.
$post
({
url
:
"/api/project/getProjectFinalInfo"
,
data
:
{
id
:
val
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
// Object.assign(formData, data);
loading
.
value
=
false
;
formData
.
projectName
=
data
.
projectName
||
""
;
formData
.
sbdw
=
data
.
sbdw
||
""
;
formData
.
xmgsmc
=
data
.
xmgsmc
||
""
;
formData
.
xmkgsjyj
=
data
.
xmkgsjyj
||
""
;
formData
.
xmjgsjyj
=
data
.
xmjgsjyj
||
""
;
formData
.
xmjd
=
data
.
xmjd
||
""
;
formData
.
yynxn
=
data
.
yynxn
||
""
;
formData
.
xmjsqy
=
data
.
xmjsqy
||
""
;
},
error
:
()
=>
{
loading
.
value
=
false
;
ElMessage
.
error
(
"获取项目详情失败"
);
},
});
const
selectItem
=
projectList
.
value
.
find
((
item
)
=>
item
.
id
===
val
);
if
(
selectItem
)
formData
.
projectName
=
selectItem
.
projectName
;
};
// 加载状态
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
getRcCgqyglDetail
=
()
=>
{
if
(
!
rcCgqyglId
.
value
)
return
;
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/getJsqtzhsInfo"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
console
.
log
(
data
.
jzymljys
.
tableData
[
0
],
"1111"
);
Object
.
assign
(
formData
,
{
...
data
,
});
},
});
};
const
backClick
=
()
=>
{
router
.
back
(
-
1
);
};
// 保存/提交表单
const
saveClick
=
()
=>
{
// 基础校验
if
(
!
formData
.
projectId
)
{
ElMessage
.
warning
(
"请选择项目信息"
);
return
;
}
loading
.
value
=
true
;
// 区分新增/编辑
const
url
=
rcCgqyglId
.
value
?
"/api/project/updateJsqtzhs"
:
"/api/project/createJsqtzhs"
;
// 处理空数字字段:空值转为null,避免提交空字符串
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
};
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
();
}
else
{
initTableData
();
}
});
</
script
>
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
// @import "@/styles/manage.less";
.DynamicTable-slot {
display: flex;
div {
text-align: center;
line-height: 38px;
}
div:nth-child(1) {
border: 1px solid #bbc0ca;
flex: 2;
}
div:nth-child(2) {
border: 1px solid #bbc0ca;
flex: 4;
}
height: 40px;
background-color: #f5f7fa;
}
.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