明树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
7a7b7aa7
Commit
7a7b7aa7
authored
Jan 22, 2026
by
zhanghan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
投资后评价
parent
f034cb1c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
399 additions
and
221 deletions
+399
-221
tableFileHandle.js
src/common/tableFileHandle.js
+26
-7
evaluate.vue
src/views/castbehind/evaluate.vue
+31
-9
evaluateAdd.vue
src/views/castbehind/evaluateAdd.vue
+237
-179
runningPeriod.vue
src/views/castbehind/runningPeriod.vue
+5
-5
runningPeriodAdd.vue
src/views/castbehind/runningPeriodAdd.vue
+21
-21
addRisk.vue
src/views/investingManage/addRisk.vue
+79
-0
No files found.
src/common/tableFileHandle.js
View file @
7a7b7aa7
import
*
as
XLSX
from
"xlsx"
;
// 导入excel文件显示到前端页面
const
importTableFile
=
async
(
file
)
=>
{
const
getTableFileData
=
async
(
file
,
tableColumns
)
=>
{
const
data
=
await
readFile
(
file
.
raw
);
// 使用 xlsx 解析
let
workbook
=
XLSX
.
read
(
data
,
{
...
...
@@ -8,7 +8,24 @@ const importTableFile = async (file) => {
cellDates
:
true
,
cellStyles
:
true
});
console
.
log
(
workbook
);
const
sheetName
=
workbook
.
SheetNames
[
0
];
const
sheet
=
workbook
.
Sheets
[
sheetName
];
const
rawData
=
XLSX
.
utils
.
sheet_to_json
(
sheet
,
{
header
:
1
,
defval
:
""
});
let
list
=
[];
const
[
head
,
...
fileData
]
=
rawData
;
fileData
&&
fileData
.
map
(
item
=>
{
let
obj
=
{};
tableColumns
.
map
(
column
=>
{
let
index
=
head
.
indexOf
(
column
.
label
);
let
def
=
column
.
type
===
"number"
?
null
:
""
;
obj
[
column
.
prop
]
=
index
!=
-
1
?
item
[
index
]
||
def
:
def
;
})
list
.
push
(
obj
)
})
return
list
;
};
const
readFile
=
(
file
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
...
...
@@ -23,7 +40,7 @@ const exportTableFile = (tableData, tableColumns, title, fileName) => {
const
wb
=
XLSX
.
utils
.
book_new
()
// 2. 准备数据
let
wsData
=
[[
title
],
[]
]
let
wsData
=
title
?
[[
title
]]
:
[
]
// 添加表头
if
(
tableColumns
&&
tableColumns
.
length
>
0
)
{
...
...
@@ -64,9 +81,11 @@ const exportTableFile = (tableData, tableColumns, title, fileName) => {
ws
[
'!cols'
]
=
colWidths
}
// 合并标题单元格
ws
[
'!merges'
]
=
[
XLSX
.
utils
.
decode_range
(
'A1:Q1'
)
// 合并第一行的 A-E 列
]
if
(
title
)
{
ws
[
'!merges'
]
=
[
XLSX
.
utils
.
decode_range
(
'A1:Q1'
)
// 合并第一行的 A-E 列
]
}
// 5. 将工作表添加到工作簿
XLSX
.
utils
.
book_append_sheet
(
wb
,
ws
,
'Sheet1'
)
...
...
@@ -88,6 +107,6 @@ const formatCellValue = (value, formatter) => {
return
value
}
export
{
importTableFile
,
getTableFileData
,
exportTableFile
}
\ No newline at end of file
src/views/castbehind/evaluate.vue
View file @
7a7b7aa7
...
...
@@ -4,7 +4,7 @@
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"
construction
Add"
>
新增
</el-button>
<el-button
type=
"primary"
@
click=
"
evaluate
Add"
>
新增
</el-button>
</div>
</div>
<div
class=
"manage-content"
v-loading=
"loading"
>
...
...
@@ -68,6 +68,22 @@ let tableColumns = ref([
label
:
"项目信息"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"xmgszcbgLen"
,
label
:
"项目公司自查报告"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"hpjbgLen"
,
label
:
"后评价报告"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"qsmzqpjLen"
,
label
:
"全生命评价结果"
,
showOverflowTooltip
:
true
,
},
{
prop
:
"operations"
,
...
...
@@ -86,15 +102,21 @@ let pageSize = ref(10);
const
getStatementData
=
()
=>
{
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/get
Jsqtzjc
List"
,
url
:
"/api/project/get
Tzhpj
List"
,
data
:
{
page
:
currentPage
.
value
,
pagesize
:
pageSize
.
value
,
},
callback
:
(
data
)
=>
{
console
.
log
(
data
,
"data"
);
tableData
.
value
=
data
.
rows
.
map
((
it
)
=>
{
return
{
...
it
,
tableData
.
value
=
data
.
rows
;
xmgszcbgLen
:
it
.
xmgszcbg
?.
length
+
"个"
,
hpjbgLen
:
it
.
hpjbg
?.
length
+
"个"
,
qsmzqpjLen
:
it
.
qsmzqpj
?.
length
+
"个"
,
};
});
total
.
value
=
data
.
count
;
loading
.
value
=
false
;
},
...
...
@@ -110,12 +132,12 @@ const handleCurrentPageChange = (page) => {
currentPage
.
value
=
page
;
getStatementData
();
};
const
construction
Add
=
()
=>
{
router
.
push
(
"/
construction
Add"
);
const
evaluate
Add
=
()
=>
{
router
.
push
(
"/
evaluate
Add"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"
construction
Add"
,
name
:
"
evaluate
Add"
,
query
:
{
id
:
item
.
id
,
},
...
...
@@ -123,7 +145,7 @@ const editStatement = (item) => {
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"
construction
Add"
,
name
:
"
evaluate
Add"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
...
...
@@ -138,7 +160,7 @@ const deleteStatement = (item) => {
})
.
then
(()
=>
{
proxy
.
$post
({
url
:
"/api/project/delete
Jsqtzjc
"
,
url
:
"/api/project/delete
Tzhpj
"
,
data
:
{
id
:
item
.
id
,
},
...
...
src/views/castbehind/evaluateAdd.vue
View file @
7a7b7aa7
...
...
@@ -15,11 +15,11 @@
<div
class=
"tab-content"
>
<el-form
:model=
"formData"
:label-width=
"200"
:disabled=
"isPreview"
>
<el-collapse
v-model=
"activeCollapse"
>
<!--
基本
信息 -->
<el-collapse-item
title=
"
基本信息"
name=
"基本
信息"
>
<!--
项目
信息 -->
<el-collapse-item
title=
"
项目信息"
name=
"项目
信息"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<el-form-item
label
=
"项目信息
"
required
>
<el-form-item
label
-width=
"0
"
required
>
<el-select
v-model=
"formData.projectId"
placeholder=
"请选择项目信息"
...
...
@@ -35,176 +35,169 @@
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="决策总投资 一次填报锁定">
<el-input
v-model="formData.jcztz"
placeholder="请输入决策总投资 一次填报锁定"
</el-row>
</el-collapse-item>
<el-collapse-item
title=
"项目公司自查报告"
name=
"项目公司自查报告"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.xmgszcbg"
/>
</el-form-item>
</el-collapse-item>
<el-collapse-item
title=
"投资后评价报告"
name=
"投资后评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.hpjbg"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.hpjsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col> -->
</el-row>
<!-- <el-row :gutter="20">
</el-col>
<el-col
:span=
"12"
>
<el-form-item label="
资本金内部收益率(%) 一次填报锁定
">
<el-form-item
label=
"
报告编制单位
"
>
<el-input
v-model="formData.
zbjnbsyl
"
placeholder="请输入
资本金内部收益率(%) 一次填报锁定
"
v-model=
"formData.
hpjbgbzdw
"
placeholder=
"请输入
报告编制单位
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item label="
预测总投资
">
<el-form-item
label=
"
评审单位
"
>
<el-input
v-model="formData.
ycztz
"
placeholder="请输入
预测总投资
"
v-model=
"formData.
hpjpsdw
"
placeholder=
"请输入
评审单位
"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col
:span=
"12"
>
<el-form-item label="
确认总投资
">
<el-form-item
label=
"
评价结果
"
>
<el-input
v-model="formData.
qrztz
"
placeholder="请输入
确认总投资
"
v-model=
"formData.
hpjpjjg
"
placeholder=
"请输入
评价结果
"
/>
</el-form-item>
</el-col>
</el-row>
-->
</el-row>
</el-collapse-item>
<!-- 投资(成本)分析会资料 -->
<el-collapse-item
title=
"投资(成本)分析会资料"
name=
"投资(成本)分析会资料"
>
<el-collapse-item
title=
"问题整改"
name=
"问题整改"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
@
click=
"add
jsqtzjcTzfx
s"
<el-button
type=
"primary"
@
click=
"add
JsqtzjcZxjc
s"
>
新增
</el-button
>
</div>
<el-table
:data=
"
jsqtzjcTzfxsList
"
:data=
"
formData.tzhpjwtzgs
"
style=
"width: 100%"
empty-text=
"暂无数据"
:scrollbar-always-on=
"true"
border
>
<el-table-column
type=
"index"
width=
"60"
label=
"序号"
/>
<el-table-column
prop=
"jd"
label=
"时间 "
>
<el-table-column
type=
"index"
width=
"60"
fixed=
"left"
label=
"序号"
/>
<el-table-column
prop=
"zxjcfl"
min-width=
"140"
label=
"存在的问题"
>
<
template
#
default=
"scope"
>
<!--
<el-date-picker
v-model=
"scope.row.jd"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择"
/>
-->
<el-input
v-model=
"scope.row.
jd
"
placeholder=
"请
按照 xx年xx季度 格式填写
"
v-model=
"scope.row.
ccwt
"
placeholder=
"请
输入存在的问题
"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"ycztz"
label=
"当期预测总投资
"
>
<el-table-column
min-width=
"140"
label=
"问题详述
"
>
<
template
#
default=
"scope"
>
<el-input
type=
"
number
"
v-model
.
number=
"scope.row.ycztz
"
placeholder=
"请输入
当期预测总投资
"
type=
"
textarea
"
v-model
=
"scope.row.wtxs
"
placeholder=
"请输入
问题详述
"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"zbjnbsyl"
label=
"资本金内部收益率(%)"
>
<el-table-column
min-width=
"140"
label=
"整改措施"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.zbjnbsyl"
placeholder=
"请输入资本金内部收益率(%)"
v-model=
"scope.row.zgcs"
type=
"textarea"
placeholder=
"请输入整改措施"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"tzcbfxhzl"
label=
"投资(成本)分析会资料"
>
<el-table-column
min-width=
"140"
label=
"落实情况"
>
<
template
#
default=
"scope"
>
<FileUploader
v-model=
"scope.row.tzcbfxhzl"
:isInline=
"true"
></FileUploader>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"danger"
size=
"small"
@
click=
"deletejsqtzjcTzfxs(scope.$index)"
>
删除
</el-button
>
<el-input
v-model=
"scope.row.lsqk"
type=
"textarea"
placeholder=
"请输入落实情况"
/>
</
template
>
</el-table-column>
</el-table>
</el-collapse-item>
<!-- 专项检查 -->
<el-collapse-item
title=
"专项检查"
name=
"专项检查"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
@
click=
"addJsqtzjcZxjcs"
>
新增
</el-button
>
</div>
<el-table
:data=
"jsqtzjcZxjcsList"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
<el-table-column
type=
"index"
width=
"60"
label=
"序号"
/>
<el-table-column
prop=
"zxjcfl"
label=
"专项检查类型"
>
<el-table-column
min-width=
"140"
label=
"责任部门"
>
<
template
#
default=
"scope"
>
<el-select
v-model=
"scope.row.zxjcfl"
placeholder=
"请选择专项检查类型"
>
<el-option
v-for=
"item in options?.construction_classify"
:key=
"item.key"
:label=
"item.name"
:value=
"item.key"
></el-option>
</el-select>
<el-input
v-model=
"scope.row.zrbm"
placeholder=
"请输入责任部门"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"jcjg"
label=
"检查结果
"
>
<el-table-column
min-width=
"140"
label=
"责任人
"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.jcjg
"
placeholder=
"请输入
检查结果
"
v-model
=
"scope.row.zrr
"
placeholder=
"请输入
责任人
"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"zgcsqd"
label=
"整改措施清单
"
>
<el-table-column
min-width=
"140"
label=
"整改期限
"
>
<
template
#
default=
"scope"
>
<el-input
v-model
.
number=
"scope.row.zgcsqd"
placeholder=
"请输入整改措施清单"
<el-date-picker
v-model=
"scope.row.zgqx"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择整改期限"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"fjcl"
label=
"附件材料"
>
<el-table-column
min-width=
"140"
align=
"center"
label=
"是否关闭"
>
<
template
#
default=
"scope"
>
<FileUploader
v-model=
"scope.row.fjcl"
:isInline=
"true"
></FileUploader>
<el-radio-group
placeholder=
"请选择是否关闭"
v-model=
"scope.row.sfgb"
>
<el-radio
v-for=
"item in options?.sf"
:key=
"item.id"
:id=
"item.name"
:value=
"item.key"
>
{{
item
.
name
}}
</el-radio
>
</el-radio-group>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
>
<el-table-column
label=
"操作"
width=
"60"
fixed=
"right"
>
<
template
#
default=
"scope"
>
<el-button
link
...
...
@@ -217,6 +210,53 @@
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item
title=
"全生命周期评价报告"
name=
"全生命周期评价报告"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"24"
>
<el-form-item
label-width=
"0"
label=
""
>
<FileUploader
v-model=
"formData.qsmzqpj"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价时间"
>
<el-date-picker
v-model=
"formData.qsmsj"
type=
"datetime"
format=
"YYYY-MM-DD HH:mm:ss"
value-format=
"YYYY-MM-DD HH:mm:ss"
placeholder=
"请选择评价时间"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"报告编制单位"
>
<el-input
v-model=
"formData.qsmbgbzdw"
placeholder=
"请输入报告编制单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评审单位"
>
<el-input
v-model=
"formData.qsmpsdw"
placeholder=
"请输入评审单位"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评价结果"
>
<el-input
v-model=
"formData.qsmpjjg"
placeholder=
"请输入评价结果"
/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
...
...
@@ -238,17 +278,24 @@ const route = useRoute();
const
{
proxy
}
=
getCurrentInstance
();
// 折叠面板默认展开项
const
activeCollapse
=
ref
([
"基本信息"
,
"投资(成本)分析会资料"
,
"专项检查"
]);
const
activeCollapse
=
ref
([
"项目信息"
,
"项目公司自查报告"
,
"投资后评价报告"
,
"问题整改"
,
"全生命周期评价报告"
,
]);
// 表单数据
// 表单数据
- 补全所有字段结构
const
formData
=
reactive
({
projectName
:
""
,
projectId
:
""
,
del
:
0
,
// 删除标记,0为正常
createdAt
:
""
,
updatedAt
:
""
,
});
xmgszcbg
:
[],
hpjbg
:
[],
qsmzqpj
:
[],
// 问题整改列表
tzhpjwtzgs
:
[],
});
// 加载状态
const
loading
=
ref
(
false
);
// 是否预览模式
...
...
@@ -258,38 +305,18 @@ const projectList = ref([]);
// 当前编辑的记录ID
const
rcCgqyglId
=
ref
(
route
.
query
.
id
||
""
);
// 投资(成本)分析会资料列表
const
jsqtzjcTzfxsList
=
ref
([]);
// 专项检查列表
const
jsqtzjcZxjcsList
=
ref
([]);
// ========== 投资(成本)分析会资料 操作方法 ==========
const
addjsqtzjcTzfxs
=
()
=>
{
jsqtzjcTzfxsList
.
value
.
push
({
jd
:
""
,
ycztz
:
""
,
zbjnbsyl
:
""
,
jsqtzjcTzfxs
:
[],
});
};
const
deletejsqtzjcTzfxs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
jsqtzjcTzfxsList
.
value
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
// ========== 专项检查 操作方法 ==========
// ========== 问题整改 操作方法 ==========
const
addJsqtzjcZxjcs
=
()
=>
{
jsqtzjcZxjcsList
.
value
.
push
({
zxjcfl
:
""
,
jcjg
:
""
,
zgcsqd
:
""
,
// 新增时添加正确的字段结构
formData
.
tzhpjwtzgs
.
push
({
ccwt
:
""
,
wtxs
:
""
,
zgcs
:
""
,
lsqk
:
""
,
zrbm
:
""
,
zrr
:
""
,
zgqx
:
""
,
sfgb
:
""
,
fjcl
:
[],
});
};
...
...
@@ -300,12 +327,11 @@ const deleteJsqtzjcZxjcs = (index) => {
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
jsqtzjcZxjcsList
.
value
.
splice
(
index
,
1
);
formData
.
tzhpjwtzgs
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
// ========== 通用方法 ==========
// 获取项目列表
const
getProjectData
=
()
=>
{
proxy
.
$post
({
...
...
@@ -336,15 +362,17 @@ const getJsqtzjcDetail = () => {
loading
.
value
=
true
;
proxy
.
$post
({
url
:
"/api/project/get
Jsqtzjc
Info"
,
url
:
"/api/project/get
Tzhpj
Info"
,
data
:
{
id
:
rcCgqyglId
.
value
},
callback
:
(
data
)
=>
{
loading
.
value
=
false
;
// 赋值基础表单数据
Object
.
assign
(
formData
,
data
);
// 赋值列表数据
jsqtzjcTzfxsList
.
value
=
data
.
jsqtzjcTzfxs
||
[];
jsqtzjcZxjcsList
.
value
=
data
.
jsqtzjcZxjcs
||
[];
// 确保数组字段有默认值,避免空指针
formData
.
tzhpjwtzgs
=
data
.
tzhpjwtzgs
||
[];
formData
.
xmgszcbg
=
data
.
xmgszcbg
||
[];
formData
.
hpjbg
=
data
.
hpjbg
||
[];
formData
.
qsmzqpj
=
data
.
qsmzqpj
||
[];
},
});
};
...
...
@@ -365,15 +393,15 @@ const saveClick = () => {
loading
.
value
=
true
;
// 区分新增/编辑
const
url
=
rcCgqyglId
.
value
?
"/api/project/update
Jsqtzjc
"
:
"/api/project/create
Jsqtzjc
"
;
?
"/api/project/update
Tzhpj
"
:
"/api/project/create
Tzhpj
"
;
// 组装提交数据
// 组装提交数据
- 包含所有字段
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
// 确保为字符串类型
jsqtzjcTzfxs
:
jsqtzjcTzfxsList
.
value
,
jsqtzjcZxjcs
:
jsqtzjcZxjcsList
.
value
,
// 问题整改列表直接从formData获取
tzhpjwtzgs
:
formData
.
tzhpjwtzgs
,
};
proxy
.
$post
({
...
...
@@ -384,15 +412,27 @@ const saveClick = () => {
ElMessage
.
success
(
rcCgqyglId
.
value
?
"编辑成功"
:
"新增成功"
);
router
.
back
(
-
1
);
},
// 添加错误处理
error
:
()
=>
{
loading
.
value
=
false
;
ElMessage
.
error
(
"操作失败,请稍后重试"
);
},
});
};
let
options
=
ref
();
// 页面初始化
onMounted
(()
=>
{
// 获取项目列表
getProjectData
();
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
));
// 处理options数据,避免空指针
try
{
options
.
value
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"resourceData"
))
||
{};
}
catch
(
e
)
{
options
.
value
=
{};
console
.
warn
(
"解析resourceData失败:"
,
e
);
}
// 如果有ID则加载详情
if
(
rcCgqyglId
.
value
)
{
...
...
@@ -404,26 +444,44 @@ onMounted(() => {
<
style
scoped
lang=
"less"
>
@import "@/styles/verticalManages.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
min-height: calc(100vh - 60px);
}
.add-project-content {
background: #fff;
border-radius: 4px;
padding: 20px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #ebeef5;
}
.tab-handle {
margin-bottom: 10px;
text-align: left;
}
.subtotal {
background-color: #f5f7fa;
height: 40px;
display: flex;
.label {
width: 100px;
height: 40px;
text-align: center;
line-height: 40px;
border-right: 1px solid #ebeef5;
}
.value {
padding-left: 16px;
width: 100%;
line-height: 40px;
}
:deep(.el-table) {
--el-table-header-text-color: #303133;
--el-table-row-hover-bg-color: #f8f9fa;
}
:deep(.el-collapse-item__header) {
font-weight: 600;
font-size: 14px;
}
:deep(.el-form-item__label) {
font-weight: 500;
}
</
style
>
src/views/castbehind/runningPeriod.vue
View file @
7a7b7aa7
...
...
@@ -4,7 +4,7 @@
<div
class=
"manage-header"
>
<div
class=
"header-left"
></div>
<div
class=
"header-right"
>
<el-button
type=
"primary"
@
click=
"
construction
Add"
>
新增
</el-button>
<el-button
type=
"primary"
@
click=
"
runningPeriod
Add"
>
新增
</el-button>
</div>
</div>
<div
class=
"manage-content"
v-loading=
"loading"
>
...
...
@@ -110,12 +110,12 @@ const handleCurrentPageChange = (page) => {
currentPage
.
value
=
page
;
getStatementData
();
};
const
construction
Add
=
()
=>
{
router
.
push
(
"/
construction
Add"
);
const
runningPeriod
Add
=
()
=>
{
router
.
push
(
"/
runningPeriod
Add"
);
};
const
editStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"
construction
Add"
,
name
:
"
runningPeriod
Add"
,
query
:
{
id
:
item
.
id
,
},
...
...
@@ -123,7 +123,7 @@ const editStatement = (item) => {
};
const
previewStatement
=
(
item
)
=>
{
router
.
push
({
name
:
"
construction
Add"
,
name
:
"
runningPeriod
Add"
,
query
:
{
isPreview
:
true
,
id
:
item
.
id
,
...
...
src/views/castbehind/runningPeriodAdd.vue
View file @
7a7b7aa7
...
...
@@ -80,12 +80,12 @@
name=
"投资(成本)分析会资料"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
@
click=
"add
js
qtzjcTzfxs"
<el-button
type=
"primary"
@
click=
"add
yy
qtzjcTzfxs"
>
新增
</el-button
>
</div>
<el-table
:data=
"
js
qtzjcTzfxsList"
:data=
"
yy
qtzjcTzfxsList"
style=
"width: 100%"
empty-text=
"暂无数据"
border
...
...
@@ -143,7 +143,7 @@
link
type=
"danger"
size=
"small"
@
click=
"delete
js
qtzjcTzfxs(scope.$index)"
@
click=
"delete
yy
qtzjcTzfxs(scope.$index)"
>
删除
</el-button
>
</
template
>
...
...
@@ -154,12 +154,12 @@
<!-- 专项检查 -->
<el-collapse-item
title=
"专项检查"
name=
"专项检查"
>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
@
click=
"add
Js
qtzjcZxjcs"
<el-button
type=
"primary"
@
click=
"add
yy
qtzjcZxjcs"
>
新增
</el-button
>
</div>
<el-table
:data=
"
js
qtzjcZxjcsList"
:data=
"
yy
qtzjcZxjcsList"
style=
"width: 100%"
empty-text=
"暂无数据"
border
...
...
@@ -210,7 +210,7 @@
link
type=
"danger"
size=
"small"
@
click=
"delete
Js
qtzjcZxjcs(scope.$index)"
@
click=
"delete
yy
qtzjcZxjcs(scope.$index)"
>
删除
</el-button
>
</
template
>
...
...
@@ -259,34 +259,34 @@ const projectList = ref([]);
const
rcCgqyglId
=
ref
(
route
.
query
.
id
||
""
);
// 投资(成本)分析会资料列表
const
js
qtzjcTzfxsList
=
ref
([]);
const
yy
qtzjcTzfxsList
=
ref
([]);
// 专项检查列表
const
js
qtzjcZxjcsList
=
ref
([]);
const
yy
qtzjcZxjcsList
=
ref
([]);
// ========== 投资(成本)分析会资料 操作方法 ==========
const
add
js
qtzjcTzfxs
=
()
=>
{
js
qtzjcTzfxsList
.
value
.
push
({
const
add
yy
qtzjcTzfxs
=
()
=>
{
yy
qtzjcTzfxsList
.
value
.
push
({
jd
:
""
,
ycztz
:
""
,
zbjnbsyl
:
""
,
js
qtzjcTzfxs
:
[],
yy
qtzjcTzfxs
:
[],
});
};
const
delete
js
qtzjcTzfxs
=
(
index
)
=>
{
const
delete
yy
qtzjcTzfxs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
js
qtzjcTzfxsList
.
value
.
splice
(
index
,
1
);
yy
qtzjcTzfxsList
.
value
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
// ========== 专项检查 操作方法 ==========
const
add
Js
qtzjcZxjcs
=
()
=>
{
js
qtzjcZxjcsList
.
value
.
push
({
const
add
yy
qtzjcZxjcs
=
()
=>
{
yy
qtzjcZxjcsList
.
value
.
push
({
zxjcfl
:
""
,
jcjg
:
""
,
zgcsqd
:
""
,
...
...
@@ -294,13 +294,13 @@ const addJsqtzjcZxjcs = () => {
});
};
const
delete
Js
qtzjcZxjcs
=
(
index
)
=>
{
const
delete
yy
qtzjcZxjcs
=
(
index
)
=>
{
ElMessageBox
.
confirm
(
"确认删除该项?"
,
"提示"
,
{
confirmButtonText
:
"确认"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
}).
then
(()
=>
{
js
qtzjcZxjcsList
.
value
.
splice
(
index
,
1
);
yy
qtzjcZxjcsList
.
value
.
splice
(
index
,
1
);
ElMessage
.
success
(
"删除成功"
);
});
};
...
...
@@ -343,8 +343,8 @@ const getJsqtzjcDetail = () => {
// 赋值基础表单数据
Object
.
assign
(
formData
,
data
);
// 赋值列表数据
jsqtzjcTzfxsList
.
value
=
data
.
js
qtzjcTzfxs
||
[];
jsqtzjcZxjcsList
.
value
=
data
.
js
qtzjcZxjcs
||
[];
yyqtzjcTzfxsList
.
value
=
data
.
yy
qtzjcTzfxs
||
[];
yyqtzjcZxjcsList
.
value
=
data
.
yy
qtzjcZxjcs
||
[];
},
});
};
...
...
@@ -372,8 +372,8 @@ const saveClick = () => {
const
submitData
=
{
...
formData
,
projectId
:
formData
.
projectId
+
""
,
// 确保为字符串类型
jsqtzjcTzfxs
:
js
qtzjcTzfxsList
.
value
,
jsqtzjcZxjcs
:
js
qtzjcZxjcsList
.
value
,
yyqtzjcTzfxs
:
yy
qtzjcTzfxsList
.
value
,
yyqtzjcZxjcs
:
yy
qtzjcZxjcsList
.
value
,
};
proxy
.
$post
({
...
...
src/views/investingManage/addRisk.vue
View file @
7a7b7aa7
...
...
@@ -107,6 +107,23 @@
<el-col
:span=
"24"
>
<el-form-item
label=
"风险处置情况"
:label-width=
"100"
></el-form-item>
<div
class=
"tab-handle"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"exportTableData"
:disabled=
"!fxczqkData.length"
>
导出
</el-button>
<el-upload
ref=
"uploadRef"
class=
"upload-demo"
action=
""
:auto-upload=
"false"
:on-change=
"importTableData"
:show-file-list=
"false"
>
<
template
#
trigger
>
<el-button
type=
"primary"
size=
"small"
style=
"margin: 0 12px;"
>
导入
</el-button>
</
template
>
</el-upload>
<el-button
type=
"primary"
size=
"small"
@
click=
"addFxczqk"
>
新增
</el-button>
</div>
<el-table
:data=
"fxczqkData"
style=
"width: 100%"
empty-text=
"暂无数据"
border
>
...
...
@@ -228,6 +245,7 @@
import
{
useRouter
,
useRoute
}
from
"vue-router"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useUserStore
}
from
"@/stores/user.js"
;
import
{
getTableFileData
,
exportTableFile
}
from
"../../common/tableFileHandle"
;
const
userStore
=
useUserStore
();
const
router
=
useRouter
();
const
route
=
useRoute
();
...
...
@@ -329,6 +347,67 @@
fxczqkData
.
value
.
splice
(
index
,
1
);
})
}
const
tableColumns
=
[
{
prop
:
"nd"
,
label
:
"年度"
},
{
prop
:
"mbfj"
,
label
:
"目标分解"
},
{
prop
:
"jzqk"
,
label
:
"进展情况"
},
{
prop
:
"fxdj"
,
label
:
"风险等级"
},
{
prop
:
"fxfl"
,
label
:
"风险分类"
},
{
prop
:
"fxgk"
,
label
:
"风险概况"
},
{
prop
:
"kzcs"
,
label
:
"控制措施"
},
{
prop
:
"czjz"
,
label
:
"处置进展"
},
{
prop
:
"yjzgwcsj"
,
label
:
"预计整改完成时间"
},
{
prop
:
"fxsjje"
,
label
:
"风险涉及金额"
,
type
:
"number"
},
{
prop
:
"cxgl"
,
label
:
"出险概率"
},
{
prop
:
"fxfxfs"
,
label
:
"风险发现方式"
}
];
const
importTableData
=
(
file
)
=>
{
getTableFileData
(
file
,
tableColumns
).
then
(
res
=>
{
fxczqkData
.
value
=
fxczqkData
.
value
.
concat
(
res
);
});
}
const
exportTableData
=
()
=>
{
exportTableFile
(
fxczqkData
.
value
,
tableColumns
,
""
,
"风险处置情况"
)
};
const
backClick
=
()
=>
{
router
.
back
(
-
1
)
...
...
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