明树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
09d31d4e
Commit
09d31d4e
authored
Apr 02, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
组件修改
parent
a16431ee
Pipeline
#109176
passed with stage
in 21 seconds
Changes
5
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
885 additions
and
363 deletions
+885
-363
investmentCecoveryAdd.vue
src/views/castbehind/investmentCecoveryAdd.vue
+190
-52
addControl.vue
src/views/investingManage/addControl.vue
+88
-3
constructionTimeAdd.vue
src/views/investingManage/constructionTimeAdd.vue
+190
-52
decisionAdd.vue
src/views/investingManage/decisionAdd.vue
+374
-255
addProject.vue
src/views/projectManage/addProject.vue
+43
-1
No files found.
src/views/castbehind/investmentCecoveryAdd.vue
View file @
09d31d4e
...
...
@@ -3,10 +3,13 @@
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content
-wrapper
"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
label-width=
"150"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-model=
"activeCollapse"
v-collapse-nav=
"navigationItems"
>
<el-collapse-item
title=
"项目基本信息"
name=
"项目基本信息"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"6"
>
...
...
@@ -132,67 +135,87 @@
</el-collapse-item>
<el-collapse-item
title=
"投资额完成情况(万元)"
name=
"投资额完成情况(万元)"
title=
"投资额完成情况(
单位:
万元)"
name=
"投资额完成情况(
单位:
万元)"
><el-row
gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"项目投资总额(决策值)
(万元)
"
label=
"项目投资总额(决策值)"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzejc"
placeholder=
"请输入项目投资总额(决策值)(万元)"
/>
placeholder=
"请输入项目投资总额(决策值)"
>
<template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"我方资本金出资额-决策值
(万元)
"
label=
"我方资本金出资额-决策值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.wfzbjczejc"
placeholder=
"请输入我方资本金出资额-决策值(万元)"
/>
placeholder=
"请输入我方资本金出资额-决策值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"投资总额-实际值
(万元)
"
label=
"投资总额-实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzesj"
placeholder=
"请输入投资总额-实际值(万元)"
/>
placeholder=
"请输入投资总额-实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"我方资本金出资额--实际值
(万元)
"
label=
"我方资本金出资额--实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.wfzbjczesj"
placeholder=
"请输入我方资本金出资额--实际值(万元)"
/>
placeholder=
"请输入我方资本金出资额--实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"投资总额-计划值
(万元)
"
label=
"投资总额-计划值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzejhz"
placeholder=
"请输入投资总额-计划值(万元)"
/>
placeholder=
"请输入投资总额-计划值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -207,14 +230,18 @@
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"本年完成 投资回收决策目标值
(万元)
"
label=
"本年完成 投资回收决策目标值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnwc"
type=
"number"
placeholder=
"请输入本年完成 投资回收决策目标值(万元)"
/>
placeholder=
"请输入本年完成 投资回收决策目标值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
...
...
@@ -222,38 +249,50 @@
label-width=
"260px"
label=
"截止本年累计(决策目标值)"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.jzbnlj"
type=
"number"
placeholder=
"请输入截止本年累计(决策目标值)"
/>
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"下一年完成数
(万元)
"
label=
"下一年完成数"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.xynwcs"
type=
"number"
placeholder=
"请输入下一年完成数(万元)"
/>
placeholder=
"请输入下一年完成数"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"本年计划
(万元)
"
label=
"本年计划"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnjh"
type=
"number"
placeholder=
"请输入本年计划(万元)"
/>
placeholder=
"请输入本年计划"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
...
...
@@ -261,14 +300,18 @@
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"本年完成--投资回收实际值
(万元)
"
label=
"本年完成--投资回收实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnwcsjz"
type=
"number"
placeholder=
"请输入本年完成--投资回收实际值(万元)"
/>
placeholder=
"请输入本年完成--投资回收实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
...
...
@@ -276,35 +319,47 @@
label-width=
"260px"
label=
"截止本年累计--投资回收实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.jzbnljsjz"
type=
"number"
placeholder=
"请输入截止本年累计--投资回收实际值"
/>
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"260px"
label=
"累计欠收
(万元)
"
label=
"累计欠收"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.ljqs"
type=
"number"
placeholder=
"请输入累计欠收(万元)"
/>
placeholder=
"请输入累计欠收"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
lab
le-width=
"240px"
label=
"完成率(%)
"
>
<el-input
-number
<el-form-item
lab
el-width=
"260px"
label=
"完成率
"
>
<el-input
precision=
"2"
v-model=
"formData.wcl"
type=
"number"
placeholder=
"请输入完成率(%)"
/>
placeholder=
"请输入完成率"
>
<
template
#
suffix
>
<span>
%
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
...
...
@@ -425,6 +480,15 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems"
:active-item=
"activeCollapse"
title=
"目录导航"
width=
"auto"
@
nav-click=
"handleNavClick"
/>
</div>
</div>
</div>
<div
class=
"add-project-header"
>
...
...
@@ -462,6 +526,7 @@ import {
getCurrentInstance
,
h
,
computed
,
nextTick
,
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
...
...
@@ -469,6 +534,7 @@ import DynamicTable from "@/components/FormDynamicTable/index.vue";
import
FinancialTable
from
"@/components/FinancialTable.vue"
;
import
InvestmentRecoveryTable
from
"@/components/InvestmentRecoveryTable.vue"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
const
transferColumns
=
ref
([
{
prop
:
"njfcgbl"
,
...
...
@@ -512,6 +578,60 @@ const router = useRouter();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
// ========== 导航配置(由 v-collapse-nav 指令自动生成) ==========
const
navigationItems
=
ref
([]);
// 导航点击处理
const
handleNavClick
=
(
item
)
=>
{
console
.
log
(
"Navigation clicked:"
,
item
);
// 点击导航时自动展开对应的折叠面板
if
(
!
activeCollapse
.
value
.
includes
(
item
.
name
))
{
activeCollapse
.
value
.
push
(
item
.
name
);
}
// 等待 DOM 更新后滚动
nextTick
(()
=>
{
setTimeout
(()
=>
{
const
targetId
=
`collapse-
${
item
.
name
}
`
;
const
targetElement
=
document
.
getElementById
(
targetId
);
console
.
log
(
"Scrolling to element:"
,
{
targetId
,
found
:
!!
targetElement
,
element
:
targetElement
,
});
if
(
targetElement
)
{
// 使用 scrollIntoView 获得更平滑的效果
targetElement
.
scrollIntoView
({
behavior
:
"smooth"
,
block
:
"start"
,
inline
:
"nearest"
,
});
// 可选:添加额外的偏移量调整
setTimeout
(()
=>
{
const
elementPosition
=
targetElement
.
getBoundingClientRect
().
top
;
if
(
elementPosition
<
80
)
{
// 如果距离顶部太近,向上滚动一点
window
.
scrollBy
({
top
:
elementPosition
-
80
,
behavior
:
"smooth"
,
});
}
},
300
);
}
else
{
console
.
error
(
"Element not found:"
,
targetId
);
console
.
log
(
"Available collapse elements:"
,
document
.
querySelectorAll
(
'[id^="collapse-"]'
),
);
}
},
300
);
// 增加延迟确保动画完成
});
};
// 表单数据
let
initTableData
=
()
=>
{
// 使用 Object.assign 直接替换整个对象,而不是合并
...
...
@@ -1262,6 +1382,24 @@ onMounted(() => {
</
script
>
<
style
scoped
lang=
"less"
>
// 布局容器
.project-tab-content-wrapper {
display: flex;
gap: 20px;
position: relative;
}
.tab-content {
flex: 1;
min-width: 0; // 防止flex子项溢出
}
.navigation-wrapper {
flex-shrink: 0;
width: auto;
padding-left: 10px;
}
.DynamicTable-slot {
display: flex;
div {
...
...
src/views/investingManage/addControl.vue
View file @
09d31d4e
...
...
@@ -3,10 +3,13 @@
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content
-wrapper
"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"80"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-model=
"activeCollapse"
v-collapse-nav=
"navigationItems"
>
<el-collapse-item
title=
"项目信息"
name=
"项目信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
...
...
@@ -979,6 +982,15 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems"
:active-item=
"activeCollapse"
title=
"目录导航"
width=
"auto"
@
nav-click=
"handleNavClick"
/>
</div>
</div>
</div>
<div
class=
"add-project-header"
>
...
...
@@ -994,11 +1006,12 @@
</div>
</template>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
nextTick
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
FileUploader
from
"@/components/FileUploader/index.vue"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
const
userStore
=
useUserStore
();
...
...
@@ -1016,6 +1029,60 @@ const activeCollapse = reactive([
"其他建设目标重大偏差"
,
"投资收益"
,
]);
// ========== 导航配置(由 v-collapse-nav 指令自动生成) ==========
const
navigationItems
=
ref
([]);
// 导航点击处理
const
handleNavClick
=
(
item
)
=>
{
console
.
log
(
"Navigation clicked:"
,
item
);
// 点击导航时自动展开对应的折叠面板
if
(
!
activeCollapse
.
includes
(
item
.
name
))
{
activeCollapse
.
push
(
item
.
name
);
}
// 等待 DOM 更新后滚动
nextTick
(()
=>
{
setTimeout
(()
=>
{
const
targetId
=
`collapse-
${
item
.
name
}
`
;
const
targetElement
=
document
.
getElementById
(
targetId
);
console
.
log
(
"Scrolling to element:"
,
{
targetId
,
found
:
!!
targetElement
,
element
:
targetElement
,
});
if
(
targetElement
)
{
// 使用 scrollIntoView 获得更平滑的效果
targetElement
.
scrollIntoView
({
behavior
:
"smooth"
,
block
:
"start"
,
inline
:
"nearest"
,
});
// 可选:添加额外的偏移量调整
setTimeout
(()
=>
{
const
elementPosition
=
targetElement
.
getBoundingClientRect
().
top
;
if
(
elementPosition
<
80
)
{
// 如果距离顶部太近,向上滚动一点
window
.
scrollBy
({
top
:
elementPosition
-
80
,
behavior
:
"smooth"
,
});
}
},
300
);
}
else
{
console
.
error
(
"Element not found:"
,
targetId
);
console
.
log
(
"Available collapse elements:"
,
document
.
querySelectorAll
(
'[id^="collapse-"]'
),
);
}
},
300
);
// 增加延迟确保动画完成
});
};
let
formData
=
reactive
({});
let
loading
=
ref
(
false
);
...
...
@@ -1572,6 +1639,24 @@ const saveClick = () => {
</
script
>
<
style
lang=
"less"
>
// 布局容器
.project-tab-content-wrapper {
display: flex;
gap: 20px;
position: relative;
}
.tab-content {
flex: 1;
min-width: 0; // 防止flex子项溢出
}
.navigation-wrapper {
flex-shrink: 0;
width: auto;
padding-left: 10px;
}
.fileCla {
.el-form-item {
display: block !important;
...
...
src/views/investingManage/constructionTimeAdd.vue
View file @
09d31d4e
...
...
@@ -3,10 +3,13 @@
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content
-wrapper
"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
label-width=
"150"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-model=
"activeCollapse"
v-collapse-nav=
"navigationItems"
>
<el-collapse-item
title=
"项目基本信息"
name=
"项目基本信息"
>
<el-row
:gutter=
"24"
>
<el-col
:span=
"6"
>
...
...
@@ -132,67 +135,87 @@
</el-collapse-item>
<el-collapse-item
title=
"投资额完成情况(万元)"
name=
"投资额完成情况(万元)"
title=
"投资额完成情况(
单位:
万元)"
name=
"投资额完成情况(
单位:
万元)"
><el-row
gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"项目投资总额(决策值)
(万元)
"
label=
"项目投资总额(决策值)"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzejc"
placeholder=
"请输入项目投资总额(决策值)(万元)"
/>
placeholder=
"请输入项目投资总额(决策值)"
>
<template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"我方资本金出资额-决策值
(万元)
"
label=
"我方资本金出资额-决策值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.wfzbjczejc"
placeholder=
"请输入我方资本金出资额-决策值(万元)"
/>
placeholder=
"请输入我方资本金出资额-决策值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"投资总额-实际值
(万元)
"
label=
"投资总额-实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzesj"
placeholder=
"请输入投资总额-实际值(万元)"
/>
placeholder=
"请输入投资总额-实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"我方资本金出资额--实际值
(万元)
"
label=
"我方资本金出资额--实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.wfzbjczesj"
placeholder=
"请输入我方资本金出资额--实际值(万元)"
/>
placeholder=
"请输入我方资本金出资额--实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"投资总额-计划值
(万元)
"
label=
"投资总额-计划值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.tzzejhz"
placeholder=
"请输入投资总额-计划值(万元)"
/>
placeholder=
"请输入投资总额-计划值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -207,14 +230,18 @@
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"本年完成 投资回收决策目标值
(万元)
"
label=
"本年完成 投资回收决策目标值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnwc"
type=
"number"
placeholder=
"请输入本年完成 投资回收决策目标值(万元)"
/>
placeholder=
"请输入本年完成 投资回收决策目标值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
...
...
@@ -222,38 +249,50 @@
label-width=
"280px"
label=
"截止本年累计(决策目标值)"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.jzbnlj"
type=
"number"
placeholder=
"请输入截止本年累计(决策目标值)"
/>
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"下一年完成数
(万元)
"
label=
"下一年完成数"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.xynwcs"
type=
"number"
placeholder=
"请输入下一年完成数(万元)"
/>
placeholder=
"请输入下一年完成数"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"本年计划
(万元)
"
label=
"本年计划"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnjh"
type=
"number"
placeholder=
"请输入本年计划(万元)"
/>
placeholder=
"请输入本年计划"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
...
...
@@ -261,14 +300,18 @@
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"本年完成--投资回收实际值
(万元)
"
label=
"本年完成--投资回收实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.bnwcsjz"
type=
"number"
placeholder=
"请输入本年完成--投资回收实际值(万元)"
/>
placeholder=
"请输入本年完成--投资回收实际值"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
...
...
@@ -276,35 +319,47 @@
label-width=
"280px"
label=
"截止本年累计--投资回收实际值"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.jzbnljsjz"
type=
"number"
placeholder=
"请输入截止本年累计--投资回收实际值"
/>
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"累计欠收
(万元)
"
label=
"累计欠收"
>
<el-input
-number
<el-input
precision=
"2"
v-model=
"formData.ljqs"
type=
"number"
placeholder=
"请输入累计欠收(万元)"
/>
placeholder=
"请输入累计欠收"
>
<
template
#
suffix
>
<span>
万元
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label-width=
"280px"
label=
"完成率
(%)
"
>
<el-input
-number
<el-form-item
label-width=
"280px"
label=
"完成率"
>
<el-input
precision=
"2"
v-model=
"formData.wcl"
type=
"number"
placeholder=
"请输入完成率(%)"
/>
placeholder=
"请输入完成率"
>
<
template
#
suffix
>
<span>
%
</span>
</
template
>
</el-input>
</el-form-item>
</el-col>
...
...
@@ -425,6 +480,15 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems"
:active-item=
"activeCollapse"
title=
"目录导航"
width=
"auto"
@
nav-click=
"handleNavClick"
/>
</div>
</div>
</div>
<div
class=
"add-project-header"
>
...
...
@@ -462,6 +526,7 @@ import {
getCurrentInstance
,
h
,
computed
,
nextTick
,
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
}
from
"element-plus"
;
...
...
@@ -469,6 +534,7 @@ import DynamicTable from "@/components/FormDynamicTable/index.vue";
import
FinancialTable
from
"@/components/FinancialTable.vue"
;
import
InvestmentRecoveryTable
from
"@/components/InvestmentRecoveryTable.vue"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
const
transferColumns
=
ref
([
{
prop
:
"njfcgbl"
,
...
...
@@ -512,6 +578,60 @@ const router = useRouter();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
// ========== 导航配置(由 v-collapse-nav 指令自动生成) ==========
const
navigationItems
=
ref
([]);
// 导航点击处理
const
handleNavClick
=
(
item
)
=>
{
console
.
log
(
"Navigation clicked:"
,
item
);
// 点击导航时自动展开对应的折叠面板
if
(
!
activeCollapse
.
value
.
includes
(
item
.
name
))
{
activeCollapse
.
value
.
push
(
item
.
name
);
}
// 等待 DOM 更新后滚动
nextTick
(()
=>
{
setTimeout
(()
=>
{
const
targetId
=
`collapse-
${
item
.
name
}
`
;
const
targetElement
=
document
.
getElementById
(
targetId
);
console
.
log
(
"Scrolling to element:"
,
{
targetId
,
found
:
!!
targetElement
,
element
:
targetElement
,
});
if
(
targetElement
)
{
// 使用 scrollIntoView 获得更平滑的效果
targetElement
.
scrollIntoView
({
behavior
:
"smooth"
,
block
:
"start"
,
inline
:
"nearest"
,
});
// 可选:添加额外的偏移量调整
setTimeout
(()
=>
{
const
elementPosition
=
targetElement
.
getBoundingClientRect
().
top
;
if
(
elementPosition
<
80
)
{
// 如果距离顶部太近,向上滚动一点
window
.
scrollBy
({
top
:
elementPosition
-
80
,
behavior
:
"smooth"
,
});
}
},
300
);
}
else
{
console
.
error
(
"Element not found:"
,
targetId
);
console
.
log
(
"Available collapse elements:"
,
document
.
querySelectorAll
(
'[id^="collapse-"]'
),
);
}
},
300
);
// 增加延迟确保动画完成
});
};
// 表单数据
let
initTableData
=
()
=>
{
// 使用 Object.assign 直接替换整个对象,而不是合并
...
...
@@ -1262,6 +1382,24 @@ onMounted(() => {
</
script
>
<
style
scoped
lang=
"less"
>
// 布局容器
.project-tab-content-wrapper {
display: flex;
gap: 20px;
position: relative;
}
.tab-content {
flex: 1;
min-width: 0; // 防止flex子项溢出
}
.navigation-wrapper {
flex-shrink: 0;
width: auto;
padding-left: 10px;
}
.DynamicTable-slot {
display: flex;
div {
...
...
src/views/investingManage/decisionAdd.vue
View file @
09d31d4e
...
...
@@ -12,7 +12,11 @@
label-width=
"160px"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-collapse-nav=
"navigationItems"
v-model=
"activeCollapse"
>
<!-- 1. 项目基本信息 -->
<el-collapse-item
title=
"项目基本信息"
name=
"项目基本信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
...
...
@@ -41,10 +45,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label-width=
"180px"
label=
"申报单位企业规格"
>
<el-form-item
label=
"申报单位企业规格"
>
<el-select
v-model=
"jcFormData.sbdwqygg"
placeholder=
"请选择"
...
...
@@ -65,12 +66,9 @@
<el-input-number
v-model=
"jcFormData.xmztz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
>
<template
#
suffix
>
<span>
万元
</span>
</
template
>
<template
#
suffix
><span>
万元
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
...
...
@@ -85,134 +83,16 @@
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目区域"
>
<el-select
v-model=
"jcFormData.xmqy"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in xmqyList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"境内/外"
>
<el-select
v-model=
"jcFormData.jnw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcJnw"
>
<el-option
v-for=
"item in jnwList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label-width=
"180px"
label=
"省(境内)/洲际(境外)"
>
<el-select
v-model=
"jcFormData.sjnzjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcSzj"
>
<el-option
v-for=
"item in jcSzjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"地市(境内)/国家(境外)"
>
<el-select
v-model=
"jcFormData.dsjngjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcDsgj"
>
<el-option
v-for=
"item in jcDsgjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"区县(境内)/国家(境外)"
>
<el-select
v-model=
"jcFormData.qxjngjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in jcQxgjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"币种"
>
<el-select
v-model=
"jcFormData.bizhong"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in bzList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"汇率"
>
<el-input-number
v-model=
"jcFormData.huilv"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"投资模式"
>
<el-input
v-model=
"jcFormData.tzms"
/>
</el-form-item>
</el-col>
<el-col
:span=
"
12
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"对外签约品牌"
>
<el-input
v-model=
"jcFormData.dwqypp"
/>
</el-form-item>
</el-col>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"是否能建重大或重要投资"
>
<el-radio-group
v-model=
"jcFormData.sfnjzdhzytz"
>
<el-radio
...
...
@@ -232,7 +112,7 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"能建是否牵头方"
>
<el-radio-group
v-model=
"jcFormData.njsfqtf"
>
<el-radio
...
...
@@ -252,7 +132,18 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"能建占股比"
>
<el-input-number
v-model=
"jcFormData.njzgb"
:min=
"0"
controls-position=
"right"
>
<
template
#
suffix
><span>
%
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"是否PPP项目"
>
<el-radio-group
v-model=
"jcFormData.sfpppxm"
>
<el-radio
...
...
@@ -272,21 +163,6 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"能建占股比"
>
<el-input-number
v-model=
"jcFormData.njzgb"
:min=
"0"
:max=
"99999.99"
controls-position=
"right"
>
<
template
#
suffix
>
<span>
%
</span>
</
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目资金来源"
>
<el-select
...
...
@@ -424,66 +300,6 @@
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"运营年限"
>
<el-input-number
v-model=
"jcFormData.yynxn"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
>
<
template
#
suffix
>
<span>
年
</span>
</
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目建设期"
>
<el-input-number
v-model=
"jcFormData.xmjsqy"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
>
<
template
#
suffix
>
<span>
月
</span>
</
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目合作期"
>
<el-input-number
v-model=
"jcFormData.xmhzqn"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
>
<
template
#
suffix
>
<span>
年
</span>
</
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目开工时间(预计)"
>
<el-date-picker
v-model=
"jcFormData.xmkgsjyj"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目交工时间(预计)"
>
<el-date-picker
v-model=
"jcFormData.xmjgsjyj"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"是否已经立项"
>
<el-radio-group
v-model=
"jcFormData.sfyjlx"
>
<el-radio
...
...
@@ -564,9 +380,7 @@
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<!-- todo -->
</el-select>
></el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
...
...
@@ -601,20 +415,14 @@
<el-input-number
v-model=
"jcFormData.cblrl"
:min=
"0"
:max=
"99999.99"
controls-position=
"right"
>
<
template
#
suffix
>
<span>
%
</span>
</
template
>
<
template
#
suffix
><span>
%
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"未通过主要原因与要求"
:label-width=
"160"
>
<el-form-item
label=
"未通过主要原因与要求"
>
<el-input
v-model=
"jcFormData.wtgzyyyyyq"
type=
"textarea"
...
...
@@ -624,6 +432,189 @@
</el-col>
</el-row>
</el-collapse-item>
<!-- 2. 项目所在地 -->
<el-collapse-item
title=
"项目所在地"
name=
"项目所在地"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"境内/外"
>
<el-select
v-model=
"jcFormData.jnw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcJnw"
>
<el-option
v-for=
"item in jnwList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"省(境内)/洲际(境外)"
>
<el-select
v-model=
"jcFormData.sjnzjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcSzj"
>
<el-option
v-for=
"item in jcSzjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"地市(境内)/国家(境外)"
>
<el-select
v-model=
"jcFormData.dsjngjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
@
change=
"changeJcDsgj"
>
<el-option
v-for=
"item in jcDsgjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"区县(境内)/国家(境外)"
>
<el-select
v-model=
"jcFormData.qxjngjjw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in jcQxgjList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目区域"
>
<el-select
v-model=
"jcFormData.xmqy"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in xmqyList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 3. 计量币种 -->
<el-collapse-item
title=
"计量币种"
name=
"计量币种"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"币种"
>
<el-select
v-model=
"jcFormData.bizhong"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in bzList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"汇率"
>
<el-input-number
v-model=
"jcFormData.huilv"
:min=
"0"
controls-position=
"right"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<!-- 4. 实施时间 -->
<el-collapse-item
title=
"实施时间"
name=
"实施时间"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"运营年限"
>
<el-input-number
v-model=
"jcFormData.yynxn"
:min=
"0"
controls-position=
"right"
>
<
template
#
suffix
><span>
年
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目建设期"
>
<el-input-number
v-model=
"jcFormData.xmjsqy"
:min=
"0"
controls-position=
"right"
>
<
template
#
suffix
><span>
月
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目合作期"
>
<el-input-number
v-model=
"jcFormData.xmhzqn"
:min=
"0"
controls-position=
"right"
>
<
template
#
suffix
><span>
年
</span></
template
>
</el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目开工时间(预计)"
>
<el-date-picker
v-model=
"jcFormData.xmkgsjyj"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目交工时间(预计)"
>
<el-date-picker
v-model=
"jcFormData.xmjgsjyj"
type=
"date"
placeholder=
"请选择"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"投资分类"
name=
"投资分类"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"8"
>
...
...
@@ -2058,11 +2049,21 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems"
:active-item=
"activeCollapse"
@
nav-click=
"handleNavClick"
/>
</div>
</el-tab-pane>
<el-tab-pane
label=
"财务评价"
name=
"财务评价"
>
<div
class=
"tab-content"
>
<el-form
:model=
"jcFormData"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-collapse-nav=
"navigationItems2"
v-model=
"cwpjcollapse"
>
<el-collapse-item
title=
"投决计划"
name=
"投决计划"
>
<div
class=
"tab-handle"
>
<el-button
...
...
@@ -2473,11 +2474,22 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems2"
:active-item=
"cwpjcollapse"
@
nav-click=
"handleNavClick"
/>
</div>
</el-tab-pane>
<el-tab-pane
label=
"决策批复"
name=
"决策批复"
>
<div
class=
"tabBody"
></div>
<div
class=
"tab-content"
>
<el-form
:model=
"jcFormData"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-collapse-nav=
"navigationItems3"
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"项目投资总额(全口径)"
name=
"项目投资总额(全口径)"
...
...
@@ -3222,9 +3234,17 @@
</el-collapse>
</el-form>
</div>
<div
class=
"navigation-wrapper"
>
<CollapseNavigation
:nav-items=
"navigationItems3"
:active-item=
"jcpfcollapse"
@
nav-click=
"handleNavClick"
/>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div
class=
"add-project-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
...
...
@@ -3235,7 +3255,7 @@
v-if=
"
!formData.projectLzType ||
['1', '5', '7', '9'].includes(
formData.projectLzType.toString()
formData.projectLzType.toString()
,
)
"
@
click=
"saveClick('save')"
...
...
@@ -3327,6 +3347,8 @@ import { useRouter, useRoute } from "vue-router";
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
import
_
from
"lodash"
;
import
Decimal
from
"decimal.js"
;
const
router
=
useRouter
();
...
...
@@ -3387,6 +3409,24 @@ const activeCollapse = reactive([
"能建方现金流量表"
,
"利润表"
,
]);
const
cwpjcollapse
=
reactive
([
"投决计划"
,
"项目投资资金流量表"
,
"项目资本金现金流量表"
,
"能建方现金流量表"
,
"利润表"
,
]);
const
jcpfcollapse
=
reactive
([
"项目投资总额(全口径)"
,
"财务评价指标"
,
"核心边界条件"
,
"决策主体审核情况"
,
"投资主体审核情况"
,
"项目批复信息"
,
"审批意见"
,
"其他"
,
]);
let
formData
=
reactive
({});
let
jcFormData
=
reactive
({});
let
loading
=
ref
(
false
);
...
...
@@ -3438,16 +3478,16 @@ const changeGdxxSums = () => {
};
}
obj
[
item
.
gdlx
].
cgbl
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
cgbl
||
0
)
Number
(
obj
[
item
.
gdlx
].
cgbl
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
cgbl
||
0
)));
obj
[
item
.
gdlx
].
cze
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
cze
||
0
)).
plus
(
new
Decimal
(
Number
(
item
.
cze
||
0
))
new
Decimal
(
Number
(
item
.
cze
||
0
))
,
);
obj
[
item
.
gdlx
].
yjzczb
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
yjzczb
||
0
)
Number
(
obj
[
item
.
gdlx
].
yjzczb
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
yjzczb
||
0
)));
obj
[
item
.
gdlx
].
ycxmzbj
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
ycxmzbj
||
0
)
Number
(
obj
[
item
.
gdlx
].
ycxmzbj
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
ycxmzbj
||
0
)));
}
}
...
...
@@ -3460,7 +3500,7 @@ const changeGdxxSums = () => {
const
getObjSums
=
(
obj
,
objkey
)
=>
{
return
Object
.
entries
(
obj
).
reduce
(
(
acc
,
[
key
,
item
])
=>
acc
.
plus
(
new
Decimal
(
item
[
objkey
]
||
0
)),
new
Decimal
(
0
)
new
Decimal
(
0
)
,
);
};
// 支撑材料
...
...
@@ -3491,7 +3531,7 @@ const multiDeleteZccl = () => {
})
.
then
(()
=>
{
zcclData
.
value
=
zcclData
.
value
.
filter
(
(
item
)
=>
!
zcclSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
zcclSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3617,7 +3657,7 @@ const multiDeleteLxpf = () => {
})
.
then
(()
=>
{
lxpfwjData
.
value
=
lxpfwjData
.
value
.
filter
(
(
item
)
=>
!
lxpfSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
lxpfSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3658,7 +3698,7 @@ const multiDeleteShcl = () => {
})
.
then
(()
=>
{
shclData
.
value
=
shclData
.
value
.
filter
(
(
item
)
=>
!
shclSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
shclSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3696,22 +3736,22 @@ const changeJcGdxxSums = () => {
};
}
obj
[
item
.
gdlx
].
mycgbl
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
mycgbl
||
0
)
Number
(
obj
[
item
.
gdlx
].
mycgbl
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
mycgbl
||
0
)));
obj
[
item
.
gdlx
].
cgbl
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
cgbl
||
0
)).
plus
(
new
Decimal
(
Number
(
item
.
cgbl
||
0
))
new
Decimal
(
Number
(
item
.
cgbl
||
0
))
,
);
obj
[
item
.
gdlx
].
lrfpbl
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
lrfpbl
||
0
)
Number
(
obj
[
item
.
gdlx
].
lrfpbl
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
lrfpbl
||
0
)));
obj
[
item
.
gdlx
].
cze
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
cze
||
0
)).
plus
(
new
Decimal
(
Number
(
item
.
cze
||
0
))
new
Decimal
(
Number
(
item
.
cze
||
0
))
,
);
obj
[
item
.
gdlx
].
yjzczb
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
yjzczb
||
0
)
Number
(
obj
[
item
.
gdlx
].
yjzczb
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
yjzczb
||
0
)));
obj
[
item
.
gdlx
].
ycxmzbj
=
new
Decimal
(
Number
(
obj
[
item
.
gdlx
].
ycxmzbj
||
0
)
Number
(
obj
[
item
.
gdlx
].
ycxmzbj
||
0
)
,
).
plus
(
new
Decimal
(
Number
(
item
.
ycxmzbj
||
0
)));
}
});
...
...
@@ -3769,7 +3809,7 @@ const multiDeleteLcbsp = () => {
})
.
then
(()
=>
{
lcbspData
.
value
=
lcbspData
.
value
.
filter
(
(
item
)
=>
!
lcbspSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
lcbspSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3802,7 +3842,7 @@ const multiDeleteKycl = () => {
})
.
then
(()
=>
{
kyclData
.
value
=
kyclData
.
value
.
filter
(
(
item
)
=>
!
kyclSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
kyclSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3835,7 +3875,7 @@ const multiDeleteJjzbcs = () => {
})
.
then
(()
=>
{
jjzbcsData
.
value
=
jjzbcsData
.
value
.
filter
(
(
item
)
=>
!
jjzbcsSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
jjzbcsSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3868,7 +3908,7 @@ const multiDeleteTpbczccl = () => {
})
.
then
(()
=>
{
tpbczcclData
.
value
=
tpbczcclData
.
value
.
filter
(
(
item
)
=>
!
tpbczcclSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
tpbczcclSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3901,7 +3941,7 @@ const multiDeleteTpzccl = () => {
})
.
then
(()
=>
{
tpzcclData
.
value
=
tpzcclData
.
value
.
filter
(
(
item
)
=>
!
tpzcclSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
tpzcclSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -3934,7 +3974,7 @@ const multiDeleteShya = () => {
})
.
then
(()
=>
{
shyaData
.
value
=
shyaData
.
value
.
filter
(
(
item
)
=>
!
shyaSelectIds
.
value
.
includes
(
item
.
id
)
(
item
)
=>
!
shyaSelectIds
.
value
.
includes
(
item
.
id
)
,
);
})
.
catch
(()
=>
{});
...
...
@@ -4162,7 +4202,7 @@ const downloadTemplate = async (type) => {
headers
:
{
Authorization
:
token
.
value
,
},
}
}
,
)
.
then
((
res
)
=>
res
.
blob
())
.
then
((
blob
)
=>
{
...
...
@@ -5065,6 +5105,63 @@ const cancelAudit = () => {
auditFormData
.
value
=
{};
auditForm
.
value
?.
resetFields
();
};
// ========== 导航配置(由 v-collapse-nav 指令自动生成) ==========
const
navigationItems
=
ref
([]);
const
navigationItems2
=
ref
([]);
const
navigationItems3
=
ref
([]);
// 导航点击处理
const
handleNavClick
=
(
item
)
=>
{
console
.
log
(
"Navigation clicked:"
,
item
);
// 点击导航时自动展开对应的折叠面板
if
(
!
activeCollapse
.
value
.
includes
(
item
.
name
))
{
activeCollapse
.
value
.
push
(
item
.
name
);
}
// 等待 DOM 更新后滚动
nextTick
(()
=>
{
setTimeout
(()
=>
{
const
targetId
=
`collapse-
${
item
.
name
}
`
;
const
targetElement
=
document
.
getElementById
(
targetId
);
console
.
log
(
"Scrolling to element:"
,
{
targetId
,
found
:
!!
targetElement
,
element
:
targetElement
,
});
if
(
targetElement
)
{
// 使用 scrollIntoView 获得更平滑的效果
targetElement
.
scrollIntoView
({
behavior
:
"smooth"
,
block
:
"start"
,
inline
:
"nearest"
,
});
// 可选:添加额外的偏移量调整
setTimeout
(()
=>
{
const
elementPosition
=
targetElement
.
getBoundingClientRect
().
top
;
if
(
elementPosition
<
80
)
{
// 如果距离顶部太近,向上滚动一点
window
.
scrollBy
({
top
:
elementPosition
-
80
,
behavior
:
"smooth"
,
});
}
},
300
);
}
else
{
console
.
error
(
"Element not found:"
,
targetId
);
console
.
log
(
"Available collapse elements:"
,
document
.
querySelectorAll
(
'[id^="collapse-"]'
),
);
}
},
300
);
// 增加延迟确保动画完成
});
};
const
submitAudit
=
()
=>
{
auditForm
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
...
...
@@ -5097,4 +5194,26 @@ const submitAudit = () => {
};
</
script
>
<
style
lang=
"less"
></
style
>
<
style
scoped
lang=
"less"
>
.collapse-navigation {
position: fixed;
top: 228px;
right: 36px;
}
.project-tab-content {
margin-right: 230px;
}
.navigation-wrapper {
flex-shrink: 0;
width: auto;
padding-left: 10px;
.nav-list {
width: 215px;
}
}
.tab-content {
width: 100%;
}
</
style
>
src/views/projectManage/addProject.vue
View file @
09d31d4e
...
...
@@ -6060,6 +6060,20 @@ userInfo.roles.map((item) => {
}
});
const
navigationItems1
=
ref
([]);
const
navigationItems2
=
ref
([]);
const
navigationItems3
=
ref
([]);
const
navigationItems4
=
ref
([]);
const
navigationItems5
=
ref
([]);
const
navigationItems6
=
ref
([]);
const
activeCollapse1
=
ref
([]);
const
activeCollapse2
=
ref
([]);
const
activeCollapse3
=
ref
([]);
const
activeCollapse4
=
ref
([]);
const
activeCollapse5
=
ref
([]);
const
activeCollapse6
=
ref
([]);
// tab相关
const
pageActiveName
=
ref
(
"立项填报"
);
const
lxTabActiveName
=
ref
(
"基本信息"
);
...
...
@@ -7813,4 +7827,32 @@ const submitAudit = () => {
};
</
script
>
<
style
lang=
"less"
></
style
>
<!-- <style scoped lang="less">
.collapse-navigation {
position: fixed;
top: 228px;
right: 36px;
}
.project-tab-content {
margin-right: 230px;
}
// 布局容器
.tabBody {
display: flex;
gap: 20px;
position: relative;
}
.navigation-wrapper {
flex-shrink: 0;
width: auto;
padding-left: 10px;
.nav-list {
width: 215px;
}
}
.tab-content {
width: 100%;
}
</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