Commit e87de6fa authored by wangxl's avatar wangxl

33333

parent f18fefd0
......@@ -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 } },
......
......@@ -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",
......
......@@ -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 {
......
......@@ -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>
......
<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 :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-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-input placeholder="项目编号" v-model="searchForm.projNo" :maxLength="100" style="width: 180px" />
</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-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-col>
</a-row>
</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(() => { })
},
searchList () {
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
<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>
<template>
<div class="assignment-edit" style="height: 70vh;overflow: auto;">
<a-form-model ref="form" :model="formData" :rules="rules" class="from-table">
<div>
<a-form-model ref="form" :model="formData" :rules="rules" style="border-top: 0px" class="from-table font-line-space">
<div v-if="stepsArray[0].showStatus">
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>研究项目</span>
<a-col :span="24" style="border-top: 0px;text-align: center;">
<div class="main-title">
<span>项目基本情况</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
项目名称
</a-col>
<a-col :span="22" v-if="formData.projName != null">
{{formData.projName}}
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>第一承担单位</span>
<span>申请人信息</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
名称
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>姓名</div>
</div>
</a-col>
<a-col :span="10">
{{formData.appUnitName}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.appPersonName }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
联系电话
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>性别</div>
</div>
</a-col>
<a-col :span="10">
{{formData.linkTel}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.sex }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
地址
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>出生日期</div>
</div>
</a-col>
<a-col :span="10">
{{formData.linkAddress}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
{{ moment(formData.birthday).format('YYYY-MM-DD') }}
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
邮政编码
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>民族</div>
</div>
</a-col>
<a-col :span="10">
{{formData.postcode}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.nationName }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
主管部门
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>学位</div>
</div>
</a-col>
<a-col :span="22">
{{formData.authority}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.degreeName }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>项目负责人</span>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>职称</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
{{ formData.titleName}}
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
姓名
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电话</div>
</div>
</a-col>
<a-col :span="10">
{{formData.appPersonName}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.mobile }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
性别
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电子邮箱</div>
</div>
</a-col>
<a-col :span="10">
{{formData.sex}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.email }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
出生年
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">每年工作时间(月)</div>
</div>
</a-col>
<a-col :span="10">
{{formData.birthYear}}
<a-col :span="5">
<div class="special-middle">
<div>
<a-form-model-item prop="jobTime">
<a-input-number v-model="formData.jobTime" :min="0" :max="12" :step="1" style="width: 100px" />
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
联系电话
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">个人通讯地址</div>
</div>
</a-col>
<a-col :span="10">
{{formData.mobile}}
<a-col :span="21">
<div class="special-middle">
<div>
<a-form-model-item prop="address">
<a-input v-model="formData.address" placeholder="个人通讯地址(限50字)" :maxLength="50" style="width: 80%;" />
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
学位
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>工作单位</div>
</div>
</a-col>
<a-col :span="10">
{{formData.degreeName}}
<a-col :span="21">
<div class="special-middle">
<div>
<a-form-model-item>
<div>{{ formData.appUnitName }}</div>
</a-form-model-item>
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
职称
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">主要研究领域</div>
</div>
</a-col>
<a-col :span="10">
{{formData.titleName}}
<a-col :span="21">
<div class="special-middle">
<div>
<a-form-model-item prop="mainResearchAreas">
<a-textarea placeholder="主要研究领域(限500字)" v-model="formData.mainResearchAreas" :maxLength="500" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>项目组</span>
<span>申请单位信息</span>
</div>
</a-col>
</a-row>
<a-row>
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">实施目标和主要内容</div>
<div>单位名称</div>
</div>
</a-col>
<a-col :span="20">
<a-form-model-item prop="testContent">
<a-textarea placeholder="实施目标和主要内容" v-model="formData.testContent" :maxLength="400" style="width: 80%;height: 160px;margin-top: 12px;" />
<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>
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="required special-middle">预期成果形式</div>
<div class="special-middle">
<div class="required">联系人</div>
</div>
</a-col>
<a-col :span="20">
<a-form-model-item prop="target">
<div style="display: flex;flex-wrap: wrap;line-height: 2.5;">
<div v-for="(item, index) in formData.target" :key="index" style="margin-right: 20px;">
<a-checkbox :checked="item.checked" :name="item.targetId" @change="onTargetChange(item)">{{item.targetName}}</a-checkbox>
<a-input-number size="small" :min="0" :max="1000" v-model="item.resultCount" :disabled="!item.checked" />
<a-col :span="8">
<div class="special-middle">
<div>
<a-form-model-item prop="unitLinkName">
<a-input placeholder="联系人(限20字)" v-model="formData.unitLinkName" :maxLength="20" style="width:80%" />
</a-form-model-item>
</div>
</div>
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="4" class="bg-gray">
<div class="required">总经费</div>
<div class="special-middle">
<div class="required">电话</div>
</div>
</a-col>
<a-col :span="20">
<a-form-model-item prop="budgetCount">
<a-input-number :min="0" :max="10000000" v-model="formData.budgetCount" style="width: 10%" /> (万元)
<a-col :span="8">
<div class="special-middle">
<div>
<a-form-model-item prop="unitLinkMobile">
<a-input placeholder="电话(限20字)" v-model="formData.unitLinkMobile" :maxLength="20" style="width:80%" />
</a-form-model-item>
</div>
</div>
</a-col>
<!-- <a-col :span="4" class="bg-gray">
<div class="required">市卫计委资助</div>
</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="budgetGovCount">
<a-input-number :min="0" :max="10000000" v-model="formData.budgetGovCount" style="width: 30%" /> (万元)
<div class="special-middle">
<div>
<a-form-model-item prop="unitLinkEmail">
<a-input placeholder="电子信箱(限50字)" v-model="formData.unitLinkEmail" :maxLength="50" style="width:80%" />
</a-form-model-item>
</a-col> -->
</a-row>
<a-row>
</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="required">起止日期</div>
<div class="special-middle">
<div class="required">传真</div>
</div>
</a-col>
<a-col :span="20">
<a-form-model-item prop="startDate" style="flex-basis: 30%;">
<a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="formData.startDate" style="width: 100%" @change="dateChange(formData)" />
</a-form-model-item>
<span style="margin: -12px 10px 0 10px;">~</span>
<a-form-model-item prop="endDate" style="flex-basis: 30%;">
<a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="formData.endDate" style="width: 100%" @change="dateChange(formData)" />
<a-col :span="8">
<div class="special-middle">
<div>
<a-form-model-item prop="unitLinkFax">
<a-input placeholder="传真(限20字)" v-model="formData.unitLinkFax" :maxLength="20" style="width:80%" />
</a-form-model-item>
</div>
</div>
</a-col>
</a-row>
<!-- 项目合作单位 -->
<!-- <cooperative-units-edit :cooperativeUnits.sync="formData.cooperativeUnits" /> -->
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>一、项目要实现的目标和主要研发内容</span>
<span>项目基本情况</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
(一)项目要实现的目标
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
序号
</a-col>
<a-col :span="20" class="bg-gray">
内容
<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="2" class="bg-gray">
操作
<a-col :span="20">
<a-form-model-item prop="projName">
<a-input placeholder="项目名称(限100字)" v-model="formData.projName" :maxLength="100" style="width: 80%" @change="projNameChange" />
</a-form-model-item>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont1" :key="'cont1' + index">
<a-col :span="2">
({{index + 1}})
<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="'cont1.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-input v-model="item.contentInfo" :maxLength="200" style="width: 90%;" />
<a-form-model-item prop="knowledgeId">
<cascader-select v-model="formData.knowledgeId" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont1')">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont1')">
<a-icon type="plus" /> 添加
</a-button>
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">附注说明</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
(二)主要研发内容
<a-col :span="20">
<a-form-model-item prop="remark">
<a-input placeholder="附注说明(限300字)" v-model="formData.remark" :maxLength="300" style="width: 80%" />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
序号
<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" @change="startDateChange" style="width: 180px" />
</a-form-model-item>
</a-col>
<a-col :span="20" class="bg-gray">
内容
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">项目结束时间</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
操作
<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" @change="endDateChange" style="width: 180px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont2" :key="'cont2' + index">
<a-col :span="2">
({{index + 1}})
<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="'cont2.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-input v-model="item.contentInfo" :maxLength="200" style="width: 90%;" />
<a-form-model-item prop="projAbstract">
<a-textarea placeholder="项目摘要(限400字)" v-model="formData.projAbstract" :maxLength="400" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont2')">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</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="关键词(限100字)" v-model="formData.projKeywords" :maxLength="100" style="width: 80%" />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont2')">
<a-icon type="plus" /> 添加
</a-button>
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>申请书正文</span>
</div>
</a-col>
</a-row>
<a-row>
<a-row type="flex">
<a-col :span="24" class="bg-gray">
<div class="special-middle" style="font-weight: bold;text-align: center;">
<a :href="'/downloadFile/textTemplate.docx'" download="申请书正文.docx">
<a-icon type="download"></a-icon>&nbsp;<span style="color:green;text-decoration:underline;font-size: 16px;">正文模板下载</span>
</a>
<span style="color: red;margin-left: 42px;">注:正文部分需要下载模版,填写完成后上传到系统中,格式 .doc,.docx,.pdf。</span>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="24">
<div class="tb-title">
<span>二、项目的考核指标</span>
<div style="min-height:34px;line-height: 40px;text-align: center;">
<up-load :isUpload="true" :file.sync="formData" :format="['doc', 'docx','pdf']" message="请上传申请书正文" />
</div>
</a-col>
</a-row>
<a-row>
<a-row type="flex">
<a-col :span="24">
(一)主要技术及学术指标 (形成的专利、新技术、新产品、新装置、论文专著、软件等的数量、指标及其水平等)
<!-- <document-view :fileUrl="formData.downloadUrl" :fileName="formData.fileName" :imageArray="[formData.downloadUrl]"></document-view>
<preview-file v-model="formData.downloadUrl" :fileName="formData.fileName"></preview-file> -->
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
序号
</a-col>
<a-col :span="20" class="bg-gray">
内容
</a-col>
<a-col :span="2" class="bg-gray">
操作
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>项目主要实施内容和目标</span>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont3" :key="'cont3' + index">
<a-col :span="2">
({{index + 1}})
<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="'cont3.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-input v-model="item.contentInfo" :maxLength="200" style="width: 90%;" />
<a-form-model-item prop="researchContent">
<a-textarea placeholder="项目实施目标(限5000字)" v-model="formData.researchContent" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont3')">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont3')">
<a-icon type="plus" /> 添加
</a-button>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
(二)人才培养
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>项目考核指标</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
序号
</a-col>
<a-col :span="20" class="bg-gray">
内容
<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="2" class="bg-gray">
操作
<a-col :span="20">
<a-form-model-item prop="technologyTarget">
<a-textarea placeholder="主要技术指标(限5000字)" v-model="formData.technologyTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont4" :key="'cont4' + index">
<a-col :span="2">
({{index + 1}})
<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="'cont4.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-input v-model="item.contentInfo" :maxLength="200" style="width: 90%;" />
<a-form-model-item prop="economyTarget">
<a-textarea placeholder="主要经济指标(限5000字)" v-model="formData.economyTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont4')">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont4')">
<a-icon type="plus" /> 添加
</a-button>
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">项目实施中形成的示范基地、中试线、生产线及其规模等</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
(三)其他应考核的指标
<a-col :span="20">
<a-form-model-item prop="achievementTarget">
<a-textarea placeholder="项目实施中形成的示范基地、中试线、生产线及其规模等(限5000字)" v-model="formData.achievementTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
序号
</a-col>
<a-col :span="20" class="bg-gray">
内容
<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="2" class="bg-gray">
操作
<a-col :span="20">
<a-form-model-item prop="technologyReportsTarget">
<a-textarea placeholder="科技报告考核指标(限5000字)" v-model="formData.technologyReportsTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont5" :key="'cont5' + index">
<a-col :span="2">
({{index + 1}})
<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="'cont5.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-input v-model="item.contentInfo" :maxLength="200" style="width: 90%;" />
<a-form-model-item prop="otherTarget">
<a-textarea placeholder="其他应考核的指标(限5000字)" v-model="formData.otherTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont5')">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</a-col>
</a-row>
<a-row>
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont5')">
<a-icon type="plus" /> 添加
</a-button>
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
</div>
<div v-if="stepsArray[1].showStatus">
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>三、项目阶段实施内容及目标</span>
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>项目人员情况</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
阶段
</a-col>
<a-col :span="12" class="bg-gray">
阶段实施内容及阶段目标
</a-col>
<a-col :span="8" class="bg-gray">
起止日期
</a-col>
<a-col :span="2" class="bg-gray">
操作
<!-- 项目组成员 -->
<project-member-edit :dataList.sync="formData.members" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in formData.cont6" :key="'cont6' + index">
<a-col :span="2">
<div class="special-middle">({{index + 1}})</div>
</a-col>
<a-col :span="12">
<a-form-model-item :prop="'cont6.' + index + '.contentInfo'" :rules="{ required: true, message: '内容不能为空' }">
<a-textarea v-model="item.contentInfo" placeholder="项目阶段实施内容及目标" :maxLength="500" style="width: 90%;height: 140px;margin-top: 12px;" />
</a-form-model-item>
</a-col>
<a-col :span="8">
<div class="flex-layout special-middle">
<a-form-model-item :prop="'cont6.' + index + '.startTime'" :rules="{ required: true, message: '内容不能为空' }" style="flex-basis: 45%;">
<a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.startTime" style="width: 100%" @change="dateChange(item)" />
</a-form-model-item>
<span style="margin: -12px 10px 0 10px;">~</span>
<a-form-model-item :prop="'cont6.' + index + '.endTime'" :rules="{ required: true, message: '内容不能为空' }" style="flex-basis: 45%;">
<a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.endTime" style="width: 100%" @change="dateChange(item)" />
</a-form-model-item>
<!-- 项目主要参与单位及分工 -->
<participate-units-edit :participateUnits.sync="formData.participateUnits" />
</div>
<div v-if="stepsArray[2].showStatus">
<!-- 经费预算 -->
<budget-edit :budget.sync="formData.budget" @save="budgetSave" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
&nbsp;
</div>
</a-col>
<a-col :span="2">
</a-row>
<!-- 分年度用款计划 -->
<fund-plan-edit :fundPlan.sync="formData.fundPlan" @save="planSave" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeCont(item, 'cont6')" class="special-middle">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
&nbsp;
</div>
</a-col>
</a-row>
<a-row>
<!-- 设备费-购置设备预算明细表 -->
<device-edit :deviceList.sync="formData.deviceList" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<a-button type="dashed" style="width: 50%" @click="addCont('cont6')">
<a-icon type="plus" /> 添加
</a-button>
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
<proj-group-member :members.sync="formData.members" />
<budget-edit :budget.sync="formData.budget" />
<a-row style="margin-top: 20px;text-align:center;">
<a-button style="margin-right: 50px;" @click="save">保存</a-button>
<a-button type="primary" @click="submit">完成填写</a-button>
<!-- 设备费-试制设备预算明细表 -->
<manufacture-edit :manufactureList.sync:="formData.manufactureList" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
<!-- 项目承担单位研究资金支出预算明细表 -->
<unit-payment-edit :unitPayment.sync="formData.unitPayment" />
</div>
<div v-if="stepsArray[3].showStatus">
<!-- 项目安排及阶段目标 -->
<proj-stage-goals-edit :stageGoals.sync="formData.stageGoals" />
<!-- 项目课题设置 -->
<project-sub-edit :projectSubList.sync="formData.projectSubList" />
</div>
<div v-if="stepsArray[4].showStatus">
<!-- 项目绩效指标 -->
<project-kpi-edit :projectKPI.sync="formData.projectKPI" />
</div>
<div v-if="stepsArray[5].showStatus">
<!-- 附件 -->
<file-edit :fileList.sync="formData.fileList" />
</div>
</a-form-model>
</div>
</template>
<script>
import ProjGroupMember from "@/views/report/project/components/projectMemberEdit"
import BudgetEdit from '@/views/report/project/components/budgetEdit'
import fundEdit from '@/views/report/project/components/fundEdit'
import documentView from '@/views/components/common/documentView'
import previewFile from '@/views/components/common/previewFile'
import { getType } from '@/views/utils/auth'
import projectMemberEdit from '@/views/report/project/components/projectMemberEdit'
import cooperativeUnitsEdit from '@/views/report/project/components/cooperativeUnitsEdit'
import participateUnitsEdit from '@/views/report/project/components/participateUnitsEdit'
import deviceEdit from '@/views/report/project/components/deviceEdit'
import projStageGoalsEdit from '@/views/report/project/components/projStageGoalsEdit'
import budgetEdit from '@/views/report/project/components/budgetEdit'
import fundPlanEdit from '@/views/report/project/components/fundPlanEdit'
import projectKpiEdit from '@/views/report/project/components/projectKpiEdit'
import manufactureEdit from '@/views/report/project/components/manufactureEdit'
import unitPaymentEdit from '@/views/report/project/components/unitPaymentEdit'
import projectSubEdit from '@/views/report/project/components/projectSubEdit'
import fileEdit from '@/views/report/project/components/fileEdit'
import { isEmptyParams } from "@/views/utils/common"
import moment from 'moment'
const ParticipateUnit = { id: null, unitName: null, unitCountry: null, unitAddress: null, organizationCode: null, projectWork: null }
const ProjResearch = { projNo: null, projName: null, approveUnit: null, leader: null, startDate: null, endDate: null, funds: null }
const ManagementRule = { policyName: null, releaseDate: null, documentNumber: null, validityPeriod: null, mainContent: null, fileId: null, downloadId: null, fileName: null, downloadUrl: null }
const StageGoals = { startTime: null, endTime: null, target: null }
const ProjectSub = { projName: null, undertakingUnit: null, address: null, director: null, totalBudget: null, govBudget: null, selfBudget: null, cooperativeUnits: null, fileId: null, downloadId: null, fileName: null, downloadUrl: null }
const Cooperative = { id: null, unitName: null }
const File = { fileName: '', downloadUrl: '', fileExplain: '', downloadId: '' }
const Equipment = { id: "", objectId: "", name: "", functionTarget: "", specificationType: "", quantity: 1, totalBudget: 0.0, useFrom: "", buyUnit: "", storageLocation: "", equipmentType: "", manufacturer: "", sharedScope: "", unitPrice: 0.0, };
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 cascaderSelect from '@/views/components/common/cascaderSelect'
export default {
name: "TestEdit",
name: 'projectEdit',
components: {
fundEdit, projectMemberEdit, cooperativeUnitsEdit, budgetEdit, fundPlanEdit, projectKpiEdit, fileEdit, previewFile, documentView, cascaderSelect, deviceEdit, projStageGoalsEdit, manufactureEdit, unitPaymentEdit, projectSubEdit, participateUnitsEdit
},
props: {
value: {
type: String,
default: () => {
return null
}
},
stepsArray: {
type: Array,
default () {
return []
}
},
completeStatus: {
type: String,
default () {
return "0,0,0,0,0,0"
}
},
},
created () {
this.getProject()
},
data () {
return {
overseasShow: false,
formData: {
id: '',
projId: '',
// 实施目标和主要内容
testContent: '',
// 总经费
budgetCount: 0,
// 市卫计委资助
budgetGovCount: 0,
// 起止日期
startDate: null,
endDate: null,
// 申报人
id: null,
appPersonName: null,
sex: null,
birthYear: null,
mobile: null,
birthday: null,
nationName: null,
degreeName: null,
titleName: null,
// 依托单位
mobile: null,
email: 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()],
// 成员
unitLinkName: null,
unitLinkMobile: null,
unitLinkEmail: null,
unitLinkFax: null,
projName: null,
knowledgeId: null,
startDate: null,
endDate: null,
jobTime: null,
mainResearchAreas: null,
address: null,
subjectScope: null,
projClass: null,
projAbstract: null,
projKeywords: null,
totalFunding: null,
govFunding: null,
unitFunding: null,
selfFunding: null,
researchContent: null,
technologyTarget: null,
economyTarget: null,
achievementTarget: null,
otherTarget: null,
remark: null,
yearTarget: null,
year1Goal: null,
year2Goal: null,
year3Goal: null,
projectKPI: projectKPI,
cooperativeUnits: [],
participateUnits: [],
members: [],
// 预期成果形式
target: [],
// 经费
budget: [],
fundPlan: [],
deviceList: [],
manufactureList: [],
unitPayment: [],
stageGoals: [],
projectSubList: [],
fileList: [],
auditList: [],
managerDept: "",
},
rules: {
testContent: { required: true, message: '请填写实施目标和主要内容', trigger: 'blur' },
target: { required: true, message: '请选择预期成果形式' },
budgetCount: { required: true, message: '请填写总经费', trigger: 'blur' },
budgetGovCount: { required: true, message: '请填写市卫计委资助', trigger: 'blur' },
startDate: { required: true, message: '请选择起始日期', trigger: 'change' },
endDate: { required: true, message: '请选择结束日期', trigger: 'change' },
}
}
jobTime: [{ required: true, message: '请填写每年工作时间(月)', trigger: 'blur' },],
address: [{ required: true, message: '请填写个人通讯地址', trigger: 'blur' },],
mainResearchAreas: [{ required: true, message: '请填写主要研究领域', trigger: 'blur' },],
unitLinkName: [{ required: true, message: '请填写单位联系人', trigger: 'blur' },],
unitLinkMobile: [{ required: true, message: '请填写联系人电话', trigger: 'blur' },],
unitLinkEmail: [{ required: true, message: '请填写电子邮箱', trigger: 'blur' },],
unitLinkFax: [{ required: true, message: '请填写传真', trigger: 'blur' },],
projName: [{ required: true, message: '请填写项目名称', trigger: 'blur' },],
knowledgeId: { required: true, message: '请选择学科代码', trigger: 'change' },
// subjectScope: [{ required: true, message: '请填写选题范围', trigger: 'blur' },],
// projClass: [{ required: true, message: '请填写项目类别', trigger: 'blur' },],
remark: [{ required: true, message: '请填写附注说明', trigger: 'blur' },],
startDate: { required: true, message: '请选择项日开始时间', trigger: 'change' },
endDate: { required: true, message: '请选择项目结束时间', trigger: 'change' },
// totalFunding: [{ required: true, message: '请填写项目总经费', trigger: 'blur' },],
// govFunding: [{ required: true, message: '请填写申请科技经费', trigger: 'blur' },],
projAbstract: [{ required: true, message: '请填写项目摘要', trigger: 'blur' },],
projKeywords: [{ required: true, message: '请填写关键词', trigger: 'blur' },],
researchContent: { required: true, message: '请填写项目实施目标', trigger: 'blur' },
technologyTarget: { required: true, message: '请填写主要技术指标', trigger: 'blur' },
economyTarget: { required: true, message: '请填写主要经济指标', trigger: 'blur' },
achievementTarget: [{ required: true, message: '请填写项目实施中形成的示范基地、中试线、生产线及其规模等', trigger: 'blur' },],
technologyReportsTarget: { required: true, message: '请填写科技报告考核指标', trigger: 'blur' },
otherTarget: { required: true, message: '请填写其他应考核的指标', trigger: 'blur' },
downloadUrl: [{ required: true, message: '请填写关键词', trigger: 'blur' },],
},
props: {
value: {
type: String,
default: () => {
return null
}
},
computed: {
},
components: {
ProjGroupMember,BudgetEdit
},
created () {
this.getTestInfoByProjId()
mounted () {
},
methods: {
getTestInfoByProjId () {
let pars = { projId: this.value }
this.$api.taskReport.getTestInfoByProjId(pars).then(({ data = {} }) => {
if (data) {
this.formData = data
if (this.formData.cont1 === null) {
this.formData.cont1 = [cont1()];
this.formData.cont2 = [cont2()];
this.formData.cont3 = [cont3()];
this.formData.cont4 = [cont4()];
this.formData.cont5 = [cont5()];
this.formData.cont6 = [cont6()];
}
}
}).catch(() => {
})
},
save () {
let state = this.formData.testState
if (state == null)
this.formData.testState = -20
let pars = isEmptyParams(this.formData)
moment,
save (step) {
if (this.checkInfo(step)) {
var obj = this.getObj(step)
obj.step = step
this.$emit('load', true)
let pars = isEmptyParams(obj)
let par = { ...pars }
this.$api.taskReport.save(par).then(({ data = {} }) => {
this.$api.project.saveByStep(par).then(({ data = {} }) => {
if (data) {
this.formData.id = data
this.$message.success('保存成功!')
this.$emit('close', 'save')
}
this.$emit('load', false)
}).catch(() => {
this.$emit('load', false)
})
}
},
submit () {
submit (step, next) {
if (this.checkInfo(step)) {
this.$refs.form.validate(valid => {
if (valid && this.checkApplyMoney()) {
let state = this.formData.testState
if (state != 30)
this.formData.testState = -10
let pars = isEmptyParams(this.formData)
if (valid) {
this.$emit('load', true)
var arr = this.completeStatus.split(',');
arr[step] = "1";
this.formData.completeStatus = arr.toString()
var obj = this.getObj(step)
obj.step = step
let state = obj.projState
if (state != 30 && step == 5)
obj.projState = 10
let pars = isEmptyParams(obj)
let par = { ...pars }
this.$api.taskReport.save(par).then(({ data = {} }) => {
this.$api.project.saveByStep(par).then(({ data = {} }) => {
if (data) {
this.formData.id = data
this.$message.success('填写完成!')
this.$emit('close', 'edit')
if (next) {
this.$emit('close', 'save')
this.$emit('onStepChange', { step: step + 1, state: arr.toString() })
} else {
this.$message.success('成功!')
this.$emit('close', 'submit')
}
}
this.$emit('load', false)
}).catch(() => {
this.$emit('load', false)
})
} else {
this.$message.success('任务书信息未填写完全,请检查!')
this.$message.error('信息未填写完全!')
return false
}
})
}
},
checkApplyMoney () {
if (this.formData.budgetCount != null && this.formData.budgetCount != this.formData.budget[0].totalBudget) {
alert('项目经费与总经费不一致!')
return false
getProject () {
this.$emit('load', true)
if (!!this.value) {
this.$api.project.getProjectInfoById({ id: this.value }).then(({ data = {} }) => {
if (data) {
this.formData = data
this.$emit('onStepChange', { step: 0, state: data.completeStatus })
this.loadList()
} else
this.$emit('close', 'error')
this.$emit('load', false)
}).catch(() => {
this.$emit('close', 'error')
this.$emit('load', false)
})
} else {
return true
this.$api.project.getNewProject({ projType: getType() }).then(({ data = {} }) => {
if (data) {
this.formData = data
this.$emit('onStepChange', { step: 0, state: data.completeStatus })
this.loadList()
} else
this.$emit('close', 'error')
this.$emit('load', false)
}).catch(() => {
this.$emit('close', 'error')
this.$emit('load', false)
})
}
},
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"
}
}
this.stepsArray[step].status = "process"
}
},
loadList () {
if (!!!this.formData.cooperativeUnits || this.formData.cooperativeUnits.length == 0)
this.formData.cooperativeUnits = []
if (!!!this.formData.participateUnits || this.formData.participateUnits.length == 0)
this.formData.participateUnits = [] //{ ...Cooperative }, { ...Cooperative }
if (!!!this.formData.members || this.formData.members.length == 0)
this.formData.members = []
if (!!!this.formData.deviceList || this.formData.deviceList.length == 0)
this.formData.deviceList = []
if (!!!this.formData.manufactureList || this.formData.manufactureList.length == 0)
this.formData.manufactureList = []
if (!!!this.formData.unitPayment || this.formData.unitPayment.length == 0)
this.formData.unitPayment = []
if (!!!this.formData.stageGoals || this.formData.stageGoals.length == 0)
this.formData.stageGoals = [{ ...StageGoals }, { ...StageGoals }, { ...StageGoals }]
if (!!!this.formData.projectSubList || this.formData.projectSubList.length == 0)
this.formData.projectSubList = []
if (!!!this.formData.fileList || !this.formData.fileList.length || this.formData.fileList.length == 0) {
this.formData.fileList = []
}
},
processKpiFunds () {
if (!!this.formData.budget && this.formData.budget.length > 0) {
this.formData.projectKPI.yearTotal = this.formData.budget[0].totalBudget
this.formData.projectKPI.yearApply = this.formData.budget[0].applyFunds
this.formData.projectKPI.yearSelf = this.formData.budget[0].selfFunds
}
},
processProjectYearTarget () {
this.formData.yearTarget = this.formData.projectKPI.yearTarget
this.formData.year1Goal = this.formData.projectKPI.year1Goal
this.formData.year2Goal = this.formData.projectKPI.year2Goal
this.formData.year3Goal = this.formData.projectKPI.year3Goal
this.formData.projectKPI.kpiList = this.formData.projectKPI.threeLevel
this.formData.managerDept = this.formData.projectKPI.managerDept
this.formData.projAttribute = this.formData.projectKPI.projAttribute
},
getObj (step) {
var obj = null
switch (step) {
case 0: {
obj = {
id: null, reportYear: null, batch: null, projState: null, appPersonId: null, appUnitId: null, projType: null,
jobTime: null, address: null, mainResearchAreas: null,
unitLinkName: null, unitLinkMobile: null, unitLinkEmail: null, unitLinkFax: null,
projName: null, knowledgeId: null, startDate: null, endDate: null,
remark: null, projClass: null, subjectScope: null, projAbstract: null, projKeywords: null,
totalFunding: null, govFunding: null, unitFunding: null, selfFunding: null,
researchContent: null, technologyTarget: null, economyTarget: null, achievementTarget: null, technologyReportsTarget: null, otherTarget: null,
fileId: null, downloadId: null, completeStatus: null, step: null
}
this.formData.projectKPI.appUnitName = this.formData.appUnitName
break;
}
case 1:
obj = { id: null, members: [], participateUnits: [], completeStatus: null, step: null }
break;
case 2:
this.processKpiFunds()
obj = { id: null, totalFunding: null, govFunding: null, unitFunding: null, selfFunding: null, budget: [], fundPlan: [], deviceList: [], manufactureList: [], unitPayment: [], completeStatus: null, step: null }
break;
case 3:
obj = { id: null, stageGoals: [], projectSubList: [], completeStatus: null, step: null }
break;
case 4:
this.processProjectYearTarget()
obj = { id: null, projectKPI: null, yearTarget: null, year1Goal: null, year2Goal: null, year3Goal: null, managerDept: null, projAttribute: null, completeStatus: null, step: null }
break;
case 5:
obj = { id: null, fileList: [], projState: null, completeStatus: null, step: null }
break;
}
Object.keys(obj).forEach(key => {
obj[key] = this.formData[key];
})
return obj
},
onTargetChange (item) {
item.checked = !item.checked
if (item.checked) {
item.result = 'True'
checkInfo (step) {
if (step == 0) {
if (this.formData.projName == "" || this.formData.projName == null) {
alert('项目名称不能为空')
return false
} else return true
} else if (step == 1) {
if (!!!this.formData.members || this.formData.members.length == 0) {
this.$message.error('至少添加一位项目组成员!')
return false
} else return true
} else if (step == 2) {
return true
} else if (step == 3) {
return true
} else if (step == 4) {
const flag = this.determineProjKPIDetail()
if (flag) {
return true
} else {
item.result = 'False'
this.$message.error('项目绩效目标表需要至少填写其中的一项指标明细!')
return false
}
} else if (step == 5) {
return true
}
},
// 添加项目内容
addCont (key) {
switch (key) {
case 'cont1':
this.formData[key].push(cont1())
break
case 'cont2':
this.formData[key].push(cont2())
determineProjKPIDetail () {
let flag = false
for (let e of this.formData.projectKPI.threeLevel) {
if (e.performanceStandard && e.performanceStandard > 0) {
flag = true
break
case 'cont3':
this.formData[key].push(cont3())
}
if (e.targetValue && e.targetValue > 0) {
flag = true
break
case 'cont4':
this.formData[key].push(cont4())
}
if (e.yearValue1 && e.yearValue1 > 0) {
flag = true
break
case 'cont5':
this.formData[key].push(cont5())
}
if (e.yearValue2 && e.yearValue2 > 0) {
flag = true
break
case 'cont6':
this.formData[key].push(cont6())
}
if (e.yearValue3 && e.yearValue3 > 0) {
flag = true
break
}
},
// 删除项目内容
removeCont (item, key) {
let index = this.formData[key].indexOf(item)
if (index !== -1) {
this.formData[key].splice(index, 1)
}
return flag
},
projNameChange (value) {
this.formData.projectKPI.projName = this.formData.projName
},
// 起止日期选择处理
dateChange (t) {
let statr = t.start_date
let end = t.end_date
if (!statr || !end) {
return
startDateChange (value, dateString) {
this.formData.projectKPI.startDate = this.formData.startDate
},
endDateChange (value, dateString) {
this.formData.projectKPI.endDate = this.formData.endDate
if (this.formData.projectKPI.startDate && this.formData.projectKPI.endDate) {
let projDeadline = moment(this.formData.startDate).format('YYYY-MM-DD') + "至" + moment(this.formData.endDate).format('YYYY-MM-DD')
this.formData.projectKPI.projDeadline = projDeadline
}
if (statr > end) {
t.start_date = end
t.end_date = statr
},
planSave (e) {
if (!!e && e.length == 3) {
this.formData.projectKPI.yearTotal = e[0]
this.formData.projectKPI.yearApply = e[1]
this.formData.projectKPI.yearSelf = e[2]
}
},
budgetSave (e) {
if (!!e && e.length == 3) {
this.formData.totalFunding = e[0]
this.formData.govFunding = e[1]
this.formData.projectKPI.totalBudget = this.formData.totalFunding
this.formData.projectKPI.applyFunds = this.formData.govFunding
this.formData.projectKPI.selfFunds = e[2]
}
},
}
}
</script>
<style lang="less" scoped>
<style scoped lang="less">
</style>
<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
<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
<template>
<div class="assignment-detail">
<!-- <a-button type="primary">导出任务书</a-button> -->
<div style="margin-top: 16px;"></div>
<div class="from-table">
<div class="from-table font-line-space" v-if="tabsData[0].isShow">
<div v-if="tabsData[1].isShow">
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>研究项目</span>
<a-col :span="24" style="border-top: 0px;text-align: center;">
<div class="main-title">
<span>项目基本情况</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
项目名称
</a-col>
<a-col :span="22">
{{value.projName}}
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>申请人信息</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
起止时间
</a-col>
<a-col :span="22">
{{value.startDate}}{{value.endDate}}
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>姓名</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>第一承担单位</span>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.appPersonName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
名称
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>性别</div>
</div>
</a-col>
<a-col :span="10">
{{value.appUnitName}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.sex }}
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
联系电话
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>出生日期</div>
</div>
</a-col>
<a-col :span="10">
{{value.linkTel}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ moment(value.birthday).format('YYYY-MM-DD') }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
地址
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>民族</div>
</div>
</a-col>
<a-col :span="10">
{{value.linkAddress}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.nationName }}
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
邮政编码
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>学位</div>
</div>
</a-col>
<a-col :span="10">
{{value.postcode}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.degreeName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
主管部门
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>职称</div>
</div>
</a-col>
<a-col :span="22">
{{value.authority}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.titleName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>主要合作(参加)单位</span>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电话</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="1" class="bg-gray">
序号
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.mobile }}
</div>
</div>
</a-col>
<a-col :span="9" class="bg-gray">
单位名称
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电子邮箱</div>
</div>
</a-col>
<a-col :span="11" class="bg-gray">
地址
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.email }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
在项目中的分工
<div class="special-middle">
<div>每年工作时间(月)</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.jobTime }}
</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in value.unitList" :key="'unit' + index">
<a-col :span="1">
{{index + 1}}
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>个人通讯地址</div>
</div>
</a-col>
<a-col :span="9">
{{item.unitName}}
<a-col :span="21">
<div class="special-middle">
<div>
{{ value.address }}
</div>
</div>
</a-col>
<a-col :span="11">
{{item.unitAddress}}
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>工作单位</div>
</div>
</a-col>
<a-col :span="3">
{{item.projectWork}}
<a-col :span="21">
<div class="special-middle">
<div>
{{ value.appUnitName }}
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>主要研究领域</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div v-html="toTextarea(value.mainResearchAreas)"></div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>项目负责人</span>
<span>申请单位信息</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
姓名
</a-col>
<a-col :span="10">
{{value.appPersonName}}
</a-col>
<a-col :span="2" class="bg-gray">
性别
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>单位名称</div>
</div>
</a-col>
<a-col :span="10">
{{value.sex}}
<a-col :span="20">
<div class="special-middle">
<div>
{{ value.appUnitName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
出生年
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>联系人</div>
</div>
</a-col>
<a-col :span="10">
{{value.birthYear}}
<a-col :span="8">
<div class="special-middle">
<div>
{{ value.unitLinkName }}
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
联系电话
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>电话</div>
</div>
</a-col>
<a-col :span="10">
{{value.mobile}}
<a-col :span="8">
<div class="special-middle">
<div>
{{ value.unitLinkMobile }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
学位
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>电子信箱</div>
</div>
</a-col>
<a-col :span="10">
{{value.degreeName}}
<a-col :span="8">
<div class="special-middle">
<div>
{{ value.unitLinkEmail }}
</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
职称
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>传真</div>
</div>
</a-col>
<a-col :span="10">
{{value.titleName}}
<a-col :span="8">
<div class="special-middle">
<div>
{{ value.unitLinkFax }}
</div>
</div>
</a-col>
</a-row>
<!-- 项目合作单位 -->
<!-- <cooperative-units-info :cooperativeUnits.sync="value.cooperativeUnits" /> -->
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>项目</span>
<span>项目基本情况</span>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :flex="1">
<div class="bg-gray">总人数</div>
<div>{{value.memCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">高职</div>
<div>{{value.memHighCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">中职</div>
<div>{{value.memMiddleCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">初职</div>
<div>{{value.memLowCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">博士研究生</div>
<div>{{value.memBsCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">硕士研究生</div>
<div>{{value.memSsCount}}</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">其他</div>
<div>{{value.memOtherCount}}</div>
</a-col>
<a-col :flex="0.5" class="bg-gray">
<div style="line-height: 80px;">其中</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">博士</div>
<div>{{value.memdegree1}}</div>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>项目名称</div>
</div>
</a-col>
<a-col :flex="1">
<div class="bg-gray">硕士</div>
<div>{{value.memdegree2}}</div>
<a-col :span="20">
<div class="special-middle">
{{ value.projName }}
</div>
</a-col>
</a-row>
<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">
{{value.testContent}}
<div class="special-middle">
{{ value.knowledgeName }}
</div>
</a-col>
</a-row>
<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 style="display: flex;flex-wrap: wrap;line-height: 2.5;">
<div v-for="(item, index) in value.target" :key="index" style="margin-right: 20px;">
<a-checkbox :checked="item.checked" :name="item.targetid" disabled>{{item.targetName}}</a-checkbox>
({{item.resultCount}})
<div class="special-middle">
{{ value.subjectScope }}
</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">
{{ value.projClass }}
</div>
</a-col> -->
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>经费投入</span>
<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">
{{ value.remark }}
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
总经费
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>项日开始时间</div>
</div>
</a-col>
<a-col :span="10" v-if="value.budget.length > 1">
{{value.budget[0].totalBudget}}万元
<a-col :span="8">
<div class="special-middle">
{{ moment(value.startDate).format('YYYY-MM-DD') }}
</div>
</a-col>
<a-col :span="2" class="bg-gray">
市卫计委资助
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>项目结束时间</div>
</div>
</a-col>
<a-col :span="10" v-if="value.budget.length > 1">
{{value.budget[0].govBudget}}万元
<a-col :span="8">
<div class="special-middle">
{{ moment(value.endDate).format('YYYY-MM-DD') }}
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>一、项目要实现的目标和主要研发内容</span>
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>项目总经费(万元)</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="bg-gray">
(一)项目要实现的目标
<a-col :span="8">
<div class="special-middle">
{{ value.totalFunding }} 万元
</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">
{{ value.govFunding }} 万元
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="more-row" v-if="value.cont1.length >= 1">
<div v-for="(cont, index) in value.cont1" :key="index">
{{index + 1}}{{cont.contentInfo}}
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>项目摘要(400字以内)</div>
</div>
</a-col>
<a-col :span="20">
<div class="special-middle">
<div v-html="toTextarea(value.projAbstract)"></div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="bg-gray">
(二)主要研发内容
<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">
{{ value.projKeywords }}
</div>
</a-col>
</a-row>
<!-- 项目主要参与单位及分工 -->
<participate-units-info :dataList.sync="value.participateUnits" />
</div>
<div v-if="tabsData[2].isShow">
<a-row>
<a-col :span="24" class="more-row">
<div v-for="(cont, index) in value.cont2" :key="index">
{{index + 1}}{{cont.contentInfo}}
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>项目人员情况</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>二、项目的考核指标</span>
<span>项目负责人</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="bg-gray">
(一)主要技术及学术指标 (形成的专利、新技术、新产品、新装置、论文专著、软件等的数量、指标及其水平等)
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>姓名</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="more-row">
<div v-for="(cont, index) in value.cont3" :key="index">
{{index + 1}}{{cont.contentInfo}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.appPersonName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="bg-gray">
(二)人才培养
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>性别</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="more-row">
<div v-for="(cont, index) in value.cont4" :key="index">
{{index + 1}}{{cont.contentInfo}}
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.sex }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="bg-gray">
(三)其他应考核的指标
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>出生日期</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ moment(value.birthday).format('YYYY-MM-DD') }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" class="more-row">
<div v-for="(cont, index) in value.cont5" :key="index">
{{index + 1}}{{cont.contentInfo}}
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>证件类型</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
身份证
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>证件号码</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.certId }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>民族</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.nationName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>三、项目阶段实施内容及目标</span>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>职称</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.titleName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>从事专业</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.specName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>学位</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.degreeName }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
阶段
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>职务</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.dutyName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电话</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.mobile }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>电子邮箱</div>
</div>
</a-col>
<a-col :span="22" class="bg-gray">
阶段实施内容及阶段目标
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.email }}
</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in value.cont6" :key="index">
<a-col :span="2">
<div class="special-middle">{{index + 1}}</div>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>个人通讯地址</div>
</div>
</a-col>
<a-col :span="22" class="more-row">
<a-col :span="5">
<div class="special-middle">
<div>
起止日期:{{item.startTime}}---{{item.endTime}}
{{ value.address }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>工作单位</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{item.contentInfo}}
{{ value.appUnitName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>每年工作时间(月)</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.jobTime }}
</div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<div class="tb-title">
<span>四、项目经费预算</span>
<!-- 项目组成员 -->
<project-member-info :dataList.sync="value.members" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
<a-row style="text-align: center;">
<a-col :span="8" class="bg-gray">
经费来源预算
<a-row type="flex" class="row_center">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>总人数</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>高级</div>
</div>
</a-col>
<a-col :span="16" class="bg-gray">
经费支出预算
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>中级</div>
</div>
</a-col>
<a-col :span="3" 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-col :span="4" class="bg-gray">
<div class="special-middle">
<div>博士生</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>硕士生</div>
</div>
</a-col>
</a-row>
<a-row>
<a-row type="flex" class="row_center">
<a-col :span="4">
科目
<div class="special-middle">
<div>
{{ value.memCount }}
</div>
</div>
</a-col>
<a-col :span="4">
总经费来源(万元)
<a-col :span="3">
<div class="special-middle">
<div>
{{ value.memHighCount }}
</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>
{{ value.memMiddleCount }}
</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>
{{ value.memLowCount }}
</div>
</div>
</a-col>
<a-col :span="4">
科目
<div class="special-middle">
<div>
{{ value.memBshCount }}
</div>
</div>
</a-col>
<a-col :span="6">
总经费支出(万元)
<a-col :span="4">
<div class="special-middle">
<div>
{{ value.memBsCount }}
</div>
</div>
</a-col>
<a-col :span="6">
其中市卫健委科技计费(万元)
<a-col :span="3">
<div class="special-middle">
<div>
{{ value.memSsCount }}
</div>
</div>
</a-col>
</a-row>
<template v-if="value.budget.length > 1">
<a-row>
<a-col :span="4">{{value.budget[0].budgetName}}</a-col>
<a-col :span="4">{{value.budget[0].totalBudget}}</a-col>
<a-col :span="4">{{value.budget[3].budgetName}}</a-col>
<a-col :span="6">{{value.budget[3].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[3].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4">{{value.budget[1].budgetName}}</a-col>
<a-col :span="4">{{value.budget[1].govBudget}}</a-col>
<a-col :span="4">{{value.budget[4].budgetName}}</a-col>
<a-col :span="6">{{value.budget[4].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[4].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4">{{value.budget[2].budgetName}}</a-col>
<a-col :span="4">{{value.budget[2].unitBudget}}</a-col>
<a-col :span="4">{{value.budget[5].budgetName}}</a-col>
<a-col :span="6">{{value.budget[5].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[5].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[6].budgetName}}</a-col>
<a-col :span="6">{{value.budget[6].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[6].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[7].budgetName}}</a-col>
<a-col :span="6">{{value.budget[7].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[7].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[8].budgetName}}</a-col>
<a-col :span="6">{{value.budget[8].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[8].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[9].budgetName}}</a-col>
<a-col :span="6">{{value.budget[9].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[9].govBudget}}</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[10].budgetName}}</a-col>
<a-col :span="6">{{value.budget[10].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[10].govBudget}}</a-col>
</a-row>
</div>
<div v-if="tabsData[3].isShow">
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[11].budgetName}}</a-col>
<a-col :span="6">{{value.budget[11].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[11].govBudget}}</a-col>
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>项目主要实施内容和目标</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[12].budgetName}}</a-col>
<a-col :span="6">{{value.budget[12].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[12].govBudget}}</a-col>
<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 v-html="toTextarea(value.researchContent)"></div>
</a-col>
</a-row>
<a-row>
<a-col :span="4"></a-col>
<a-col :span="4"></a-col>
<a-col :span="4">{{value.budget[13].budgetName}}</a-col>
<a-col :span="6">{{value.budget[13].totalBudget}}</a-col>
<a-col :span="6">{{value.budget[13].govBudget}}</a-col>
</a-row>
</template>
<a-row>
<a-col :span="24">
<a-col :span="24" style="border-top: 0px">
<div class="tb-title">
<span>项目组成员(含项目负责人)</span>
<span>项目考核指标</span>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="2" class="bg-gray">
姓名
</a-col>
<a-col :span="3" class="bg-gray">
出生年月
</a-col>
<a-col :span="2" class="bg-gray">
学历
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>主要技术指标</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
职称
<a-col :span="20">
<div v-html="toTextarea(value.technologyTarget)"></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="6" class="bg-gray">
工作单位
<a-col :span="20">
<div v-html="toTextarea(value.economyTarget)"></div>
</a-col>
<a-col :span="3" class="bg-gray">
项目分工
</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="2" class="bg-gray">
年参加月数
<a-col :span="20">
<div v-html="toTextarea(value.achievementTarget)"></div>
</a-col>
</a-row>
<a-row v-for="(item, index) in value.members" :key="'member' + index">
<a-col :span="2">
{{item.name}}
</a-col>
<a-col :span="3">
{{moment(item.birthday).format('YYYY-MM-DD')}}
<a-row type="flex">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>科技报告考核指标</div>
</div>
</a-col>
<a-col :span="2">
{{item.degreeName}}
<a-col :span="20">
<div v-html="toTextarea(value.technologyReportsTarget)"></div>
</a-col>
<a-col :span="2">
{{item.titleName}}
</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="4">
{{item.researchDirection}}
<a-col :span="20">
<div v-html="toTextarea(value.otherTarget)"></div>
</a-col>
<a-col :span="6">
{{item.workUnit}}
</a-row>
</div>
<div v-if="tabsData[4].isShow">
<a-row>
<a-col :span="24" style="border-top: 0px">
<div class="main-title">
<span>申请书正文</span>
</div>
</a-col>
<a-col :span="3">
{{item.projWork}}
</a-row>
<a-row type="flex">
<a-col :span="24" class="bg-gray">
<div class="special-middle" style="font-weight: bold;text-align: center;">
<document-view :fileUrl="value.downloadUrl" :fileName="value.fileName" :imageArray="[value.downloadUrl]" v-if="!!value.downloadUrl"></document-view>
</div>
</a-col>
<a-col :span="2">
{{item.forMonths}}
</a-row>
</div>
<div v-if="tabsData[5].isShow">
<!-- 经费预算 -->
<budget-info :budget.sync="value.budget" />
<a-row type="flex">
<a-col :span="24" style="text-align: center;">
<div class="special-middle">
&nbsp;
</div>
</a-col>
</a-row>
<!-- 分年度用款计划 -->
<fund-plan-info :fundPlan.sync="value.fundPlan" />
<!-- 设备费-购置设备预算明细表 -->
<device-info :deviceList.sync="value.deviceList" />
<!-- 设备费-试制设备预算明细表 -->
<manufacture-info :manufactureList.sync:="value.manufactureList" />
<!-- 项目承担单位研究资金支出预算明细表 -->
<unit-payment-info :unitPayment.sync="value.unitPayment" />
</div>
<div v-if="tabsData[6].isShow">
<!-- 项目安排及阶段目标 -->
<proj-stage-goals-info :stageGoals.sync="value.stageGoals" />
</div>
<div v-if="tabsData[7].isShow">
<!-- 项目课题设置 -->
<project-sub-info :dataList.sync="value.projectSubList" />
</div>
<div v-if="tabsData[8].isShow">
<project-kpi-info v-if="value.projectKPI" :projectKPI.sync="value.projectKPI" />
</div>
<div v-if="tabsData[9].isShow">
<!-- 附件 -->
<file-info :fileList.sync="value.fileList" />
</div>
<div v-if="tabsData[10].isShow">
<a-row>
<a-col :span="24">
<div class="tb-title">
<div class="main-title">
<span>审核记录</span>
</div>
</a-col>
......@@ -541,163 +828,73 @@
</a-col>
</a-row>
</div>
</div>
</template>
<script>
import moment from 'moment'
import cooperativeUnitsInfo from '@/views/report/project/components/cooperativeUnitsInfo'
import participateUnitsInfo from '@/views/report/project/components/participateUnitsInfo'
import projectMemberInfo from '@/views/report/project/components/projectMemberInfo'
import projectKpiInfo from '@/views/report/project/components/projectKpiInfo.vue'
import budgetInfo from '@/views/report/project/components/budgetInfo'
import fundPlanInfo from '@/views/report/project/components/fundPlanInfo'
import unitPaymentInfo from '@/views/report/project/components/unitPaymentInfo'
import deviceInfo from '@/views/report/project/components/deviceInfo'
import manufactureInfo from '@/views/report/project/components/manufactureInfo'
import projStageGoalsInfo from "@/views/report/project/components/projStageGoalsInfo";
import projectSubInfo from '@/views/report/project/components/projectSubInfo'
import fileInfo from "@/views/report/project/components/fileInfo";
import documentView from '@/views/components/common/documentView'
import AuditList from '@/views/audit/components/auditInfo'
import { toTextarea } from '@/views/utils/common'
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 } }
export default {
components: {
AuditList
cooperativeUnitsInfo, projectMemberInfo, projectKpiInfo, budgetInfo, fundPlanInfo, unitPaymentInfo, deviceInfo, manufactureInfo, fileInfo, documentView, AuditList, projStageGoalsInfo, projectSubInfo, participateUnitsInfo
},
name: "TestInfo",
name: "ProjectInfo",
data () {
return {
testInfo: {
id: '',
projId: '',
projName: '',
startDate: null,
endDate: null,
appUnitName: '',
linkTel: '',
linkAddress: '',
linkEmail: '',
// 实施目标和主要内容
testContent: '',
// 总经费
budgetCount: 0,
// 市卫计委资助
budgetGovCount: 0,
// 起止日期
startDate: null,
endDate: null,
// 申报人
appPersonName: null,
sex: null,
birthYear: null,
mobile: null,
degreeName: null,
titleName: 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()],
// 成员
members: [],
// 预期成果形式
target: [],
// 经费
budget: [],
//审核记录
auditList: [{ result: '', unit: '', time: '' }],
}
}
},
props: {
value: {
type: Object,
default: () => {
return [...this.testInfo]
return null
}
},
tabsData: {
type: Array,
default: () => {
return []
}
},
},
created () {
this.load()
if (!!!this.tabsData || this.tabsData.length == 0)
this.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 },
]
},
mounted () {
this.tinymceSet()
},
methods: {
moment,
load () {
},
tinymceSet () {
tinymce.remove('#tinymce_dom')
tinymce.init({
selector: '#tinymce_dom',
language: 'zh_CN',
content_style: "img {max-width:100%;}",
height: 800,
inline: true,
readonly: true,
})
},
moment, toTextarea,
}
}
</script>
\ No newline at end of file
<style lang="less" scoped>
.from-table {
border-right: 1px solid #f0f0f0;
border-bottom: 1px solid #f0f0f0;
.ant-col {
padding: 0 16px;
line-height: 40px;
min-height: 40px;
border-left: 1px solid #f0f0f0;
border-top: 1px solid #f0f0f0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.bg-gray {
background-color: #f8fafc;
}
.more-row {
white-space: pre-wrap;
line-height: 2;
}
.flex-layout {
display: flex;
}
// 内容垂直居中
.special-middle {
position: relative;
top: 50%;
transform: translateY(-50%);
}
}
// 项目组 格式修改
.ant-row-flex {
text-align: center;
.ant-col {
padding: 0;
}
.bg-gray {
border-bottom: 1px solid #f0f0f0;
}
}
.tb-title {
color: #0079fe;
display: flex;
text-align: center;
height: 40px;
&::after {
content: "";
flex-grow: 1;
border-top: 1px dashed #d9d9d9;
transform: translateY(50%);
margin-left: 10px;
}
}
</style>
<template>
<div class="report-detail">
<!-- <a-button type="primary">导出任务书</a-button> -->
<div style="margin-top: 16px;">
<test-info v-model="testInfo" />
<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: "TestView",
name: "projectView",
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,
birthYear: null,
mobile: null,
birthday: null,
nationName: 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.getTestInfoByProjId()
this.getProjectInfoById()
},
methods: {
getTestInfoByProjId () {
let pars = { projId: this.value }
this.$api.taskReport.getTestInfoByProjId(pars).then(({ data = {} }) => {
getProjectInfoById () {
if (this.value != null) {
this.loading = true
this.$api.project.getProjectInfoById({ id: this.value }).then(({ data = {} }) => {
if (data) {
this.testInfo = data
this.formData = data
this.loading = false
} else
this.$emit('close', 'error')
}).catch(() => { this.$emit('close', 'error') })
}
}).catch(() => {
},
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>
<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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment