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
72364ed3
Commit
72364ed3
authored
Nov 27, 2024
by
wangxl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
5555
parent
489aaf03
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
2022 additions
and
14 deletions
+2022
-14
index.js
src/router/index.js
+1
-1
cooperativeUnits.vue
src/views/report/project/components/cooperativeUnits.vue
+163
-0
fileEdit.vue
src/views/report/project/components/fileEdit.vue
+184
-0
projectEdit copy.vue
src/views/report/project/components/projectEdit copy.vue
+1104
-0
projectEdit.vue
src/views/report/project/components/projectEdit.vue
+151
-13
index1.vue
src/views/report/project/index1.vue
+419
-0
No files found.
src/router/index.js
View file @
72364ed3
...
...
@@ -102,7 +102,7 @@ export const routes = [
meta
:
{
title
:
'个人中心'
,
icon
:
'el-icon-user'
},
hidden
:
false
,
children
:
[
{
path
:
'/report/project'
,
name
:
'项目申报'
,
component
:
()
=>
import
(
'@/views/report/project/
Index
.vue'
),
meta
:
{
title
:
'项目申报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/project'
,
name
:
'项目申报'
,
component
:
()
=>
import
(
'@/views/report/project/
index1
.vue'
),
meta
:
{
title
:
'项目申报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/task'
,
name
:
'任务书填报'
,
component
:
()
=>
import
(
'@/views/report/task/Index.vue'
),
meta
:
{
title
:
'任务书填报'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/projectTask'
,
name
:
'任务书填报'
,
component
:
()
=>
import
(
'@/views/report/task/projectTask.vue'
),
meta
:
{
title
:
'项目任务书'
,
icon
:
''
,
noCache
:
true
}
},
{
path
:
'/report/check'
,
name
:
'中期考核填报'
,
component
:
()
=>
import
(
'@/views/report/check/Index.vue'
),
meta
:
{
title
:
'中期考核填报'
,
icon
:
''
,
noCache
:
true
}
},
...
...
src/views/report/project/components/cooperativeUnits.vue
0 → 100644
View file @
72364ed3
<
template
>
<div>
<a-row>
<a-col
:span=
"24"
>
<div
class=
"tb-title"
>
<span>
项目主要参与单位及分工
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
class=
"item_inner"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
单位名称
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
单位国别
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
单位国别
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
组织机构代码/统社会信用代码
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
分 工
</div>
</div>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
操作
</div>
</div>
</a-col>
</a-row>
<a-row
v-for=
"(item, index) in cooperativeUnits"
:key=
"'cooperativeUnits'+index"
type=
"flex"
class=
"item_inner"
>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
:prop=
"'cooperativeUnits.' + index + '.unitName'"
:rules=
"
{ required: true,message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.unitName"
:maxLength=
"20"
placeholder=
"单位名称"
style=
"width: 80%"
/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
:prop=
"'cooperativeUnits.' + index + '.unitCountry'"
:rules=
"
{ required: true,message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.unitCountry"
:maxLength=
"20"
placeholder=
"单位名称"
style=
"width: 80%"
/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
:prop=
"'cooperativeUnits.' + index + '.unitAddress'"
:rules=
"
{ required: true,message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.unitAddress"
:maxLength=
"100"
placeholder=
"单位国别"
style=
"width: 80%"
/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
:prop=
"'cooperativeUnits.' + index + '.organizationCode'"
:rules=
"
{ required: true,message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.organizationCode"
:maxLength=
"50"
placeholder=
"组织机构代码/统社会信用代码"
style=
"width: 80%"
/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
:prop=
"'cooperativeUnits.' + index + '.projectWork'"
:rules=
"
{ required: true,message: '*',trigger: 'blur',}">
<a-input
v-model=
"item.projectWork"
:maxLength=
"50"
placeholder=
"分 工"
style=
"width: 80%"
/>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col
:span=
"4"
>
<div
class=
"special-middle"
>
<a-button
icon=
"arrow-up"
type=
"primary"
shape=
"circle"
size=
"small"
:disabled=
"index == 0"
@
click=
"moveUp(index)"
></a-button>
<a-button
icon=
"arrow-down"
type=
"primary"
shape=
"circle"
size=
"small"
style=
"margin-left:3px"
:disabled=
"cooperativeUnits.length == index + 1"
@
click=
"moveDown(index)"
></a-button>
<a-popconfirm
title=
"确定要删除吗?"
ok-text=
"确定"
cancel-text=
"取消"
@
confirm=
"removeArray(item)"
>
<a-button
type=
"link"
size=
"small"
>
[删除]
</a-button>
</a-popconfirm>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"24"
style=
"text-align: center;"
>
<div
class=
"special-middle"
>
<a-button
type=
"dashed"
style=
"width: 50%"
@
click=
"addArray"
>
<a-icon
type=
"plus"
/>
添加
</a-button>
</div>
</a-col>
</a-row>
</div>
</
template
>
<
script
>
//用法
<
cooperative
-
units
:
cooperativeUnits
.
sync
=
"formData.cooperativeUnits"
/>
const
Model
=
{
id
:
null
,
unitName
:
null
,
unitCountry
:
null
,
unitAddress
:
null
,
organizationCode
:
null
,
projectWork
:
null
}
export
default
{
name
:
'cooperativeUnits'
,
data
()
{
return
{
}
},
props
:
{
cooperativeUnits
:
{
type
:
Array
,
default
:
()
=>
{
return
[]
}
},
},
components
:
{
},
created
()
{
},
methods
:
{
moveToTop
(
item
)
{
//成员置顶
let
index
=
this
.
cooperativeUnits
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
cooperativeUnits
.
splice
(
index
,
1
)
this
.
cooperativeUnits
.
unshift
({
...
item
})
}
},
moveUp
(
index
)
{
let
arr
=
this
.
cooperativeUnits
arr
.
splice
(
index
-
1
,
1
,
...
arr
.
splice
(
index
,
1
,
arr
[
index
-
1
]))
},
moveDown
(
index
)
{
let
arr
=
this
.
cooperativeUnits
arr
.
splice
(
index
,
1
,
...
arr
.
splice
(
index
+
1
,
1
,
arr
[
index
]))
},
addArray
()
{
//添加成员
this
.
cooperativeUnits
.
push
({
...
Model
})
},
removeArray
(
item
)
{
//移除成员
let
index
=
this
.
cooperativeUnits
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
cooperativeUnits
.
splice
(
index
,
1
)
}
},
},
}
</
script
>
src/views/report/project/components/fileEdit.vue
0 → 100644
View file @
72364ed3
<
template
>
<div>
<a-row>
<a-col
:span=
"24"
>
<div
class=
"tb-title"
>
<span>
附件上传
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"24"
class=
"bg-gray"
>
<div
class=
"special-middle"
style=
"font-weight: bold;"
>
1.科研诚信承诺书(必须提供)
<span
class=
"required"
></span><br
/>
2.承诺书(必须提供)
<span
class=
"required"
></span><br
/>
3.医学研究伦理审查证明
<br
/>
4.多家单位联合申报的必须提供牵头单位与所有参与单位签署的联合申报协议(协议中应包含项目名称、课题设置、专项经费分配、知识产权归属、项目经费筹集与使等内容,协议经单位盖章、项目及所有课题负责人签字有效)
<br
/>
5.相关查新报告、前期科研成果、专利等佐证材料(选择提供)
<br
/>
6.与项目相关的其它证明材料或文件等(选择提供)
<br
/>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
class=
"item_inner"
>
<a-col
:span=
"2"
>
<div
class=
"special-middle"
>
<div>
序号
</div>
</div>
</a-col>
<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=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div>
操作
</div>
</div>
</a-col>
</a-row>
<a-row
v-for=
"(item, index) in fileList"
:key=
"'fileList' + index"
type=
"flex"
>
<a-col
:span=
"2"
style=
"text-align: center;"
>
{{
index
+
1
}}
</a-col>
<a-col
:span=
"8"
>
<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"
/>
<!--
<span
v-if=
"mustAttachment.includes(index)"
class=
"required"
></span>
-->
</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>
</div>
<a-icon
type=
"delete"
class=
"hover-pointer d-icon"
@
click=
"deletefile(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=
"4"
>
<div
class=
"special-middle"
>
<div
v-if=
"!item.required"
>
<a-popconfirm
title=
"确定要删除吗?"
ok-text=
"确定"
cancel-text=
"取消"
@
confirm=
"removefileList(item)"
>
<a-button
type=
"link"
size=
"small"
>
删除
</a-button>
</a-popconfirm>
</div>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"24"
style=
"text-align: center"
>
<div
class=
"special-middle"
>
<div>
<a-button
type=
"dashed"
style=
"width: 50%"
@
click=
"addfileList()"
>
<a-icon
type=
"plus"
/>
添加
</a-button>
</div>
</div>
</a-col>
</a-row>
</div>
</
template
>
<
script
>
const
File
=
{
fileName
:
""
,
downloadUrl
:
""
,
fileExplain
:
""
,
downloadId
:
""
};
export
default
{
name
:
"fileEdit"
,
props
:
{
fileList
:
{
type
:
Array
,
default
:
()
=>
{
return
[{
...
File
}];
},
},
},
created
()
{},
data
()
{
return
{
mustAttachment
:
[
0
,
1
],
};
},
methods
:
{
downloadfile
()
{
},
deletefile
(
item
,
index
)
{
this
.
$api
.
base
.
deletefile
({
id
:
item
.
downloadId
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
''
item
.
downloadUrl
=
''
item
.
downloadId
=
''
}
}).
catch
(()
=>
{
this
.
$message
.
error
(
'删除失败'
)
})
},
uploadHandle
(
file
,
fileName
)
{
let
formData
=
new
FormData
()
formData
.
append
(
'file'
,
file
)
formData
.
append
(
'fileName'
,
fileName
)
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
.
base
.
asyncUpload
(
this
.
uploadHandle
(
files
[
0
],
files
[
0
].
name
)).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
files
[
0
].
name
item
.
downloadUrl
=
'/'
+
files
[
0
].
name
item
.
downloadId
=
data
.
id
}
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
*
15
;
if
(
!
isLtSize
)
{
this
.
$message
.
error
(
'文件大小不能超过15M!'
);
return
false
}
return
true
},
// 添加附件
addfileList
()
{
this
.
fileList
.
push
(
Object
.
assign
({
...
File
},
{
fileExplain
:
''
}))
},
// 删除附件
removefileList
(
item
)
{
let
index
=
this
.
fileList
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
fileList
.
splice
(
index
,
1
)
}
},
},
};
</
script
>
\ No newline at end of file
src/views/report/project/components/projectEdit copy.vue
0 → 100644
View file @
72364ed3
<
template
>
<div>
<a-form-model
ref=
"form"
:model=
"formData"
:rules=
"rules"
style=
"border-top: 0px"
class=
"from-table font-line-space"
>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
基本情况
</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
单位基本情况
</span>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item>
<div>
{{
formData
.
appUnitName
}}
</div>
</a-form-model-item>
</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>
<a-form-model-item>
<div>
{{
formData
.
unitTypeName
}}
</div>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"organizationCode"
>
<a-input
placeholder=
"组织机构代码/统一社会信用代码"
v-model=
"formData.organizationCode"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
prop=
"address"
>
<a-input
placeholder=
"通讯地址"
v-model=
"formData.address"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"registeredAddress"
>
<a-input
placeholder=
"注册所在地"
v-model=
"formData.registeredAddress"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"postCode"
>
<a-input
placeholder=
"邮编"
v-model=
"formData.postCode"
:maxLength=
"10"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"legalPerson"
>
<a-input
placeholder=
"法定代表人"
v-model=
"formData.legalPerson"
:maxLength=
"50"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"workforce"
>
<a-input-number
v-model=
"formData.workforce"
:min=
"0"
:step=
"1"
style=
"width: 100px"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"specializedPersonnel"
>
<a-input-number
v-model=
"formData.specializedPersonnel"
:min=
"0"
:step=
"1"
style=
"width: 100px"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"researchPersonnel"
>
<a-input-number
v-model=
"formData.researchPersonnel"
:min=
"0"
:step=
"1"
style=
"width: 100px"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"depositBank"
>
<a-input
placeholder=
"开户银行"
v-model=
"formData.depositBank"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"bankAccount"
>
<a-input
placeholder=
"银行账号"
v-model=
"formData.bankAccount"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"depositBankAddress"
>
<a-input
placeholder=
"开户银行地址"
v-model=
"formData.depositBankAddress"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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>
<a-form-model-item
prop=
"interbankNumber"
>
<a-input
placeholder=
"开户银行地址"
v-model=
"formData.interbankNumber"
:maxLength=
"100"
style=
"width:80%"
/>
</a-form-model-item>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
prop=
"researchTotal"
>
<a-input-number
v-model=
"formData.researchTotal"
:min=
"0"
:step=
"0.01"
style=
"width: 100px"
/>
</a-form-model-item>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
ref=
"isResearchActive"
label=
""
prop=
"unitType"
>
<base-select
v-model=
"formData.isResearchActive"
:type=
"12"
:isAll=
"true"
/>
</a-form-model-item>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
prop=
"researchCount"
>
<a-input-number
v-model=
"formData.researchCount"
:min=
"0"
:step=
"0.01"
style=
"width: 100px"
/>
</a-form-model-item>
</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=
"20"
>
<div
class=
"special-middle"
>
<div>
<a-form-model-item
prop=
"researchPersonCount"
>
<a-input-number
v-model=
"formData.researchPersonCount"
:min=
"0"
:step=
"1"
style=
"width: 100px"
/>
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目基本情况
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目名称
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"projName"
>
<a-input
placeholder=
"项目名称"
v-model=
"formData.projName"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目所属二级学院/部门名称(牵头单位)
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"leadUnit"
>
<a-input
placeholder=
"项目所属二级学院/部门名称(牵头单位)"
v-model=
"formData.leadUnit"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
推荐部门
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"recommendUnit"
>
<a-input
placeholder=
"推荐部门"
v-model=
"formData.recommendUnit"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项日开始时间
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"startDate"
style=
"width:200px;display: inline-block;"
>
<a-date-picker
format=
"YYYY-MM-DD"
valueFormat=
"YYYY-MM-DD HH:mm:ss"
v-model=
"formData.startDate"
style=
"width: 180px"
/>
</a-form-model-item>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目结束时间
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"endDate"
style=
"width:200px;display: inline-block;"
>
<a-date-picker
format=
"YYYY-MM-DD"
valueFormat=
"YYYY-MM-DD HH:mm:ss"
v-model=
"formData.endDate"
style=
"width: 180px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目依托的科技创新基地
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"technologyInnovationBase"
>
<a-input
placeholder=
"项目依托的科技创新基地"
v-model=
"formData.technologyInnovationBase"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目所属学科类别
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"knowledgeId"
>
<para-multi-select
v-model=
"formData.knowledgeId"
:typeId=
"57"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目总经费(万元)
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"totalFunding"
>
<a-input-number
v-model=
"formData.totalFunding"
:min=
"0"
:step=
"0.01"
style=
"width: 100px"
/>
<span>
单位:万元
</span>
</a-form-model-item>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
申请科技经费(万元)
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"govFunding"
>
<a-input-number
v-model=
"formData.govFunding"
:min=
"0"
:step=
"0.01"
style=
"width: 100px"
/>
<span>
单位:万元
</span>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目联系人姓名
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"linkName"
>
<a-input
placeholder=
"项目联系人姓名"
v-model=
"formData.linkName"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
联系人手机
</div>
</div>
</a-col>
<a-col
:span=
"8"
>
<a-form-model-item
prop=
"linkMobile"
>
<a-input
placeholder=
"联系人手机"
v-model=
"formData.linkMobile"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
电子邮箱
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"linkEmail"
>
<a-input
placeholder=
"电子邮箱"
v-model=
"formData.linkEmail"
:maxLength=
"100"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目摘要(400字以内)
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"projAbstract"
>
<a-textarea
placeholder=
"项目摘要"
v-model=
"formData.projAbstract"
:maxLength=
"400"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
关键词
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"projKeywords"
>
<a-input
placeholder=
"关键词"
v-model=
"formData.projKeywords"
:maxLength=
"200"
style=
"width: 80%"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目人员情况
</span>
</div>
</a-col>
</a-row>
<!-- 项目合作单位 -->
<cooperative-units
:cooperativeUnits
.
sync=
"formData.cooperativeUnits"
/>
<!-- 项目组成员 -->
<proj-group-member
:members
.
sync=
"formData.members"
/>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目可行性研究情况
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
1、项目的意义、必要性
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchContent"
>
<a-textarea
placeholder=
"项目的意义、必要性"
v-model=
"formData.researchContent"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
2、项目现有工作基础和支撑条件
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"memResume"
>
<a-textarea
placeholder=
"项目现有工作基础和支撑条件"
v-model=
"formData.memResume"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
3、与项目相关的国内外技术发展现状(包括知识产权情况)以及本项目主要研究开发内容技术关键(创新点)、可行性评价及项目风险分析与对策
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchProgress"
>
<a-textarea
placeholder=
"与项目相关的国内外技术发展现状"
v-model=
"formData.researchProgress"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目主要实施内容和目标
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目实施目标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchContent"
>
<a-textarea
placeholder=
"与项目相关的国内外技术发展现状"
v-model=
"formData.researchContent"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目考核指标
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
主要技术指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"technologyTarget"
>
<a-textarea
placeholder=
"主要技术指标"
v-model=
"formData.technologyTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
主要经济指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"economyTarget"
>
<a-textarea
placeholder=
"主要经济指标"
v-model=
"formData.economyTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目实施中形成的示范基地、中试线、生产线及其规模等
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"achievementTarget"
>
<a-textarea
placeholder=
"项目实施中形成的示范基地、中试线、生产线及其规模等"
v-model=
"formData.achievementTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
其他应考核的指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"otherTarget"
>
<a-textarea
placeholder=
"其他应考核的指标"
v-model=
"formData.otherTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<!-- 经费预算 -->
<budget-edit
:budget
.
sync=
"formData.budget"
/>
<!-- 附件 -->
<file-edit
:fileList
.
sync=
"formData.fileList"
/>
</a-form-model>
</div>
</
template
>
<
script
>
import
{
getType
}
from
'@/views/utils/auth'
import
paraMultiSelect
from
'@/views/components/common/paraMultiSelect'
import
paraSelect
from
'@/views/components/common/paraSelect'
import
baseSelect
from
'@/views/components/common/baseSelect'
import
ProjGroupMember
from
'@/views/report/project/components/projGroupMember'
import
cooperativeUnits
from
'@/views/report/project/components/cooperativeUnits'
import
budgetEdit
from
'@/views/report/project/components/keyProject/budgetEdit'
import
fileEdit
from
'@/views/report/project/components/keyProject/fileEdit'
import
{
isEmptyParams
}
from
"@/views/utils/common"
import
moment
from
'moment'
const
Cooperative
=
{
id
:
null
,
unitName
:
null
,
unitCountry
:
null
,
unitAddress
:
null
,
organizationCode
:
null
,
projectWork
:
null
}
const
Members
=
{
showIndex
:
1
,
name
:
null
,
certId
:
null
,
sex
:
null
,
birthday
:
null
,
age
:
null
,
degree
:
null
,
title
:
null
,
duty
:
null
,
spec
:
null
,
workUnit
:
null
,
projWork
:
null
}
const
Equipments
=
{
name
:
null
,
specificationType
:
null
,
quantity
:
null
,
totalBudget
:
null
,
useFrom
:
null
}
const
File
=
{
fileName
:
''
,
downloadUrl
:
''
,
fileExplain
:
''
,
downloadId
:
''
}
export
default
{
name
:
'projectEdit'
,
components
:
{
paraMultiSelect
,
paraSelect
,
baseSelect
,
ProjGroupMember
,
cooperativeUnits
,
budgetEdit
,
fileEdit
},
props
:
{
value
:
{
type
:
String
,
default
:
()
=>
{
return
null
}
},
isModifyNo
:
{
type
:
Boolean
,
default
:
()
=>
{
return
false
}
},
},
created
()
{
this
.
getProject
()
},
data
()
{
return
{
overseasShow
:
false
,
formData
:
{
id
:
null
,
// 项目名称
projName
:
''
,
// 项目名称
englishName
:
''
,
// 项目状态
projState
:
-
10
,
isAchieve
:
null
,
// 申报学科
isAccept
:
null
,
// 申报学科
isOverseas
:
null
,
// 申报学科
knowledgeId
:
''
,
// 拟完成的成果形式
anticipatedForms
:
''
,
// 申请金额
applyMoney
:
null
,
// 申报年度
reportYear
:
null
,
// 实施年限 起止日期
startDate
:
null
,
endDate
:
null
,
// 主题词
projKeywords
:
''
,
// 主题词(英文)
keywordsEnglish
:
''
,
// 依托单位
appUnitName
:
''
,
// 申报人
personName
:
''
,
// 性别
sex
:
''
,
// 出生年月
birthday
:
''
,
// 证件号
certId
:
''
,
// 民族
nationName
:
''
,
// 职 称
titleName
:
''
,
// 学历
educationName
:
''
,
// 专业
specName
:
''
,
// 电话
mobile
:
''
,
// 邮箱
email
:
''
,
// 成员
cooperativeUnits
:
[],
// 成员
members
:
[],
// 投资总额
totalFunding
:
null
,
// 卫生健康委资助
govFunding
:
null
,
// 单位配套
unitFunding
:
null
,
// 自筹
selfFunding
:
null
,
// 其他
otherFunding
:
null
,
budget
:
[],
equipments
:
[{
...
Equipments
}],
// 研究内容和意义
projContent
:
''
,
//参考文献
projReference
:
''
,
// 立项依据
projBasis
:
''
,
// 研究内容和研究目标,拟解决的关键问题
researchContent
:
''
,
// 研究思路、方法、技术路线、实验方案及可行性分析
researchPlan
:
''
,
// 项目的特色和创新之处
mainFeatures
:
''
,
// 研究进度计划
studyPlan
:
''
,
// 预期研究成果
expectedResults
:
''
,
// 研究工作积累和已取得的研究工作成绩
workFoundation
:
''
,
// 实验条件和资料
workingConditions
:
''
,
// 申请者和项目组主要成员研究工作简历
memResume
:
''
,
// 申请者正在承担的其它研究项目
researchProjects
:
''
,
projDoc
:
''
,
fileList
:
[{
...
File
}],
//项目类型(1.科研项目、2.重点项目)
projType
:
getType
()
},
rules
:
{
projName
:
[
{
required
:
true
,
message
:
'请填写项目名称'
,
trigger
:
'blur'
},
{
max
:
50
,
message
:
'项目名称不能大于50'
,
trigger
:
'blur'
}
],
englishName
:
[{
max
:
200
,
message
:
'项目名称(英文)不能大于50'
,
trigger
:
'blur'
}],
proj_no
:
{
required
:
true
,
message
:
'请填写项目编号'
,
trigger
:
'blur'
},
isAchieve
:
{
required
:
true
,
message
:
'是否可实现成果转化或临床应用'
,
trigger
:
'change'
},
isAccept
:
{
required
:
true
,
message
:
'请选择是否选择接受立项不资助'
,
trigger
:
'change'
},
isOverseas
:
{
required
:
true
,
message
:
'请选择是否存在境外机构或人员参与'
,
trigger
:
'change'
},
knowledgeId
:
{
required
:
true
,
message
:
'请选择申报学科'
,
trigger
:
'change'
},
anticipatedForms
:
{
required
:
true
,
message
:
'请选择成果形式'
,
trigger
:
'change'
},
projKeywords
:
[{
required
:
true
,
message
:
'请填写主题词'
,
trigger
:
'blur'
},],
keywordsEnglish
:
[{
max
:
200
,
message
:
'主题词不能大于50'
,
trigger
:
'blur'
},],
startDate
:
{
required
:
true
,
message
:
'请选择起始日期'
,
trigger
:
'change'
},
endDate
:
{
required
:
true
,
message
:
'请选择结束日期'
,
trigger
:
'change'
},
dept
:
{
required
:
true
,
message
:
'请填写系、所、科室'
,
trigger
:
'blur'
},
nature
:
{
required
:
true
,
message
:
'请填单位性质'
,
trigger
:
'change'
},
telephone
:
{
required
:
true
,
message
:
'请填写申请人电话'
,
trigger
:
'blur'
},
address
:
{
required
:
true
,
message
:
'请填写详细地址'
,
trigger
:
'blur'
},
email
:
{
required
:
true
,
message
:
'请填写邮箱'
,
trigger
:
'blur'
},
applyMoney
:
{
required
:
true
,
message
:
'请填写申请金额'
,
trigger
:
'blur'
},
// 研究内容和意义
projContent
:
[{
required
:
true
,
message
:
'请填写研究内容和意义'
,
trigger
:
'blur'
}],
//参考文献
projReference
:
[{
required
:
false
,
message
:
'请填写参考文献'
,
trigger
:
'blur'
}],
// 立项依据
projBasis
:
[{
required
:
true
,
message
:
'请填写立项依据'
,
trigger
:
'blur'
}],
// 研究内容和研究目标,拟解决的关键问题
researchContent
:
[{
required
:
true
,
message
:
'请填写研究内容和研究目标'
,
trigger
:
'blur'
}],
// 研究思路、方法、技术路线、实验方案及可行性分析
researchPlan
:
[{
required
:
true
,
message
:
'请填写研究思路、方法、技术路线'
,
trigger
:
'blur'
}],
// 项目的特色和创新之处
mainFeatures
:
[{
required
:
true
,
message
:
'请填写项目的特色和创新之处'
,
trigger
:
'blur'
}],
// 研究进度计划
studyPlan
:
[{
required
:
true
,
message
:
'请填写研究进度计划'
,
trigger
:
'blur'
}],
// 预期研究成果
expectedResults
:
[{
required
:
true
,
message
:
'请填写预期研究成果'
,
trigger
:
'blur'
}],
// 研究工作积累和已取得的研究工作成绩
workFoundation
:
[{
required
:
true
,
message
:
'请填写研究工作积累和已取得的研究工作成绩'
,
trigger
:
'blur'
}],
// 实验条件和资料
workingConditions
:
[{
required
:
true
,
message
:
'请填写实验条件和资料'
,
trigger
:
'blur'
}],
// 申请者和项目组主要成员研究工作简历
memResume
:
[{
required
:
true
,
message
:
'请填写研究工作简历'
,
trigger
:
'blur'
}],
// 申请者正在承担的其它研究项目
researchProjects
:
[{
required
:
true
,
message
:
'请填写研究项目'
,
trigger
:
'blur'
}],
govFunding
:
{
required
:
true
,
message
:
'*'
,
trigger
:
'blur'
},
unitFunding
:
{
required
:
true
,
message
:
'*'
,
trigger
:
'blur'
},
selfFunding
:
{
required
:
true
,
message
:
'*'
,
trigger
:
'blur'
},
otherFunding
:
{
required
:
true
,
message
:
'*'
,
trigger
:
'blur'
},
},
// 富文本字数
tinymceLimit
:
15000
,
tinymceWordCount
:
0
,
flag
:
false
,
}
},
computed
:
{
},
mounted
()
{
},
methods
:
{
moment
,
getProject
()
{
this
.
$emit
(
'load'
,
true
)
if
(
!!
this
.
value
)
{
this
.
$api
.
project
.
getProjectInfoById
({
id
:
this
.
value
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
=
data
this
.
loadList
()
}
else
this
.
$emit
(
'close'
,
'error'
)
this
.
$emit
(
'load'
,
false
)
}).
catch
(()
=>
{
this
.
$emit
(
'close'
,
'error'
)
this
.
$emit
(
'load'
,
false
)
})
}
else
{
this
.
$api
.
project
.
getNewProject
({
projType
:
getType
()
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
=
data
this
.
loadList
()
// tinyMCE.activeEditor.setContent(data.projDoc)
}
else
this
.
$emit
(
'close'
,
'error'
)
this
.
$emit
(
'load'
,
false
)
}).
catch
(()
=>
{
this
.
$emit
(
'close'
,
'error'
)
this
.
$emit
(
'load'
,
false
)
})
}
},
loadList
()
{
if
(
!!!
this
.
formData
.
cooperativeUnits
||
this
.
formData
.
cooperativeUnits
.
length
==
0
)
this
.
formData
.
cooperativeUnits
=
[{
...
Cooperative
}]
if
(
!!!
this
.
formData
.
members
||
this
.
formData
.
members
.
length
==
0
)
this
.
formData
.
members
=
[{
...
Members
}]
if
(
!!!
this
.
formData
.
equipments
||
this
.
formData
.
equipments
.
length
==
0
)
this
.
formData
.
equipments
=
[{
...
Equipments
}]
if
(
!!!!
this
.
formData
.
fileList
||
!
this
.
formData
.
fileList
.
length
||
this
.
formData
.
fileList
.
length
==
0
)
{
this
.
formData
.
fileList
=
[]
}
},
addEquipments
()
{
this
.
formData
.
equipments
.
push
({
...
Equipments
})
},
removeEquipments
(
item
)
{
let
index
=
this
.
formData
.
equipments
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
formData
.
equipments
.
splice
(
index
,
1
)
}
},
save
()
{
if
(
this
.
checkProjName
())
{
this
.
$emit
(
'load'
,
true
)
let
pars
=
isEmptyParams
(
this
.
formData
)
let
par
=
{
...
pars
}
this
.
$api
.
project
.
save
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
.
id
=
data
this
.
$message
.
success
(
'保存成功!'
)
this
.
$emit
(
'onSave'
,
'save'
)
}
this
.
$emit
(
'load'
,
false
)
}).
catch
(()
=>
{
this
.
$emit
(
'load'
,
false
)
})
}
},
submit
()
{
if
(
this
.
formData
.
members
.
length
==
0
)
{
this
.
$message
.
error
(
'至少添加一位项目组成员!'
)
return
}
if
(
this
.
formData
.
isOverseas
&&
this
.
formData
.
isOverseas
==
'是'
)
{
if
(
this
.
formData
.
overseasRemark
==
null
||
this
.
formData
.
overseasRemark
==
''
)
{
this
.
$message
.
error
(
'请填写存在境外机构或人员具体情况说明!'
)
return
}
}
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
if
(
!
this
.
checkApplyMoney
())
{
return
false
}
this
.
$emit
(
'load'
,
true
)
let
state
=
this
.
formData
.
projState
if
(
state
!=
30
)
this
.
formData
.
projState
=
10
// this.formData.projDoc = this.projDoc
let
pars
=
isEmptyParams
(
this
.
formData
)
let
par
=
{
...
pars
}
this
.
$api
.
project
.
save
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
.
id
=
data
this
.
$message
.
success
(
'成功!'
)
this
.
$emit
(
'onSave'
,
'submit'
)
}
this
.
$emit
(
'load'
,
false
)
}).
catch
(()
=>
{
this
.
$emit
(
'load'
,
false
)
})
}
else
{
this
.
$message
.
warn
(
'项目信息未填写完全!'
)
return
false
}
})
},
tinymceSet
()
{
tinymce
.
remove
(
'#tinymce_dom'
)
tinymce
.
init
({
selector
:
'#tinymce_dom'
,
language
:
'zh_CN'
,
content_style
:
"img {max-width:100%;}"
,
// menubar: false,
// 隐藏底部状态栏
statusbar
:
false
,
height
:
800
,
plugins
:
'code advlist autolink link image lists preview table wordcount'
,
toolbar
:
`undo redo | styleselect | fontsizeselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist | link image
| table tabledelete | tableprops tablerowprops tablecellprops | tableinsertrowbefore tableinsertrowafter tabledeleterow
| tableinsertcolbefore tableinsertcolafter tabledeletecol | wordcount`
,
// 初始化完成回调
init_instance_callback
:
(
editor
)
=>
{
let
wordcount
=
editor
.
plugins
.
wordcount
this
.
tinymceWordCount
=
wordcount
.
body
.
getWordCount
()
},
// 图片上传路径
// images_upload_url: 'http://192.168.1.185:8888/profile',
// 图片上传操作
images_upload_handler
:
(
blobInfo
,
succFun
,
failFun
)
=>
{
this
.
$api
.
base
.
asyncUpload
(
this
.
uploadHandle
(
blobInfo
.
blob
(),
blobInfo
.
filename
())).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
succFun
(
data
.
downloadUrl
)
}
}).
catch
((
err
)
=>
{
failFun
(
err
)
})
}
})
// 设置富文本内容
// tinymce.activeEditor.setContent(htmlText)
// 监听输入计算字数
let
mark
=
1
tinymce
.
activeEditor
.
on
(
'keyup'
,
(
e
)
=>
{
if
(
mark
===
1
)
{
let
wordcount
=
tinymce
.
activeEditor
.
plugins
.
wordcount
this
.
tinymceWordCount
=
wordcount
.
body
.
getWordCount
()
mark
=
0
setTimeout
(()
=>
{
mark
=
1
},
500
)
}
})
},
// 添加附件
addfileList
()
{
this
.
formData
.
fileList
.
push
(
Object
.
assign
({
...
File
},
{
fileExplain
:
''
}))
},
// 删除附件
removefileList
(
item
)
{
let
index
=
this
.
formData
.
fileList
.
indexOf
(
item
)
if
(
index
!==
-
1
)
{
this
.
formData
.
fileList
.
splice
(
index
,
1
)
}
},
downfileList
(
item
)
{
},
fileSelect
(
item
,
index
)
{
let
fileElem
=
this
.
$refs
[
'fileElem'
+
index
][
0
]
if
(
fileElem
)
{
fileElem
.
click
()
}
},
fileCheck
(
file
)
{
//判断是否小于1M
let
isLtSize
=
file
.
size
<
1024
*
1024
*
15
;
if
(
!
isLtSize
)
{
this
.
$message
.
error
(
'文件大小不能超过15M!'
);
return
false
}
// var fileNames = file.name.split('.')
// var fileType = fileNames[fileNames.length - 1].toLocaleLowerCase()
// var extList = ['doc', 'docx', 'pdf']
// if (!extList.find((item) => item == fileType)) {
// this.$message.error('文件格式错误!')
// return false
// }
return
true
},
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
.
base
.
asyncUpload
(
this
.
uploadHandle
(
files
[
0
],
files
[
0
].
name
)).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
files
[
0
].
name
item
.
downloadUrl
=
'/'
+
files
[
0
].
name
item
.
downloadId
=
data
.
id
}
else
this
.
$message
.
error
(
'上传失败'
)
}).
catch
(()
=>
{
this
.
$message
.
error
(
'上传失败'
)
})
},
inCount
()
{
let
govFunding
=
0
let
unitFunding
=
0
let
selfFunding
=
0
let
otherFunding
=
0
if
(
this
.
formData
.
govFunding
)
govFunding
=
this
.
formData
.
govFunding
if
(
this
.
formData
.
unitFunding
)
unitFunding
=
this
.
formData
.
unitFunding
if
(
this
.
formData
.
selfFunding
)
selfFunding
=
this
.
formData
.
selfFunding
if
(
this
.
formData
.
otherFunding
)
otherFunding
=
this
.
formData
.
otherFunding
this
.
formData
.
totalFunding
=
(
govFunding
+
unitFunding
+
selfFunding
+
otherFunding
).
toFixed
(
2
)
return
this
.
formData
.
totalFunding
},
outNumberChange
()
{
let
vartotalBudget
=
0
this
.
formData
.
budget
.
forEach
(
e
=>
{
if
(
e
.
totalBudget
!=
null
)
vartotalBudget
+=
parseFloat
(
e
.
totalBudget
)
})
this
.
formData
.
totalFunding
=
vartotalBudget
.
toFixed
(
2
)
},
deletefile
(
item
,
index
)
{
this
.
$api
.
base
.
deletefile
({
id
:
item
.
downloadId
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
item
.
fileName
=
''
item
.
downloadUrl
=
''
item
.
downloadId
=
''
if
(
item
.
fileExplain
!=
'学术委员会审查意见'
&&
item
.
fileExplain
!=
'项目组的人员签字'
)
{
item
.
fileExplain
=
''
}
}
}).
catch
(()
=>
{
this
.
$message
.
error
(
'删除失败'
)
})
},
uploadHandle
(
file
,
fileName
)
{
let
formData
=
new
FormData
()
formData
.
append
(
'file'
,
file
)
formData
.
append
(
'fileName'
,
fileName
)
return
formData
},
// 起止日期选择处理
dateChange
(
value
)
{
let
statr
=
this
.
formData
.
startDate
let
end
=
this
.
formData
.
endDate
if
(
!
statr
||
!
end
)
{
return
}
if
(
statr
>
end
)
{
this
.
formData
.
startDate
=
end
this
.
formData
.
endDate
=
statr
}
},
checkApplyMoney
()
{
var
m
=
parseFloat
(
this
.
formData
.
applyMoney
)
if
(
m
!=
this
.
formData
.
govFunding
)
{
alert
(
'项目经费与申请金额不一致!'
)
return
false
}
return
true
},
checkProjName
()
{
if
(
this
.
formData
.
projName
==
""
||
this
.
formData
.
projName
==
null
)
{
alert
(
'项目名称不能为空'
)
return
false
}
else
{
return
true
}
},
},
watch
:
{
'formData.isOverseas'
:
{
handler
(
value
)
{
if
(
value
&&
value
==
'是'
)
this
.
overseasShow
=
true
else
this
.
overseasShow
=
false
},
},
}
}
</
script
>
<
style
scoped
lang=
"less"
>
.d-icon {
margin-right: 10px;
}
</
style
>
src/views/report/project/components/projectEdit.vue
View file @
72364ed3
...
...
@@ -446,7 +446,7 @@
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"projAbstract"
>
<a-textarea
placeholder=
"项目摘要"
v-model=
"formData.projAbstract"
:maxLength=
"400"
style=
"width:
6
0%; height: 160px; margin-top: 12px"
/>
<a-textarea
placeholder=
"项目摘要"
v-model=
"formData.projAbstract"
:maxLength=
"400"
style=
"width:
8
0%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
...
...
@@ -462,8 +462,144 @@
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目人员情况
</span>
</div>
</a-col>
</a-row>
<!-- 项目合作单位 -->
<cooperative-units
:cooperativeUnits
.
sync=
"formData.cooperativeUnits"
/>
<!-- 项目组成员 -->
<proj-group-member
:members
.
sync=
"formData.members"
/>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目可行性研究情况
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
1、项目的意义、必要性
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchContent"
>
<a-textarea
placeholder=
"项目的意义、必要性"
v-model=
"formData.researchContent"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
2、项目现有工作基础和支撑条件
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"memResume"
>
<a-textarea
placeholder=
"项目现有工作基础和支撑条件"
v-model=
"formData.memResume"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
3、与项目相关的国内外技术发展现状(包括知识产权情况)以及本项目主要研究开发内容技术关键(创新点)、可行性评价及项目风险分析与对策
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchProgress"
>
<a-textarea
placeholder=
"与项目相关的国内外技术发展现状"
v-model=
"formData.researchProgress"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目主要实施内容和目标
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目实施目标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"researchContent"
>
<a-textarea
placeholder=
"与项目相关的国内外技术发展现状"
v-model=
"formData.researchContent"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"border-top: 0px"
>
<div
class=
"tb-title"
>
<span>
项目考核指标
</span>
</div>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
主要技术指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"technologyTarget"
>
<a-textarea
placeholder=
"主要技术指标"
v-model=
"formData.technologyTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
主要经济指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"economyTarget"
>
<a-textarea
placeholder=
"主要经济指标"
v-model=
"formData.economyTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
项目实施中形成的示范基地、中试线、生产线及其规模等
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"achievementTarget"
>
<a-textarea
placeholder=
"项目实施中形成的示范基地、中试线、生产线及其规模等"
v-model=
"formData.achievementTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row
type=
"flex"
>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"special-middle"
>
<div
class=
"required"
>
其他应考核的指标
</div>
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"otherTarget"
>
<a-textarea
placeholder=
"其他应考核的指标"
v-model=
"formData.otherTarget"
:maxLength=
"5000"
style=
"width: 80%; height: 160px; margin-top: 12px"
/>
</a-form-model-item>
</a-col>
</a-row>
<!-- 经费预算 -->
<budget-edit
:budget
.
sync=
"formData.budget"
/>
<!-- 附件 -->
<file-edit
:fileList
.
sync=
"formData.fileList"
/>
</a-form-model>
</div>
</
template
>
...
...
@@ -473,9 +609,13 @@ import paraMultiSelect from '@/views/components/common/paraMultiSelect'
import
paraSelect
from
'@/views/components/common/paraSelect'
import
baseSelect
from
'@/views/components/common/baseSelect'
import
ProjGroupMember
from
'@/views/report/project/components/projGroupMember'
import
cooperativeUnits
from
'@/views/report/project/components/cooperativeUnits'
import
budgetEdit
from
'@/views/report/project/components/budgetEdit'
import
fileEdit
from
'@/views/report/project/components/fileEdit'
import
{
isEmptyParams
}
from
"@/views/utils/common"
import
moment
from
'moment'
const
Cooperative
=
{
id
:
null
,
unitName
:
null
,
unitCountry
:
null
,
unitAddress
:
null
,
organizationCode
:
null
,
projectWork
:
null
}
const
Members
=
{
showIndex
:
1
,
name
:
null
,
certId
:
null
,
sex
:
null
,
birthday
:
null
,
age
:
null
,
degree
:
null
,
title
:
null
,
duty
:
null
,
spec
:
null
,
workUnit
:
null
,
projWork
:
null
}
const
Equipments
=
{
name
:
null
,
specificationType
:
null
,
quantity
:
null
,
totalBudget
:
null
,
useFrom
:
null
}
const
File
=
{
fileName
:
''
,
downloadUrl
:
''
,
fileExplain
:
''
,
downloadId
:
''
}
...
...
@@ -483,7 +623,7 @@ const File = { fileName: '', downloadUrl: '', fileExplain: '', downloadId: '' }
export
default
{
name
:
'projectEdit'
,
components
:
{
paraMultiSelect
,
paraSelect
,
baseSelect
,
ProjGroupMember
paraMultiSelect
,
paraSelect
,
baseSelect
,
ProjGroupMember
,
cooperativeUnits
,
budgetEdit
,
fileEdit
},
props
:
{
value
:
{
...
...
@@ -556,7 +696,9 @@ export default {
// 邮箱
email
:
''
,
// 成员
members
:
[{
...
Members
}],
cooperativeUnits
:
[],
// 成员
members
:
[],
// 投资总额
totalFunding
:
null
,
// 卫生健康委资助
...
...
@@ -692,18 +834,14 @@ export default {
}
},
loadList
()
{
if
(
!
this
.
formData
.
members
||
this
.
formData
.
members
.
length
==
0
)
if
(
!!!
this
.
formData
.
cooperativeUnits
||
this
.
formData
.
cooperativeUnits
.
length
==
0
)
this
.
formData
.
cooperativeUnits
=
[{
...
Cooperative
}]
if
(
!!!
this
.
formData
.
members
||
this
.
formData
.
members
.
length
==
0
)
this
.
formData
.
members
=
[{
...
Members
}]
if
(
!
this
.
formData
.
equipments
||
this
.
formData
.
equipments
.
length
==
0
)
if
(
!
!!
this
.
formData
.
equipments
||
this
.
formData
.
equipments
.
length
==
0
)
this
.
formData
.
equipments
=
[{
...
Equipments
}]
if
(
!
this
.
formData
.
fileList
||
!
this
.
formData
.
fileList
.
length
||
this
.
formData
.
fileList
.
length
==
0
)
{
if
(
!
!!!
this
.
formData
.
fileList
||
!
this
.
formData
.
fileList
.
length
||
this
.
formData
.
fileList
.
length
==
0
)
{
this
.
formData
.
fileList
=
[]
//this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '学术委员会审查意见' }))
// this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '项目申报简要信息首页(签字页)', isDelete: false, must: true }))
// this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '伦理审批件', isDelete: false, must: true }))
// this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '科研诚信承诺书', isDelete: false, must: true }))
// this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '查新报告', isDelete: false, must: true }))
// this.formData.fileList.push(Object.assign({ ...File }, { fileExplain: '技术路线', isDelete: false, must: false }))
}
},
addEquipments
()
{
...
...
src/views/report/project/index1.vue
0 → 100644
View file @
72364ed3
<
template
>
<div
class=
"app-content"
>
<div
v-if=
"loadState && !isComplete"
style=
"margin-top:12px"
>
<a-form-model
ref=
"ruleForm"
:model=
"formData"
:rules=
"rules"
class=
"from-table"
>
<a-row>
<a-col
:span=
"24"
>
<div
class=
"tb-title"
>
<span>
补充人员基本信息
</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"required"
>
民族
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"nation"
>
<para-select
v-model=
"formData.nation"
:width=
"150"
:typeId=
"11"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"required"
>
学历
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"education"
>
<para-select
v-model=
"formData.education"
:width=
"150"
:typeId=
"8"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"required"
>
职称
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"title"
>
<para-multi-select
:width=
"150"
v-model=
"formData.title"
:typeId=
"7"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"required"
>
专业
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"spec"
>
<para-multi-select
:width=
"150"
v-model=
"formData.spec"
:typeId=
"42"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"4"
class=
"bg-gray"
>
<div
class=
"required"
>
邮箱
</div>
</a-col>
<a-col
:span=
"20"
>
<a-form-model-item
prop=
"email"
>
<a-input
v-model=
"formData.email"
:maxLength=
"30"
style=
"width:250px;"
/>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col
:span=
"24"
style=
"text-align: center;"
>
<a-button
type=
"primary"
@
click=
"submit"
>
提交
</a-button>
</a-col>
</a-row>
</a-form-model>
</div>
<div
v-if=
"loadState && isComplete"
>
<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-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;"
>
<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=
"(display && 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"
:scroll=
"
{ x: 'max-content' }" rowKey="id" :pagination="false" :loading="loading">
<!-- size="small" bordered -->
<template
slot=
"projName"
slot-scope=
"record"
>
<a
@
click=
"recordClick(record, 'view')"
>
{{
record
.
projName
}}
</a>
</
template
>
<
template
slot=
"state"
slot-scope=
"record"
>
<span>
{{
record
.
projStateName
}}
</span>
</
template
>
<
template
slot=
"option"
slot-scope=
"record"
>
<a-button
type=
"link"
size=
"small"
@
click=
"recordClick(record, 'view')"
>
查看
</a-button>
<a-button
type=
"link"
size=
"small"
v-if=
"((record.projState == -10 || record.projState == 10 || record.projState == 30))"
@
click=
"recordClick(record, 'edit')"
>
修改
</a-button>
<a-popconfirm
title=
"确定要上报吗?"
v-if=
"((record.projState == 10 || record.projState == 30))"
ok-text=
"确定"
cancel-text=
"取消"
@
confirm=
"recordClick(record,'report')"
>
<a-button
type=
"link"
size=
"small"
>
上报
</a-button>
</a-popconfirm>
<a-button
type=
"link"
size=
"small"
v-if=
"record.projState
<
=
10
"
@
click=
"recordClick(record,'delete')"
>
删除
</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} 条`"
/>
</div>
<a-modal
v-model=
"visibleEdit"
v-if=
"visibleEdit"
title=
"项目创建/修改"
width=
"80%"
:footer=
"null"
:dialog-style=
"{ top: '8%' }"
destroyOnClose
>
<project-create
v-model=
"id"
@
closeWindow=
"closeWindow"
></project-create>
</a-modal>
<a-modal
v-model=
"visibleView"
v-if=
"visibleView"
title=
"项目详情"
width=
"80%"
:dialog-style=
"{ top: '8%' }"
:footer=
"null"
destroyOnClose
>
<project-view
v-model=
"id"
@
close=
"() => this.visibleView = false"
></project-view>
</a-modal>
<a-modal
v-model=
"visibleFileView"
title=
"查看"
width=
"1000px"
:dialog-style=
"{ top: '10%' }"
:footer=
"null"
destroyOnClose
>
<preview-file
v-model=
"realurl.downloadUrl"
:fileName=
"realurl.fileName"
></preview-file>
</a-modal>
</div>
</template>
<
script
>
import
{
getType
}
from
'@/views/utils/auth'
import
moment
from
'moment'
import
{
isEmptyParams
,
filterExportExcelData
,
tableColumnsName
,
checkEmail
,
personGender
,
personBirthday
,
checkImageFileType
,
checkDocumentFileType
}
from
"@/views/utils/common"
import
paraMultiSelect
from
'@/views/components/common/paraMultiSelect'
import
paraSelect
from
'@/views/components/common/paraSelect'
import
projectCreate
from
'@/views/report/project/components/projectCreate'
import
projectView
from
'@/views/report/project/components/projectView'
import
previewFile
from
'@/views/components/common/previewFile'
import
axios
from
'axios'
export
default
{
name
:
'reportProject'
,
components
:
{
projectView
,
projectCreate
,
paraMultiSelect
,
paraSelect
,
previewFile
},
data
()
{
return
{
projType
:
getType
()
==
"1"
,
loadState
:
false
,
//判断是否查询信息完整状态
isComplete
:
false
,
formData
:
{
id
:
null
,
nation
:
null
,
title
:
null
,
education
:
null
,
spec
:
null
,
email
:
null
,
sex
:
null
,
birthday
:
null
},
rules
:
{
nation
:
[{
required
:
true
,
message
:
'请选择民族'
,
trigger
:
'change'
}],
title
:
[{
required
:
true
,
message
:
'请选择职称'
,
trigger
:
'change'
}],
education
:
[{
required
:
true
,
message
:
'请选择学历'
,
trigger
:
'change'
}],
spec
:
[{
required
:
true
,
message
:
'请选择专业'
,
trigger
:
'change'
}],
// mobile: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
email
:
[
{
required
:
true
,
message
:
'请输入邮箱'
,
trigger
:
'blur'
},
{
required
:
true
,
validator
:
checkEmail
,
trigger
:
'blur'
}
],
},
size
:
'small'
,
form
:
this
.
$form
.
createForm
(
this
,
{
name
:
'advanced_search'
}),
activekey
:
'1'
,
tabDate
:
[
{
key
:
"1"
,
tab
:
"未上报"
},
{
key
:
"2"
,
tab
:
"返回修改"
},
{
key
:
"3"
,
tab
:
"已上报"
},
{
key
:
"4"
,
tab
:
"所有"
},
],
itemCount
:
[
0
,
0
,
0
,
0
,
0
],
// 表单
searchForm
:
{
projName
:
null
,
projNo
:
null
,
projState
:
1
,
reportYear
:
null
,
projType
:
getType
()
},
tableData
:
[],
columns
:
[
{
title
:
"项目名称"
,
scopedSlots
:
{
customRender
:
'projName'
}
},
{
title
:
'项目编号'
,
dataIndex
:
'projNo'
,
align
:
'center'
},
// { title: '版本号', dataIndex: 'versionNo', align: 'center' },
// { title: '项目类别', dataIndex: 'projClassName', align: 'center' },
{
title
:
'开始时间'
,
dataIndex
:
'startDate'
,
align
:
'center'
},
{
title
:
'结束时间'
,
dataIndex
:
'endDate'
,
align
:
'center'
},
{
title
:
'申报年度'
,
dataIndex
:
'reportYear'
,
align
:
'center'
},
{
title
:
'状态'
,
scopedSlots
:
{
customRender
:
'state'
},
align
:
'center'
},
{
title
:
'操作'
,
scopedSlots
:
{
customRender
:
'option'
},
align
:
'center'
,
fixed
:
'right'
,
width
:
180
,
},
],
pagination
:
{
pageIndex
:
1
,
pageSize
:
this
.
$defaultPageSize
,
total
:
0
,
pageSizeOptions
:
this
.
$defaultPageSizeOptions
,
},
loading
:
false
,
// 弹窗标志
visibleView
:
false
,
visibleEdit
:
false
,
id
:
null
,
isButten
:
false
,
display
:
true
,
description
:
''
,
// downloadUrl: '/downloadFile/202306151700.docx',
// fileName: '项目申报流程.docx',
// downloadUrl: '/downloadFile/ExpertInfo.xlsx',
// fileName: '专家导入模板.xlsx',
// downloadUrl: '/downloadFile/202406261130.pdf',
// fileName: '系统用户手册.pdf',
// downloadUrl: '/downloadFile/1637631492.jpg',
// fileName: '1637631492.jpg',
url1
:
{
downloadUrl
:
'/downloadFile/202406261120.doc'
,
fileName
:
'项目合同书模板.doc'
,
},
url2
:
{
downloadUrl
:
'/downloadFile/202407050900.doc'
,
fileName
:
'项目合同书模板.doc'
,
},
realurl
:
null
,
visibleFileView
:
false
,
projectKPIView
:
false
,
}
},
created
()
{
this
.
getUserState
()
if
(
getType
()
==
1
)
this
.
realurl
=
this
.
url1
else
this
.
realurl
=
this
.
url2
},
methods
:
{
getUserState
()
{
this
.
isComplete
=
this
.
$store
.
state
.
app
.
isComplete
if
(
this
.
isComplete
)
{
this
.
loadState
=
true
this
.
getYear
()
}
else
{
this
.
getAppPersonInfo
()
}
},
getAppPersonInfo
()
{
this
.
$api
.
person
.
getAppPersonInfo
().
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
formData
=
data
.
person
this
.
loadState
=
true
this
.
isComplete
=
data
.
isComplete
this
.
$store
.
commit
(
'app/setComplete'
,
data
.
isComplete
)
this
.
getYear
()
}
}).
catch
(()
=>
{
})
},
getYear
()
{
this
.
$api
.
batch
.
getCurrentYearBatch
({
type
:
1
,
projType
:
getType
()
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
isButten
=
data
.
disabled
this
.
description
=
data
.
description
this
.
searchForm
.
reportYear
=
data
.
year
this
.
getListByPage
()
}
}).
catch
(()
=>
{
})
},
getListByPage
()
{
this
.
getCount
()
this
.
loading
=
true
let
pars
=
isEmptyParams
(
this
.
searchForm
)
let
par
=
{
...
pars
,
pageIndex
:
this
.
pagination
.
pageIndex
,
pageSize
:
this
.
pagination
.
pageSize
}
this
.
$api
.
project
.
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
.
startDate
)
{
e
.
startDate
=
moment
(
e
.
startDate
).
format
(
'YYYY-MM-DD'
)
e
.
endDate
=
moment
(
e
.
endDate
).
format
(
'YYYY-MM-DD'
)
}
})
}
this
.
loading
=
false
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
getCount
()
{
this
.
$api
.
project
.
getCount
({
reportYear
:
this
.
searchForm
.
reportYear
,
projType
:
getType
()
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
itemCount
=
[
data
.
count1
,
data
.
count2
,
data
.
count3
,
data
.
count4
,
data
.
count5
]
}
}).
catch
(()
=>
{
})
},
search
()
{
this
.
pagination
.
pageIndex
=
1
this
.
getListByPage
()
},
reset
()
{
this
.
searchForm
.
projName
=
null
this
.
searchForm
.
projNo
=
null
this
.
pagination
.
pageIndex
=
1
this
.
getListByPage
()
},
change
()
{
this
.
getListByPage
()
},
showSizeChange
(
current
,
pageSize
)
{
this
.
pagination
.
pageIndex
=
current
this
.
pagination
.
pageSize
=
pageSize
this
.
getListByPage
()
},
submit
()
{
this
.
$refs
.
ruleForm
.
validate
(
valid
=>
{
if
(
valid
)
{
let
pars
=
isEmptyParams
(
this
.
formData
)
let
par
=
{
...
pars
}
this
.
$api
.
person
.
updatePerson
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
$message
.
success
(
'提交成功!'
)
this
.
$store
.
commit
(
'app/setComplete'
,
true
)
this
.
isComplete
=
true
}
}).
catch
(()
=>
{
})
}
else
{
return
false
}
});
},
createProject
()
{
this
.
visibleEdit
=
true
//this.$store.commit('app/addCard', { title: '项目创建', key: '1299', code: 'projectCreate', keepAlive: 1, router: '/project/create', closable: true })
},
closeWindow
(
value
)
{
if
(
value
===
'submit'
)
{
this
.
visibleEdit
=
false
this
.
getListByPage
()
}
else
if
(
value
===
'save'
)
{
this
.
getListByPage
()
}
else
if
(
value
===
'error'
)
{
this
.
visibleEdit
=
false
}
},
onLoad
(
value
)
{
this
.
loading
=
value
},
recordClick
(
record
,
type
)
{
if
(
type
===
'view'
)
{
this
.
id
=
record
.
id
this
.
visibleView
=
true
}
else
if
(
type
===
'edit'
)
{
this
.
id
=
record
.
id
this
.
visibleEdit
=
true
}
else
if
(
type
===
'delete'
)
{
let
self
=
this
this
.
$confirm
({
title
:
''
,
content
:
'确定要删除该项目?'
,
okText
:
'确定'
,
okType
:
'danger'
,
cancelText
:
'取消'
,
onOk
()
{
self
.
loading
=
true
let
par
=
{
id
:
record
.
id
}
self
.
$api
.
project
.
delete
(
par
).
then
(({
code
,
data
})
=>
{
if
(
data
)
{
self
.
$message
.
success
(
'删除成功!'
)
self
.
getListByPage
()
}
self
.
loading
=
false
}).
catch
(()
=>
{
self
.
loading
=
false
})
},
onCancel
()
{
},
})
}
else
if
(
type
===
'report'
)
{
this
.
loading
=
true
this
.
$api
.
project
.
report
({
auditObjectId
:
record
.
id
,
auditType
:
1
}).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
this
.
$message
.
success
(
'上报成功!'
)
this
.
getListByPage
()
}
this
.
loading
=
false
}).
catch
(()
=>
{
this
.
loading
=
false
})
}
},
callback
(
key
)
{
if
(
key
==
'1'
)
this
.
display
=
true
else
this
.
display
=
false
this
.
searchForm
.
projState
=
key
this
.
getListByPage
()
},
exportData
()
{
let
pars
=
isEmptyParams
(
this
.
searchForm
)
let
par
=
{
...
pars
,
pageIndex
:
-
1
,
pageSize
:
-
1
}
this
.
$api
.
project
.
getListByPage
(
par
).
then
(({
data
=
{}
})
=>
{
if
(
data
)
{
const
{
dataList
=
[],
total
=
0
}
=
data
this
.
$ToDoExcel
(
`项目列表`
,
tableColumnsName
(
this
.
columns
),
filterExportExcelData
(
this
.
columns
,
dataList
))
}
}).
catch
(()
=>
{
})
},
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
()
})
},
FileView
()
{
if
(
checkImageFileType
(
this
.
realurl
.
fileName
))
{
//文件为图片
this
.
$viewerApi
({
images
:
[
this
.
realurl
.
downloadUrl
]
})
}
else
{
if
(
checkDocumentFileType
(
this
.
realurl
.
fileName
))
this
.
visibleFileView
=
true
}
},
projectKPI
()
{
this
.
projectKPIView
=
true
}
}
}
</
script
>
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