<template> <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" style="border-top: 0px;text-align: center;"> <div class="main-title"> <span>项目基本情况</span> </div> </a-col> </a-row> <a-row> <a-col :span="24" style="border-top: 0px"> <div class="tb-title"> <span>申请人信息</span> </div> </a-col> </a-row> <a-row type="flex"> <a-col :span="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">项目摘要(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> <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,.pdf。</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','pdf']" 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> <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="项目实施目标(限5000字)" v-model="formData.researchContent" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" /> </a-form-model-item> </a-col> </a-row> <a-row> <a-col :span="24" style="border-top: 0px"> <div class="tb-title"> <span>项目考核指标</span> </div> </a-col> </a-row> <a-row type="flex"> <a-col :span="4" class="bg-gray"> <div class="special-middle"> <div class="required">主要技术指标</div> </div> </a-col> <a-col :span="20"> <a-form-model-item prop="technologyTarget"> <a-textarea placeholder="主要技术指标(限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 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="主要经济指标(限5000字)" v-model="formData.economyTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" /> </a-form-model-item> </a-col> </a-row> <a-row type="flex"> <a-col :span="4" class="bg-gray"> <div class="special-middle"> <div class="required">项目实施中形成的示范基地、中试线、生产线及其规模等</div> </div> </a-col> <a-col :span="20"> <a-form-model-item prop="achievementTarget"> <a-textarea placeholder="项目实施中形成的示范基地、中试线、生产线及其规模等(限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 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="科技报告考核指标(限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 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="其他应考核的指标(限5000字)" v-model="formData.otherTarget" :maxLength="5000" style="width: 80%; height: 160px; margin-top: 12px" /> </a-form-model-item> </a-col> </a-row> <a-row type="flex"> <a-col :span="24" style="text-align: center;"> <div class="special-middle"> </div> </a-col> </a-row> </div> <div v-if="stepsArray[1].showStatus"> <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> <!-- 项目主要参与单位及分工 --> <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"> </div> </a-col> </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"> </div> </a-col> </a-row> <!-- 设备费-购置设备预算明细表 --> <device-edit :deviceList.sync="formData.deviceList" /> <a-row type="flex"> <a-col :span="24" style="text-align: center;"> <div class="special-middle"> </div> </a-col> </a-row> <!-- 设备费-试制设备预算明细表 --> <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> <!-- 项目承担单位研究资金支出预算明细表 --> <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 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 } }, 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: 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, 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.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 (step, next) { if (this.checkInfo(step)) { this.$refs.form.validate(valid => { 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.project.save(par).then(({ data = {} }) => { if (data) { this.formData.id = data 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.error('信息未填写完全!') 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 { 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 }, 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 { this.$message.error('项目绩效目标表需要至少填写其中的一项指标明细!') return false } } else if (step == 5) { return true } }, determineProjKPIDetail () { let flag = false for (let e of this.formData.projectKPI.threeLevel) { if (e.performanceStandard && e.performanceStandard > 0) { flag = true break } if (e.targetValue && e.targetValue > 0) { flag = true break } if (e.yearValue1 && e.yearValue1 > 0) { flag = true break } if (e.yearValue2 && e.yearValue2 > 0) { flag = true break } if (e.yearValue3 && e.yearValue3 > 0) { flag = true break } } return flag }, 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 == 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 scoped lang="less"> </style>