Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
Y
yn-science-front
Project
Project
Details
Activity
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
徐俊
yn-science-front
Commits
e87de6fa
Commit
e87de6fa
authored
Dec 30, 2024
by
wangxl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
33333
parent
f18fefd0
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
378 additions
and
811 deletions
+378
-811
index.js
src/router/index.js
+6
-7
Index.vue
src/views/audit/project/Index.vue
+0
-4
final.vue
src/views/audit/project/final.vue
+0
-4
Index.vue
src/views/report/project/Index.vue
+0
-7
Index.vue
src/views/report/task/Index.vue
+49
-108
taskCreate.vue
src/views/report/task/components/taskCreate.vue
+156
-0
taskEdit.vue
src/views/report/task/components/taskEdit.vue
+0
-0
taskFileEdit.vue
src/views/report/task/components/taskFileEdit.vue
+0
-245
taskFileInfo.vue
src/views/report/task/components/taskFileInfo.vue
+0
-162
taskInfo.vue
src/views/report/task/components/taskInfo.vue
+0
-0
taskView.vue
src/views/report/task/components/taskView.vue
+167
-77
projectTask.vue
src/views/report/task/projectTask.vue
+0
-197
No files found.
src/router/index.js
View file @
e87de6fa
...
...
@@ -113,13 +113,12 @@ export const routes = [
hidden
:
false
,
children
:
[
{
path
:
'/report/project'
,
name
:
'项目申报'
,
component
:
()
=>
import
(
'@/views/report/project/Index.vue'
),
meta
:
{
title
:
'项目申报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/task'
,
name
:
'任务书填报1'
,
component
:
()
=>
import
(
'@/views/report/task/Index.vue'
),
meta
:
{
title
:
'任务书填报1'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/projectTask'
,
name
:
'任务书填报2'
,
component
:
()
=>
import
(
'@/views/report/task/projectTask.vue'
),
meta
:
{
title
:
'任务书填报2'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/check'
,
name
:
'中期考核填报'
,
component
:
()
=>
import
(
'@/views/report/check/Index.vue'
),
meta
:
{
title
:
'中期考核填报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/task'
,
name
:
'合同书上报'
,
component
:
()
=>
import
(
'@/views/report/task/Index.vue'
),
meta
:
{
title
:
'合同书上报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/check'
,
name
:
'中期考核上报'
,
component
:
()
=>
import
(
'@/views/report/check/Index.vue'
),
meta
:
{
title
:
'中期考核上报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/conclusion'
,
name
:
'项目结题'
,
component
:
()
=>
import
(
'@/views/conclusion/index.vue'
),
meta
:
{
title
:
'项目结题'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/project/create'
,
name
:
'项目创建'
,
component
:
()
=>
import
(
'@/views/report/project/components/projectCreate'
),
meta
:
{
title
:
'项目创建'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/query/project'
,
name
:
'项目申报查询1'
,
component
:
()
=>
import
(
'@/views/query/project/Index.vue'
),
meta
:
{
title
:
'项目申报查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/query/task'
,
name
:
'
任务书上报查询1'
,
component
:
()
=>
import
(
'@/views/query/task/Index.vue'
),
meta
:
{
title
:
'任务书上报
查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/query/task'
,
name
:
'
合同书查询1'
,
component
:
()
=>
import
(
'@/views/query/task/Index.vue'
),
meta
:
{
title
:
'合同书
查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/query/check'
,
name
:
'中期考核上报查询1'
,
component
:
()
=>
import
(
'@/views/query/check/Index.vue'
),
meta
:
{
title
:
'中期考核上报查询'
,
icon
:
''
,
noCache
:
true
}
},
]
},
...
...
@@ -133,7 +132,7 @@ export const routes = [
{
path
:
'/audit/project'
,
name
:
'项目审核'
,
component
:
()
=>
import
(
'@/views/audit/project/Index.vue'
),
meta
:
{
title
:
'项目审核'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/audit/preliminary'
,
name
:
'项目预审'
,
component
:
()
=>
import
(
'@/views/audit/project/Index.vue'
),
meta
:
{
title
:
'项目预审'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/audit/final'
,
name
:
'项目终审'
,
component
:
()
=>
import
(
'@/views/audit/project/final.vue'
),
meta
:
{
title
:
'项目审核'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/audit/taskAudit'
,
name
:
'
任务书审核'
,
component
:
()
=>
import
(
'@/views/audit/task/Index.vue'
),
meta
:
{
title
:
'任务
书审核'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/audit/taskAudit'
,
name
:
'
合同书审核'
,
component
:
()
=>
import
(
'@/views/audit/task/Index.vue'
),
meta
:
{
title
:
'合同
书审核'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/audit/checkAudit'
,
name
:
'中期考核表审核'
,
component
:
()
=>
import
(
'@/views/audit/check/Index.vue'
),
meta
:
{
title
:
'中期考核表审核'
,
icon
:
''
,
noCache
:
true
}
},
// { path: '/peAssign', name: '项目组分配', component: () => import('@/views/peAssign/index.vue'), meta: { title: '项目分配', icon: '', noCache: true } },
{
path
:
'/peAssign'
,
name
:
'项目组分配1'
,
component
:
()
=>
import
(
'@/views/peAssign/projAssign.vue'
),
meta
:
{
title
:
'项目分配'
,
icon
:
''
,
noCache
:
true
}
},
...
...
@@ -217,7 +216,7 @@ export const routes = [
hidden
:
false
,
children
:
[
{
path
:
'/statistic/project'
,
name
:
'项目申报查询'
,
component
:
()
=>
import
(
'@/views/statistic/project/Index.vue'
),
meta
:
{
title
:
'项目申报查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/statistic/task'
,
name
:
'
任务书上报查询'
,
component
:
()
=>
import
(
'@/views/statistic/task/Index.vue'
),
meta
:
{
title
:
'任务
书上报查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/statistic/task'
,
name
:
'
合同书上报查询'
,
component
:
()
=>
import
(
'@/views/statistic/task/Index.vue'
),
meta
:
{
title
:
'合同
书上报查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/statistic/check'
,
name
:
'中期考核上报查询'
,
component
:
()
=>
import
(
'@/views/statistic/check/Index.vue'
),
meta
:
{
title
:
'中期考核上报查询'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/expert/evaluationQuery'
,
name
:
'评分项目查询'
,
component
:
()
=>
import
(
'@/views/evaluation/query.vue'
),
meta
:
{
title
:
'评分项目查询'
,
icon
:
''
,
noCache
:
true
}
},
]
...
...
@@ -245,7 +244,7 @@ export const routes = [
hidden
:
false
,
children
:
[
{
path
:
'/timeSet/projectTimeSet'
,
name
:
'申报时间设置'
,
component
:
()
=>
import
(
'@/views/timeSet/projectTimeSet/Index.vue'
),
meta
:
{
title
:
'申报时间设置'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/timeSet/taskTimeSet'
,
name
:
'
任务书时间设置'
,
component
:
()
=>
import
(
'@/views/timeSet/taskTimeSet/Index.vue'
),
meta
:
{
title
:
'任务
书时间设置'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/timeSet/taskTimeSet'
,
name
:
'
合同书时间设置'
,
component
:
()
=>
import
(
'@/views/timeSet/taskTimeSet/Index.vue'
),
meta
:
{
title
:
'合同
书时间设置'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/timeSet/checkTimeSet'
,
name
:
'中期考核时间设置'
,
component
:
()
=>
import
(
'@/views/timeSet/checkTimeSet/Index.vue'
),
meta
:
{
title
:
'中期考核时间设置'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/setting/batch'
,
name
:
'申报批次设置'
,
component
:
()
=>
import
(
'@/views/timeSet/batch/Index.vue'
),
meta
:
{
title
:
'申报批次设置'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/setting/count'
,
name
:
'申报名额配比'
,
component
:
()
=>
import
(
'@/views/projAcountSet/projAcountSet.vue'
),
meta
:
{
title
:
'申报名额配比管理'
,
icon
:
''
,
noCache
:
true
}
},
...
...
src/views/audit/project/Index.vue
View file @
e87de6fa
...
...
@@ -57,9 +57,6 @@
<a-modal
v-model=
"visibleView"
v-if=
"visibleView"
title=
"项目详情"
width=
"94%"
:footer=
"null"
:dialog-style=
"{ top: '8%' }"
destroyOnClose
:maskClosable=
"false"
>
<project-view
v-model=
"objectId"
@
close=
"closeWindow"
></project-view>
</a-modal>
<a-modal
v-model=
"taskFileInfoView"
title=
"项目任务书"
:width=
"'60%'"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
>
<task-file-info
v-model=
"selectProjId"
@
close=
"closeTaskFileInfoWindow"
/>
</a-modal>
</div>
</template>
...
...
@@ -70,7 +67,6 @@ import { isEmptyParams, filterExportExcelData, tableColumnsName } from "@/views/
import
audit
from
'@/views/audit/project/audit'
import
batchAudit
from
'@/views/audit/project/batchAudit'
import
projectView
from
'@/views/report/project/components/projectView'
import
taskFileInfo
from
'@/views/report/task/components/taskFileInfo'
export
default
{
name
:
"projectAudit"
,
...
...
src/views/audit/project/final.vue
View file @
e87de6fa
...
...
@@ -79,9 +79,6 @@
<a-modal
v-model=
"visibleView"
v-if=
"visibleView"
title=
"项目详情"
width=
"94%"
:footer=
"null"
:dialog-style=
"{ top: '8%' }"
destroyOnClose
:maskClosable=
"false"
>
<project-view
v-model=
"objectId"
@
close=
"closeWindow"
></project-view>
</a-modal>
<a-modal
v-model=
"taskFileInfoView"
title=
"查看项目任务书"
:width=
"'60%'"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
>
<task-file-info
v-model=
"ProjId"
@
close=
"() => this.taskFileInfoView = false"
/>
</a-modal>
<a-modal
v-model=
"visibleEvaluationView"
title=
"专家评分"
width=
"90%"
:dialog-style=
"{ top: '8%' }"
:footer=
"null"
destroyOnClose
>
<score-view
v-model=
"assignId"
@
close=
"() => this.visibleEvaluationView = false"
/>
</a-modal>
...
...
@@ -101,7 +98,6 @@ import audit from '@/views/audit/project/audit'
import
batchAudit
from
'@/views/audit/project/batchAudit'
import
projectView
from
'@/views/report/project/components/projectView'
import
unitTreeSelect
from
'@/views/components/common/unitTreeSelect'
import
taskFileInfo
from
'@/views/report/task/components/taskFileInfo'
import
scoreView
from
'@/views/evaluation/components/scoreView'
export
default
{
...
...
src/views/report/project/Index.vue
View file @
e87de6fa
...
...
@@ -10,8 +10,6 @@
<a-form-item>
<a-button
type=
"primary"
icon=
"search"
@
click=
"search"
>
搜索
</a-button>
<a-button
icon=
"reload"
style=
"margin-left: 10px"
@
click=
"reset"
class=
"bt-normal"
>
重置
</a-button>
<!--
<a-button
type=
"primary"
style=
"margin-left: 10px"
@
click=
"FileDownload"
icon=
"download"
>
项目合同书模板下载
</a-button>
-->
<!--
<a-button
icon=
"primary"
style=
"margin-left: 10px"
@
click=
"FileView"
>
查看
</a-button>
-->
</a-form-item>
</a-form>
<div
style=
"width:100%;margin-bottom: 8px;"
>
...
...
@@ -19,8 +17,6 @@
<btn-group
:data=
"tabDate"
:itemCount=
"itemCount"
v-model=
"activekey"
@
change=
"callback"
/>
</div>
<div
style=
"display: inline-block;;width:50%;text-align: right;"
>
<!--
<a-button
type=
"primary"
@
click=
"projectKPI"
icon=
"download"
>
绩效指标表
</a-button>
-->
<!--
<a-button
type=
"primary"
@
click=
"createMember"
>
新建项目组成员
</a-button>
-->
<a-button
type=
"primary"
style=
"margin-right:8px;"
v-if=
"(display && isButten)"
@
click=
"createProject"
>
新建项目
</a-button>
<a-button
type=
"primary"
@
click=
"exportData"
icon=
"download"
>
Excel
</a-button>
</div>
...
...
@@ -56,9 +52,6 @@
<a-modal
v-model=
"visibleFileView"
title=
"查看"
width=
"1000px"
:dialog-style=
"{ top: '10%' }"
:footer=
"null"
destroyOnClose
:maskClosable=
"false"
>
<preview-file
v-model=
"realurl.downloadUrl"
:fileName=
"realurl.fileName"
></preview-file>
</a-modal>
<a-modal
v-model=
"projectKPIView"
title=
"查看项目KPI"
width=
"80%"
:dialog-style=
"{ top: '10%' }"
:footer=
"null"
destroyOnClose
:maskClosable=
"false"
>
<project-kpi></project-kpi>
</a-modal>
<a-modal
v-model=
"visiblePersonEdit"
v-if=
"visiblePersonEdit"
title=
"请先完善个人信息!"
width=
"700px"
:dialog-style=
"{ top: '12%' }"
:footer=
"null"
destroyOnClose
:maskClosable=
"false"
>
<person-info-edit
@
sub=
"personSave"
/>
</a-modal>
...
...
src/views/report/task/Index.vue
View file @
e87de6fa
<
template
>
<div
class=
"app-content"
>
<a-tabs
:tab-position=
"'top'"
v-model=
"activeTab"
@
change=
"callback"
>
<a-tab-pane
key=
"1"
:tab=
"'未上报任务书('+panes.count1+')'"
>
</a-tab-pane>
<a-tab-pane
key=
"2"
:tab=
"'返回修改任务书('+panes.count2+')'"
>
</a-tab-pane>
<a-tab-pane
key=
"3"
:tab=
"'已上报任务书('+panes.count3+')'"
>
</a-tab-pane>
<a-tab-pane
key=
"4"
:tab=
"'所有任务书('+panes.count4+')'"
>
</a-tab-pane>
</a-tabs>
<a-form
layout=
"horizontal"
:form=
"form"
:model=
"searchForm"
>
<a-row
:gutter=
"30"
>
<a-col
:span=
"8"
>
<a-form-item
label=
"项目名称"
>
<a-input
placeholder=
"项目名称"
v-model=
"searchForm.projName"
:maxLength=
"100"
style=
"width: 272px"
/>
</a-form-item>
</a-col>
<a-col
:span=
"8"
>
<a-form-item
label=
"项目编号"
>
<a-input
placeholder=
"项目编号"
v-model=
"searchForm.projNo"
:maxLength=
"100"
style=
"width: 272px"
/>
</a-form-item>
</a-col>
<a-col
:span=
"8"
>
<a-form-item>
<a-button
type=
"primary"
icon=
"search"
@
click=
"searchList"
>
搜索
</a-button>
<a-button
icon=
"reload"
style=
"margin-left: 10px"
@
click=
"searchFormReset"
class=
"bt-normal"
>
重置
</a-button>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"30"
>
<a-form-item>
<a-button
type=
"primary"
style=
"margin-right:8px;"
v-if=
"(display&&isButten)"
@
click=
"createTaskBook"
>
填写任务书
</a-button>
<a-button
type=
"primary"
@
click=
"exportData"
>
导出Excel
</a-button>
<span
:style=
"
{color:'#DC143C'}"> 填报时间:
{{
description
}}
</span>
</a-form-item>
</a-col>
</a-row>
<a-form
:form=
"form"
:model=
"searchForm"
layout=
"inline"
class=
"search_form"
>
<a-form-item>
<a-input
placeholder=
"项目名称"
v-model=
"searchForm.projName"
:maxLength=
"100"
style=
"width: 180px"
/>
</a-form-item>
<a-form-item>
<a-input
placeholder=
"项目编号"
v-model=
"searchForm.projNo"
:maxLength=
"100"
style=
"width: 180px"
/>
</a-form-item>
<a-form-item>
<a-button
type=
"primary"
icon=
"search"
@
click=
"search"
>
搜索
</a-button>
<a-button
icon=
"reload"
style=
"margin-left: 10px"
@
click=
"reset"
class=
"bt-normal"
>
重置
</a-button>
</a-form-item>
</a-form>
<div
style=
"width:100%;margin-bottom: 8px;"
>
<div
style=
"display: inline-block;;width:50%"
>
<btn-group
:data=
"tabDate"
:itemCount=
"itemCount"
v-model=
"activekey"
@
change=
"callback"
/>
</div>
<div
style=
"display: inline-block;;width:50%;text-align: right;"
>
<a-button
type=
"primary"
style=
"margin-right:8px;"
v-if=
"isButten"
@
click=
"createProject"
>
新建项目
</a-button>
<a-button
type=
"primary"
@
click=
"exportData"
icon=
"download"
>
Excel
</a-button>
</div>
</div>
<a-divider
style=
"height: 1px; background-color: #e8e8e8;"
/>
<span
class=
"form-description"
>
※填报时间:
{{
description
}}
</span>
<a-table
:dataSource=
"tableData"
:columns=
"columns"
rowKey=
"projId"
:pagination=
"false"
:loading=
"loading"
:row-selection=
"
{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio' }">
<template
slot=
"testStateName"
slot-scope=
"record"
>
<span
v-if=
"record"
>
...
...
@@ -55,10 +39,10 @@
</
template
>
</a-table>
<a-pagination
v-if=
"pagination.total > 0"
:total=
"pagination.total"
show-size-changer
show-quick-jumper
v-model=
"pagination.pageIndex"
:page-size=
"pagination.pageSize"
:page-size-options=
"pagination.pageSizeOptions"
@
showSizeChange=
"showSizeChange"
@
change=
"change"
:showTotal=
"() => `共 ${pagination.total} 条`"
/>
<a-modal
v-model=
"visibleEdit"
:title=
"
modalTitle
"
:width=
"'80%'"
:dialog-style=
"{ top: '5%' }"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
:centered=
"true"
>
<a-modal
v-model=
"visibleEdit"
:title=
"
'创建/修改'
"
:width=
"'80%'"
:dialog-style=
"{ top: '5%' }"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
:centered=
"true"
>
<test-edit
v-model=
"selectProjId"
@
close=
"closeWindow"
/>
</a-modal>
<a-modal
v-model=
"visibleView"
title=
"查看
任务
书"
:width=
"'80%'"
:dialog-style=
"{ top: '5%' }"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
>
<a-modal
v-model=
"visibleView"
title=
"查看
合同
书"
:width=
"'80%'"
:dialog-style=
"{ top: '5%' }"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
>
<test-view
v-model=
"selectProjId"
@
close=
"closeWindow"
/>
</a-modal>
</div>
...
...
@@ -89,30 +73,30 @@ export default {
data
()
{
return
{
// 选项卡
activeTab
:
'1'
,
panes
:
{
count1
:
0
,
count2
:
0
,
count3
:
0
,
count4
:
0
,
count5
:
0
,
},
activekey
:
'1'
,
tabDate
:
[
{
key
:
"1"
,
tab
:
"未上报"
},
{
key
:
"2"
,
tab
:
"返回修改"
},
{
key
:
"3"
,
tab
:
"已上报"
},
{
key
:
"4"
,
tab
:
"所有"
},
],
itemCount
:
[
0
,
0
,
0
,
0
,
0
],
form
:
this
.
$form
.
createForm
(
this
,
{
name
:
'advanced_search'
}),
searchForm
:
{
projName
:
''
,
projNo
:
''
,
testState
:
'1'
,
reportYear
:
null
},
tableData
:
[],
columns
:
[],
pagination
:
{
pageIndex
:
1
,
pageSize
:
this
.
$defaultPageSize
,
total
:
0
,
pageSizeOptions
:
this
.
$defaultPageSizeOptions
,
},
pagination
:
{
pageIndex
:
1
,
pageSize
:
this
.
$defaultPageSize
,
total
:
0
,
pageSizeOptions
:
this
.
$defaultPageSizeOptions
,
},
loading
:
false
,
// 弹窗
visibleEdit
:
false
,
visibleView
:
false
,
modalTitle
:
''
,
selectProjId
:
null
,
selectTaskId
:
null
,
selectedRowKeys
:
[],
selectTestState
:
null
,
id
:
null
,
isButten
:
false
,
display
:
false
,
description
:
''
description
:
''
,
}
},
components
:
{
...
...
@@ -140,12 +124,7 @@ export default {
this
.
getCount
()
this
.
loading
=
true
let
pars
=
isEmptyParams
(
this
.
searchForm
)
let
par
=
{
...
pars
,
pageIndex
:
this
.
pagination
.
pageIndex
,
pageSize
:
this
.
pagination
.
pageSize
}
let
par
=
{
...
pars
,
pageIndex
:
this
.
pagination
.
pageIndex
,
pageSize
:
this
.
pagination
.
pageSize
}
this
.
$api
.
taskReport
.
getListByPage
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
const
{
dataList
=
[],
total
=
0
}
=
data
...
...
@@ -163,27 +142,17 @@ export default {
if
(
data
)
{
this
.
panes
=
data
}
}).
catch
(()
=>
{
})
},
searchFormReset
()
{
this
.
searchForm
=
{
projName
:
''
,
projNo
:
''
,
}
}).
catch
(()
=>
{
})
},
search
List
()
{
search
()
{
this
.
pagination
.
pageIndex
=
1
this
.
getListByPage
()
},
onSelectChange
(
selectedRowKeys
,
selectedRows
)
{
this
.
selectedRowKeys
=
selectedRowKeys
this
.
selectProjId
=
selectedRows
[
0
].
projId
this
.
selectTaskId
=
selectedRows
[
0
].
id
this
.
selectTestState
=
selectedRows
[
0
].
testState
},
submitForm
()
{
reset
()
{
this
.
searchForm
.
projName
=
null
this
.
searchForm
.
projNo
=
null
this
.
pagination
.
pageIndex
=
1
this
.
getListByPage
()
},
change
()
{
this
.
getListByPage
()
...
...
@@ -193,6 +162,12 @@ export default {
this
.
pagination
.
pageSize
=
pageSize
this
.
getListByPage
()
},
onSelectChange
(
selectedRowKeys
,
selectedRows
)
{
this
.
selectedRowKeys
=
selectedRowKeys
this
.
selectProjId
=
selectedRows
[
0
].
projId
this
.
selectTaskId
=
selectedRows
[
0
].
id
this
.
selectTestState
=
selectedRows
[
0
].
testState
},
createTaskBook
()
{
if
(
this
.
selectProjId
==
null
)
{
this
.
$message
.
error
(
'请选择项目'
)
...
...
@@ -202,8 +177,6 @@ export default {
this
.
$message
.
error
(
'任务书已创建'
)
return
}
this
.
modalTitle
=
'创建任务书'
this
.
selectTaskId
=
''
this
.
visibleEdit
=
true
},
...
...
@@ -213,7 +186,6 @@ export default {
this
.
selectTaskId
=
record
.
id
this
.
visibleView
=
true
}
else
if
(
type
===
'edit'
)
{
this
.
modalTitle
=
'修改任务书'
this
.
selectProjId
=
record
.
projId
this
.
visibleEdit
=
true
}
else
{
...
...
@@ -245,36 +217,6 @@ export default {
}
},
watch
:
{
activeTab
:
{
handler
(
value
)
{
if
(
value
===
'1'
)
{
this
.
display
=
true
;
this
.
columns
=
columns
.
filter
(
e
=>
e
.
tabKey
!==
'1'
)
return
}
this
.
display
=
false
;
this
.
columns
=
columns
.
filter
(
e
=>
e
.
tabKey
!==
'2'
)
},
immediate
:
true
}
}
}
</
script
>
<
style
scoped
lang=
"less"
>
.app-content {
border: 1px solid #e8e8e8;
padding: 0px 10px 10px 10px;
}
.ant-form-item {
display: flex !important;
}
.ant-form-item-control-wrapper {
flex: 1 !important;
width: 100% !important;
}
.ant-pagination {
float: inherit !important;
margin-top: 15px;
}
</
style
>
\ No newline at end of file
src/views/report/task/components/taskCreate.vue
0 → 100644
View file @
e87de6fa
<
template
>
<div
class=
"app-content"
style=
"height: 76vh;overflow: auto;"
>
<a-spin
:spinning=
"loading"
style=
"width: 100%;height: 100%;"
>
<div
class=
"page-steps"
>
<a-steps
size=
"small"
:current=
"current"
@
change=
"onChange"
>
<a-step
:status=
"item.status"
v-for=
"(item,index) in stepsArray"
:key=
"index+'stepsArray'"
:title=
"item.title"
/>
</a-steps>
</div>
<div
class=
"page-content"
>
<project-edit
v-model=
"value"
@
close=
"closeWindow"
@
load=
"onLoad"
@
onStepChange=
"onStepChange"
:completeStatus
.
sync=
completeStatus
:stepsArray
.
sync=
"stepsArray"
ref=
"projCreate"
></project-edit>
</div>
<div
class=
"page-footer"
>
<a-button
v-if=
"currSteps > 0"
style=
"margin-left: 40px"
type=
"primary"
@
click=
"prev"
>
上一步
</a-button>
<a-button
style=
"margin-left: 40px"
type=
"primary"
@
click=
"save"
>
保 存
</a-button>
<a-button
v-if=
"currSteps
<
stepsArray
.
length
-
1
"
style=
"margin-left: 40px"
type=
"primary"
@
click=
"next"
>
下一步
</a-button>
<a-button
v-if=
"currSteps == stepsArray.length - 1"
style=
"margin-left: 40px"
type=
"primary"
@
click=
"submit"
>
完成填写
</a-button>
</div>
</a-spin>
</div>
</
template
>
<
script
>
import
{
getType
}
from
'@/views/utils/auth'
import
projectEdit
from
"@/views/report/project/components/edit/projectEdit"
import
projectEditKey
from
"@/views/report/project/components/keyProject/projectEdit"
export
default
{
name
:
"projectCreate"
,
components
:
{
projectEdit
,
projectEditKey
,
},
data
()
{
return
{
loading
:
false
,
projType
:
getType
()
==
"1"
,
current
:
10
,
currSteps
:
0
,
stepsArray
:
[
{
status
:
"process"
,
title
:
'基本信息'
,
showStatus
:
true
},
{
status
:
"wait"
,
title
:
'项目组成员及单位'
,
showStatus
:
false
},
{
status
:
"wait"
,
title
:
'经费预算及设备明细'
,
showStatus
:
false
},
{
status
:
"wait"
,
title
:
'阶段目标及课题设置'
,
showStatus
:
false
},
{
status
:
"wait"
,
title
:
'绩效指标'
,
showStatus
:
false
},
{
status
:
"wait"
,
title
:
'附件'
,
showStatus
:
false
}
],
completeStatus
:
"0,0,0,0,0,0"
}
},
props
:
{
value
:
{
type
:
String
,
default
:
()
=>
{
return
null
}
},
},
created
()
{
},
methods
:
{
stepsChange
(
e
)
{
debugger
this
.
currSteps
=
e
this
.
changeSteps
(
this
.
currSteps
)
},
next
()
{
this
.
$refs
.
projCreate
.
submit
(
this
.
currSteps
,
true
)
},
prev
()
{
this
.
currSteps
--
;
this
.
changeSteps
(
this
.
currSteps
)
},
onChange
(
e
)
{
if
(
e
!=
this
.
currSteps
)
{
var
arr
=
this
.
completeStatus
.
split
(
','
)
if
(
arr
[
e
]
==
"1"
)
{
this
.
loading
=
true
this
.
changeSteps
(
e
)
this
.
loading
=
false
}
else
{
this
.
$message
.
error
(
'所选步骤没填写完成,请填写当前步骤后点【下一步】跳转!'
)
}
}
},
onStepChange
(
e
)
{
this
.
completeStatus
=
e
.
state
this
.
changeSteps
(
e
.
step
)
},
changeSteps
(
e
)
{
this
.
currSteps
=
e
var
clone
=
[].
concat
(
this
.
stepsArray
)
clone
.
forEach
(
e
=>
{
e
.
showStatus
=
false
})
clone
[
e
].
showStatus
=
true
;
this
.
stepsArray
=
clone
this
.
getCompleteStatus
(
e
,
this
.
completeStatus
)
},
getCompleteStatus
(
step
,
completeStatus
)
{
var
arr
=
completeStatus
.
split
(
','
)
if
(
!!
arr
&&
arr
.
length
>
0
)
{
for
(
var
i
=
0
;
i
<
arr
.
length
;
i
++
)
{
if
(
arr
[
i
]
==
"1"
)
{
this
.
stepsArray
[
i
].
status
=
"finish"
}
else
{
this
.
stepsArray
[
i
].
status
=
"wait"
}
}
this
.
stepsArray
[
step
].
status
=
"process"
}
},
save
()
{
this
.
$refs
.
projCreate
.
save
(
this
.
currSteps
)
},
submit
()
{
this
.
$refs
.
projCreate
.
submit
(
this
.
currSteps
,
false
)
},
closeWindow
(
value
)
{
this
.
$emit
(
'close'
,
value
)
},
onLoad
(
value
)
{
this
.
loading
=
value
},
},
}
</
script
>
<
style
scoped
lang=
"less"
>
::v-deep .ant-spin-container {
width: 100%;
height: 100%;
}
::-webkit-scrollbar {
width: 8px;
height: 6px;
}
.page-steps {
width: 100%;
height: 40px;
padding: 8px 20px 5px 20px;
background: rgb(248, 248, 248);
border: 1px 1px 0px 1px solid #e8e8e8;
}
.page-content {
width: 100%;
height: calc(100% - 80px);
overflow: auto;
}
.page-footer {
width: 100%;
height: 40px;
line-height: 40px;
background: rgb(248, 248, 248);
text-align: center;
}
</
style
>
src/views/report/task/components/taskEdit.vue
View file @
e87de6fa
This diff is collapsed.
Click to expand it.
src/views/report/task/components/taskFileEdit.vue
deleted
100644 → 0
View file @
f18fefd0
<
template
>
<div
class=
"from-table font-line-space"
>
<a-spin
:spinning=
"loading"
style=
"width: 100%;height: 100%;"
>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目编号
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
projNo
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目名称
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
projName
}}
</div>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报人
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
personName
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报单位
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
appUnitName
}}
</div>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报年度
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
reportYear
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目开始结束时间
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
moment
(
projectInfo
.
startDate
).
format
(
'YYYY-MM-DD'
)
}}
至
{{
moment
(
projectInfo
.
endDate
).
format
(
'YYYY-MM-DD'
)
}}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
>
<div
class=
"tb-title"
>
附件上传
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
class=
"row_center"
>
<a-col
:span=
"8"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
附件名称
</div>
</div>
</a-col>
<a-col
:span=
"10"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
附件上传
</div>
</div>
</a-col>
<a-col
:span=
"6"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
说明
</div>
</div>
</a-col>
</a-row>
<a-row
v-for=
"(item, index) in projectInfo.fileList"
:key=
"'fileList' + index"
type=
"flex"
>
<a-col
:span=
"8"
style=
"text-align: center; margin-top: 10px;"
>
<span
class=
"required"
></span>
{{
item
.
fileExplain
}}
<!--
<a-form-model-item
:prop=
"'fileList.' + index + '.fileExplain'"
:rules=
"
{required: true, message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.fileExplain"
:maxLength=
"100"
style=
"width: 80%"
:disabled=
"item.required"
/>
</a-form-model-item>
-->
</a-col>
<a-col
:span=
"10"
>
<div
class=
"special-middle"
>
<div
v-if=
"item.downloadUrl"
class=
"file-box"
>
<div>
<!--
<a-icon
type=
"file"
style=
"margin-right: 8px"
/>
<span
class=
"hover-pointer"
@
click=
"downloadfile(item)"
>
{{
item
.
fileName
}}
</span>
-->
<document-view
:fileUrl=
"item.downloadUrl"
:fileName=
"item.fileName"
:imageArray=
"[item.downloadUrl]"
></document-view>
</div>
<a-icon
type=
"delete"
class=
"hover-pointer d-icon"
@
click=
"deleteTaskFile(item, index)"
/>
</div>
<div
v-else
>
<a-form-model-item
:prop=
"'fileList.' + index + '.downloadUrl'"
:rules=
"
{required: true, message: '请上传附件',trigger: 'blur',}">
<input
type=
"file"
:ref=
"'fileElem' + index"
class=
"visually-hidden"
@
change=
"handleFiles(item, index)"
/>
<a-button
@
click=
"fileSelect(item, index)"
><a-icon
type=
"upload"
/>
选择文件
</a-button>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"6"
>
<div
class=
"special-middle"
>
<span
style=
"margin-left: 10px; font-size: 10pt; color:red; font-weight: bold;"
>
请上传项目任务书附件(文件类型必须为:pdf),文件大小不能超过
{{
fileSize
}}
M!
</span>
</div>
</a-col>
</a-row>
</a-spin>
</div>
</
template
>
<
script
>
import
moment
from
'moment'
import
documentView
from
'@/views/components/common/documentView'
const
File
=
{
fileName
:
""
,
downloadUrl
:
""
,
fileExplain
:
"项目任务书"
,
downloadId
:
""
};
export
default
{
name
:
"taskFileEdit"
,
props
:
{
value
:
{
type
:
String
,
default
:
()
=>
{
return
null
}
},
},
components
:
{
documentView
},
data
()
{
return
{
projectInfo
:
{
projNo
:
''
,
projName
:
''
,
startDate
:
''
,
endDate
:
''
,
appPersonName
:
''
,
appUnitName
:
''
,
mobile
:
''
,
address
:
''
,
fileList
:
[{
...
File
}],
},
fileSize
:
15
,
};
},
created
()
{
this
.
getProjectBasicInfoById
()
},
methods
:
{
moment
,
getProjectBasicInfoById
()
{
if
(
this
.
value
!=
null
)
{
this
.
loading
=
true
this
.
$api
.
project
.
getProjectBasicInfoById
({
id
:
this
.
value
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
projectInfo
=
data
if
(
this
.
projectInfo
.
fileList
==
null
||
this
.
projectInfo
.
fileList
.
length
<=
0
)
this
.
projectInfo
.
fileList
=
[{
...
File
}]
this
.
loading
=
false
}
}).
catch
(()
=>
{
this
.
$emit
(
'close'
,
'close'
)
})
}
},
downloadfile
()
{
},
deleteTaskFile
(
item
,
index
)
{
this
.
$api
.
taskReport
.
deleteTaskFile
({
id
:
item
.
downloadId
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
''
item
.
downloadUrl
=
''
item
.
downloadId
=
''
}
}).
catch
(()
=>
{
this
.
$message
.
error
(
'删除失败'
)
})
},
uploadHandle
(
file
,
fileName
,
projId
)
{
let
formData
=
new
FormData
()
formData
.
append
(
'file'
,
file
)
formData
.
append
(
'fileName'
,
fileName
)
formData
.
append
(
'projId'
,
projId
)
return
formData
},
handleFiles
(
item
,
index
)
{
let
fileElem
=
this
.
$refs
[
'fileElem'
+
index
][
0
]
let
files
=
fileElem
.
files
if
(
files
.
length
<=
0
)
{
this
.
$message
.
error
(
'未选中文件,请尝试重新选择'
)
return
}
if
(
!
this
.
fileCheck
(
files
[
0
]))
return
this
.
$api
.
taskReport
.
asyncUploadTaskFile
(
this
.
uploadHandle
(
files
[
0
],
files
[
0
].
name
,
this
.
value
)).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
data
.
fileName
item
.
downloadUrl
=
data
.
downloadUrl
item
.
downloadId
=
data
.
id
item
.
fileExplain
=
data
.
fileExplain
}
else
this
.
$message
.
error
(
'上传失败'
)
}).
catch
(()
=>
{
this
.
$message
.
error
(
'上传失败'
)
})
},
fileSelect
(
item
,
index
)
{
let
fileElem
=
this
.
$refs
[
'fileElem'
+
index
][
0
]
if
(
fileElem
)
{
fileElem
.
click
()
}
},
fileCheck
(
file
)
{
//判断是否小于1M
let
isLtSize
=
file
.
size
<
1024
*
1024
*
this
.
fileSize
;
if
(
!
isLtSize
)
{
this
.
$message
.
error
(
'文件大小不能超过'
+
this
.
fileSize
+
'M!'
);
return
false
}
if
(
file
.
type
!==
"application/pdf"
)
{
this
.
$message
.
error
(
'项目任务书附件必须为pdf文件类型!'
);
return
false
}
return
true
},
}
};
</
script
>
\ No newline at end of file
src/views/report/task/components/taskFileInfo.vue
deleted
100644 → 0
View file @
f18fefd0
<
template
>
<div
class=
"from-table font-line-space"
>
<a-spin
:spinning=
"loading"
style=
"width: 100%;height: 100%;"
>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目编号
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
projNo
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目名称
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
projName
}}
</div>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报人
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
personName
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报单位
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
appUnitName
}}
</div>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
申报年度
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
projectInfo
.
reportYear
}}
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
项目开始结束时间
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<div
class=
"special-middle"
>
<div>
{{
moment
(
projectInfo
.
startDate
).
format
(
'YYYY-MM-DD'
)
}}
至
{{
moment
(
projectInfo
.
endDate
).
format
(
'YYYY-MM-DD'
)
}}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
>
<div
class=
"tb-title"
>
附件
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
class=
"row_center"
>
<a-col
:span=
"8"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
附件名称
</div>
</div>
</a-col>
<a-col
:span=
"16"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
附件文件
</div>
</div>
</a-col>
</a-row>
<a-row
v-for=
"(item, index) in projectInfo.fileList"
:key=
"'fileList' + index"
type=
"flex"
>
<a-col
:span=
"8"
style=
"text-align: center; margin-top: 10px;"
>
<span>
{{
item
.
fileExplain
}}
</span>
</a-col>
<a-col
:span=
"16"
>
<div
class=
"special-middle"
>
<div
v-if=
"item.downloadUrl"
class=
"file-box"
>
<div>
<document-view
:fileUrl=
"item.downloadUrl"
:fileName=
"item.fileName"
:imageArray=
"[item.downloadUrl]"
></document-view>
</div>
</div>
<div
v-else
style=
"text-align: center;"
>
无
</div>
</div>
</a-col>
</a-row>
</a-spin>
</div>
</
template
>
<
script
>
import
moment
from
'moment'
import
documentView
from
'@/views/components/common/documentView'
const
File
=
{
fileName
:
""
,
downloadUrl
:
""
,
fileExplain
:
"项目任务书"
,
downloadId
:
""
};
export
default
{
name
:
"taskFileEdit"
,
props
:
{
value
:
{
type
:
String
,
default
:
()
=>
{
return
null
}
},
},
components
:
{
documentView
},
data
()
{
return
{
projectInfo
:
{
projNo
:
''
,
projName
:
''
,
startDate
:
''
,
endDate
:
''
,
appPersonName
:
''
,
appUnitName
:
''
,
mobile
:
''
,
address
:
''
,
fileList
:
[{
...
File
}],
},
fileSize
:
15
,
};
},
created
()
{
this
.
getProjectBasicInfoById
()
},
methods
:
{
moment
,
getProjectBasicInfoById
()
{
if
(
this
.
value
!=
null
)
{
this
.
loading
=
true
this
.
$api
.
project
.
getProjectBasicInfoById
({
id
:
this
.
value
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
projectInfo
=
data
if
(
this
.
projectInfo
.
fileList
==
null
||
this
.
projectInfo
.
fileList
.
length
<=
0
)
this
.
projectInfo
.
fileList
=
[{
...
File
}]
this
.
loading
=
false
}
}).
catch
(()
=>
{
this
.
loading
=
false
})
//() => { this.$emit('close', 'close') }
}
},
}
};
</
script
>
\ No newline at end of file
src/views/report/task/components/taskInfo.vue
View file @
e87de6fa
This diff is collapsed.
Click to expand it.
src/views/report/task/components/taskView.vue
View file @
e87de6fa
<
template
>
<div
class=
"report-detail"
>
<!--
<a-button
type=
"primary"
>
导出任务书
</a-button>
-->
<div
style=
"margin-top: 16px;"
>
<test-info
v-model=
"testInfo"
/>
</div>
<div
class=
"app-content layoutEmbedded"
style=
"height: 76vh;overflow: auto;"
>
<a-spin
:spinning=
"loading"
style=
"width: 100%;height: 100%;"
>
<div
class=
"page-content"
>
<a-tabs
type=
"card"
hideAdd
size=
"small"
@
change=
"callback"
>
<a-tab-pane
:key=
"item.key"
:tab=
"item.title"
v-for=
"(item) in tabsData"
>
</a-tab-pane>
</a-tabs>
</div>
<div
class=
"page-footer"
>
<!-- 申报项目详情 -->
<!--
<a-button
type=
"primary"
@
click=
"onExport"
>
导出
</a-button>
-->
<project-info
v-model=
"formData"
:tabsData
.
sync=
"tabsData"
v-if=
"projType=='1'"
/>
<project-info-Key
v-model=
"formData"
:tabsData
.
sync=
"tabsData"
v-if=
"projType=='2'"
/>
</div>
</a-spin>
</div>
</
template
>
<
script
>
import
{
isEmptyParams
}
from
"@/views/utils/common"
import
TestInfo
from
'@/views/report/task/components/taskInfo'
import
AuditList
from
'@/views/audit/components/auditInfo'
const
cont1
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'd37abeb6-14e0-4486-924d-e1e4baf67098'
,
showIndex
:
1
}
}
const
cont2
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'b1fe4003-16ed-482f-8fd5-e34b1482c3d4'
,
showIndex
:
1
}
}
const
cont3
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'b19cf66b-c1bb-4974-a524-114c1895dbd8'
,
showIndex
:
1
}
}
const
cont4
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'cf3abeff-9f1a-420e-b375-6aad33f12080'
,
showIndex
:
1
}
}
const
cont5
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'f1cea24c-d13d-48af-8abb-58eed9367c27'
,
showIndex
:
1
}
}
const
cont6
=
()
=>
{
return
{
id
:
null
,
testId
:
null
,
contentInfo
:
''
,
startTime
:
null
,
endTime
:
null
,
contentType
:
'ebcdf2b0-011c-4d40-a064-f22d6f7ec646'
,
showIndex
:
1
}
}
const
projectKPI
=
{
reportYear
:
""
,
projName
:
""
,
appUnitName
:
""
,
managerDept
:
""
,
projAttribute
:
""
,
projDeadline
:
""
,
startDate
:
""
,
endData
:
""
,
yearTarget
:
""
,
year1Goal
:
""
,
year2Goal
:
""
,
year3Goal
:
""
,
totalBudget
:
0.00
,
applyFunds
:
0.00
,
selfFunds
:
0.00
,
yearTotal
:
0.00
,
yearApply
:
0.00
,
yearSelf
:
0.00
,
totalRowSpan
:
0
,
//总合并行数
outTarget
:
0
,
//一级指标(产出指标)
benefitTarget
:
0
,
//一级指标(效益指标)
satisfactionDegree
:
0
,
//一级指标(满意度指标)
quantityTarget
:
0
,
//二级指标(数量指标)
qualityTarget
:
0
,
//二级指标(质量指标)
validityTarget
:
0
,
//二级指标(时效指标)
costTarget
:
0
,
//二级指标(成本指标)
economicTarget
:
0
,
//二级指标(经济效益指标)
socialTarget
:
0
,
//二级指标(社会效益指标)
ecologicalTarget
:
0
,
//二级指标(生态效益指标)
sustainableTarget
:
0
,
//二级指标(可持续影响指标)
serviceTarget
:
0
,
//二级指标(服务对象满意度指标)
threeLevel
:
[],
kpiList
:
[],
};
import
{
budgetList
}
from
'@/views/report/project/config'
import
{
getType
}
from
'@/views/utils/auth'
import
projectInfo
from
'@/views/report/project/components/projectInfo'
import
projectInfoKey
from
"@/views/report/project/components/keyProject/projectInfo"
export
default
{
name
:
"
Tes
tView"
,
name
:
"
projec
tView"
,
components
:
{
TestInfo
,
AuditList
projectInfo
,
projectInfoKey
},
data
()
{
return
{
testInfo
:
{
id
:
''
,
projId
:
''
,
projName
:
''
,
startDate
:
null
,
endDate
:
null
,
appUnitName
:
''
,
linkTel
:
''
,
linkAddress
:
''
,
linkEmail
:
''
,
// 实施目标和主要内容
testContent
:
''
,
// 总经费
budgetCount
:
0
,
// 市卫计委资助
budgetGovCount
:
0
,
// 起止日期
startDate
:
null
,
endDate
:
null
,
// 申报人
tabsData
:
[
{
title
:
'全部'
,
key
:
'0'
,
isShow
:
true
},
{
title
:
'项目基本信息'
,
key
:
'1'
,
isShow
:
true
},
{
title
:
'项目组主要成员'
,
key
:
'2'
,
isShow
:
true
},
{
title
:
'项目主要实施内容和目标'
,
key
:
'3'
,
isShow
:
true
},
{
title
:
'申请书正文'
,
key
:
'4'
,
isShow
:
true
},
{
title
:
'经费预算及设备明细'
,
key
:
'5'
,
isShow
:
true
},
{
title
:
'项目实施阶段及任务'
,
key
:
'6'
,
isShow
:
true
},
{
title
:
'项目课题设置'
,
key
:
'7'
,
isShow
:
true
},
{
title
:
'绩效目标表'
,
key
:
'8'
,
isShow
:
true
},
{
title
:
'附件信息'
,
key
:
'9'
,
isShow
:
true
},
{
title
:
'项目审核记录'
,
key
:
'10'
,
isShow
:
true
},
],
formData
:
{
id
:
null
,
appPersonName
:
null
,
sex
:
null
,
birth
Year
:
null
,
mobil
e
:
null
,
birth
day
:
null
,
nationNam
e
:
null
,
degreeName
:
null
,
titleName
:
null
,
// 依托单位
mobile
:
null
,
email
:
null
,
jobTime
:
null
,
address
:
null
,
appUnitName
:
null
,
linkEmail
:
null
,
linkTel
:
null
,
linkAddress
:
null
,
postcode
:
null
,
authority
:
null
,
// 项目内容
cont1
:
[
cont1
()],
cont2
:
[
cont2
()],
cont3
:
[
cont3
()],
cont4
:
[
cont4
()],
cont5
:
[
cont5
()],
cont6
:
[
cont6
()],
// 成员
mainResearchAreas
:
null
,
unitLinkName
:
null
,
unitLinkMobile
:
null
,
unitLinkEmail
:
null
,
unitLinkFax
:
null
,
projName
:
null
,
knowledgeId
:
null
,
subjectScope
:
null
,
projClass
:
null
,
remark
:
null
,
startDate
:
null
,
endDate
:
null
,
totalFunding
:
null
,
govFunding
:
null
,
projAbstract
:
null
,
projKeywords
:
null
,
yearTarget
:
null
,
year1Goal
:
null
,
year2Goal
:
null
,
year3Goal
:
null
,
projectKPI
:
projectKPI
,
cooperativeUnits
:
[],
members
:
[],
// 预期成果形式
target
:
[],
// 经费
budget
:
[],
//审核记录
auditList
:
[{
result
:
''
,
unit
:
''
,
time
:
''
}],
}
}
fundPlan
:
[],
fileList
:
[],
auditList
:
[],
managerDept
:
""
,
},
loading
:
false
,
projType
:
getType
()
};
},
props
:
{
value
:
{
...
...
@@ -85,26 +133,69 @@ export default {
},
},
created
()
{
this
.
get
TestInfoByProj
Id
()
this
.
get
ProjectInfoBy
Id
()
},
methods
:
{
getTestInfoByProjId
()
{
let
pars
=
{
projId
:
this
.
value
}
this
.
$api
.
taskReport
.
getTestInfoByProjId
(
pars
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
testInfo
=
data
}
}).
catch
(()
=>
{
getProjectInfoById
()
{
if
(
this
.
value
!=
null
)
{
this
.
loading
=
true
this
.
$api
.
project
.
getProjectInfoById
({
id
:
this
.
value
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
=
data
this
.
loading
=
false
}
else
this
.
$emit
(
'close'
,
'error'
)
}).
catch
(()
=>
{
this
.
$emit
(
'close'
,
'error'
)
})
}
},
onExport
()
{
this
.
$api
.
project
.
export
({
id
:
this
.
value
}).
then
((
res
)
=>
{
let
blob
=
new
Blob
([
res
],
{
type
:
"application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8"
,
});
const
fileName
=
this
.
formData
.
projName
+
'.doc'
;
let
downloadElement
=
document
.
createElement
(
'a'
)
let
href
=
window
.
URL
.
createObjectURL
(
blob
);
//创建下载的链接
downloadElement
.
href
=
href
;
downloadElement
.
download
=
fileName
;
//下载后文件名
document
.
body
.
appendChild
(
downloadElement
);
downloadElement
.
click
();
//点击下载
document
.
body
.
removeChild
(
downloadElement
);
//下载完成移除元素
window
.
URL
.
revokeObjectURL
(
href
);
//释放blob
})
},
callback
(
key
)
{
var
index
=
parseInt
(
key
)
this
.
tabsData
.
forEach
(
e
=>
{
if
(
key
==
'0'
)
e
.
isShow
=
true
else
e
.
isShow
=
false
})
}
}
this
.
tabsData
[
0
].
isShow
=
true
;
this
.
tabsData
[
index
].
isShow
=
true
;
},
},
}
</
script
>
<
style
lang=
"less"
scoped
>
.report-detail {
height: 70vh;
<
style
scoped
lang=
"less"
>
::v-deep .ant-spin-container {
width: 100%;
height: 100%;
}
::-webkit-scrollbar {
width: 8px;
height: 6px;
}
.page-content {
width: 100%;
height: 50px;
}
.page-footer {
width: 100%;
height: calc(100% - 50px);
overflow: auto;
border-left: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
}
</
style
>
\ No newline at end of file
</
style
>
src/views/report/task/projectTask.vue
deleted
100644 → 0
View file @
f18fefd0
<
template
>
<div
class=
"app-content"
>
<a-form
layout=
"inline"
:form=
"form"
:model=
"searchForm"
>
<a-form-item>
<a-input
placeholder=
"项目名称"
v-model=
"searchForm.projName"
:maxLength=
"100"
style=
"width: 160px"
/>
</a-form-item>
<a-form-item>
<a-input
placeholder=
"项目编号"
v-model=
"searchForm.projNo"
:maxLength=
"100"
style=
"width: 160px"
/>
</a-form-item>
<a-form-item>
<base-select
v-model=
"searchForm.reportYear"
:title=
"'年度'"
:type=
"7"
:isAll=
"true"
:width=
"160"
/>
</a-form-item>
<a-form-item>
<a-button
type=
"primary"
icon=
"search"
@
click=
"searchList"
>
搜索
</a-button>
<a-button
icon=
"reload"
style=
"margin-left: 10px"
@
click=
"searchFormReset"
class=
"bt-normal"
>
重置
</a-button>
<a-button
type=
"primary"
style=
"margin-left: 10px"
@
click=
"FileDownload"
icon=
"download"
>
项目任务书模板下载
</a-button>
</a-form-item>
<div
style=
"width:100%;margin-bottom: 8px;"
>
<a-button
type=
"primary"
@
click=
"exportData"
>
导出Excel
</a-button>
</div>
</a-form>
<a-table
:dataSource=
"tableData"
:columns=
"columns"
rowKey=
"projId"
:pagination=
"false"
:loading=
"loading"
>
<!-- :row-selection="
{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio' }" -->
<template
slot=
"projName"
slot-scope=
"record"
>
<a
@
click=
"recordClick(record, 'viewProject')"
>
{{
record
.
projName
}}
</a>
</
template
>
<
template
slot=
"testStateName"
slot-scope=
"record"
>
<span
v-if=
"record"
>
{{
record
}}
</span>
<span
v-else
>
未填写
</span>
</
template
>
<
template
slot=
"option"
slot-scope=
"record"
>
<a-button
type=
"primary"
size=
"small"
v-if=
"((!record.testState||record.testState==1))"
@
click=
"recordClick(record,'UploadProjTask')"
>
上传项目任务书
</a-button>
</
template
>
</a-table>
<a-pagination
v-if=
"pagination.total > 0"
:total=
"pagination.total"
show-size-changer
show-quick-jumper
v-model=
"pagination.pageIndex"
:page-size=
"pagination.pageSize"
:page-size-options=
"pagination.pageSizeOptions"
@
showSizeChange=
"showSizeChange"
@
change=
"change"
:showTotal=
"() => `共 ${pagination.total} 条`"
/>
<a-modal
v-model=
"taskFileEditView"
title=
"上传项目任务书"
:width=
"'60%'"
:maskClosable=
"false"
:footer=
"null"
destroyOnClose
class=
"sc_modal"
>
<task-file-edit
v-model=
"selectProjId"
@
close=
"closeTaskFileEditWindow"
/>
</a-modal>
<a-modal
v-model=
"visibleView"
v-if=
"visibleView"
title=
"项目详情"
width=
"94%"
:footer=
"null"
:dialog-style=
"{ top: '8%' }"
destroyOnClose
:maskClosable=
"false"
>
<project-view
v-model=
"selectProjId"
@
close=
"() => this.visibleView = false"
/>
</a-modal>
</div>
</template>
<
script
>
import
{
isEmptyParams
,
filterExportExcelData
,
tableColumnsName
,
}
from
"@/views/utils/common"
;
import
{
getType
}
from
'@/views/utils/auth'
import
baseSelect
from
'@/views/components/common/baseSelect'
import
taskFileEdit
from
'@/views/report/task/components/taskFileEdit'
import
projectView
from
'@/views/report/project/components/projectView'
import
moment
from
'moment'
import
axios
from
'axios'
const
columns
=
[
{
title
:
"项目名称"
,
scopedSlots
:
{
customRender
:
'projName'
}
},
{
title
:
"项目编号"
,
dataIndex
:
"projNo"
},
{
title
:
"项目开始时间"
,
dataIndex
:
"projStart"
,
tabKey
:
"2"
},
{
title
:
"项目结束时间"
,
dataIndex
:
"projEnd"
,
tabKey
:
"2"
},
{
title
:
"申报年度"
,
dataIndex
:
"reportYear"
},
//{ title: "状态", dataIndex: "testStateName", scopedSlots: { customRender: "testStateName" }, },
{
title
:
"操作"
,
fixed
:
"right"
,
width
:
"200px"
,
scopedSlots
:
{
customRender
:
"option"
},
align
:
'center'
},
];
export
default
{
name
:
"projectTask"
,
components
:
{
baseSelect
,
taskFileEdit
,
projectView
,
},
data
()
{
return
{
form
:
this
.
$form
.
createForm
(
this
,
{
name
:
'advanced_search'
}),
searchForm
:
{
projName
:
''
,
projNo
:
''
,
testState
:
'5'
,
reportYear
:
null
},
tableData
:
[],
columns
:
columns
,
pagination
:
{
pageIndex
:
1
,
pageSize
:
this
.
$defaultPageSize
,
total
:
0
,
pageSizeOptions
:
this
.
$defaultPageSizeOptions
,
},
selectedRowKeys
:
[],
loading
:
false
,
taskFileEditView
:
false
,
selectProjId
:
null
,
//selectTaskId: null,
//selectTestState: null,
visibleView
:
false
,
id
:
null
,
url1
:
{
downloadUrl
:
'/downloadFile/202408091430.doc'
,
fileName
:
'项目任务书模板.doc'
,
},
url2
:
{
downloadUrl
:
'/downloadFile/202408091430.doc'
,
fileName
:
'公立医院高水平临床专科发展科技项目任务书.doc'
,
},
realurl
:
null
,
};
},
created
()
{
this
.
getYear
()
if
(
getType
()
==
1
)
this
.
realurl
=
this
.
url1
else
this
.
realurl
=
this
.
url2
},
methods
:
{
getYear
()
{
this
.
$api
.
batch
.
getCurrentYearBatch
({
type
:
1
,
projType
:
getType
()
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
searchForm
.
reportYear
=
data
.
year
this
.
getListByPage
()
}
}).
catch
(()
=>
{
})
},
getListByPage
()
{
this
.
loading
=
true
let
pars
=
isEmptyParams
(
this
.
searchForm
)
let
par
=
{
...
pars
,
pageIndex
:
this
.
pagination
.
pageIndex
,
pageSize
:
this
.
pagination
.
pageSize
}
this
.
$api
.
taskReport
.
getListByPage
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
const
{
dataList
=
[],
total
=
0
}
=
data
this
.
tableData
=
dataList
this
.
pagination
.
total
=
total
this
.
loading
=
false
this
.
tableData
.
forEach
(
e
=>
{
if
(
e
.
projStart
)
{
e
.
projStart
=
moment
(
e
.
projStart
).
format
(
'YYYY-MM-DD'
)
e
.
projEnd
=
moment
(
e
.
projEnd
).
format
(
'YYYY-MM-DD'
)
}
})
}
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
searchList
()
{
this
.
getListByPage
()
},
change
()
{
this
.
getListByPage
()
},
showSizeChange
(
current
,
pageSize
)
{
this
.
pagination
.
pageIndex
=
current
this
.
pagination
.
pageSize
=
pageSize
this
.
getListByPage
()
},
onSelectChange
(
selectedRowKeys
,
selectedRows
)
{
this
.
selectedRowKeys
=
selectedRowKeys
this
.
selectProjId
=
selectedRows
[
0
].
projId
// this.selectTaskId = selectedRows[0].id
// this.selectTestState = selectedRows[0].testState
},
searchFormReset
()
{
this
.
searchForm
=
{
projName
:
''
,
projNo
:
''
,
testState
:
'5'
,
reportYear
:
moment
().
year
(),
}
},
recordClick
(
record
,
type
)
{
if
(
type
===
'UploadProjTask'
)
{
this
.
selectProjId
=
record
.
projId
this
.
taskFileEditView
=
true
}
if
(
type
===
'viewProject'
)
{
this
.
selectProjId
=
record
.
projId
this
.
visibleView
=
true
}
},
closeTaskFileEditWindow
()
{
this
.
taskFileEditView
=
false
},
exportData
()
{
this
.
$ToDoExcel
(
`任务书列表`
,
tableColumnsName
(
this
.
columns
),
filterExportExcelData
(
this
.
columns
,
this
.
tableData
))
},
FileDownload
()
{
axios
({
url
:
this
.
realurl
.
downloadUrl
,
// 替换为实际文件的URL
method
:
'GET'
,
responseType
:
'blob'
// 告诉axios返回的数据类型为Blob
}).
then
(
response
=>
{
const
url
=
window
.
URL
.
createObjectURL
(
new
Blob
([
response
.
data
]))
const
link
=
document
.
createElement
(
'a'
)
link
.
href
=
url
link
.
setAttribute
(
'download'
,
this
.
realurl
.
fileName
)
// 下载文件的名称
document
.
body
.
appendChild
(
link
)
link
.
click
()
})
},
}
};
</
script
>
\ No newline at end of file
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