From 575f055f591ac54d2f76cfee337e6b17a459ebaf Mon Sep 17 00:00:00 2001 From: wangxl <123456> Date: Tue, 17 Dec 2024 16:02:00 +0800 Subject: [PATCH] 44 --- src/views/report/project/Index.vue | 4 +- .../project/components/edit/projectCreate.vue | 81 ++ .../project/components/edit/projectEdit.vue | 926 ++++++++++++++++++ .../project/components/projectCreate.vue | 4 + 4 files changed, 1012 insertions(+), 3 deletions(-) create mode 100644 src/views/report/project/components/edit/projectCreate.vue create mode 100644 src/views/report/project/components/edit/projectEdit.vue diff --git a/src/views/report/project/Index.vue b/src/views/report/project/Index.vue index ca5641b..6d6c616 100644 --- a/src/views/report/project/Index.vue +++ b/src/views/report/project/Index.vue @@ -70,8 +70,6 @@ import { getType, getComplete, setComplete } from '@/views/utils/auth' import moment from 'moment' import { isEmptyParams, filterExportExcelData, tableColumnsName, checkEmail, personGender, personBirthday, checkImageFileType, checkDocumentFileType } from "@/views/utils/common" import projectCreate from '@/views/report/project/components/projectCreate' -import projectEdit from '@/views/report/project/components/projectEdit' -import projectEditKey from "@/views/report/project/components/keyProject/projectEdit" import projectView from '@/views/report/project/components/projectView' import previewFile from '@/views/components/common/previewFile' import knowledgeSelect from '@/views/components/common/knowledgeSelect' @@ -82,7 +80,7 @@ import axios from 'axios' export default { name: 'reportProject', components: { - projectView, projectCreate, projectEdit,previewFile, projectEditKey, knowledgeSelect, personInfoEdit + projectView, projectCreate,previewFile, knowledgeSelect, personInfoEdit }, data () { return { diff --git a/src/views/report/project/components/edit/projectCreate.vue b/src/views/report/project/components/edit/projectCreate.vue new file mode 100644 index 0000000..df75ff3 --- /dev/null +++ b/src/views/report/project/components/edit/projectCreate.vue @@ -0,0 +1,81 @@ + +<template> + <div class="app-content" style="height: 76vh;overflow: auto;"> + <a-spin :spinning="loading" style="width: 100%;height: 100%;"> + <div class="page-content"> + <project-edit v-model="value" @close="closeWindow" @load="onLoad" ref="projCreate" v-if="projType"></project-edit> + <project-edit-key v-model="value" @close="closeWindow" @load="onLoad" ref="projCreate" v-else></project-edit-key> + </div> + <div class="page-footer"> + <a-button @click="save">保存</a-button> + <a-button style="margin-left: 10px" 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" + } + }, + props: { + value: { + type: String, + default: () => { + return null + } + } + }, + created () { + }, + methods: { + save () { + this.$refs.projCreate.save() + }, + submit () { + this.$refs.projCreate.submit() + }, + 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-content { + width: 100%; + height: calc(100% - 40px); + overflow: auto; +} +.page-footer { + width: 100%; + height: 40px; + line-height: 40px; + background: rgb(248, 248, 248); + text-align: center; +} +</style> + + diff --git a/src/views/report/project/components/edit/projectEdit.vue b/src/views/report/project/components/edit/projectEdit.vue new file mode 100644 index 0000000..78748b2 --- /dev/null +++ b/src/views/report/project/components/edit/projectEdit.vue @@ -0,0 +1,926 @@ +<template> + <div> + <div> + <a-steps :current="current" size="small" @change="stepsChange"> + <a-step :status="item" v-for="(item,index) in completeStatus" :key="index+'completeStatus'" /> + </a-steps> + </div> + <a-form-model ref="form" :model="formData" :rules="rules" style="border-top: 0px" class="from-table font-line-space"> + <a-row> + <a-col :span="24" style="border-top: 0px;text-align: center;"> + <div class="main-title"> + <span>项目基本情况1111</span> + </div> + </a-col> + </a-row> + <a-row> + <a-col :span="24" style="border-top: 0px"> + <div class="tb-title"> + <span>申请人信息</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="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> + <div>{{ formData.appPersonName }}</div> + </a-form-model-item> + </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> + <a-form-model-item> + <div>{{ formData.sex }}</div> + </a-form-model-item> + </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> + <a-form-model-item> + {{ moment(formData.birthday).format('YYYY-MM-DD') }} + </a-form-model-item> + </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="5"> + <div class="special-middle"> + <div> + <a-form-model-item> + <div>{{ formData.nationName }}</div> + </a-form-model-item> + </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> + <a-form-model-item> + <div>{{ formData.degreeName }}</div> + </a-form-model-item> + </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> + <a-form-model-item> + {{ formData.titleName}} + </a-form-model-item> + </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="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="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> + <div>{{ formData.email }}</div> + </a-form-model-item> + </div> + </div> + </a-col> + <a-col :span="3" class="bg-gray"> + <div class="special-middle"> + <div class="required">每年工作时间(月)</div> + </div> + </a-col> + <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-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="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 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> + <a-form-model-item> + <div>{{ formData.appUnitName }}</div> + </a-form-model-item> + </div> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="3" class="bg-gray"> + <div class="special-middle"> + <div class="required">主要研究领域</div> + </div> + </a-col> + <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" style="border-top: 0px"> + <div class="tb-title"> + <span>申请单位信息</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div>单位名称</div> + </div> + </a-col> + <a-col :span="20"> + <div class="special-middle"> + <div> + <a-form-model-item> + <div>{{ formData.appUnitName }}</div> + </a-form-model-item> + </div> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">联系人</div> + </div> + </a-col> + <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-col> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">电话</div> + </div> + </a-col> + <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-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"> + <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> + </div> + </div> + </a-col> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">传真</div> + </div> + </a-col> + <a-col :span="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" style="border-top: 0px"> + <div class="tb-title"> + <span>项目基本情况</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项目名称</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="projName"> + <a-input placeholder="项目名称(限100字)" v-model="formData.projName" :maxLength="100" style="width: 80%" @change="projNameChange" /> + </a-form-model-item> + </a-col> + </a-row> + + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">学科代码</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="knowledgeId"> + <cascader-select v-model="formData.knowledgeId" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">附注说明</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="remark"> + <a-input placeholder="附注说明(限300字)" v-model="formData.remark" :maxLength="300" style="width: 80%" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项日开始时间</div> + </div> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="startDate" style="width:200px;display: inline-block;"> + <a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="formData.startDate" @change="startDateChange" style="width: 180px" /> + </a-form-model-item> + </a-col> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项目结束时间</div> + </div> + </a-col> + <a-col :span="8"> + <a-form-model-item prop="endDate" style="width:200px;display: inline-block;"> + <a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="formData.endDate" @change="endDateChange" style="width: 180px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">申请经费(万元)</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="govFunding"> + <!-- <a-input-number v-model="formData.govFunding" @change="govFundingChange" :min="0" :step="0.01" style="width: 100px" /> --> + {{ formData.govFunding }} + <span> 万元</span> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项目摘要(400字以内)</div> + </div> + </a-col> + <a-col :span="20"> + <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-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> + <!-- 项目主要参与单位及分工 --> + <participate-units-edit :participateUnits.sync="formData.participateUnits" /> + + <a-row> + <a-col :span="24" style="border-top: 0px"> + <div class="main-title"> + <span>项目人员情况</span> + </div> + </a-col> + </a-row> + <!-- 项目组成员 --> + <project-member-edit :dataList.sync="formData.members" /> + <a-row type="flex"> + <a-col :span="24" style="text-align: center;"> + <div class="special-middle"> + + </div> + </a-col> + </a-row> + + <a-row> + <a-col :span="24" style="border-top: 0px"> + <div class="main-title"> + <span>项目主要实施内容和目标</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项目实施目标</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="researchContent"> + <a-textarea placeholder="项目实施目标(限10000字)" v-model="formData.researchContent" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row> + <a-col :span="24" style="border-top: 0px"> + <div class="tb-title"> + <span>项目考核指标</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">主要技术指标</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="technologyTarget"> + <a-textarea placeholder="主要技术指标(限10000字)" v-model="formData.technologyTarget" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">主要经济指标</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="economyTarget"> + <a-textarea placeholder="主要经济指标(限10000字)" v-model="formData.economyTarget" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">项目实施中形成的示范基地、中试线、生产线及其规模等</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="achievementTarget"> + <a-textarea placeholder="项目实施中形成的示范基地、中试线、生产线及其规模等(限10000字)" v-model="formData.achievementTarget" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">科技报告考核指标</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="technologyReportsTarget"> + <a-textarea placeholder="科技报告考核指标(限10000字)" v-model="formData.technologyReportsTarget" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="4" class="bg-gray"> + <div class="special-middle"> + <div class="required">其他应考核的指标</div> + </div> + </a-col> + <a-col :span="20"> + <a-form-model-item prop="otherTarget"> + <a-textarea placeholder="其他应考核的指标(限10000字)" v-model="formData.otherTarget" :maxLength="10000" style="width: 80%; height: 160px; margin-top: 12px" /> + </a-form-model-item> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="24" style="text-align: center;"> + <div class="special-middle"> + + </div> + </a-col> + </a-row> + <a-row> + <a-col :span="24" style="border-top: 0px"> + <div class="main-title"> + <span>申请书正文</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="24" class="bg-gray"> + <div class="special-middle" style="font-weight: bold;text-align: center;"> + <a :href="'/downloadFile/textTemplate.docx'" download="申请书正文.docx"> + <a-icon type="download"></a-icon> <span style="color:green;text-decoration:underline;font-size: 16px;">正文模板下载</span> + </a> + <span style="color: red;margin-left: 42px;">注:正文部分需要下载模版,填写完成后上传到系统中,格式 .doc,.docx。</span> + </div> + </a-col> + </a-row> + <a-row type="flex"> + <a-col :span="24"> + <div style="min-height:34px;line-height: 40px;text-align: center;"> + <up-load :isUpload="true" :file.sync="formData" :format="['doc', 'docx']" message="请上传申请书正文" /> + </div> + </a-col> + </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> + + <!-- 经费预算 --> + <budget-edit :budget.sync="formData.budget" @save="budgetSave" /> + <a-row type="flex"> + <a-col :span="24" style="text-align: center;"> + <div class="special-middle"> + + </div> + </a-col> + </a-row> + <!-- 分年度用款计划 --> + <fund-plan-edit :fundPlan.sync="formData.fundPlan" @save="planSave" /> + + <!-- 项目承担单位研究资金支出预算明细表 --> + <unit-payment-edit :unitPayment.sync="formData.unitPayment" /> + <!-- <equipments-edit :equipments.sync="formData.equipments" /> --> + <!-- 设备费-购置设备预算明细表 --> + <device-edit :deviceList.sync="formData.deviceList" /> + <!-- 设备费-试制设备预算明细表 --> + <manufacture-edit :manufactureList.sync:="formData.manufactureList" /> + + <a-row type="flex"> + <a-col :span="24" style="text-align: center;"> + <div class="special-middle"> + + </div> + </a-col> + </a-row> + <!-- 项目绩效指标 --> + <project-kpi-edit :projectKPI.sync="formData.projectKPI" /> + + <!-- 项目安排及阶段目标 --> + <proj-stage-goals-edit :stageGoals.sync="formData.stageGoals" /> + + <!-- 项目课题设置 --> + <project-sub-edit :projectSubList.sync="formData.projectSubList" /> + + <!-- 附件 --> + <file-edit :fileList.sync="formData.fileList" /> + </a-form-model> + </div> +</template> + +<script> + +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 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: '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 + } + }, + }, + created () { + this.getProject() + }, + data () { + return { + current: 0, + completeStatus: ["wait", "finish", "process", "", "", "", "", "", "", ""], + stepStyle: { + marginBottom: '60px', + boxShadow: '0px -1px 0 0 #e8e8e8 inset', + }, + overseasShow: false, + formData: { + id: null, + appPersonName: null, + sex: null, + birthday: null, + nationName: null, + degreeName: null, + titleName: null, + mobile: null, + email: null, + appUnitName: null, + 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: [], + budget: [], + fundPlan: [], + deviceList: [], + manufactureList: [], + unitPayment: [], + stageGoals: [], + projectSubList: [], + fileList: [], + auditList: [], + managerDept: "", + }, + rules: { + 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' },], + }, + } + }, + computed: { + }, + mounted () { + + }, + methods: { + moment, + stepsChange (e) { + this.completeStatus[e] = "finish" + console.log(this.completeStatus) + console.log(e) + }, + getProject () { + this.$emit('load', true) + if (!!this.value) { + this.$api.project.getProjectInfoById({ id: this.value }).then(({ data = {} }) => { + if (data) { + this.formData = data + this.loadList() + } else + this.$emit('close', 'error') + this.$emit('load', false) + }).catch(() => { + this.$emit('close', 'error') + this.$emit('load', false) + }) + } else { + this.$api.project.getNewProject({ projType: getType() }).then(({ data = {} }) => { + if (data) { + this.formData = data + this.loadList() + } else + this.$emit('close', 'error') + this.$emit('load', false) + }).catch(() => { + this.$emit('close', 'error') + this.$emit('load', false) + }) + } + }, + loadList () { + if (!!!this.formData.cooperativeUnits || this.formData.cooperativeUnits.length == 0) + this.formData.cooperativeUnits = [{ ...Cooperative }, { ...Cooperative }] + + if (!!!this.formData.participateUnits || this.formData.participateUnits.length == 0) + this.formData.participateUnits = [{ ...ParticipateUnit }, { ...ParticipateUnit }] + + 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 = [{ ...ProjectSub }] + + if (!!!this.formData.fileList || !this.formData.fileList.length || this.formData.fileList.length == 0) { + this.formData.fileList = [] + } + }, + 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 + }, + save () { + this.processProjectYearTarget() + if (this.checkProjName()) { + this.$emit('load', true) + let pars = isEmptyParams(this.formData) + let par = { ...pars } + this.$api.project.save(par).then(({ data = {} }) => { + if (data) { + this.formData.id = data + this.$message.success('保存成功!') + this.$emit('close', 'save') + } + this.$emit('load', false) + }).catch(() => { + this.$emit('load', false) + }) + } + }, + submit () { + this.processProjectYearTarget() + this.$refs.form.validate(valid => { + if (valid) { + if (this.formData.members.length == 0) { + this.$message.error('至少添加一位项目组成员!') + return false + } else { + this.$emit('load', true) + let state = this.formData.projState + if (state != 30) + this.formData.projState = 10 + let pars = isEmptyParams(this.formData) + let par = { ...pars } + this.$api.project.save(par).then(({ data = {} }) => { + if (data) { + this.formData.id = data + this.$message.success('成功!') + this.$emit('close', 'submit') + } + this.$emit('load', false) + }).catch(() => { + this.$emit('load', false) + }) + } + } else { + this.$message.warn('项目信息未填写完全!') + return false + } + }) + }, + checkProjName () { + if (this.formData.projName == "" || this.formData.projName == null) { + alert('项目名称不能为空') + return false + } else { + return true + } + }, + projNameChange (value) { + this.formData.projectKPI.projName = this.formData.projName + }, + 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 + } + }, + 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 == 2) { + this.formData.totalFunding = e[0] + this.formData.govFunding = e[1] + this.formData.projectKPI.totalBudget = this.formData.totalFunding + this.formData.projectKPI.applyFunds = this.formData.govFunding + } + }, + } +} +</script> +<style scoped lang="less"> +</style> + diff --git a/src/views/report/project/components/projectCreate.vue b/src/views/report/project/components/projectCreate.vue index d47b97d..ee3f7d7 100644 --- a/src/views/report/project/components/projectCreate.vue +++ b/src/views/report/project/components/projectCreate.vue @@ -56,6 +56,10 @@ export default { } </script> <style scoped lang="less"> +::-webkit-scrollbar { + width: 8px; + height: 6px; +} ::v-deep .ant-spin-container { width: 100%; height: 100%; -- 2.18.0