明树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
05d4eaef
Commit
05d4eaef
authored
Mar 16, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
92ea2af0
Pipeline
#108418
passed with stage
in 20 seconds
Changes
4
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
8821 additions
and
5972 deletions
+8821
-5972
index.vue
src/components/FileUploader/index.vue
+23
-20
addControl.vue
src/views/investingManage/addControl.vue
+1322
-914
addStatement.vue
src/views/investingManage/addStatement.vue
+1024
-813
addProject.vue
src/views/projectManage/addProject.vue
+6452
-4225
No files found.
src/components/FileUploader/index.vue
View file @
05d4eaef
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
<!-- 文件列表表格 -->
<!-- 文件列表表格 -->
<el-table
<el-table
v-if=
"!isInline"
v-if=
"!isInline"
:data=
"
f
ileList"
:data=
"
safeF
ileList"
style=
"width: 100%"
style=
"width: 100%"
empty-text=
"暂无数据"
empty-text=
"暂无数据"
border
border
...
@@ -66,21 +66,21 @@
...
@@ -66,21 +66,21 @@
placement=
"bottom-start"
placement=
"bottom-start"
width=
"420"
width=
"420"
trigger=
"hover"
trigger=
"hover"
:disabled=
"
f
ileList.length === 0 || disabled"
:disabled=
"
safeF
ileList.length === 0 || disabled"
popper-class=
"file-popover"
popper-class=
"file-popover"
>
>
<!-- 弹窗内容 -->
<!-- 弹窗内容 -->
<
template
#
default
>
<
template
#
default
>
<div
class=
"file-popover-content"
>
<div
class=
"file-popover-content"
>
<!-- 无文件提示 -->
<!-- 无文件提示 -->
<div
v-if=
"
f
ileList.length === 0"
class=
"empty-file-tip"
>
<div
v-if=
"
safeF
ileList.length === 0"
class=
"empty-file-tip"
>
暂无上传文件
暂无上传文件
</div>
</div>
<!-- 文件列表 -->
<!-- 文件列表 -->
<div
v-else
class=
"file-list"
>
<div
v-else
class=
"file-list"
>
<div
<div
v-for=
"(file, index) in
f
ileList"
v-for=
"(file, index) in
safeF
ileList"
:key=
"file.id || index"
:key=
"file.id || index"
class=
"file-item"
class=
"file-item"
>
>
...
@@ -127,7 +127,7 @@
...
@@ -127,7 +127,7 @@
<
template
#
reference
>
<
template
#
reference
>
<div
class=
"inline-file"
>
<div
class=
"inline-file"
>
<div
class=
"file-count"
>
<div
class=
"file-count"
>
<span
class=
"count-num"
>
{{
f
ileList
.
length
}}
</span>
<span
class=
"count-num"
>
{{
safeF
ileList
.
length
}}
</span>
<span
class=
"count-text"
>
个文件
</span>
<span
class=
"count-text"
>
个文件
</span>
</div>
</div>
<el-icon
class=
"upload-icon"
><ArrowDown
/></el-icon>
<el-icon
class=
"upload-icon"
><ArrowDown
/></el-icon>
...
@@ -144,12 +144,12 @@ import { ElMessageBox, ElMessage } from "element-plus";
...
@@ -144,12 +144,12 @@ import { ElMessageBox, ElMessage } from "element-plus";
import
moment
from
"moment"
;
import
moment
from
"moment"
;
import
windowConfig
from
"@/window"
;
import
windowConfig
from
"@/window"
;
// 引入需要的图标
// 引入需要的图标
import
{
Document
,
Download
,
Delete
}
from
"@element-plus/icons-vue"
;
import
{
Document
,
Download
,
Delete
,
ArrowDown
}
from
"@element-plus/icons-vue"
;
// 补充缺失的 ArrowDown 图标
// 定义组件 props(
设置默认值,无需外部传参
)
// 定义组件 props(
放宽类型限制,增加兼容性
)
const
props
=
defineProps
({
const
props
=
defineProps
({
modelValue
:
{
modelValue
:
{
type
:
Array
,
type
:
[
Array
,
String
,
Number
],
// 兼容更多类型
default
:
()
=>
[],
default
:
()
=>
[],
required
:
true
,
required
:
true
,
},
},
...
@@ -192,13 +192,15 @@ const emit = defineEmits(["update:modelValue"]);
...
@@ -192,13 +192,15 @@ const emit = defineEmits(["update:modelValue"]);
const
selectedIds
=
ref
([]);
const
selectedIds
=
ref
([]);
const
popoverVisible
=
ref
(
false
);
const
popoverVisible
=
ref
(
false
);
//
计算属性:获取文件列表(双向绑定)
//
核心:安全处理文件列表,将非数组值转为空数组
const
f
ileList
=
computed
({
const
safeF
ileList
=
computed
({
get
()
{
get
()
{
return
props
.
modelValue
;
// 校验:如果是数组则直接返回,否则转为空数组
return
Array
.
isArray
(
props
.
modelValue
)
?
props
.
modelValue
:
[];
},
},
set
(
value
)
{
set
(
value
)
{
emit
(
"update:modelValue"
,
value
);
// 向外发射的值始终是数组,保证数据类型统一
emit
(
"update:modelValue"
,
Array
.
isArray
(
value
)
?
value
:
[]);
},
},
});
});
...
@@ -210,7 +212,7 @@ const formatDate = (date) => {
...
@@ -210,7 +212,7 @@ const formatDate = (date) => {
// 文件上传成功处理
// 文件上传成功处理
const
handleUploadSuccess
=
(
res
)
=>
{
const
handleUploadSuccess
=
(
res
)
=>
{
if
(
res
&&
res
.
data
)
{
if
(
res
&&
res
.
data
)
{
fileList
.
value
=
[...
fileList
.
value
,
res
.
data
];
safeFileList
.
value
=
[...
safeFileList
.
value
,
res
.
data
];
// 改用 safeFileList
console
.
log
(
"上传成功:"
,
res
.
data
);
console
.
log
(
"上传成功:"
,
res
.
data
);
ElMessage
.
success
(
"文件上传成功"
);
ElMessage
.
success
(
"文件上传成功"
);
popoverVisible
.
value
=
false
;
popoverVisible
.
value
=
false
;
...
@@ -253,9 +255,9 @@ const handleDelete = (index) => {
...
@@ -253,9 +255,9 @@ const handleDelete = (index) => {
type
:
"warning"
,
type
:
"warning"
,
})
})
.
then
(()
=>
{
.
then
(()
=>
{
const
newList
=
[...
fileList
.
value
];
const
newList
=
[...
safeFileList
.
value
];
// 改用 safeFileList
newList
.
splice
(
index
,
1
);
newList
.
splice
(
index
,
1
);
fileList
.
value
=
newList
;
safeFileList
.
value
=
newList
;
// 改用 safeFileList
// 删除后关闭popover
// 删除后关闭popover
popoverVisible
.
value
=
false
;
popoverVisible
.
value
=
false
;
})
})
...
@@ -270,20 +272,21 @@ const handleMultiDelete = () => {
...
@@ -270,20 +272,21 @@ const handleMultiDelete = () => {
type
:
"warning"
,
type
:
"warning"
,
})
})
.
then
(()
=>
{
.
then
(()
=>
{
const
newList
=
fileList
.
value
.
filter
(
const
newList
=
safeFileList
.
value
.
filter
(
// 改用 safeFileList
(
item
)
=>
!
selectedIds
.
value
.
includes
(
item
.
id
),
(
item
)
=>
!
selectedIds
.
value
.
includes
(
item
.
id
),
);
);
fileList
.
value
=
newList
;
safeFileList
.
value
=
newList
;
// 改用 safeFileList
selectedIds
.
value
=
[];
selectedIds
.
value
=
[];
})
})
.
catch
(()
=>
{});
.
catch
(()
=>
{});
};
};
// 监听外部文件列表变化
// 监听外部文件列表变化
(改为监听 safeFileList,无需额外处理)
watch
(
watch
(
()
=>
props
.
modelV
alue
,
()
=>
safeFileList
.
v
alue
,
(
newVal
)
=>
{
(
newVal
)
=>
{
fileList
.
value
=
newVal
;
// 空监听,仅保证响应式(safeFileList 已处理类型兼容)
},
},
{
deep
:
true
},
{
deep
:
true
},
);
);
...
...
src/views/investingManage/addControl.vue
View file @
05d4eaef
...
@@ -19,16 +19,26 @@
...
@@ -19,16 +19,26 @@
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in projectList"
:key=
"item.id"
v-model=
"formData.projectId"
:label=
"item.projectName"
:value=
"item.id"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in projectList"
:key=
"item.id"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"费用分项控制、阶段对比表"
name=
"费用分项控制、阶段对比表"
>
<el-collapse-item
title=
"费用分项控制、阶段对比表"
name=
"费用分项控制、阶段对比表"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<
template
v-if=
"fyfxkzIsEdit"
>
<
template
v-if=
"fyfxkzIsEdit"
>
<el-col
:span=
"6"
>
<el-col
:span=
"6"
>
...
@@ -55,181 +65,390 @@
...
@@ -55,181 +65,390 @@
<el-col
:span=
"6"
:offset=
"fyfxkzIsEdit ? 6 : 18"
>
<el-col
:span=
"6"
:offset=
"fyfxkzIsEdit ? 6 : 18"
>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<
template
v-if=
"fyfxkzIsEdit"
>
<
template
v-if=
"fyfxkzIsEdit"
>
<el-button
type=
"default"
size=
"small"
@
click=
"cancelFyfxkz"
>
取消
</el-button>
<el-button
<el-button
type=
"primary"
size=
"small"
@
click=
"saveFyfxkz"
>
确定
</el-button>
type=
"default"
size=
"small"
@
click=
"cancelFyfxkz"
>
取消
</el-button
>
<el-button
type=
"primary"
size=
"small"
@
click=
"saveFyfxkz"
>
确定
</el-button
>
</
template
>
</
template
>
<
template
v-else
>
<
template
v-else
>
<el-select
v-model=
"selectRange"
placeholder=
"请选择"
no-data-text=
"暂无数据"
<el-select
:style=
"
{width: '200px', marginRight: '20px'}"
v-model=
"selectRange"
placeholder=
"请选择"
no-data-text=
"暂无数据"
:style=
"
{ width: '200px', marginRight: '20px' }"
@change="changeRange"
@change="changeRange"
>
>
<el-option
v-for=
"item in rangeList"
:key=
"item.key"
<el-option
:label=
"item.key"
:value=
"item.key"
v-for=
"item in rangeList"
:key=
"item.key"
:label=
"item.key"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
<el-button
v-if=
"selectRange"
type=
"primary"
size=
"small"
@
click=
"editFyfxkz"
>
编辑
</el-button>
<el-button
<el-button
type=
"primary"
size=
"small"
@
click=
"addFyfxkz"
>
新增
</el-button>
v-if=
"selectRange"
type=
"primary"
size=
"small"
@
click=
"editFyfxkz"
>
编辑
</el-button
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addFyfxkz"
>
新增
</el-button
>
</
template
>
</
template
>
</div>
</div>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-table
:data=
"fyfxkzData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
<el-table
:data=
"fyfxkzData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
prop=
"xm"
label=
"项目"
width=
"240"
>
<el-table-column
prop=
"xm"
label=
"项目"
width=
"240"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.xm"
:disabled=
"!fyfxkzIsEdit"
/>
<el-input
v-model=
"scope.row.xm"
:disabled=
"!fyfxkzIsEdit"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"zbgs"
label=
"招标估算"
width=
"180"
>
<el-table-column
prop=
"zbgs"
label=
"招标估算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.zbgs"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.zbgs"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"jcgs"
label=
"决策估算"
width=
"180"
>
<el-table-column
prop=
"jcgs"
label=
"决策估算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.jcgs"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.jcgs"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfgusuan"
label=
"批复估算"
width=
"180"
>
<el-table-column
prop=
"pfgusuan"
label=
"批复估算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.pfgusuan"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.pfgusuan"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfgs"
label=
"批复概算"
width=
"180"
>
<el-table-column
prop=
"pfgs"
label=
"批复概算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.pfgs"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.pfgs"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"tkjgs"
label=
"同口径概算"
width=
"180"
>
<el-table-column
prop=
"tkjgs"
label=
"同口径概算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.tkjgs"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.tkjgs"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfys"
label=
"批复预算"
width=
"180"
>
<el-table-column
prop=
"pfys"
label=
"批复预算"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.pfys"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.pfys"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"zbqy"
label=
"招标签约"
width=
"180"
>
<el-table-column
prop=
"zbqy"
label=
"招标签约"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.zbqy"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.zbqy"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"jgjssj"
label=
"竣工决算审计"
width=
"180"
>
<el-table-column
prop=
"jgjssj"
label=
"竣工决算审计"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.jgjssj"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.jgjssj"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"sqyc"
label=
"上期预测"
width=
"180"
>
<el-table-column
prop=
"sqyc"
label=
"上期预测"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.sqyc"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.sqyc"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"bqyc"
label=
"本期预测"
width=
"180"
>
<el-table-column
prop=
"bqyc"
label=
"本期预测"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.bqyc"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.bqyc"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"bqjsq"
label=
"本期-上期"
width=
"180"
>
<el-table-column
prop=
"bqjsq"
label=
"本期-上期"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.bqjsq"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
v-model=
"scope.row.bqjsq"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
:disabled=
"!fyfxkzIsEdit"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"cysm"
label=
"本期较上期差异原因说明"
width=
"240"
>
<el-table-column
prop=
"cysm"
label=
"本期较上期差异原因说明"
width=
"240"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.cysm"
type=
"textarea"
:disabled=
"!fyfxkzIsEdit"
/>
<el-input
v-model=
"scope.row.cysm"
type=
"textarea"
:disabled=
"!fyfxkzIsEdit"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-col>
</el-col>
</el-row>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"决策条件落实情况"
name=
"决策条件落实情况"
>
<el-collapse-item
title=
"决策条件落实情况"
name=
"决策条件落实情况"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"决策单位"
>
<el-form-item
label=
"决策单位"
>
<el-select
v-model=
"formData.jcdw"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in jcdwList"
:key=
"item.key"
v-model=
"formData.jcdw"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in jcdwList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"项目批复意见落实情况"
:label-width=
"170"
></el-form-item>
<el-form-item
label=
"项目批复意见落实情况"
:label-width=
"170"
></el-form-item>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addPfyjlsqk"
>
新增
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"addPfyjlsqk"
>
新增
</el-button
>
</div>
</div>
<el-table
:data=
"pfyjlsqkData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table
:data=
"pfyjlsqkData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
prop=
"zyx"
label=
"重要性"
width=
"180"
>
<el-table-column
prop=
"zyx"
label=
"重要性"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.zyx"
/>
<el-input
v-model=
"scope.row.zyx"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"ssjd"
label=
"实施阶段"
width=
"180"
>
<el-table-column
prop=
"ssjd"
label=
"实施阶段"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.ssjd"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in ssjdList"
:key=
"item.key"
v-model=
"scope.row.ssjd"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in ssjdList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfnr"
label=
"批复内容"
width=
"180"
>
<el-table-column
prop=
"pfnr"
label=
"批复内容"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.pfnr"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.pfnr"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfyjlsqkjtsm"
label=
"批复意见落实情况具体说明"
width=
"180"
>
<el-table-column
prop=
"pfyjlsqkjtsm"
label=
"批复意见落实情况具体说明"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.pfyjlsqkjtsm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.pfyjlsqkjtsm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lszxqk"
label=
"落实(执行)情况"
width=
"180"
>
<el-table-column
prop=
"lszxqk"
label=
"落实(执行)情况"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.lszxqk"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in lsqkList"
:key=
"item.key"
v-model=
"scope.row.lszxqk"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in lsqkList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"wlsyy"
label=
"未落实原因"
width=
"180"
>
<el-table-column
prop=
"wlsyy"
label=
"未落实原因"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.wlsyy"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.wlsyy"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"xybgzcs"
label=
"下一步工作措施"
width=
"180"
>
<el-table-column
prop=
"xybgzcs"
label=
"下一步工作措施"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.xybgzcs"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.xybgzcs"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"yjwcsj"
label=
"预计完成时间"
width=
"260"
>
<el-table-column
prop=
"yjwcsj"
label=
"预计完成时间"
width=
"260"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-date-picker
<el-date-picker
v-model=
"scope.row.yjwcsj"
v-model=
"scope.row.yjwcsj"
...
@@ -239,17 +458,29 @@
...
@@ -239,17 +458,29 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"zrld"
label=
"责任领导"
width=
"180"
>
<el-table-column
prop=
"zrld"
label=
"责任领导"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.zrld"
/>
<el-input
v-model=
"scope.row.zrld"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"zrbmjzrr"
label=
"责任部门及责任人"
width=
"180"
>
<el-table-column
prop=
"zrbmjzrr"
label=
"责任部门及责任人"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.zrbmjzrr"
/>
<el-input
v-model=
"scope.row.zrbmjzrr"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"sfgx"
label=
"是否更新"
width=
"160"
>
<el-table-column
prop=
"sfgx"
label=
"是否更新"
width=
"160"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-radio-group
v-model=
"scope.row.sfgx"
>
<el-radio-group
v-model=
"scope.row.sfgx"
>
<el-radio
value=
"1"
>
是
</el-radio>
<el-radio
value=
"1"
>
是
</el-radio>
...
@@ -257,20 +488,35 @@
...
@@ -257,20 +488,35 @@
</el-radio-group>
</el-radio-group>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"文件上传"
prop=
"wjsc"
width=
"180"
>
<el-table-column
label=
"文件上传"
prop=
"wjsc"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-upload
<el-upload
v-if=
"!scope.row.wjsc"
v-if=
"!scope.row.wjsc"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"
:headers=
"
{Authorization: token}"
windowConfig.baseUrl + '/api/file/upload'
"
:headers=
"
{ Authorization: token }"
:show-file-list="false"
:show-file-list="false"
:on-success="(res, file) => addWjscFile(res, file, scope.row)"
:on-success="
(res, file) => addWjscFile(res, file, scope.row)
"
>
>
<el-button
link
type=
"primary"
>
上传
</el-button>
<el-button
link
type=
"primary"
>
上传
</el-button>
</el-upload>
</el-upload>
<div
class=
"upload-file-wrap"
v-else
>
<div
class=
"upload-file-wrap"
v-else
>
<span
class=
"file-name"
@
click=
"downloadFile(scope.row.wjsc)"
>
{{
scope
.
row
.
wjsc
.
originalname
}}
</span>
<span
<span
class=
"delete-btn"
@
click=
"deleteWjscFile(scope.row, scope.$index)"
>
class=
"file-name"
@
click=
"downloadFile(scope.row.wjsc)"
>
{{
scope
.
row
.
wjsc
.
originalname
}}
</span
>
<span
class=
"delete-btn"
@
click=
"deleteWjscFile(scope.row, scope.$index)"
>
<el-icon><CloseBold
/></el-icon>
<el-icon><CloseBold
/></el-icon>
</span>
</span>
</div>
</div>
...
@@ -283,61 +529,120 @@
...
@@ -283,61 +529,120 @@
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deletePfyjlsqk(scope.$index)"
>
删除
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deletePfyjlsqk(scope.$index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-col>
</el-col>
</el-row>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"其他建设目标重大偏差"
name=
"其他建设目标重大偏差"
>
<el-collapse-item
title=
"其他建设目标重大偏差"
name=
"其他建设目标重大偏差"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"工期"
:label-width=
"50"
></el-form-item>
<el-form-item
label=
"工期"
:label-width=
"50"
></el-form-item>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addGq"
>
新增
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"addGq"
>
新增
</el-button
>
</div>
</div>
<el-table
:data=
"gqData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table
:data=
"gqData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
label=
"监理开工令上传"
prop=
"jlkglsc"
width=
"180"
>
<el-table-column
label=
"监理开工令上传"
prop=
"jlkglsc"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-upload
<el-upload
v-if=
"!scope.row.jlkglsc"
v-if=
"!scope.row.jlkglsc"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"
:headers=
"
{Authorization: token}"
windowConfig.baseUrl + '/api/file/upload'
"
:headers=
"
{ Authorization: token }"
:show-file-list="false"
:show-file-list="false"
:on-success="(res, file) => addJlkglFile(res, file, scope.row)"
:on-success="
(res, file) =>
addJlkglFile(res, file, scope.row)
"
>
>
<el-button
link
type=
"primary"
>
上传
</el-button>
<el-button
link
type=
"primary"
>
上传
</el-button>
</el-upload>
</el-upload>
<div
class=
"upload-file-wrap"
v-else
>
<div
class=
"upload-file-wrap"
v-else
>
<span
class=
"file-name"
@
click=
"downloadFile(scope.row.jlkglsc)"
>
{{
scope
.
row
.
jlkglsc
.
originalname
}}
</span>
<span
<span
class=
"delete-btn"
@
click=
"deleteJlkglFile(scope.row, scope.$index)"
>
class=
"file-name"
@
click=
"downloadFile(scope.row.jlkglsc)"
>
{{
scope
.
row
.
jlkglsc
.
originalname
}}
</span
>
<span
class=
"delete-btn"
@
click=
"
deleteJlkglFile(scope.row, scope.$index)
"
>
<el-icon><CloseBold
/></el-icon>
<el-icon><CloseBold
/></el-icon>
</span>
</span>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"行业主管部门施工许可证上传"
prop=
"sgxkzsc"
width=
"180"
>
<el-table-column
label=
"行业主管部门施工许可证上传"
prop=
"sgxkzsc"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-upload
<el-upload
v-if=
"!scope.row.sgxkzsc"
v-if=
"!scope.row.sgxkzsc"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"
:headers=
"
{Authorization: token}"
windowConfig.baseUrl + '/api/file/upload'
"
:headers=
"
{ Authorization: token }"
:show-file-list="false"
:show-file-list="false"
:on-success="(res, file) => addSgxkzFile(res, file, scope.row)"
:on-success="
(res, file) =>
addSgxkzFile(res, file, scope.row)
"
>
>
<el-button
link
type=
"primary"
>
上传
</el-button>
<el-button
link
type=
"primary"
>
上传
</el-button>
</el-upload>
</el-upload>
<div
class=
"upload-file-wrap"
v-else
>
<div
class=
"upload-file-wrap"
v-else
>
<span
class=
"file-name"
@
click=
"downloadFile(scope.row.sgxkzsc)"
>
{{
scope
.
row
.
sgxkzsc
.
originalname
}}
</span>
<span
<span
class=
"delete-btn"
@
click=
"deleteSgxkzFile(scope.row, scope.$index)"
>
class=
"file-name"
@
click=
"downloadFile(scope.row.sgxkzsc)"
>
{{
scope
.
row
.
sgxkzsc
.
originalname
}}
</span
>
<span
class=
"delete-btn"
@
click=
"
deleteSgxkzFile(scope.row, scope.$index)
"
>
<el-icon><CloseBold
/></el-icon>
<el-icon><CloseBold
/></el-icon>
</span>
</span>
</div>
</div>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"kglsj"
label=
"监理开工令开工时间"
width=
"260"
>
<el-table-column
prop=
"kglsj"
label=
"监理开工令开工时间"
width=
"260"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-date-picker
<el-date-picker
v-model=
"scope.row.kglsj"
v-model=
"scope.row.kglsj"
...
@@ -347,7 +652,11 @@
...
@@ -347,7 +652,11 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"sgxksj"
label=
"施工许可时间"
width=
"260"
>
<el-table-column
prop=
"sgxksj"
label=
"施工许可时间"
width=
"260"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-date-picker
<el-date-picker
v-model=
"scope.row.sgxksj"
v-model=
"scope.row.sgxksj"
...
@@ -357,7 +666,11 @@
...
@@ -357,7 +666,11 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"yjsjwgsj"
label=
"预计/实际完成时间"
width=
"260"
>
<el-table-column
prop=
"yjsjwgsj"
label=
"预计/实际完成时间"
width=
"260"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-date-picker
<el-date-picker
v-model=
"scope.row.yjsjwgsj"
v-model=
"scope.row.yjsjwgsj"
...
@@ -367,50 +680,103 @@
...
@@ -367,50 +680,103 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"htgqydms"
label=
"合同工期约定描述"
width=
"180"
>
<el-table-column
prop=
"htgqydms"
label=
"合同工期约定描述"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.htgqydms"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.htgqydms"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"gqywsm"
label=
"工期延误说明"
width=
"180"
>
<el-table-column
prop=
"gqywsm"
label=
"工期延误说明"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.gqywsm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.gqywsm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"gqtqsm"
label=
"工期提前说明"
width=
"180"
>
<el-table-column
prop=
"gqtqsm"
label=
"工期提前说明"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.gqtqsm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.gqtqsm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteGq(scope.$index)"
>
删除
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteGq(scope.$index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"安全质量环保"
:label-width=
"100"
></el-form-item>
<el-form-item
label=
"安全质量环保"
:label-width=
"100"
></el-form-item>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addAqzlhb"
>
新增
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"addAqzlhb"
>
新增
</el-button
>
</div>
</div>
<el-table
:data=
"aqzlhbData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table
:data=
"aqzlhbData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
prop=
"jlkglsc"
label=
"目标描述"
>
<el-table-column
prop=
"jlkglsc"
label=
"目标描述"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.jlkglsc"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.jlkglsc"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"ly"
label=
"来源"
>
<el-table-column
prop=
"ly"
label=
"来源"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.ly"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in lyList"
:key=
"item.key"
v-model=
"scope.row.ly"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in lyList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"sffsaqzlhbwt"
label=
"是否发生安全质量环保问题被行政处罚"
>
<el-table-column
prop=
"sffsaqzlhbwt"
label=
"是否发生安全质量环保问题被行政处罚"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-radio-group
v-model=
"scope.row.sffsaqzlhbwt"
>
<el-radio-group
v-model=
"scope.row.sffsaqzlhbwt"
>
<el-radio
value=
"1"
>
是
</el-radio>
<el-radio
value=
"1"
>
是
</el-radio>
...
@@ -420,53 +786,57 @@
...
@@ -420,53 +786,57 @@
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteAqzlhb(scope.$index)"
>
删除
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteAqzlhb(scope.$index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-col>
</el-col>
<el-col
:span=
"24
"
>
<el-col
:span=
"24"
class=
"fileCla
"
>
<el-form-item
label=
"文件上传"
>
<el-form-item
label=
"文件上传"
>
<el-upload
<FileUploader
v-model=
"formData.qtjsmbzdpc"
></FileUploader>
</el-form-item>
<!-- <el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers=
"{Authorization: token
}"
:headers="{ Authorization: token
}"
:show-file-list="false"
:show-file-list="false"
multiple
multiple
:on-success="addMbpcFile"
:on-success="addMbpcFile"
>
>
<el-button type="default">上传</el-button>
<el-button type="default">上传</el-button>
</el-upload>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteMbpc"
:disabled=
"!mbpcSelectIds.length"
>
删除选中文件
</el-button>
<el-button
</el-form-item>
type="default"
<el-table
:data=
"mbpcData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@click="multiDeleteMbpc"
@
selection-change=
"mbpcSelectionChange"
:disabled="!mbpcSelectIds.length"
>
>删除选中文件</el-button
<el-table-column
type=
"selection"
width=
"55"
/>
> -->
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
<
template
#
default=
"{ row, index }"
>
<span>
{{
moment
(
row
.
updatedAt
).
format
(
"YYYY-MM-DD HH:mm:SS"
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteMbpc(index)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-col>
</el-col>
</el-row>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"投资收益"
name=
"投资收益"
>
<el-collapse-item
title=
"投资收益"
name=
"投资收益"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"财务评价主要边界条件变化对比表"
:label-width=
"230"
></el-form-item>
<el-form-item
<el-table
:data=
"cwpjData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
label=
"财务评价主要边界条件变化对比表"
:label-width=
"230"
></el-form-item>
<el-table
:data=
"cwpjData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
prop=
"bjtj"
label=
"边界条件"
/>
<el-table-column
prop=
"bjtj"
label=
"边界条件"
/>
<el-table-column
prop=
"jc"
label=
"决策"
>
<el-table-column
prop=
"jc"
label=
"决策"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.jc"
/>
<el-input
v-model=
"scope.row.jc"
/>
...
@@ -479,14 +849,26 @@
...
@@ -479,14 +849,26 @@
</el-table-column>
</el-table-column>
<el-table-column
prop=
"zycysm"
label=
"主要差异说明"
>
<el-table-column
prop=
"zycysm"
label=
"主要差异说明"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.zycysm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.zycysm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"投资收益指标变化对比表"
:label-width=
"170"
></el-form-item>
<el-form-item
<el-table
:data=
"tzsyData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
label=
"投资收益指标变化对比表"
:label-width=
"170"
></el-form-item>
<el-table
:data=
"tzsyData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
height=
"500"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
prop=
"pjzb"
label=
"评价指标"
/>
<el-table-column
prop=
"pjzb"
label=
"评价指标"
/>
<el-table-column
prop=
"jczb"
label=
"决策指标"
>
<el-table-column
prop=
"jczb"
label=
"决策指标"
>
...
@@ -512,97 +894,103 @@
...
@@ -512,97 +894,103 @@
</div>
</div>
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
}
from
"vue"
;
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
FileUploader
from
"@/components/FileUploader/index.vue"
;
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
let
token
=
ref
(
""
);
token
.
value
=
userStore
.
authToken
||
sessionStorage
.
getItem
(
"authToken"
)
||
""
;
const
activeCollapse
=
reactive
([
import
{
useUserStore
}
from
"@/stores/user.js"
;
"投资额控制"
,
"费用分项控制、阶段对比表"
,
"决策条件落实情况"
,
"其他建设目标重大偏差"
,
"投资收益"
const
userStore
=
useUserStore
();
]);
const
router
=
useRouter
();
let
formData
=
reactive
({});
const
route
=
useRoute
();
let
loading
=
ref
(
false
);
const
{
proxy
}
=
getCurrentInstance
();
let
token
=
ref
(
""
);
token
.
value
=
userStore
.
authToken
||
sessionStorage
.
getItem
(
"authToken"
)
||
""
;
// 项目列表
const
activeCollapse
=
reactive
([
let
projectList
=
ref
([]);
"投资额控制"
,
const
getProjectData
=
()
=>
{
"费用分项控制、阶段对比表"
,
"决策条件落实情况"
,
"其他建设目标重大偏差"
,
"投资收益"
,
]);
let
formData
=
reactive
({});
let
loading
=
ref
(
false
);
// 项目列表
let
projectList
=
ref
([]);
const
getProjectData
=
()
=>
{
proxy
.
$post
({
proxy
.
$post
({
url
:
"/api/project/listProject"
,
url
:
"/api/project/listProject"
,
data
:
{
data
:
{
page
:
1
,
page
:
1
,
pagesize
:
1000
,
pagesize
:
1000
,
attributes
:
[],
attributes
:
[],
menuType
:
"xmjc"
menuType
:
"xmjc"
,
},
},
callback
:
(
data
)
=>
{
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
;
projectList
.
value
=
data
.
rows
;
}
},
})
});
};
};
// 费用分项控制、阶段对比表
// 费用分项控制、阶段对比表
const
fyfxkzFormData
=
reactive
({});
const
fyfxkzFormData
=
reactive
({});
let
rangeList
=
ref
([]);
// 往期列表
let
rangeList
=
ref
([]);
// 往期列表
const
selectRange
=
ref
(
""
);
// 选择查看往期数据
const
selectRange
=
ref
(
""
);
// 选择查看往期数据
const
fyfxkzDefaultData
=
[
const
fyfxkzDefaultData
=
[
{
{
xm
:
"建筑安装工程费"
xm
:
"建筑安装工程费"
,
},
},
{
{
xm
:
"土地使用及拆迁补偿费"
xm
:
"土地使用及拆迁补偿费"
,
},
},
{
{
xm
:
"项目建设其他费"
xm
:
"项目建设其他费"
,
},
},
{
{
xm
:
"建设单位管理费"
xm
:
"建设单位管理费"
,
},
},
{
{
xm
:
"信息化费"
xm
:
"信息化费"
,
},
},
{
{
xm
:
"监理费"
xm
:
"监理费"
,
},
},
{
{
xm
:
"预备费"
xm
:
"预备费"
,
},
},
{
{
xm
:
"建设期贷款利息"
xm
:
"建设期贷款利息"
,
},
},
{
{
xm
:
"新增费用"
xm
:
"新增费用"
,
},
},
{
{
xm
:
"合计"
xm
:
"合计"
,
}
},
];
];
let
fyfxkzData
=
ref
([]);
let
fyfxkzData
=
ref
([]);
let
fyfxkzIsEdit
=
ref
(
false
);
let
fyfxkzIsEdit
=
ref
(
false
);
let
isPreview
=
!!
route
.
query
.
isPreview
;
let
isPreview
=
!!
route
.
query
.
isPreview
;
let
controlId
=
route
.
query
.
controlId
;
let
controlId
=
route
.
query
.
controlId
;
const
getControlInfo
=
()
=>
{
const
getControlInfo
=
()
=>
{
loading
.
value
=
true
;
loading
.
value
=
true
;
proxy
.
$post
({
proxy
.
$post
({
url
:
"/api/project/getTzkzInfo"
,
url
:
"/api/project/getTzkzInfo"
,
data
:
{
data
:
{
id
:
controlId
id
:
controlId
,
},
},
callback
:
(
res
)
=>
{
callback
:
(
res
)
=>
{
loading
.
value
=
false
;
loading
.
value
=
false
;
Object
.
assign
(
formData
,
res
);
Object
.
assign
(
formData
,
res
);
if
(
res
.
tzkztzekzs
&&
res
.
tzkztzekzs
.
length
)
{
if
(
res
.
tzkztzekzs
&&
res
.
tzkztzekzs
.
length
)
{
rangeList
.
value
=
res
.
tzkztzekzs
.
map
(
item
=>
{
rangeList
.
value
=
res
.
tzkztzekzs
.
map
((
item
)
=>
{
return
{
return
{
...
item
,
...
item
,
bqsj
:
proxy
.
moment
(
item
.
bqsj
).
format
(
"YYYY-MM"
),
bqsj
:
proxy
.
moment
(
item
.
bqsj
).
format
(
"YYYY-MM"
),
sqsj
:
proxy
.
moment
(
item
.
sqsj
).
format
(
"YYYY-MM"
)
sqsj
:
proxy
.
moment
(
item
.
sqsj
).
format
(
"YYYY-MM"
),
}
};
});
});
selectRange
.
value
=
res
.
tzkztzekzs
[
0
].
key
;
selectRange
.
value
=
res
.
tzkztzekzs
[
0
].
key
;
fyfxkzData
.
value
=
res
.
tzkztzekzs
[
0
].
tables
;
fyfxkzData
.
value
=
res
.
tzkztzekzs
[
0
].
tables
;
...
@@ -610,18 +998,17 @@
...
@@ -610,18 +998,17 @@
Object
.
assign
(
pfyjlsqkData
.
value
,
res
.
tzkzjcpfyjs
);
Object
.
assign
(
pfyjlsqkData
.
value
,
res
.
tzkzjcpfyjs
);
Object
.
assign
(
gqData
.
value
,
res
.
tzkzgqs
);
Object
.
assign
(
gqData
.
value
,
res
.
tzkzgqs
);
Object
.
assign
(
aqzlhbData
.
value
,
res
.
tzkzaqzlhbs
);
Object
.
assign
(
aqzlhbData
.
value
,
res
.
tzkzaqzlhbs
);
Object
.
assign
(
mbpcData
.
value
,
res
.
qtjsmbzdpc
);
Object
.
assign
(
cwpjData
.
value
,
res
.
tzkzcwpjs
);
Object
.
assign
(
cwpjData
.
value
,
res
.
tzkzcwpjs
);
Object
.
assign
(
tzsyData
.
value
,
res
.
tzkztzsys
);
Object
.
assign
(
tzsyData
.
value
,
res
.
tzkztzsys
);
}
},
});
});
};
};
let
ssjdList
=
reactive
([]);
let
ssjdList
=
reactive
([]);
let
jcdwList
=
reactive
([]);
let
jcdwList
=
reactive
([]);
let
lsqkList
=
reactive
([]);
let
lsqkList
=
reactive
([]);
let
lyList
=
reactive
([]);
// 安全质量环保-来源列表
let
lyList
=
reactive
([]);
// 安全质量环保-来源列表
onMounted
(()
=>
{
onMounted
(()
=>
{
getProjectData
();
getProjectData
();
let
resourceData
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
let
resourceData
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
ssjdList
=
resourceData
.
ssjd
;
ssjdList
=
resourceData
.
ssjd
;
...
@@ -635,43 +1022,45 @@
...
@@ -635,43 +1022,45 @@
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
fyfxkzIsEdit
.
value
=
true
;
fyfxkzIsEdit
.
value
=
true
;
}
}
});
});
// 新增费用分项控制、阶段对比表
// 新增费用分项控制、阶段对比表
const
addFyfxkz
=
()
=>
{
const
addFyfxkz
=
()
=>
{
selectRange
.
value
=
""
;
selectRange
.
value
=
""
;
fyfxkzIsEdit
.
value
=
true
;
fyfxkzIsEdit
.
value
=
true
;
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
};
};
const
editFyfxkz
=
()
=>
{
const
editFyfxkz
=
()
=>
{
fyfxkzIsEdit
.
value
=
true
;
fyfxkzIsEdit
.
value
=
true
;
let
selectData
=
rangeList
.
value
.
filter
(
item
=>
item
.
key
===
selectRange
.
value
);
let
selectData
=
rangeList
.
value
.
filter
(
(
item
)
=>
item
.
key
===
selectRange
.
value
,
);
fyfxkzFormData
.
bqsj
=
selectData
[
0
].
bqsj
;
fyfxkzFormData
.
bqsj
=
selectData
[
0
].
bqsj
;
fyfxkzFormData
.
sqsj
=
selectData
[
0
].
sqsj
;
fyfxkzFormData
.
sqsj
=
selectData
[
0
].
sqsj
;
};
};
const
saveFyfxkz
=
()
=>
{
const
saveFyfxkz
=
()
=>
{
if
(
fyfxkzFormData
.
bqsj
&&
fyfxkzFormData
.
sqsj
)
{
if
(
fyfxkzFormData
.
bqsj
&&
fyfxkzFormData
.
sqsj
)
{
if
(
selectRange
.
value
)
{
if
(
selectRange
.
value
)
{
rangeList
.
value
=
rangeList
.
value
.
map
(
item
=>
{
rangeList
.
value
=
rangeList
.
value
.
map
((
item
)
=>
{
if
(
item
.
key
===
selectRange
.
value
)
{
if
(
item
.
key
===
selectRange
.
value
)
{
selectRange
.
value
=
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
;
selectRange
.
value
=
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
;
return
{
return
{
bqsj
:
fyfxkzFormData
.
bqsj
,
bqsj
:
fyfxkzFormData
.
bqsj
,
sqsj
:
fyfxkzFormData
.
sqsj
,
sqsj
:
fyfxkzFormData
.
sqsj
,
key
:
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
,
key
:
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
,
tables
:
fyfxkzData
.
value
tables
:
fyfxkzData
.
value
,
}
};
}
else
{
}
else
{
return
{
return
{
...
item
...
item
,
};
};
}
}
})
});
}
else
{
}
else
{
rangeList
.
value
.
push
({
rangeList
.
value
.
push
({
bqsj
:
fyfxkzFormData
.
bqsj
,
bqsj
:
fyfxkzFormData
.
bqsj
,
sqsj
:
fyfxkzFormData
.
sqsj
,
sqsj
:
fyfxkzFormData
.
sqsj
,
key
:
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
,
key
:
fyfxkzFormData
.
bqsj
+
"至"
+
fyfxkzFormData
.
sqsj
,
tables
:
fyfxkzData
.
value
tables
:
fyfxkzData
.
value
,
});
});
}
}
fyfxkzIsEdit
.
value
=
false
;
fyfxkzIsEdit
.
value
=
false
;
...
@@ -679,14 +1068,16 @@
...
@@ -679,14 +1068,16 @@
selectRange
.
value
=
rangeList
.
value
[
0
].
key
;
selectRange
.
value
=
rangeList
.
value
[
0
].
key
;
fyfxkzData
.
value
=
rangeList
.
value
[
0
].
tables
;
fyfxkzData
.
value
=
rangeList
.
value
[
0
].
tables
;
}
else
{
}
else
{
let
selectData
=
rangeList
.
value
.
filter
(
item
=>
item
.
key
===
selectRange
.
value
);
let
selectData
=
rangeList
.
value
.
filter
(
(
item
)
=>
item
.
key
===
selectRange
.
value
,
);
fyfxkzData
.
value
=
selectData
.
length
?
selectData
[
0
].
tables
:
[];
fyfxkzData
.
value
=
selectData
.
length
?
selectData
[
0
].
tables
:
[];
}
}
}
else
{
}
else
{
ElMessage
.
warning
(
"请补充本期及上期时间"
);
ElMessage
.
warning
(
"请补充本期及上期时间"
);
}
}
}
};
const
cancelFyfxkz
=
()
=>
{
const
cancelFyfxkz
=
()
=>
{
if
(
selectRange
.
value
)
{
if
(
selectRange
.
value
)
{
fyfxkzData
.
value
=
rangeList
.
value
[
0
].
tables
;
fyfxkzData
.
value
=
rangeList
.
value
[
0
].
tables
;
}
else
if
(
formData
.
id
)
{
}
else
if
(
formData
.
id
)
{
...
@@ -695,212 +1086,220 @@
...
@@ -695,212 +1086,220 @@
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
fyfxkzData
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
fyfxkzDefaultData
));
}
}
fyfxkzIsEdit
.
value
=
false
;
fyfxkzIsEdit
.
value
=
false
;
}
};
const
changeRange
=
(
val
)
=>
{
const
changeRange
=
(
val
)
=>
{
fyfxkzData
.
value
=
rangeList
.
value
.
filter
(
item
=>
item
.
key
===
val
)[
0
].
tables
;
fyfxkzData
.
value
=
rangeList
.
value
.
filter
(
};
(
item
)
=>
item
.
key
===
val
,
)[
0
].
tables
;
};
// 项目批复意见落实情况
// 项目批复意见落实情况
let
pfyjlsqkData
=
ref
([]);
let
pfyjlsqkData
=
ref
([]);
const
addPfyjlsqk
=
()
=>
{
const
addPfyjlsqk
=
()
=>
{
pfyjlsqkData
.
value
.
push
({});
pfyjlsqkData
.
value
.
push
({});
};
};
const
addWjscFile
=
(
res
,
file
,
row
)
=>
{
const
addWjscFile
=
(
res
,
file
,
row
)
=>
{
row
.
wjsc
=
{};
row
.
wjsc
=
{};
Object
.
assign
(
row
.
wjsc
,
res
.
data
);
Object
.
assign
(
row
.
wjsc
,
res
.
data
);
};
};
const
deleteWjscFile
=
(
row
,
index
)
=>
{
const
deleteWjscFile
=
(
row
,
index
)
=>
{
let
{
wjsc
,
...
data
}
=
row
;
let
{
wjsc
,
...
data
}
=
row
;
pfyjlsqkData
.
value
[
index
]
=
data
;
pfyjlsqkData
.
value
[
index
]
=
data
;
};
};
const
deletePfyjlsqk
=
(
index
)
=>
{
const
deletePfyjlsqk
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
}).
then
(()
=>
{
pfyjlsqkData
.
value
.
splice
(
index
,
1
);
pfyjlsqkData
.
value
.
splice
(
index
,
1
);
})
});
}
};
// 其他建设目标重大偏差
// 其他建设目标重大偏差
//-工期
//-工期
let
gqData
=
ref
([]);
let
gqData
=
ref
([]);
const
addGq
=
()
=>
{
const
addGq
=
()
=>
{
gqData
.
value
.
push
({});
gqData
.
value
.
push
({});
};
};
// --监理开工令上传
// --监理开工令上传
const
addJlkglFile
=
(
res
,
file
,
row
)
=>
{
const
addJlkglFile
=
(
res
,
file
,
row
)
=>
{
row
.
jlkglsc
=
{};
row
.
jlkglsc
=
{};
Object
.
assign
(
row
.
jlkglsc
,
res
.
data
);
Object
.
assign
(
row
.
jlkglsc
,
res
.
data
);
};
};
const
deleteJlkglFile
=
(
row
,
index
)
=>
{
const
deleteJlkglFile
=
(
row
,
index
)
=>
{
let
{
wjsc
,
...
data
}
=
row
;
let
{
wjsc
,
...
data
}
=
row
;
gqData
.
value
[
index
]
=
data
;
gqData
.
value
[
index
]
=
data
;
};
};
// --行业主管部门施工许可证上传
// --行业主管部门施工许可证上传
const
addSgxkzFile
=
(
res
,
file
,
row
)
=>
{
const
addSgxkzFile
=
(
res
,
file
,
row
)
=>
{
row
.
sgxkzsc
=
{};
row
.
sgxkzsc
=
{};
Object
.
assign
(
row
.
sgxkzsc
,
res
.
data
);
Object
.
assign
(
row
.
sgxkzsc
,
res
.
data
);
};
};
const
deleteSgxkzFile
=
(
row
,
index
)
=>
{
const
deleteSgxkzFile
=
(
row
,
index
)
=>
{
let
{
wjsc
,
...
data
}
=
row
;
let
{
wjsc
,
...
data
}
=
row
;
gqData
.
value
[
index
]
=
data
;
gqData
.
value
[
index
]
=
data
;
};
};
const
deleteGq
=
(
index
)
=>
{
const
deleteGq
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
}).
then
(()
=>
{
gqData
.
value
.
splice
(
index
,
1
);
gqData
.
value
.
splice
(
index
,
1
);
})
});
}
};
// -安全质量环保
// -安全质量环保
let
aqzlhbData
=
ref
([]);
let
aqzlhbData
=
ref
([]);
const
addAqzlhb
=
()
=>
{
const
addAqzlhb
=
()
=>
{
aqzlhbData
.
value
.
push
({});
aqzlhbData
.
value
.
push
({});
};
};
const
deleteAqzlhb
=
(
index
)
=>
{
const
deleteAqzlhb
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
}).
then
(()
=>
{
aqzlhbData
.
value
.
splice
(
index
,
1
);
aqzlhbData
.
value
.
splice
(
index
,
1
);
})
});
}
};
// -文件上传
// -文件上传
let
mbpcData
=
ref
([]);
let
mbpcData
=
ref
([]);
const
addMbpcFile
=
(
res
,
file
)
=>
{
const
addMbpcFile
=
(
res
,
file
)
=>
{
mbpcData
.
value
.
push
(
res
.
data
);
mbpcData
.
value
.
push
(
res
.
data
);
}
};
const
deleteMbpc
=
(
index
)
=>
{
const
deleteMbpc
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
})
.
then
(()
=>
{
mbpcData
.
value
.
splice
(
index
,
1
);
mbpcData
.
value
.
splice
(
index
,
1
);
}).
catch
(()
=>
{})
})
}
.
catch
(()
=>
{});
let
mbpcSelectIds
=
ref
([]);
};
const
mbpcSelectionChange
=
(
datas
)
=>
{
let
mbpcSelectIds
=
ref
([]);
mbpcSelectIds
.
value
=
datas
.
map
(
item
=>
item
.
id
);
const
mbpcSelectionChange
=
(
datas
)
=>
{
};
mbpcSelectIds
.
value
=
datas
.
map
((
item
)
=>
item
.
id
);
const
multiDeleteMbpc
=
()
=>
{
};
ElMessageBox
.
confirm
(
"确认删除选中数据?"
,
"提示"
,{
const
multiDeleteMbpc
=
()
=>
{
confirmButtonText
:
'确认'
,
ElMessageBox
.
confirm
(
"确认删除选中数据?"
,
"提示"
,
{
cancelButtonText
:
'取消'
,
confirmButtonText
:
"确认"
,
type
:
'warning'
,
cancelButtonText
:
"取消"
,
}).
then
(()
=>
{
type
:
"warning"
,
mbpcData
.
value
=
mbpcData
.
value
.
filter
(
item
=>
!
mbpcSelectIds
.
value
.
includes
(
item
.
id
));
})
}).
catch
(()
=>
{})
.
then
(()
=>
{
};
mbpcData
.
value
=
mbpcData
.
value
.
filter
(
(
item
)
=>
!
mbpcSelectIds
.
value
.
includes
(
item
.
id
),
);
})
.
catch
(()
=>
{});
};
// 下载已上传文件
// 下载已上传文件
const
downloadFile
=
(
data
)
=>
{
const
downloadFile
=
(
data
)
=>
{
let
a
=
document
.
createElement
(
"a"
);
let
a
=
document
.
createElement
(
"a"
);
a
.
href
=
`
${
proxy
.
windowConfig
.
baseUrl
}
/api/file/download/
${
data
.
id
}
`
;
a
.
href
=
`
${
proxy
.
windowConfig
.
baseUrl
}
/api/file/download/
${
data
.
id
}
`
;
a
.
download
=
data
.
originalname
;
a
.
download
=
data
.
originalname
;
document
.
body
.
appendChild
(
a
);
document
.
body
.
appendChild
(
a
);
a
.
click
();
a
.
click
();
a
.
remove
();
a
.
remove
();
};
};
// 财务评价主要边界条件变化对比表
// 财务评价主要边界条件变化对比表
const
cwpjData
=
ref
([
const
cwpjData
=
ref
([
{
{
bjtj
:
"项目总投资(万元)"
bjtj
:
"项目总投资(万元)"
,
},
},
{
{
bjtj
:
"项目资本金(万元)"
bjtj
:
"项目资本金(万元)"
,
},
},
{
{
bjtj
:
"我方出资(万元)"
bjtj
:
"我方出资(万元)"
,
},
},
{
{
bjtj
:
"政府方出资(万元)"
bjtj
:
"政府方出资(万元)"
,
},
},
{
{
bjtj
:
"项目融资(万元)"
bjtj
:
"项目融资(万元)"
,
},
},
{
{
bjtj
:
"年度投资比例"
bjtj
:
"年度投资比例"
,
},
},
{
{
bjtj
:
"合作年限"
bjtj
:
"合作年限"
,
},
},
{
{
bjtj
:
"长期贷款利率"
bjtj
:
"长期贷款利率"
,
},
},
{
{
bjtj
:
"债务偿还方式"
bjtj
:
"债务偿还方式"
,
},
},
{
{
bjtj
:
"项目收入(亿元)"
bjtj
:
"项目收入(亿元)"
,
},
},
{
{
bjtj
:
"通行费收入(亿元)"
bjtj
:
"通行费收入(亿元)"
,
},
},
{
{
bjtj
:
"其他收入(亿元)"
bjtj
:
"其他收入(亿元)"
,
},
},
{
{
bjtj
:
"运营期补助收入(亿元)"
bjtj
:
"运营期补助收入(亿元)"
,
},
},
{
{
bjtj
:
"经营成本(亿元)"
bjtj
:
"经营成本(亿元)"
,
},
},
{
{
bjtj
:
"税率"
bjtj
:
"税率"
,
},
},
{
{
bjtj
:
"折旧摊销方式"
bjtj
:
"折旧摊销方式"
,
}
},
]);
]);
// 投资收益指标变化对比表
// 投资收益指标变化对比表
const
tzsyData
=
ref
([
const
tzsyData
=
ref
([
{
{
pjzb
:
"项目全投资内部收益率"
pjzb
:
"项目全投资内部收益率"
,
},
},
{
{
pjzb
:
"项目资本金内部收益率"
pjzb
:
"项目资本金内部收益率"
,
},
},
{
{
pjzb
:
"社会资本方内部收益率"
pjzb
:
"社会资本方内部收益率"
,
},
},
{
{
pjzb
:
"资本金综合内部收益率"
pjzb
:
"资本金综合内部收益率"
,
},
},
{
{
pjzb
:
"静态投资回收期(年)"
pjzb
:
"静态投资回收期(年)"
,
},
},
{
{
pjzb
:
"累计净现金流(亿元)"
pjzb
:
"累计净现金流(亿元)"
,
},
},
{
{
pjzb
:
"静态投资回收期(年)"
pjzb
:
"静态投资回收期(年)"
,
},
},
{
{
pjzb
:
"累计净现金流(亿元)"
pjzb
:
"累计净现金流(亿元)"
,
},
},
{
{
pjzb
:
"现金流平衡年"
pjzb
:
"现金流平衡年"
,
},
},
{
{
pjzb
:
"盈亏平衡年"
pjzb
:
"盈亏平衡年"
,
},
},
{
{
pjzb
:
"可供分配利润转正年"
pjzb
:
"可供分配利润转正年"
,
}
},
]);
]);
const
backClick
=
()
=>
{
const
backClick
=
()
=>
{
router
.
back
(
-
1
)
router
.
back
(
-
1
);
}
};
const
saveClick
=
()
=>
{
const
saveClick
=
()
=>
{
if
(
!
formData
.
projectId
)
{
if
(
!
formData
.
projectId
)
{
return
ElMessage
.
warning
(
"请选择项目信息"
);
return
ElMessage
.
warning
(
"请选择项目信息"
);
}
}
...
@@ -908,7 +1307,9 @@
...
@@ -908,7 +1307,9 @@
return
ElMessage
.
warning
(
"请先保存正在添加的费用分项控制、阶段对比表"
);
return
ElMessage
.
warning
(
"请先保存正在添加的费用分项控制、阶段对比表"
);
}
}
let
url
=
formData
.
id
?
"updateTzkz"
:
"createTzkz"
;
let
url
=
formData
.
id
?
"updateTzkz"
:
"createTzkz"
;
let
project
=
projectList
.
value
.
filter
(
item
=>
item
.
id
===
formData
.
projectId
)[
0
];
let
project
=
projectList
.
value
.
filter
(
(
item
)
=>
item
.
id
===
formData
.
projectId
,
)[
0
];
proxy
.
$post
({
proxy
.
$post
({
url
:
"/api/project/"
+
url
,
url
:
"/api/project/"
+
url
,
data
:
{
data
:
{
...
@@ -918,21 +1319,28 @@
...
@@ -918,21 +1319,28 @@
tzkzjcpfyjs
:
pfyjlsqkData
.
value
,
tzkzjcpfyjs
:
pfyjlsqkData
.
value
,
tzkzgqs
:
gqData
.
value
,
tzkzgqs
:
gqData
.
value
,
tzkzaqzlhbs
:
aqzlhbData
.
value
,
tzkzaqzlhbs
:
aqzlhbData
.
value
,
qtjsmbzdpc
:
mbpcData
.
value
,
tzkzcwpjs
:
cwpjData
.
value
,
tzkzcwpjs
:
cwpjData
.
value
,
tzkztzsys
:
tzsyData
.
value
tzkztzsys
:
tzsyData
.
value
,
},
},
callback
:
(
data
)
=>
{
callback
:
(
data
)
=>
{
router
.
back
(
-
1
)
router
.
back
(
-
1
);
}
},
});
});
}
};
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
@import "@/styles/manage.less";
.fileCla {
.add-project-header{
.el-form-item {
margin-bottom: 10px;
display: block !important;
.el-form-item__label {
margin-bottom: 16px;
}
}
}
}
@import "@/styles/manage.less";
.add-project-header {
margin-bottom: 10px;
}
</
style
>
</
style
>
src/views/investingManage/addStatement.vue
View file @
05d4eaef
...
@@ -15,9 +15,16 @@
...
@@ -15,9 +15,16 @@
<el-tab-pane
label=
"全生命周期责任书"
name=
"全生命周期责任书"
>
<el-tab-pane
label=
"全生命周期责任书"
name=
"全生命周期责任书"
>
<div
class=
"project-tab-content"
>
<div
class=
"project-tab-content"
>
<div
class=
"tab-content"
>
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"130"
:disabled=
"isPreview"
>
<el-form
:model=
"formData"
:label-width=
"130"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse
v-model=
"activeCollapse"
>
<el-collapse-item
title=
"责任书基本信息"
name=
"责任书基本信息"
>
<el-collapse-item
title=
"责任书基本信息"
name=
"责任书基本信息"
>
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"责任书类型"
>
<el-form-item
label=
"责任书类型"
>
...
@@ -38,11 +45,17 @@
...
@@ -38,11 +45,17 @@
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目信息"
required
>
<el-form-item
label=
"项目信息"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择"
no-data-text=
"暂无数据"
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择"
no-data-text=
"暂无数据"
@
change=
"changeProject"
@
change=
"changeProject"
>
>
<el-option
v-for=
"item in projectList"
:key=
"item.id"
<el-option
:label=
"item.projectName"
:value=
"item.id"
v-for=
"item in projectList"
:key=
"item.id"
:label=
"item.projectName"
:value=
"item.id"
></el-option>
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
...
@@ -50,33 +63,73 @@
...
@@ -50,33 +63,73 @@
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"责任书文件"
>
<el-form-item
label=
"责任书文件"
>
<el-upload
<el-upload
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"
:headers=
"{Authorization: token}"
windowConfig.baseUrl + '/api/file/upload'
"
:headers=
"{ Authorization: token }"
:show-file-list=
"false"
:show-file-list=
"false"
multiple
multiple
:on-success=
"addZrsFile"
:on-success=
"addZrsFile"
>
>
<el-button
type=
"default"
>
上传
</el-button>
<el-button
type=
"default"
>
上传
</el-button>
</el-upload>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteZrs"
:disabled=
"!zrsSelectIds.length"
>
删除选中文件
</el-button>
<el-button
type=
"default"
@
click=
"multiDeleteZrs"
:disabled=
"!zrsSelectIds.length"
>
删除选中文件
</el-button
>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
>
<el-form-item
label=
""
>
<el-table
:data=
"zrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
<el-table
:data=
"zrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@
selection-change=
"zrsSelectionChange"
@
selection-change=
"zrsSelectionChange"
>
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
<
template
#
default=
"{ row, index }"
>
<
template
#
default=
"{ row, index }"
>
<span>
{{
moment
(
row
.
updatedAt
).
format
(
"YYYY-MM-DD HH:mm:SS"
)
}}
</span>
<span>
{{
moment
(
row
.
updatedAt
).
format
(
"YYYY-MM-DD HH:mm:SS"
,
)
}}
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
prop=
"size"
label=
"大小"
>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row }"
>
<span>
{{
row
.
size
}}
MB
</span>
</
template
>
</el-table-column>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<span
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteZrs(index)"
>
删除
</el-button>
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteZrs(index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -108,7 +161,10 @@
...
@@ -108,7 +161,10 @@
</el-col>
</el-col>
<el-col
:span=
"8"
>
<el-col
:span=
"8"
>
<el-form-item
label=
"项目实施期限"
>
<el-form-item
label=
"项目实施期限"
>
<el-input-number
v-model=
"formData.xmssqx"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
v-model=
"formData.xmssqx"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
controls-position=
"right"
></el-input-number>
></el-input-number>
年
年
...
@@ -116,88 +172,157 @@
...
@@ -116,88 +172,157 @@
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目内容概述"
>
<el-form-item
label=
"项目内容概述"
>
<el-input
v-model=
"formData.xmnrgs"
type=
"textarea"
<el-input
:autosize=
"{minRows: 2, maxRows: 5}"
v-model=
"formData.xmnrgs"
type=
"textarea"
:autosize=
"{ minRows: 2, maxRows: 5 }"
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"项目经济指标概述"
>
<el-form-item
label=
"项目经济指标概述"
>
<el-input
v-model=
"formData.xmjjzbgs"
type=
"textarea"
<el-input
:autosize=
"{minRows: 2, maxRows: 5}"
v-model=
"formData.xmjjzbgs"
type=
"textarea"
:autosize=
"{ minRows: 2, maxRows: 5 }"
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"责任书具体指标"
name=
"责任书具体指标"
>
<el-collapse-item
<el-table
:data=
"zrsjtzbData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
title=
"责任书具体指标"
show-summary
:summary-method=
"getSummaries"
name=
"责任书具体指标"
>
<el-table
:data=
"zrsjtzbData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
show-summary
:summary-method=
"getSummaries"
>
>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
type=
"index"
label=
"序号"
width=
"60"
/>
<el-table-column
prop=
"zbmc"
label=
"指标名称"
/>
<el-table-column
prop=
"zbmc"
label=
"指标名称"
/>
<el-table-column
prop=
"zbmbz"
label=
"指标目标值"
width=
"180"
>
<el-table-column
prop=
"zbmbz"
label=
"指标目标值"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.zbmbz"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
v-model=
"scope.row.zbmbz"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
controls-position=
"right"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"khjzf"
label=
"考核基准分"
width=
"180"
>
<el-table-column
prop=
"khjzf"
label=
"考核基准分"
width=
"180"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.khjzf"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
v-model=
"scope.row.khjzf"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
controls-position=
"right"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"sfsy"
label=
"是否适用"
width=
"90"
>
<el-table-column
prop=
"sfsy"
label=
"是否适用"
width=
"90"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-switch
<el-switch
v-model=
"scope.row.sfsy"
inline-prompt
v-model=
"scope.row.sfsy"
active-value=
"1"
active-text=
"是"
inline-prompt
inactive-value=
"2"
inactive-text=
"否"
active-value=
"1"
active-text=
"是"
inactive-value=
"2"
inactive-text=
"否"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"khsm"
label=
"考核说明"
>
<el-table-column
prop=
"khsm"
label=
"考核说明"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.khsm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.khsm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
</el-collapse-item>
</el-collapse-item>
<el-collapse-item
title=
"批复意见落实情况"
name=
"批复意见落实情况"
>
<el-collapse-item
title=
"批复意见落实情况"
name=
"批复意见落实情况"
>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addPfyjlsqk"
>
新增
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"addPfyjlsqk"
>
新增
</el-button
>
</div>
</div>
<el-table
:data=
"pfyjlsqkData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table
:data=
"pfyjlsqkData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
type=
"index"
width=
"60"
/>
<el-table-column
prop=
"lx"
label=
"类型"
>
<el-table-column
prop=
"lx"
label=
"类型"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.lx"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in pfyjlxList"
:key=
"item.key"
v-model=
"scope.row.lx"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in pfyjlxList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"pfyj"
label=
"批复意见"
>
<el-table-column
prop=
"pfyj"
label=
"批复意见"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.pfyj"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.pfyj"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"jzf"
label=
"基准分"
>
<el-table-column
prop=
"jzf"
label=
"基准分"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input-number
v-model=
"scope.row.jzf"
:min=
"0"
:max=
"99999999999.99999999"
<el-input-number
v-model=
"scope.row.jzf"
:min=
"0"
:max=
"99999999999.99999999"
controls-position=
"right"
controls-position=
"right"
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lsqk"
label=
"落实情况"
>
<el-table-column
prop=
"lsqk"
label=
"落实情况"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.lsqk"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-select
<el-option
v-for=
"item in lsqkList"
:key=
"item.key"
v-model=
"scope.row.lsqk"
:label=
"item.name"
:value=
"item.key"
placeholder=
"请选择"
no-data-text=
"暂无数据"
>
<el-option
v-for=
"item in lsqkList"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
></el-option>
</el-select>
</el-select>
</
template
>
</
template
>
...
@@ -212,14 +337,26 @@
...
@@ -212,14 +337,26 @@
/>
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"lsqkjtsm"
label=
"落实情况具体说明"
>
<el-table-column
prop=
"lsqkjtsm"
label=
"落实情况具体说明"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-input
v-model=
"scope.row.lsqkjtsm"
type=
"textarea"
/>
<el-input
v-model=
"scope.row.lsqkjtsm"
type=
"textarea"
/>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
>
<el-table-column
label=
"操作"
width=
"60"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deletePfyjlsqk(scope.$index)"
>
删除
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deletePfyjlsqk(scope.$index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -237,32 +374,62 @@
...
@@ -237,32 +374,62 @@
<el-form-item
label=
"策划文件"
>
<el-form-item
label=
"策划文件"
>
<el-upload
<el-upload
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:headers=
"{Authorization: token
}"
:headers=
"{ Authorization: token
}"
:show-file-list=
"false"
:show-file-list=
"false"
multiple
multiple
:disabled=
"isPreview"
:on-success=
"addChwjFile"
:on-success=
"addChwjFile"
>
>
<el-button
type=
"default"
>
上传
</el-button>
<el-button
:disabled=
"isPreview"
type=
"default"
>
上传
</el-button
>
</el-upload>
</el-upload>
<el-button
type=
"default"
@
click=
"multiDeleteChwj"
:disabled=
"!chwjSelectIds.length"
>
删除选中文件
</el-button>
<el-button
type=
"default"
@
click=
"multiDeleteChwj"
:disabled=
"!chwjSelectIds.length"
>
删除选中文件
</el-button
>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
>
<el-form-item
label=
""
>
<el-table
:data=
"chwjData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
<el-table
:data=
"chwjData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
@
selection-change=
"chwjSelectionChange"
@
selection-change=
"chwjSelectionChange"
>
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"originalname"
label=
"文件名"
/>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
<el-table-column
prop=
"updatedAt"
label=
"上传时间"
>
<
template
#
default=
"{ row, index }"
>
<
template
#
default=
"{ row, index }"
>
<span>
{{
moment
(
row
.
updatedAt
).
format
(
"YYYY-MM-DD HH:mm:SS"
)
}}
</span>
<span>
{{
moment
(
row
.
updatedAt
).
format
(
"YYYY-MM-DD HH:mm:SS"
,
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"size"
label=
"大小"
>
<
template
#
default=
"{ row }"
>
<span>
{{
row
.
size
}}
MB
</span>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"size"
label=
"大小"
/>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<el-table-column
fixed=
"right"
label=
"操作"
width=
"100"
>
<
template
#
default=
"{ row, index }"
>
<
template
#
default=
"{ row, index }"
>
<!-- 需要在查看表单disabled时保持允许下载 -->
<!-- 需要在查看表单disabled时保持允许下载 -->
<span
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span>
<span
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteChwj(index)"
>
删除
</el-button>
class=
"always-click"
@
click=
"downloadFile(row)"
>
下载
</span
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteChwj(index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -278,9 +445,20 @@
...
@@ -278,9 +445,20 @@
<el-row
:gutter=
"20"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<div
class=
"tab-handle"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"addJyglzrs"
>
新增
</el-button>
<el-button
type=
"primary"
:disabled=
"isPreview"
size=
"small"
@
click=
"addJyglzrs"
>
新增
</el-button
>
</div>
</div>
<el-table
:data=
"jyglzrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table
:data=
"jyglzrsData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
type=
"index"
width=
"50"
/>
<el-table-column
prop=
"nd"
label=
"年度"
width=
"260"
>
<el-table-column
prop=
"nd"
label=
"年度"
width=
"260"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
...
@@ -297,15 +475,25 @@
...
@@ -297,15 +475,25 @@
<el-upload
<el-upload
v-if=
"!scope.row.jyglzrs"
v-if=
"!scope.row.jyglzrs"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:action=
"windowConfig.baseUrl + '/api/file/upload'"
:headers=
"
{Authorization: token
}"
:headers=
"
{ Authorization: token
}"
:show-file-list="false"
:show-file-list="false"
:on-success="(res, file) => addJyglzrsFile(res, file, scope.row)"
:on-success="
(res, file) =>
addJyglzrsFile(res, file, scope.row)
"
>
>
<el-button
link
type=
"primary"
>
上传
</el-button>
<el-button
link
type=
"primary"
>
上传
</el-button>
</el-upload>
</el-upload>
<div
class=
"upload-file-wrap"
v-else
>
<div
class=
"upload-file-wrap"
v-else
>
<span
class=
"file-name"
@
click=
"downloadFile(scope.row.jyglzrs)"
>
{{
scope
.
row
.
jyglzrs
.
originalname
}}
</span>
<span
<span
class=
"delete-btn"
@
click=
"deleteRowFile(scope.row, scope.$index)"
>
class=
"file-name"
@
click=
"downloadFile(scope.row.jyglzrs)"
>
{{
scope
.
row
.
jyglzrs
.
originalname
}}
</span
>
<span
class=
"delete-btn"
@
click=
"deleteRowFile(scope.row, scope.$index)"
>
<el-icon><CloseBold
/></el-icon>
<el-icon><CloseBold
/></el-icon>
</span>
</span>
</div>
</div>
...
@@ -318,7 +506,13 @@
...
@@ -318,7 +506,13 @@
</el-table-column>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteJyglzrs(scope.$index)"
>
删除
</el-button>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deleteJyglzrs(scope.$index)"
>
删除
</el-button
>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -334,113 +528,121 @@
...
@@ -334,113 +528,121 @@
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
,
watch
}
from
"vue"
;
import
{
reactive
,
ref
,
onMounted
,
getCurrentInstance
,
h
,
watch
}
from
"vue"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
const
userStore
=
useUserStore
();
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
router
=
useRouter
();
const
route
=
useRoute
();
const
route
=
useRoute
();
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
pageActiveName
=
ref
(
"全生命周期责任书"
);
const
pageActiveName
=
ref
(
"全生命周期责任书"
);
let
token
=
ref
(
""
);
let
token
=
ref
(
""
);
token
.
value
=
userStore
.
authToken
||
sessionStorage
.
getItem
(
"authToken"
)
||
""
;
token
.
value
=
userStore
.
authToken
||
sessionStorage
.
getItem
(
"authToken"
)
||
""
;
const
activeCollapse
=
reactive
([
const
activeCollapse
=
reactive
([
"责任书基本信息"
,
"责任书具体指标"
,
"批复意见落实情况"
"责任书基本信息"
,
]);
"责任书具体指标"
,
let
formData
=
reactive
({});
"批复意见落实情况"
,
let
loading
=
ref
(
false
);
]);
// 责任书类型
let
formData
=
reactive
({});
let
zrslxList
=
reactive
([]);
let
loading
=
ref
(
false
);
let
zrslxProps
=
{
// 责任书类型
label
:
"name"
let
zrslxList
=
reactive
([]);
}
let
zrslxProps
=
{
let
selectedFullPath
=
ref
(
""
);
//已选项的全路径名称
label
:
"name"
,
watch
(()
=>
formData
.
zrslx
,
(
newVal
)
=>
{
};
let
selectedFullPath
=
ref
(
""
);
//已选项的全路径名称
watch
(
()
=>
formData
.
zrslx
,
(
newVal
)
=>
{
if
(
newVal
)
{
if
(
newVal
)
{
selectedFullPath
.
value
=
getFullPathById
(
newVal
);
selectedFullPath
.
value
=
getFullPathById
(
newVal
);
}
else
{
}
else
{
selectedFullPath
.
value
=
""
;
selectedFullPath
.
value
=
""
;
}
}
})
},
// 构建节点映射表
);
const
nodeMap
=
new
Map
()
// 构建节点映射表
let
buildNodeMap
;
const
nodeMap
=
new
Map
();
const
getFullPathById
=
(
id
)
=>
{
let
buildNodeMap
;
const
node
=
nodeMap
.
get
(
id
)
const
getFullPathById
=
(
id
)
=>
{
if
(
!
node
)
return
''
const
node
=
nodeMap
.
get
(
id
);
if
(
!
node
)
return
""
;
const
path
=
[]
const
path
=
[];
let
current
=
node
let
current
=
node
;
while
(
current
)
{
while
(
current
)
{
path
.
unshift
(
current
.
name
)
path
.
unshift
(
current
.
name
);
current
=
current
.
parent
current
=
current
.
parent
;
}
}
return
path
.
join
(
' / '
)
return
path
.
join
(
" / "
);
}
};
// 项目列表
// 项目列表
let
projectList
=
ref
([]);
let
projectList
=
ref
([]);
const
getProjectData
=
()
=>
{
const
getProjectData
=
()
=>
{
proxy
.
$post
({
proxy
.
$post
({
url
:
"/api/project/listProject"
,
url
:
"/api/project/listProject"
,
data
:
{
data
:
{
page
:
1
,
page
:
1
,
pagesize
:
1000
,
pagesize
:
1000
,
attributes
:
[],
attributes
:
[],
menuType
:
"xmjc"
menuType
:
"xmjc"
,
},
},
callback
:
(
data
)
=>
{
callback
:
(
data
)
=>
{
projectList
.
value
=
data
.
rows
;
projectList
.
value
=
data
.
rows
;
}
},
})
});
};
};
// 批复意见落实情况
// 批复意见落实情况
let
pfyjlxList
=
reactive
([]);
let
pfyjlxList
=
reactive
([]);
let
lsqkList
=
reactive
([]);
let
lsqkList
=
reactive
([]);
let
pfyjlsqkData
=
ref
([]);
let
pfyjlsqkData
=
ref
([]);
const
addPfyjlsqk
=
()
=>
{
const
addPfyjlsqk
=
()
=>
{
pfyjlsqkData
.
value
.
push
({});
pfyjlsqkData
.
value
.
push
({});
};
};
const
deletePfyjlsqk
=
(
index
)
=>
{
const
deletePfyjlsqk
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
}).
then
(()
=>
{
pfyjlsqkData
.
value
.
splice
(
index
,
1
);
pfyjlsqkData
.
value
.
splice
(
index
,
1
);
})
});
}
};
let
isPreview
=
!!
route
.
query
.
isPreview
;
let
isPreview
=
!!
route
.
query
.
isPreview
;
let
statementId
=
route
.
query
.
statementId
;
let
statementId
=
route
.
query
.
statementId
;
// 查看编辑详情
// 查看编辑详情
const
getStatementInfo
=
()
=>
{
const
getStatementInfo
=
()
=>
{
loading
.
value
=
true
;
loading
.
value
=
true
;
proxy
.
$post
({
proxy
.
$post
({
url
:
"/api/project/getTzmbzrsInfo"
,
url
:
"/api/project/getTzmbzrsInfo"
,
data
:
{
data
:
{
id
:
statementId
id
:
statementId
,
},
},
callback
:
(
res
)
=>
{
callback
:
(
res
)
=>
{
loading
.
value
=
false
;
loading
.
value
=
false
;
Object
.
assign
(
formData
,
res
);
Object
.
assign
(
formData
,
res
);
Object
.
assign
(
zrsData
.
value
,
res
.
zrswj
);
Object
.
assign
(
zrsData
.
value
,
res
.
zrswj
);
Object
.
assign
(
zrsjtzbData
.
value
,
res
.
tzmbzrsZbs
.
map
(
item
=>
{
Object
.
assign
(
zrsjtzbData
.
value
,
res
.
tzmbzrsZbs
.
map
((
item
)
=>
{
return
{
return
{
...
item
,
...
item
,
sfsy
:
item
.
sfsy
&&
item
.
sfsy
.
toString
()
sfsy
:
item
.
sfsy
&&
item
.
sfsy
.
toString
(),
}
};
}));
}),
);
Object
.
assign
(
chwjData
.
value
,
res
.
chwj
);
Object
.
assign
(
chwjData
.
value
,
res
.
chwj
);
Object
.
assign
(
jyglzrsData
.
value
,
res
.
tzmbzrsNds
);
Object
.
assign
(
jyglzrsData
.
value
,
res
.
tzmbzrsNds
);
Object
.
assign
(
pfyjlsqkData
.
value
,
res
.
tzmbzrsPfyjs
);
Object
.
assign
(
pfyjlsqkData
.
value
,
res
.
tzmbzrsPfyjs
);
}
},
});
});
};
};
onMounted
(()
=>
{
onMounted
(()
=>
{
getProjectData
();
getProjectData
();
let
resourceData
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
let
resourceData
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
zrslxList
=
resourceData
.
level
;
zrslxList
=
resourceData
.
level
;
...
@@ -449,271 +651,276 @@
...
@@ -449,271 +651,276 @@
statementId
&&
getStatementInfo
();
statementId
&&
getStatementInfo
();
buildNodeMap
=
(
nodes
,
parent
=
null
)
=>
{
buildNodeMap
=
(
nodes
,
parent
=
null
)
=>
{
nodes
.
forEach
(
node
=>
{
nodes
.
forEach
((
node
)
=>
{
node
.
parent
=
parent
node
.
parent
=
parent
;
nodeMap
.
set
(
node
.
key
,
node
)
nodeMap
.
set
(
node
.
key
,
node
);
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
buildNodeMap
(
node
.
children
,
node
)
buildNodeMap
(
node
.
children
,
node
);
}
})
}
}
});
};
// 初始化构建映射
// 初始化构建映射
buildNodeMap
(
zrslxList
);
buildNodeMap
(
zrslxList
);
});
});
// 选择关联项目,同步相关字段信息
// 选择关联项目,同步相关字段信息
const
changeProject
=
(
val
)
=>
{
const
changeProject
=
(
val
)
=>
{
let
selectData
=
projectList
.
value
.
filter
((
item
)
=>
item
.
id
===
val
)[
0
];
let
selectData
=
projectList
.
value
.
filter
(
item
=>
item
.
id
===
val
)[
0
];
if
(
selectData
)
{
if
(
selectData
)
{
formData
.
projectName
=
selectData
.
projectName
;
formData
.
projectName
=
selectData
.
projectName
;
formData
.
tzzt
=
selectData
.
tzzt
;
formData
.
tzzt
=
selectData
.
tzzt
;
}
}
}
};
// 责任书文件
// 责任书文件
let
zrsData
=
ref
([]);
let
zrsData
=
ref
([]);
const
addZrsFile
=
(
res
,
file
)
=>
{
const
addZrsFile
=
(
res
,
file
)
=>
{
zrsData
.
value
.
push
(
res
.
data
);
zrsData
.
value
.
push
(
res
.
data
);
}
};
const
deleteZrs
=
(
index
)
=>
{
const
deleteZrs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
'确认'
,
confirmButtonText
:
"确认"
,
cancelButtonText
:
'取消'
,
cancelButtonText
:
"取消"
,
type
:
'warning'
,
type
:
"warning"
,
}).
then
(()
=>
{
})
.
then
(()
=>
{
zrsData
.
value
.
splice
(
index
,
1
);
zrsData
.
value
.
splice
(
index
,
1
);
}).
catch
(()
=>
{})
})
}
.
catch
(()
=>
{});
let
zrsSelectIds
=
ref
([]);
};
const
zrsSelectionChange
=
(
datas
)
=>
{
let
zrsSelectIds
=
ref
([]);
zrsSelectIds
.
value
=
datas
.
map
(
item
=>
item
.
id
);
const
zrsSelectionChange
=
(
datas
)
=>
{
};
zrsSelectIds
.
value
=
datas
.
map
((
item
)
=>
item
.
id
);
const
multiDeleteZrs
=
()
=>
{
};
ElMessageBox
.
confirm
(
"确认删除选中数据?"
,
"提示"
,{
const
multiDeleteZrs
=
()
=>
{
confirmButtonText
:
'确认'
,
ElMessageBox
.
confirm
(
"确认删除选中数据?"
,
"提示"
,
{
cancelButtonText
:
'取消'
,
confirmButtonText
:
"确认"
,
type
:
'warning'
,
cancelButtonText
:
"取消"
,
}).
then
(()
=>
{
type
:
"warning"
,
zrsData
.
value
=
zrsData
.
value
.
filter
(
item
=>
!
zrsSelectIds
.
value
.
includes
(
item
.
id
));
})
}).
catch
(()
=>
{})
.
then
(()
=>
{
};
zrsData
.
value
=
zrsData
.
value
.
filter
(
// 责任书具体指标
(
item
)
=>
!
zrsSelectIds
.
value
.
includes
(
item
.
id
),
let
zrsjtzbData
=
ref
([]);
);
let
qsmzqZrs
=
[
})
.
catch
(()
=>
{});
};
// 责任书具体指标
let
zrsjtzbData
=
ref
([]);
let
qsmzqZrs
=
[
{
{
xh
:
"1"
,
xh
:
"1"
,
zbmc
:
"项目总投资(亿元)"
zbmc
:
"项目总投资(亿元)"
,
},
},
{
{
xh
:
"1.1"
,
xh
:
"1.1"
,
zbmc
:
"建安费用(亿元)"
zbmc
:
"建安费用(亿元)"
,
},
},
{
{
xh
:
"2"
,
xh
:
"2"
,
zbmc
:
"项目带动工程收益(亿元)"
zbmc
:
"项目带动工程收益(亿元)"
,
},
},
{
{
xh
:
"2.1"
,
xh
:
"2.1"
,
zbmc
:
"工程收益率(%)"
zbmc
:
"工程收益率(%)"
,
},
},
{
{
xh
:
"3"
,
xh
:
"3"
,
zbmc
:
"政府补助资金到位(亿元)"
zbmc
:
"政府补助资金到位(亿元)"
,
},
},
{
{
xh
:
"4"
,
xh
:
"4"
,
zbmc
:
"我方资本金投入(亿元)"
zbmc
:
"我方资本金投入(亿元)"
,
},
},
{
{
xh
:
"5"
,
xh
:
"5"
,
zbmc
:
"我方负责引入的股权融资(亿元)"
zbmc
:
"我方负责引入的股权融资(亿元)"
,
},
},
{
{
xh
:
"6"
,
xh
:
"6"
,
zbmc
:
"项目融资额(亿元)"
zbmc
:
"项目融资额(亿元)"
,
},
},
{
{
xh
:
"6.1"
,
xh
:
"6.1"
,
zbmc
:
"融资利率(%)"
zbmc
:
"融资利率(%)"
,
},
},
{
{
xh
:
"7"
,
xh
:
"7"
,
zbmc
:
"项目实现营业收入累计(亿元)"
zbmc
:
"项目实现营业收入累计(亿元)"
,
},
},
{
{
xh
:
"8"
,
xh
:
"8"
,
zbmc
:
"项目经营净现金流累计(亿元)"
zbmc
:
"项目经营净现金流累计(亿元)"
,
},
},
{
{
xh
:
"9"
,
xh
:
"9"
,
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
,
},
},
{
{
xh
:
"10"
,
xh
:
"10"
,
zbmc
:
"项目资本金财务内部收益率(%)"
zbmc
:
"项目资本金财务内部收益率(%)"
,
},
},
{
{
xh
:
"11"
,
xh
:
"11"
,
zbmc
:
"项目竣工投产时间(年月)"
zbmc
:
"项目竣工投产时间(年月)"
,
}
},
];
];
let
jsqZrs
=
[
let
jsqZrs
=
[
{
{
xh
:
"1"
,
xh
:
"1"
,
zbmc
:
"项目总投资 (亿元)"
zbmc
:
"项目总投资 (亿元)"
,
},
},
{
{
xh
:
"1.1"
,
xh
:
"1.1"
,
zbmc
:
"建安费用(亿元)"
zbmc
:
"建安费用(亿元)"
,
},
},
{
{
xh
:
"2"
,
xh
:
"2"
,
zbmc
:
"项目带动工程收益 (亿元)"
zbmc
:
"项目带动工程收益 (亿元)"
,
},
},
{
{
xh
:
"2.1"
,
xh
:
"2.1"
,
zbmc
:
"工程收益率(%)"
zbmc
:
"工程收益率(%)"
,
},
},
{
{
xh
:
"3"
,
xh
:
"3"
,
zbmc
:
"建设期政府补助资金(亿元)"
zbmc
:
"建设期政府补助资金(亿元)"
,
},
},
{
{
xh
:
"4"
,
xh
:
"4"
,
zbmc
:
"我方资本金投入(亿元)"
zbmc
:
"我方资本金投入(亿元)"
,
},
},
{
{
xh
:
"5"
,
xh
:
"5"
,
zbmc
:
"我方负责引入的股权融资(亿元)"
zbmc
:
"我方负责引入的股权融资(亿元)"
,
},
},
{
{
xh
:
"5.1"
,
xh
:
"5.1"
,
zbmc
:
"股权融资成本(%)"
zbmc
:
"股权融资成本(%)"
,
},
},
{
{
xh
:
"6"
,
xh
:
"6"
,
zbmc
:
"项目建设期融资额(亿元)"
zbmc
:
"项目建设期融资额(亿元)"
,
},
},
{
{
xh
:
"6.1"
,
xh
:
"6.1"
,
zbmc
:
"融资利率(%)"
zbmc
:
"融资利率(%)"
,
},
},
{
{
xh
:
"7"
,
xh
:
"7"
,
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
,
},
},
{
{
xh
:
"8"
,
xh
:
"8"
,
zbmc
:
"项目资本金财务内部收益率(%)"
zbmc
:
"项目资本金财务内部收益率(%)"
,
},
},
{
{
xh
:
"9"
,
xh
:
"9"
,
zbmc
:
"项目竣工投产时间(年月)"
zbmc
:
"项目竣工投产时间(年月)"
,
}
},
];
];
let
yyqZrs
=
[
let
yyqZrs
=
[
{
{
xh
:
"1"
,
xh
:
"1"
,
zbmc
:
"运营期政府补助资金到位(亿元)"
zbmc
:
"运营期政府补助资金到位(亿元)"
,
},
},
{
{
xh
:
"2"
,
xh
:
"2"
,
zbmc
:
"项目运营期融资额(亿元)"
zbmc
:
"项目运营期融资额(亿元)"
,
},
},
{
{
xh
:
"2.1"
,
xh
:
"2.1"
,
zbmc
:
"融资利率(%)"
zbmc
:
"融资利率(%)"
,
},
},
{
{
xh
:
"3"
,
xh
:
"3"
,
zbmc
:
"项目实现营业收入累计(亿元)"
zbmc
:
"项目实现营业收入累计(亿元)"
,
},
},
{
{
xh
:
"3.1"
,
xh
:
"3.1"
,
zbmc
:
"利润总额累计(亿元)"
zbmc
:
"利润总额累计(亿元)"
,
},
},
{
{
xh
:
"4"
,
xh
:
"4"
,
zbmc
:
"项目经营净现金流累计(亿元)"
zbmc
:
"项目经营净现金流累计(亿元)"
,
},
},
{
{
xh
:
"5"
,
xh
:
"5"
,
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
,
},
},
{
{
xh
:
"6"
,
xh
:
"6"
,
zbmc
:
"项目资本金财务内部收益率(%)"
zbmc
:
"项目资本金财务内部收益率(%)"
,
}
},
];
];
let
ndZrs
=
[
let
ndZrs
=
[
{
{
xh
:
"1"
,
xh
:
"1"
,
zbmc
:
"本年度完成投资(亿元)"
zbmc
:
"本年度完成投资(亿元)"
,
},
},
{
{
xh
:
"1.1"
,
xh
:
"1.1"
,
zbmc
:
"建安费用(亿元)"
zbmc
:
"建安费用(亿元)"
,
},
},
{
{
xh
:
"1.2"
,
xh
:
"1.2"
,
zbmc
:
"项目征地拆迁费(亿元)"
zbmc
:
"项目征地拆迁费(亿元)"
,
},
},
{
{
xh
:
"2"
,
xh
:
"2"
,
zbmc
:
"本年度工程收益(亿元)"
zbmc
:
"本年度工程收益(亿元)"
,
},
},
{
{
xh
:
"2.1"
,
xh
:
"2.1"
,
zbmc
:
"工程收益率(%)"
zbmc
:
"工程收益率(%)"
,
},
},
{
{
xh
:
"3"
,
xh
:
"3"
,
zbmc
:
"本年度政府补助资金(亿元)"
zbmc
:
"本年度政府补助资金(亿元)"
,
},
},
{
{
xh
:
"4"
,
xh
:
"4"
,
zbmc
:
"本年度我方资本金投入(亿元)"
zbmc
:
"本年度我方资本金投入(亿元)"
,
},
},
{
{
xh
:
"5"
,
xh
:
"5"
,
zbmc
:
"本年度我方负责引入的股权融资(亿元)"
zbmc
:
"本年度我方负责引入的股权融资(亿元)"
,
},
},
{
{
xh
:
"5.1"
,
xh
:
"5.1"
,
zbmc
:
"股权融资成本(%)"
zbmc
:
"股权融资成本(%)"
,
},
},
{
{
xh
:
"6"
,
xh
:
"6"
,
zbmc
:
"本年度项目融资额(亿元)"
zbmc
:
"本年度项目融资额(亿元)"
,
},
},
{
{
xh
:
"6.1"
,
xh
:
"6.1"
,
zbmc
:
"融资利率(%)"
zbmc
:
"融资利率(%)"
,
},
},
{
{
xh
:
"7"
,
xh
:
"7"
,
zbmc
:
"本年度投资项目实现营业收入(亿元)"
zbmc
:
"本年度投资项目实现营业收入(亿元)"
,
},
},
{
{
xh
:
"8"
,
xh
:
"8"
,
zbmc
:
"本年度项目经营净现金流(亿元)"
zbmc
:
"本年度项目经营净现金流(亿元)"
,
},
},
{
{
xh
:
"9"
,
xh
:
"9"
,
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
zbmc
:
"项目全投资财务内部收益率(税前)(%)"
,
},
},
{
{
xh
:
"10"
,
xh
:
"10"
,
zbmc
:
"项目资本金财务内部收益率(%)"
zbmc
:
"项目资本金财务内部收益率(%)"
,
}
},
]
];
// 选择责任书类型,同步切换责任书具体指标数据
// 选择责任书类型,同步切换责任书具体指标数据
const
changeZrslx
=
(
data
)
=>
{
const
changeZrslx
=
(
data
)
=>
{
if
(
!
data
.
children
||
!
data
.
children
.
length
)
{
if
(
!
data
.
children
||
!
data
.
children
.
length
)
{
// 点击到最内层子节点
// 点击到最内层子节点
if
(
data
.
name
.
indexOf
(
"年度"
)
!=
-
1
)
{
if
(
data
.
name
.
indexOf
(
"年度"
)
!=
-
1
)
{
zrsjtzbData
.
value
=
ndZrs
;
zrsjtzbData
.
value
=
ndZrs
;
}
else
if
(
data
.
name
.
indexOf
(
"建设"
)
!=
-
1
)
{
}
else
if
(
data
.
name
.
indexOf
(
"建设"
)
!=
-
1
)
{
zrsjtzbData
.
value
=
jsqZrs
;
zrsjtzbData
.
value
=
jsqZrs
;
}
else
if
(
data
.
name
.
indexOf
(
"运营"
)
!=
-
1
)
{
}
else
if
(
data
.
name
.
indexOf
(
"运营"
)
!=
-
1
)
{
zrsjtzbData
.
value
=
yyqZrs
;
zrsjtzbData
.
value
=
yyqZrs
;
...
@@ -721,90 +928,95 @@
...
@@ -721,90 +928,95 @@
zrsjtzbData
.
value
=
qsmzqZrs
;
zrsjtzbData
.
value
=
qsmzqZrs
;
}
}
}
}
}
};
const
getSummaries
=
(
param
)
=>
{
const
getSummaries
=
(
param
)
=>
{
const
{
columns
,
data
}
=
param
;
const
{
columns
,
data
}
=
param
;
let
sums
=
[];
let
sums
=
[];
columns
.
forEach
((
column
,
index
)
=>
{
columns
.
forEach
((
column
,
index
)
=>
{
if
(
index
===
0
)
{
if
(
index
===
0
)
{
sums
[
0
]
=
h
(
"div"
,
"合计"
);
sums
[
0
]
=
h
(
"div"
,
"合计"
);
return
return
;
}
}
const
values
=
data
.
map
((
item
)
=>
Number
(
item
[
column
.
property
]))
const
values
=
data
.
map
((
item
)
=>
Number
(
item
[
column
.
property
]));
if
([
"khjzf"
].
includes
(
column
.
property
))
{
if
([
"khjzf"
].
includes
(
column
.
property
))
{
sums
[
index
]
=
`
${
values
.
reduce
((
prev
,
curr
)
=>
{
sums
[
index
]
=
`
${
values
.
reduce
((
prev
,
curr
)
=>
{
const
value
=
Number
(
curr
);
const
value
=
Number
(
curr
);
if
(
!
Number
.
isNaN
(
value
))
{
if
(
!
Number
.
isNaN
(
value
))
{
return
prev
+
curr
return
prev
+
curr
;
}
else
{
}
else
{
return
prev
return
prev
;
}
}
},
0
)}
`
},
0
)}
`;
} else {
} else {
sums[index] = "";
sums[index] = "";
}
}
});
});
return sums;
return sums;
};
};
// 策划文件
// 策划文件
let chwjData = ref([]);
let chwjData = ref([]);
const addChwjFile = (res, file) => {
const addChwjFile = (res, file) => {
chwjData.value.push(res.data);
chwjData.value.push(res.data);
}
};
const deleteChwj = (index) => {
const deleteChwj = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: '确认',
confirmButtonText: "确认",
cancelButtonText: '取消',
cancelButtonText: "取消",
type: 'warning',
type: "warning",
}).then(() => {
})
.then(() => {
chwjData.value.splice(index, 1);
chwjData.value.splice(index, 1);
}).catch(() => {})
})
}
.catch(() => {});
let chwjSelectIds = ref([]);
};
const chwjSelectionChange = (datas) => {
let chwjSelectIds = ref([]);
chwjSelectIds.value = datas.map(item => item.id);
const chwjSelectionChange = (datas) => {
};
chwjSelectIds.value = datas.map((item) => item.id);
const multiDeleteChwj = () => {
};
ElMessageBox.confirm("确认删除选中数据?", "提示",{
const multiDeleteChwj = () => {
confirmButtonText: '确认',
ElMessageBox.confirm("确认删除选中数据?", "提示", {
cancelButtonText: '取消',
confirmButtonText: "确认",
type: 'warning',
cancelButtonText: "取消",
}).then(() => {
type: "warning",
chwjData.value = chwjData.value.filter(item => !chwjSelectIds.value.includes(item.id));
})
}).catch(() => {})
.then(() => {
};
chwjData.value = chwjData.value.filter(
// 经营管理责任书
(item) => !chwjSelectIds.value.includes(item.id),
let jyglzrsData = ref([]);
);
const addJyglzrs = () => {
})
.catch(() => {});
};
// 经营管理责任书
let jyglzrsData = ref([]);
const addJyglzrs = () => {
jyglzrsData.value.push({});
jyglzrsData.value.push({});
}
};
const deleteJyglzrs = (index) => {
const deleteJyglzrs = (index) => {
jyglzrsData.value.splice(index, 1);
jyglzrsData.value.splice(index, 1);
}
};
const addJyglzrsFile = (res, file, row) => {
const addJyglzrsFile = (res, file, row) => {
row.jyglzrs = {};
row.jyglzrs = {};
Object.assign(row.jyglzrs, res.data);
Object.assign(row.jyglzrs, res.data);
};
};
const deleteRowFile = (row, index) => {
const deleteRowFile = (row, index) => {
let {jyglzrs, ...data
} = row;
let { jyglzrs, ...data
} = row;
jyglzrsData.value[index] = data;
jyglzrsData.value[index] = data;
};
};
// 下载已上传文件
// 下载已上传文件
const downloadFile = (data) => {
const downloadFile = (data) => {
let a = document.createElement("a");
let a = document.createElement("a");
a.href = `
$
{
proxy
.
windowConfig
.
baseUrl
}
/api/
file
/
download
/
$
{
data
.
id
}
`;
a.href = `
$
{
proxy
.
windowConfig
.
baseUrl
}
/api/
file
/
download
/
$
{
data
.
id
}
`;
a.download = data.originalname;
a.download = data.originalname;
document.body.appendChild(a);
document.body.appendChild(a);
a.click();
a.click();
a.remove();
a.remove();
};
};
const
backClick
=
()
=>
{
const backClick = () => {
router
.
back
(
-
1
)
router.back(-1);
}
};
const
saveClick
=
()
=>
{
const saveClick = () => {
if (formData.projectId) {
if (formData.projectId) {
let url = formData.id ? "updateTzmbzrs" : "createTzmbzrs";
let url = formData.id ? "updateTzmbzrs" : "createTzmbzrs";
proxy.$post({
proxy.$post({
...
@@ -815,22 +1027,21 @@
...
@@ -815,22 +1027,21 @@
tzmbzrsZbs: zrsjtzbData.value,
tzmbzrsZbs: zrsjtzbData.value,
chwj: chwjData.value,
chwj: chwjData.value,
tzmbzrsNds: jyglzrsData.value,
tzmbzrsNds: jyglzrsData.value,
tzmbzrsPfyjs
:
pfyjlsqkData
.
value
tzmbzrsPfyjs: pfyjlsqkData.value,
},
},
callback: (data) => {
callback: (data) => {
router
.
back
(
-
1
)
router.back(-1);
}
},
})
});
} else {
} else {
ElMessage.warning("请选择项目信息");
ElMessage.warning("请选择项目信息");
}
}
}
};
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
@import "@/styles/manage.less";
@import "@/styles/manage.less";
.add-project-header
{
.add-project-header
{
margin-bottom: 10px;
margin-bottom: 10px;
}
}
</
style
>
</
style
>
src/views/projectManage/addProject.vue
View file @
05d4eaef
This source diff could not be displayed because it is too large. You can
view the blob
instead.
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