明树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
c1d8e4a4
Commit
c1d8e4a4
authored
Apr 07, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加单位
parent
d7b10ba8
Pipeline
#109397
passed with stage
in 21 seconds
Changes
25
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
307 additions
and
269 deletions
+307
-269
index.vue
src/components/FormDynamicTable/index.vue
+60
-0
routerBack.vue
src/components/common/routerBack.vue
+53
-1
evaluateAdd.vue
src/views/castbehind/evaluateAdd.vue
+5
-1
investmentCecoveryAdd.vue
src/views/castbehind/investmentCecoveryAdd.vue
+5
-1
runningPeriodAdd.vue
src/views/castbehind/runningPeriodAdd.vue
+5
-1
turnoverAdd.vue
src/views/castbehind/turnoverAdd.vue
+5
-1
costAdd.vue
src/views/elseManage/costAdd.vue
+5
-1
workForHousingAdd.vue
src/views/elseManage/workForHousingAdd.vue
+5
-1
annualAdd.vue
src/views/everydayPage/annualAdd.vue
+5
-1
everydayAdd.vue
src/views/everydayPage/everydayAdd.vue
+5
-1
informationConstructionAdd.vue
src/views/everydayPage/informationConstructionAdd.vue
+5
-1
investmentAdd.vue
src/views/everydayPage/investmentAdd.vue
+5
-1
recordAdd.vue
src/views/everydayPage/recordAdd.vue
+5
-1
shareAdd.vue
src/views/everydayPage/shareAdd.vue
+5
-1
systemAdd.vue
src/views/everydayPage/systemAdd.vue
+5
-1
vscouncilAdd.vue
src/views/everydayPage/vscouncilAdd.vue
+5
-1
addControl.vue
src/views/investingManage/addControl.vue
+5
-1
addRisk.vue
src/views/investingManage/addRisk.vue
+5
-1
addStatement.vue
src/views/investingManage/addStatement.vue
+5
-1
bigIssuesAdd.vue
src/views/investingManage/bigIssuesAdd.vue
+5
-1
constructionAdd.vue
src/views/investingManage/constructionAdd.vue
+5
-1
constructionTimeAdd.vue
src/views/investingManage/constructionTimeAdd.vue
+5
-1
decisionAdd.vue
src/views/investingManage/decisionAdd.vue
+84
-246
quitAdd.vue
src/views/investingManage/quitAdd.vue
+5
-1
addProject.vue
src/views/projectManage/addProject.vue
+5
-1
No files found.
src/components/FormDynamicTable/index.vue
View file @
c1d8e4a4
...
@@ -102,6 +102,21 @@
...
@@ -102,6 +102,21 @@
</el-select>
</el-select>
</
template
>
</
template
>
<!-- Autocomplete 类型(联想输入框) -->
<
template
v-else-if=
"col.type === 'autocomplete'"
>
<el-autocomplete
v-model=
"scope.row[col.prop]"
:placeholder=
"col.placeholder || '请输入或选择'"
:disabled=
"disabled || col.disabled"
:fetch-suggestions=
"(queryString, callback) => handleQuerySearch(queryString, callback, col.optionKey)"
:trigger-on-focus=
"col.triggerOnFocus !== false"
:debounce=
"col.debounce || 300"
clearable
style=
"width: 100%"
size=
"small"
/>
</
template
>
<!-- Number 类型 -->
<!-- Number 类型 -->
<
template
v-else-if=
"col.type === 'number'"
>
<
template
v-else-if=
"col.type === 'number'"
>
<el-input
<el-input
...
@@ -224,6 +239,21 @@
...
@@ -224,6 +239,21 @@
</el-select>
</el-select>
</
template
>
</
template
>
<!-- Autocomplete 类型(联想输入框) -->
<
template
v-else-if=
"col.type === 'autocomplete'"
>
<el-autocomplete
v-model=
"scope.row[col.prop]"
:placeholder=
"col.placeholder || '请输入或选择'"
:disabled=
"disabled || col.disabled"
:fetch-suggestions=
"(queryString, callback) => handleQuerySearch(queryString, callback, col.optionKey)"
:trigger-on-focus=
"col.triggerOnFocus !== false"
:debounce=
"col.debounce || 300"
clearable
style=
"width: 100%"
size=
"small"
/>
</
template
>
<!-- Number 类型 -->
<!-- Number 类型 -->
<
template
v-else-if=
"col.type === 'number'"
>
<
template
v-else-if=
"col.type === 'number'"
>
<el-input
<el-input
...
@@ -443,6 +473,36 @@ const headerColumnGroups = computed(() => {
...
@@ -443,6 +473,36 @@ const headerColumnGroups = computed(() => {
return
result
;
return
result
;
});
});
// 联想搜索处理方法
const
handleQuerySearch
=
(
queryString
,
callback
,
optionKey
)
=>
{
try
{
const
options
=
mergedSelectOptions
.
value
[
optionKey
]
||
[];
if
(
!
queryString
)
{
// 无输入时返回所有选项
callback
(
options
.
map
(
item
=>
({
value
:
item
.
name
||
item
.
label
,
key
:
item
.
key
||
item
.
value
})));
return
;
}
// 过滤匹配的选项
const
results
=
queryString
?
options
.
filter
(
item
=>
{
const
name
=
(
item
.
name
||
item
.
label
||
""
).
toLowerCase
();
const
query
=
queryString
.
toLowerCase
();
return
name
.
includes
(
query
);
})
.
map
(
item
=>
({
value
:
item
.
name
||
item
.
label
,
key
:
item
.
key
||
item
.
value
}))
:
[];
// 如果有匹配结果,返回建议列表
// 如果没有匹配结果,返回空数组(允许用户输入自定义内容)
callback
(
results
);
}
catch
(
e
)
{
console
.
error
(
"联想搜索失败:"
,
e
);
callback
([]);
}
};
// 新增行(适配默认行数据,初始化upload字段为数组)
// 新增行(适配默认行数据,初始化upload字段为数组)
const
handleAdd
=
()
=>
{
const
handleAdd
=
()
=>
{
try
{
try
{
...
...
src/components/common/routerBack.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div>
<div>
<div
class=
"add-project-back"
>
<div
class=
"add-project-back"
>
<div
class=
"back"
@
click=
"
() => router.back()
"
>
<div
class=
"back"
@
click=
"
handleBack
"
>
<el-icon
class=
"backIcon"
><ArrowLeft
/></el-icon>
<el-icon
class=
"backIcon"
><ArrowLeft
/></el-icon>
<span
class=
"backText"
>
返回
</span>
<span
class=
"backText"
>
返回
</span>
</div>
</div>
<span
class=
"backName"
>
{{
route
.
meta
.
title
}}
</span>
<span
class=
"backName"
>
{{
route
.
meta
.
title
}}
</span>
<div
class=
"back-actions"
v-if=
"showSave"
>
<el-button
type=
"primary"
:loading=
"loading"
:disabled=
"loading || disabled"
@
click=
"handleSave"
>
{{
saveText
}}
</el-button>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
setup
>
<
script
setup
>
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
const
props
=
defineProps
({
// 是否显示保存按钮
showSave
:
{
type
:
Boolean
,
default
:
false
,
},
// 保存按钮文本
saveText
:
{
type
:
String
,
default
:
"保存"
,
},
// 是否禁用保存按钮
disabled
:
{
type
:
Boolean
,
default
:
false
,
},
// 是否显示loading状态
loading
:
{
type
:
Boolean
,
default
:
false
,
},
});
const
emit
=
defineEmits
([
'save'
,
'back'
]);
const
route
=
useRoute
();
const
route
=
useRoute
();
const
router
=
useRouter
();
const
router
=
useRouter
();
const
handleBack
=
()
=>
{
emit
(
'back'
);
router
.
back
();
};
const
handleSave
=
()
=>
{
emit
(
'save'
);
};
</
script
>
</
script
>
<
style
scoped
lang=
"scss"
>
<
style
scoped
lang=
"scss"
>
.add-project-back
{
.add-project-back
{
...
@@ -38,6 +83,13 @@ const router = useRouter();
...
@@ -38,6 +83,13 @@ const router = useRouter();
font-size
:
16px
;
font-size
:
16px
;
font-weight
:
700
;
font-weight
:
700
;
color
:
rgba
(
51
,
51
,
51
,
1
);
color
:
rgba
(
51
,
51
,
51
,
1
);
flex
:
1
;
}
.back-actions
{
margin-left
:
auto
;
display
:
flex
;
gap
:
10px
;
}
}
}
}
</
style
>
</
style
>
src/views/castbehind/evaluateAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/castbehind/investmentCecoveryAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/castbehind/runningPeriodAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/castbehind/turnoverAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/elseManage/costAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/elseManage/workForHousingAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/everydayPage/annualAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/everydayPage/everydayAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/everydayPage/informationConstructionAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/everydayPage/investmentAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/everydayPage/recordAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/everydayPage/shareAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/everydayPage/systemAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/everydayPage/vscouncilAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/investingManage/addControl.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/investingManage/addRisk.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/investingManage/addStatement.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<el-tabs
v-model=
"pageActiveName"
type=
"border-card"
>
<el-tabs
v-model=
"pageActiveName"
type=
"border-card"
>
...
...
src/views/investingManage/bigIssuesAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/investingManage/constructionAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
...
...
src/views/investingManage/constructionTimeAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"project-tab-content-wrapper"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/investingManage/decisionAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack></routerBack>
<routerBack
:show-save=
"
!loading &&
!isPreview &&
(!formData.projectLzType ||
['1', '5', '7', '9'].includes(formData.projectLzType.toString()))
"
:loading=
"loading"
@
save=
"() => saveClick('save')"
></routerBack>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<el-tabs
v-model=
"jcTabActiveName"
>
<el-tabs
v-model=
"jcTabActiveName"
>
...
@@ -2638,234 +2647,19 @@
...
@@ -2638,234 +2647,19 @@
</el-table>
</el-table>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"核心边界条件"
name=
"核心边界条件"
>
<el-collapse-item
title=
"核心边界条件"
name=
"核心边界条件"
>
<div
class=
"tab-handle"
>
<DynamicTable
<el-button
v-model=
"jcHxbjtjData"
type=
"primary"
:columns=
"boundaryColumns"
size=
"small"
:default-row=
"boundaryDefaultRow"
@
click=
"addJchxbjtj"
:select-options=
"boundarySelectOptions"
>
新增
</el-button
:show-add-button=
"true"
>
:show-delete-button=
"true"
</div>
:show-import-export=
"true"
<el-table
:scrollbar-always-on=
"true"
:data=
"jcHxbjtjData"
:disabled=
"isPreview"
style=
"width: 100%"
/>
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
prop=
"type"
label=
"业务类型"
width=
"130"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.type"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in hxbjtjlxlxList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</
template
>
</el-table-column>
<el-table-column
label=
"单位工程造价"
>
<el-table-column
prop=
"dwgczjSz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.dwgczjSz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"dwgczjDw"
label=
"单位"
width=
"130"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.dwgczjDw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in hxbjtjzjdwList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"销售/服务能力"
>
<el-table-column
prop=
"xsfwnlSz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.xsfwnlSz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"xsfwnlDw"
label=
"单位"
width=
"60"
/>
</el-table-column>
<el-table-column
label=
"年均负荷率"
>
<el-table-column
prop=
"njfhlSz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.njfhlSz"
:min=
"0"
:max=
"99999.99"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"njfhlDw"
label=
"单位"
width=
"60"
/>
</el-table-column>
<el-table-column
label=
"单位生产/服务总成本"
>
<el-table-column
prop=
"dwscfwzcbSz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.dwscfwzcbSz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"dwscfwzcbDw"
label=
"单位"
width=
"60"
/>
</el-table-column>
<el-table-column
label=
"单位售价(含税)"
>
<el-table-column
prop=
"dwsjSz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.dwsjSz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"dwsjDw"
label=
"单位"
width=
"90"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.dwsjDw"
/>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"盈亏平衡点"
>
<el-table-column
prop=
"ykphdlx"
label=
"类型"
width=
"130"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.ykphdlx"
placeholder=
"请选择"
no-data-text=
"暂无数据"
clearable
>
<el-option
v-for=
"item in hxbjtjykphdlxList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"ykphdsz"
label=
"数值"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.ykphdsz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ykphddw"
label=
"单位"
width=
"60"
/>
</el-table-column>
<el-table-column
prop=
"bcsm"
label=
"核心边界条件补充说明"
width=
"180"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.bcsm"
type=
"textarea"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteJchxbjtj(scope.$index)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
<el-collapse-item
title=
"决策主体审核情况"
title=
"决策主体审核情况"
name=
"决策主体审核情况"
name=
"决策主体审核情况"
...
@@ -3445,6 +3239,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
...
@@ -3445,6 +3239,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
routerBack
from
"@/components/common/routerBack.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
import
CollapseNavigation
from
"@/components/CollapseNavigation/index.vue"
;
import
DynamicTable
from
"@/components/FormDynamicTable/index.vue"
;
import
_
from
"lodash"
;
import
_
from
"lodash"
;
import
Decimal
from
"decimal.js"
;
import
Decimal
from
"decimal.js"
;
...
@@ -4261,19 +4056,63 @@ let jcCwpjzbData = reactive([
...
@@ -4261,19 +4056,63 @@ let jcCwpjzbData = reactive([
},
},
]);
]);
// ========== 核心边界条件表格配置 ==========
// 列配置(保持原有数据结构,使用autocomplete)
const
boundaryColumns
=
ref
([
{
prop
:
"type"
,
label
:
"边界条件名称"
,
type
:
"autocomplete"
,
placeholder
:
"请选择边界条件名称"
,
optionKey
:
"bjtjmc"
,
minWidth
:
130
,
},
{
prop
:
"dwgczjSz"
,
label
:
"数值"
,
type
:
"number"
,
placeholder
:
"请输入数值"
,
minWidth
:
140
,
},
{
prop
:
"dwgczjDw"
,
label
:
"单位"
,
type
:
"input"
,
placeholder
:
"请输入或选择单位"
,
optionKey
:
"hxbjtjzjdw"
,
minWidth
:
130
,
},
]);
// 核心边界条件默认行数据(保持原有字段)
const
boundaryDefaultRow
=
ref
({
type
:
""
,
dwgczjSz
:
null
,
dwgczjDw
:
""
,
xsfwnlSz
:
null
,
xsfwnlDw
:
"万元"
,
njfhlSz
:
null
,
njfhlDw
:
"%"
,
dwscfwzcbSz
:
null
,
dwscfwzcbDw
:
"万元"
,
dwsjSz
:
null
,
dwsjDw
:
""
,
ykphdlx
:
""
,
ykphdsz
:
null
,
ykphddw
:
"%"
,
bcsm
:
""
,
});
// 下拉选择框选项配置(使用computed确保引用正确)
const
boundarySelectOptions
=
computed
(()
=>
({
hxbjtjlxlx
:
hxbjtjlxlxList
,
hxbjtjzjdw
:
hxbjtjzjdwList
,
hxbjtjykphdlx
:
hxbjtjykphdlxList
,
}));
// 核心边界条件
// 核心边界条件
let
jcHxbjtjData
=
reactive
([]);
let
jcHxbjtjData
=
ref
([]);
const
addJchxbjtj
=
()
=>
{
jcHxbjtjData
.
push
({
njfhlDw
:
"%"
,
ykphddw
:
"%"
,
xsfwnlDw
:
"万元"
,
dwscfwzcbDw
:
"万元"
,
});
};
const
deleteJchxbjtj
=
(
index
)
=>
{
jcHxbjtjData
.
splice
(
index
,
1
);
};
// 决策主体审核情况
// 决策主体审核情况
let
jcztshqkData
=
reactive
([]);
let
jcztshqkData
=
reactive
([]);
const
addJcztshqk
=
()
=>
{
const
addJcztshqk
=
()
=>
{
...
@@ -4766,7 +4605,7 @@ const changeJcTzznyjfl = (val) => {
...
@@ -4766,7 +4605,7 @@ const changeJcTzznyjfl = (val) => {
let
hylxList
=
reactive
([]);
// 会议类型
let
hylxList
=
reactive
([]);
// 会议类型
let
jcspyjlx
=
reactive
([]);
// 决策审批意见类型
let
jcspyjlx
=
reactive
([]);
// 决策审批意见类型
let
isPreview
=
!!
route
.
query
.
isPreview
;
const
isPreview
=
ref
(
!!
route
.
query
.
isPreview
)
;
let
projectId
=
route
.
query
.
projectId
;
let
projectId
=
route
.
query
.
projectId
;
const
getProjectInfo
=
()
=>
{
const
getProjectInfo
=
()
=>
{
loading
.
value
=
true
;
loading
.
value
=
true
;
...
@@ -4788,7 +4627,6 @@ const getProjectInfo = () => {
...
@@ -4788,7 +4627,6 @@ const getProjectInfo = () => {
Object
.
assign
(
zcclData
.
value
,
data
.
lxzl
);
Object
.
assign
(
zcclData
.
value
,
data
.
lxzl
);
Object
.
assign
(
tzzeqkjData
,
data
.
projectXmtzzes
);
Object
.
assign
(
tzzeqkjData
,
data
.
projectXmtzzes
);
Object
.
assign
(
cwpjzbData
,
data
.
projectCwpjzbs
);
Object
.
assign
(
cwpjzbData
,
data
.
projectCwpjzbs
);
Object
.
assign
(
hxbjtjData
,
data
.
projectBjtjs
);
Object
.
assign
(
lxpfwjData
.
value
,
data
.
lxpfwj
);
Object
.
assign
(
lxpfwjData
.
value
,
data
.
lxpfwj
);
Object
.
assign
(
spyjTableData
,
data
.
projectSpyjs
);
Object
.
assign
(
spyjTableData
,
data
.
projectSpyjs
);
Object
.
assign
(
shclData
.
value
,
data
.
xgshcl
);
Object
.
assign
(
shclData
.
value
,
data
.
xgshcl
);
...
@@ -4832,9 +4670,9 @@ const getProjectInfo = () => {
...
@@ -4832,9 +4670,9 @@ const getProjectInfo = () => {
Object
.
assign
(
tpzcclData
.
value
,
jcData
.
qtxgzccl
);
Object
.
assign
(
tpzcclData
.
value
,
jcData
.
qtxgzccl
);
Object
.
assign
(
tpbczcclData
.
value
,
jcData
.
bcxgzccl
);
Object
.
assign
(
tpbczcclData
.
value
,
jcData
.
bcxgzccl
);
Object
.
assign
(
shyaData
.
value
,
jcData
.
shya
);
Object
.
assign
(
shyaData
.
value
,
jcData
.
shya
);
Object
.
assign
(
jcHxbjtjData
.
value
,
jcData
.
projectBjtjs
);
Object
.
assign
(
jcTzzeqkjData
,
jcData
.
projectXmtzzes
);
Object
.
assign
(
jcTzzeqkjData
,
jcData
.
projectXmtzzes
);
Object
.
assign
(
jcCwpjzbData
,
jcData
.
projectCwpjzbs
);
Object
.
assign
(
jcCwpjzbData
,
jcData
.
projectCwpjzbs
);
Object
.
assign
(
jcHxbjtjData
,
jcData
.
projectBjtjs
);
Object
.
assign
(
jcztshqkData
,
jcData
.
projectJczts
);
Object
.
assign
(
jcztshqkData
,
jcData
.
projectJczts
);
Object
.
assign
(
tzztshqkData
,
jcData
.
projectTzzts
);
Object
.
assign
(
tzztshqkData
,
jcData
.
projectTzzts
);
Object
.
assign
(
jcspyjData
,
jcData
.
projectSpyjs
);
Object
.
assign
(
jcspyjData
,
jcData
.
projectSpyjs
);
...
@@ -5063,6 +4901,7 @@ const getLrbData = () => {
...
@@ -5063,6 +4901,7 @@ const getLrbData = () => {
}
}
};
};
// 保存数据
// 保存数据
const
saveClick
=
(
type
)
=>
{
const
saveClick
=
(
type
)
=>
{
if
(
!
formData
.
projectLzType
||
formData
.
projectLzType
.
toString
()
===
"1"
)
{
if
(
!
formData
.
projectLzType
||
formData
.
projectLzType
.
toString
()
===
"1"
)
{
let
url
=
formData
.
id
let
url
=
formData
.
id
...
@@ -5079,7 +4918,6 @@ const saveClick = (type) => {
...
@@ -5079,7 +4918,6 @@ const saveClick = (type) => {
lxzl
:
zcclData
.
value
,
lxzl
:
zcclData
.
value
,
projectXmtzzes
:
tzzeqkjData
,
projectXmtzzes
:
tzzeqkjData
,
projectCwpjzbs
:
cwpjzbData
,
projectCwpjzbs
:
cwpjzbData
,
projectBjtjs
:
hxbjtjData
,
lxpfwj
:
lxpfwjData
.
value
,
lxpfwj
:
lxpfwjData
.
value
,
projectSpyjs
:
spyjTableData
,
projectSpyjs
:
spyjTableData
,
xgshcl
:
shclData
.
value
,
xgshcl
:
shclData
.
value
,
...
@@ -5116,7 +4954,7 @@ const saveClick = (type) => {
...
@@ -5116,7 +4954,7 @@ const saveClick = (type) => {
shya
:
shyaData
.
value
,
shya
:
shyaData
.
value
,
projectXmtzzes
:
jcTzzeqkjData
,
projectXmtzzes
:
jcTzzeqkjData
,
projectCwpjzbs
:
jcCwpjzbData
,
projectCwpjzbs
:
jcCwpjzbData
,
projectBjtjs
:
jcHxbjtjData
,
projectBjtjs
:
jcHxbjtjData
.
value
,
projectJczts
:
jcztshqkData
,
projectJczts
:
jcztshqkData
,
projectTzzts
:
tzztshqkData
,
projectTzzts
:
tzztshqkData
,
projectSpyjs
:
jcspyjData
,
projectSpyjs
:
jcspyjData
,
...
@@ -5172,7 +5010,7 @@ const saveClick = (type) => {
...
@@ -5172,7 +5010,7 @@ const saveClick = (type) => {
shya
:
shyaData
.
value
,
shya
:
shyaData
.
value
,
projectXmtzzes
:
jcTzzeqkjData
,
projectXmtzzes
:
jcTzzeqkjData
,
projectCwpjzbs
:
jcCwpjzbData
,
projectCwpjzbs
:
jcCwpjzbData
,
projectBjtjs
:
jcHxbjtjData
,
projectBjtjs
:
jcHxbjtjData
.
value
,
projectJczts
:
jcztshqkData
,
projectJczts
:
jcztshqkData
,
projectTzzts
:
tzztshqkData
,
projectTzzts
:
tzztshqkData
,
projectSpyjs
:
jcspyjData
,
projectSpyjs
:
jcspyjData
,
...
...
src/views/investingManage/quitAdd.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack
/>
<routerBack
:show-save=
"!loading && !isPreview"
:loading=
"loading"
@
save=
"saveClick"
/>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
...
...
src/views/projectManage/addProject.vue
View file @
c1d8e4a4
<
template
>
<
template
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-container"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<div
class=
"add-project-content"
v-loading=
"loading"
>
<routerBack></routerBack>
<routerBack
:show-save=
"!loading && !isPreview && (!formData.projectLzType || ['1', '5', '7'].includes(formData.projectLzType.toString()))"
:loading=
"loading"
@
save=
"() => saveClick('save')"
></routerBack>
<div
class=
"tabs-content"
>
<div
class=
"tabs-content"
>
<el-tabs
v-model=
"pageActiveName"
type=
"border-card"
>
<el-tabs
v-model=
"pageActiveName"
type=
"border-card"
>
<el-tab-pane
label=
"立项填报"
name=
"立项填报"
>
<el-tab-pane
label=
"立项填报"
name=
"立项填报"
>
...
...
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