@@ -31,7 +31,7 @@ | |||
"pinia": "^2.0.22", | |||
"pinia-plugin-persist": "^1.0.0", | |||
"qrcode.vue": "^3.3.3", | |||
"vue": "^3.5.1", | |||
"vue": "^3.4.38", | |||
"vue-router": "4", | |||
"vue3-seamless-scroll": "^2.0.1", | |||
"xlsx": "^0.16.0", | |||
@@ -35,7 +35,7 @@ | |||
"pinia": "^2.0.22", | |||
"pinia-plugin-persist": "^1.0.0", | |||
"qrcode.vue": "^3.3.3", | |||
"vue": "^3.5.1", | |||
"vue": "^3.4.38", | |||
"vue-router": "4", | |||
"vue3-seamless-scroll": "^2.0.1", | |||
"xlsx": "^0.16.0", | |||
@@ -18,3 +18,31 @@ export const annualPlanModify = data => | |||
http.post('/api/v1/annualPlan/modify', data) // 年度计划-编辑 | |||
export const projectExcel = data => | |||
http.post('/api/v1/annualPlan/exportList', data, { responseType: 'blob' }) // 项目库导出 | |||
export const operationPackageList = data => | |||
http.get('/api/v1/annualPlan/operationPackageList') // 查询所有的运维包 | |||
// api/v1/annualPlan/operationPackageSave | |||
// 添加运维包,两个参数 | |||
// operationPackageName运维包名称 | |||
// operationPackageYear预算年度 | |||
// 传参: | |||
// { | |||
// "operationPackageName": "", | |||
// "operationPackageYear": 1 | |||
// } | |||
export const operationPackageSave = data => | |||
http.post('/api/v1/annualPlan/operationPackageSave', data) // 添加运维包,两个参数 | |||
// api/v1/annualPlan/relevancyPackage | |||
// 关联运维包 | |||
// 传参: | |||
// { | |||
// "operationPackageId":1, | |||
// "projectCodes": | |||
// [ | |||
// "33050000020240400003" | |||
// ] | |||
// } | |||
export const relevancyPackage = data => | |||
http.post('/api/v1/annualPlan/relevancyPackage', data) // 年度计划-编辑 |
@@ -43,6 +43,7 @@ const uploadUrl = store.dictStore.uploadUrl, | |||
], | |||
projectApplicationForm: [{ required: true, message: '请上传项目申报书' }], | |||
baseResearchReportFile: [{ required: true, message: '请上传可行性研究报告' }], | |||
operationPlan: [{ required: true, message: '请上传运维方案' }], | |||
constructionPlanFile: [{ required: true, message: '请上传建设方案' }], | |||
mainAccusationDoc: [{ required: true, message: '请上传申报单位主要职责(单位三定方案)', trigger: 'blur' }] | |||
}, | |||
@@ -60,6 +61,9 @@ const uploadUrl = store.dictStore.uploadUrl, | |||
mainResponsibilitiesApplicantFile: data.mainResponsibilitiesApplicantFile ? reviewFileParam(JSON.parse(data.mainResponsibilitiesApplicantFile)) : [], | |||
supportingMaterialsFile: data.supportingMaterialsFile ? reviewFileParam(JSON.parse(data.supportingMaterialsFile)) : [], | |||
baseResearchReportFile: data.baseResearchReportFile ? reviewFileParam(JSON.parse(data.baseResearchReportFile)) : [], | |||
operationPlan: data.operationPlan ? reviewFileParam(JSON.parse(data.operationPlan)) : [], | |||
calculationTotalInvestmentFile: data.calculationTotalInvestmentFile ? reviewFileParam(JSON.parse(data.calculationTotalInvestmentFile)) : [], | |||
projectApplicationForm: data.projectApplicationForm ? reviewFileParam(JSON.parse(data.projectApplicationForm)) : [], | |||
baseProjOtherFile: data.baseProjOtherFile ? reviewFileParam(JSON.parse(data.baseProjOtherFile)) : [], | |||
@@ -199,7 +203,7 @@ defineExpose({ validForm, formData, setFormData }) | |||
</el-upload> | |||
</el-form-item> | |||
</el-col> | |||
<el-col :span="12"> | |||
<el-col v-if="projectType!=='04'&&projectType!=='05'" :span="12"> | |||
<el-form-item label="可行性研究报告" prop="baseResearchReportFile"> | |||
<el-upload | |||
v-model:file-list="formData.baseResearchReportFile" | |||
@@ -220,6 +224,27 @@ defineExpose({ validForm, formData, setFormData }) | |||
</el-upload> | |||
</el-form-item> | |||
</el-col> | |||
<el-col v-if="projectType==='04'||projectType==='05'" :span="12"> | |||
<el-form-item label="运维方案" prop="operationPlan"> | |||
<el-upload | |||
v-model:file-list="formData.operationPlan" | |||
class="w-full" | |||
:action="uploadUrl" | |||
:limit="1" | |||
:on-success="res => handleFileSuccess(res, formData.operationPlan, true)" | |||
:before-upload="file=>fileFormatVerification(file, {types: fileTypes})" | |||
:accept="fileTypes.map(i=>`.${i}`).join(',')" | |||
:on-preview="handleFilePreview" | |||
> | |||
<el-button type="primary" plain>选择文件</el-button> | |||
<template #tip> | |||
<div class="el-upload__tip"> | |||
支持{{ fileDesc }}文件 | |||
</div> | |||
</template> | |||
</el-upload> | |||
</el-form-item> | |||
</el-col> | |||
<el-col v-if="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" :span="12"> | |||
<el-form-item label="建设方案" prop="constructionPlanFile"> | |||
<el-upload | |||
@@ -18,6 +18,7 @@ import RelatedProjectDialog from '@/pages/projectCollection/projectCollectionEnt | |||
import ProjectContentDialog from '@/pages/projectCollection/projectCollectionEnter/components/projectContentDialog.vue' | |||
import { getOrganizationByCode } from '@/http/apis/commonApi' | |||
import { templateTypePage } from '@/http/apis/performanceEvaluation/indicatorTemplate' | |||
import { unitCodeRules } from '@/utils/validate' | |||
const props = defineProps({ | |||
detailData: { | |||
@@ -41,7 +42,8 @@ const | |||
formData = ref({ | |||
baseProjIsConfidentiality: '01', | |||
buildOrgName: userInfo.value.empPosUnitName, | |||
beseExpectedResults: [] | |||
beseExpectedResults: [], | |||
projectType: '01' | |||
}), | |||
formRef = ref(), | |||
// 手机号码校验 | |||
@@ -102,18 +104,12 @@ const | |||
{ validator: checkTelPhone, trigger: 'blur' } | |||
], | |||
buildOrgName: [{ required: true, message: '请输入建设单位', trigger: 'blur' }], | |||
orgCreditCode: [ | |||
{ | |||
required: true, | |||
message: '请输入建设单位统一信用代码', | |||
trigger: 'blur' | |||
} | |||
], | |||
orgCreditCode: unitCodeRules(), | |||
superOrg: [ | |||
{ required: true, message: '请选择主管单位:', trigger: 'change' } | |||
], | |||
superOrgCode: [{ required: true, message: '请选择主管单位:', trigger: 'change' }], | |||
superOrgCreditCode: [{ required: true, message: '请选择主管单位:' }], | |||
superOrgCreditCode: unitCodeRules(), | |||
baseProvManDeprtType: [ | |||
{ required: true, message: '请选择上级主管单位类型:', trigger: 'change' } | |||
], | |||
@@ -226,7 +222,7 @@ const | |||
formData.value = { | |||
baseProjIsConfidentiality: data.baseProjIsConfidentiality || '01', | |||
projectName: data.projectName, | |||
projectType: data.projectType, | |||
projectType: data.projectType ? data.projectType : '01', | |||
isFirst: data.isFirst, | |||
baseConstructionType: data?.baseConstructionType?.split(';') || undefined, | |||
// isInnovateWholeProvinceShare: data.isInnovateWholeProvinceShare, | |||
@@ -927,24 +923,6 @@ watch(() => formData.value, val => { | |||
/> | |||
</el-form-item> | |||
</el-col> | |||
<el-col :span="12"> | |||
<el-form-item v-if="declareAmount>=1000&&false" label="发改编码" prop="developCode"> | |||
<el-input | |||
v-model="formData.developCode" | |||
maxlength="50" | |||
placeholder="请填写" | |||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||
/> | |||
</el-form-item> | |||
<el-form-item v-else label="发改编码"> | |||
<el-input | |||
v-model="formData.developCode" | |||
maxlength="50" | |||
placeholder="请填写" | |||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||
/> | |||
</el-form-item> | |||
</el-col> | |||
<el-col :span="24"> | |||
<el-form-item label="项目概述" prop="projectOverview"> | |||
<el-input | |||
@@ -77,17 +77,7 @@ const { proxy } = getCurrentInstance(), | |||
if (valid) resolve() | |||
}) | |||
})) | |||
form.push(new Promise((resolve, reject) => { | |||
fundsAllocationRef.value.validForm((valid) => { | |||
if (valid) resolve() | |||
}) | |||
})) | |||
form.push(new Promise((resolve, reject) => { | |||
annualPaymentPlanRef.value.validForm((valid) => { | |||
if (valid) resolve() | |||
}) | |||
})) | |||
formConfig.value.isCoreBusiness && form.push(new Promise((resolve, reject) => { | |||
coreBusinessRef.value.validForm((valid) => { | |||
if (valid) resolve() | |||
@@ -130,22 +120,38 @@ const { proxy } = getCurrentInstance(), | |||
fundsInfoRef.value.validForm((valid) => { | |||
if (valid) { | |||
const total = floatAdd([fundsInfoRef.value.formData.declareHaveAmount, fundsInfoRef.value.formData.declareGovOwnFinanceAmount, fundsInfoRef.value.formData.declareGovSuperiorFinanceAmount, fundsInfoRef.value.formData.declareBankLendingAmount, fundsInfoRef.value.formData.declareOtherAmount]) | |||
if (fundsInfoRef.value.formData.declareAmount > 0 && fundsInfoRef.value.formData.declareAmount === total) { resolve() } else { | |||
if (fundsInfoRef.value.formData.declareAmount > 0 && fundsInfoRef.value.formData.declareAmount === total) { | |||
resolve() | |||
} else { | |||
reject('资金申报情况:5类资金总和必须等于申报金额') | |||
} | |||
} | |||
}) | |||
})) | |||
form.push(new Promise((resolve, reject) => { | |||
fundsAllocationRef.value.validForm(valid => { | |||
if (valid) { | |||
const total = floatAdd([fundsAllocationRef.value.formData.softwareDevelopmentAmount, fundsAllocationRef.value.formData.cloudHardwarePurchaseAmount, fundsAllocationRef.value.formData.thirdPartyAmount]) | |||
if (fundsInfoRef.value.formData.declareAmount > 0 && fundsInfoRef.value.formData.declareAmount === total) { resolve() } else { | |||
reject('资金分配情况:3类资金总和必须等于申报金额') | |||
if (basicInfoRef?.value.formData.projectType !== '04' && basicInfoRef?.value.formData.projectType !== '05') { | |||
form.push(new Promise((resolve, reject) => { | |||
fundsAllocationRef.value.validForm((valid) => { | |||
if (valid) resolve() | |||
}) | |||
})) | |||
form.push(new Promise((resolve, reject) => { | |||
fundsAllocationRef.value.validForm(valid => { | |||
if (valid) { | |||
const total = floatAdd([fundsAllocationRef.value.formData.softwareDevelopmentAmount, fundsAllocationRef.value.formData.cloudHardwarePurchaseAmount, fundsAllocationRef.value.formData.thirdPartyAmount]) | |||
if (fundsInfoRef.value.formData.declareAmount > 0 && fundsInfoRef.value.formData.declareAmount === total) { | |||
resolve() | |||
} else { | |||
reject('资金分配情况:3类资金总和必须等于申报金额') | |||
} | |||
} | |||
} | |||
}) | |||
})) | |||
}) | |||
})) | |||
form.push(new Promise((resolve, reject) => { | |||
annualPaymentPlanRef.value.validForm((valid) => { | |||
if (valid) resolve() | |||
}) | |||
})) | |||
} | |||
applicationsRef.value?.formData.includeApplication === 1 && form.push(new Promise((resolve, reject) => { | |||
hiddenAppFormRef.value.validAllAppForm((valid) => { | |||
if (valid) { | |||
@@ -271,7 +277,6 @@ const { proxy } = getCurrentInstance(), | |||
id: route.query.id * 1 || undefined, | |||
...basicInfoRef.value.formData, | |||
...fundsInfoRef.value.formData, | |||
...fundsAllocationRef.value.formData, | |||
...planndedUseResourcesRef.value?.formData, | |||
// bizDomain: basicInfoRef.value.formData?.isDigitalReform === 1 ? basicInfoRef.value.formData.bizDomain.join(',') : undefined, | |||
baseConstructionType: basicInfoRef.value.formData?.baseConstructionType?.join(';') || '', | |||
@@ -294,21 +299,32 @@ const { proxy } = getCurrentInstance(), | |||
consultancy: fundsInfoRef.value?.formData.declareAmount > 400 && fundsInfoRef.value.formData?.consultancy || '', | |||
operationManageUnit: fundsInfoRef.value?.formData.declareAmount >= 1000 && provincialExamineRef.value.formData.operationManageUnit || undefined, | |||
...applicationsRef.value?.formData, | |||
...annualPaymentPlanRef.value.formData, | |||
...accessoryRef.value.formData, | |||
constructionPlanFile: accessoryRef.value.formData?.constructionPlanFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.constructionPlanFile)), | |||
preliminaryPlanFile: accessoryRef.value.formData?.preliminaryPlanFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.preliminaryPlanFile)), | |||
mainResponsibilitiesApplicantFile: accessoryRef.value.formData?.mainResponsibilitiesApplicantFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.mainResponsibilitiesApplicantFile)), | |||
supportingMaterialsFile: accessoryRef.value.formData?.supportingMaterialsFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.supportingMaterialsFile)), | |||
calculationTotalInvestmentFile: accessoryRef.value.formData?.calculationTotalInvestmentFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.calculationTotalInvestmentFile)), | |||
projectApplicationForm: basicInfoRef.value.formData?.projectType !== '03' && accessoryRef.value.formData?.projectApplicationForm && JSON.stringify(changFilesParam(accessoryRef.value.formData.projectApplicationForm)) || '', | |||
baseResearchReportFile: basicInfoRef.value.formData?.projectType !== '03' && accessoryRef.value.formData?.baseResearchReportFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.baseResearchReportFile)) || '', | |||
projectApplicationForm: accessoryRef.value.formData?.projectApplicationForm && JSON.stringify(changFilesParam(accessoryRef.value.formData.projectApplicationForm)) || '', | |||
baseResearchReportFile: accessoryRef.value.formData?.baseResearchReportFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.baseResearchReportFile)) || '', | |||
operationPlan: (basicInfoRef.value.formData.projectType === '04' || basicInfoRef.value.formData.projectType === '05') && accessoryRef.value.formData?.operationPlan && JSON.stringify(changFilesParam(accessoryRef.value.formData.operationPlan)) || '', | |||
baseProjOtherFile: accessoryRef.value.formData?.baseProjOtherFile && JSON.stringify(changFilesParam(accessoryRef.value.formData.baseProjOtherFile)), | |||
mainAccusationDoc: fundsInfoRef.value?.formData.declareAmount >= 1000 && accessoryRef.value.formData?.mainAccusationDoc && JSON.stringify(changFilesParam(accessoryRef.value.formData.mainAccusationDoc)) || '', | |||
reviewChecklist: reviewCheckRef.value?.formData?.reviewChecklist || undefined | |||
} | |||
if (basicInfoRef.value.formData.projectType !== '04' && basicInfoRef.value.formData.projectType !== '05') { | |||
postData = Object.assign(postData, { | |||
...fundsAllocationRef?.value.formData, | |||
...annualPaymentPlanRef?.value.formData | |||
}) | |||
} | |||
if (formConfig.value.isCoreBusiness) { | |||
postData = Object.assign(postData, { ...coreBusinessRef.value.formData, coreBusiness: coreBusinessRef.value.formData.coreBusiness && JSON.stringify(coreBusinessRef.value.formData.coreBusiness) }) | |||
postData = Object.assign(postData, { | |||
...coreBusinessRef.value.formData, | |||
coreBusiness: coreBusinessRef.value.formData.coreBusiness && JSON.stringify(coreBusinessRef.value.formData.coreBusiness) | |||
}) | |||
} | |||
if (formConfig.value.isSafetyInput) { | |||
// ...safetyInputRef.value.formData | |||
@@ -368,7 +384,11 @@ const { proxy } = getCurrentInstance(), | |||
submitLoading.value = true | |||
try { | |||
const data = { | |||
projectInfo: { ...postData, id: !route.query.isDraft ? postData.id : undefined, draftId: route.query.isDraft ? route.query.id * 1 : undefined } | |||
projectInfo: { | |||
...postData, | |||
id: !route.query.isDraft ? postData.id : undefined, | |||
draftId: route.query.isDraft ? route.query.id * 1 : undefined | |||
} | |||
} | |||
if (route.name === 'declarePage') { | |||
@@ -417,8 +437,8 @@ const { proxy } = getCurrentInstance(), | |||
basicInfoRef.value.setFormData(detailData.value) | |||
if (detailData.value?.baseProjIsConfidentiality !== '02') { | |||
fundsInfoRef.value.setFormData(detailData.value) | |||
fundsAllocationRef.value.setFormData(detailData.value) | |||
annualPaymentPlanRef.value.setFormData(detailData.value) | |||
fundsAllocationRef?.value.setFormData(detailData.value) | |||
annualPaymentPlanRef?.value.setFormData(detailData.value) | |||
formConfig.value.isCoreBusiness && coreBusinessRef.value.setFormData(detailData.value) | |||
formConfig.value.isSafetyInput && safetyInputRef.value.setFormData(detailData.value) | |||
formConfig.value.isProjectImageProgress && projectImageProgressRef.value.setFormData(detailData.value) | |||
@@ -435,13 +455,16 @@ const { proxy } = getCurrentInstance(), | |||
// 获取审核详情 | |||
flowData = ref({ | |||
processProgressVo: { | |||
progressInfo: [ | |||
] | |||
progressInfo: [] | |||
} | |||
}), | |||
lastData = ref(), | |||
getFlowData = async () => { | |||
const res = await progressDetail({ instanceId: route.query.instanceId, projectId: route.query.id, nodeId: route.query.nodeId }) | |||
const res = await progressDetail({ | |||
instanceId: route.query.instanceId, | |||
projectId: route.query.id, | |||
nodeId: route.query.nodeId | |||
}) | |||
flowData.value = { | |||
...res.data, | |||
processProgressVo: { | |||
@@ -580,16 +603,23 @@ async function reuseItem (data) { | |||
const projectYear = basicInfoRef.value.formData.projectYear | |||
const annualPaymentFormData = { | |||
annualPlanAmount: annualPaymentPlanRef.value.formData.annualPlanAmount, | |||
annualPlanHaveAmount: annualPaymentPlanRef.value.formData.annualPlanHaveAmount, | |||
annualPlanGovOwnFinanceAmount: annualPaymentPlanRef.value.formData.annualPlanGovOwnFinanceAmount, | |||
annualPlanGovSuperiorFinanceAmount: annualPaymentPlanRef.value.formData.annualPlanGovSuperiorFinanceAmount, | |||
annualPlanBankLendingAmount: annualPaymentPlanRef.value.formData.annualPlanBankLendingAmount, | |||
annualPlanOtherAmount: annualPaymentPlanRef.value.formData.annualPlanOtherAmount | |||
annualPlanAmount: annualPaymentPlanRef?.value.formData.annualPlanAmount, | |||
annualPlanHaveAmount: annualPaymentPlanRef?.value.formData.annualPlanHaveAmount, | |||
annualPlanGovOwnFinanceAmount: annualPaymentPlanRef?.value.formData.annualPlanGovOwnFinanceAmount, | |||
annualPlanGovSuperiorFinanceAmount: annualPaymentPlanRef?.value.formData.annualPlanGovSuperiorFinanceAmount, | |||
annualPlanBankLendingAmount: annualPaymentPlanRef?.value.formData.annualPlanBankLendingAmount, | |||
annualPlanOtherAmount: annualPaymentPlanRef?.value.formData.annualPlanOtherAmount | |||
} | |||
detailData.value = { | |||
...res.data, | |||
projectType, baseHistorProjId, baseHistorProjName, baseHistorProjYear, projectYear, projectName, buildOrgName, orgCreditCode, | |||
projectType, | |||
baseHistorProjId, | |||
baseHistorProjName, | |||
baseHistorProjYear, | |||
projectYear, | |||
projectName, | |||
buildOrgName, | |||
orgCreditCode, | |||
...annualPaymentFormData, | |||
// 新项目不应该有状态 | |||
status: undefined | |||
@@ -623,18 +653,22 @@ async function reuseItem (data) { | |||
<div class="declarePage footerPage"> | |||
<!-- 退回编辑--> | |||
<div v-if="route.name==='handleAfterGiveBack'" class="errorTip mb-16"> | |||
<el-icon class="icon"><Warning /></el-icon> | |||
<el-icon class="icon"> | |||
<Warning /> | |||
</el-icon> | |||
<div> | |||
<p class="title">流程被退回</p> | |||
<p> | |||
<span>{{ detailData?.projectName }}的{{ flowData?.processProgressVo?.processDefName }}被退回,请根据审核记录调整项目信息</span> | |||
<span>{{ detailData?.projectName }}的{{ flowData?.processProgressVo?.processDefName | |||
}}被退回,请根据审核记录调整项目信息</span> | |||
<el-button | |||
type="primary" | |||
plain | |||
size="small" | |||
class="ml-16" | |||
@click="showFlowRecordDialog" | |||
>查看审核记录</el-button> | |||
>查看审核记录 | |||
</el-button> | |||
</p> | |||
</div> | |||
@@ -650,13 +684,13 @@ async function reuseItem (data) { | |||
<el-form label-suffix=":"> | |||
<el-row :gutter="24"> | |||
<el-col :span="6"> | |||
<el-form-item label="申报单位">{{ detailData.buildOrgName||'-' }}</el-form-item> | |||
<el-form-item label="申报单位">{{ detailData.buildOrgName || '-' }}</el-form-item> | |||
</el-col> | |||
<el-col :span="6"> | |||
<el-form-item label="主管单位">{{ detailData.superOrg||'-' }}</el-form-item> | |||
<el-form-item label="主管单位">{{ detailData.superOrg || '-' }}</el-form-item> | |||
</el-col> | |||
<el-col :span="6"> | |||
<el-form-item label="创建时间">{{ detailData.createOn||'-' }}</el-form-item> | |||
<el-form-item label="创建时间">{{ detailData.createOn || '-' }}</el-form-item> | |||
</el-col> | |||
</el-row> | |||
</el-form> | |||
@@ -697,7 +731,7 @@ async function reuseItem (data) { | |||
<funds-info ref="fundsInfoRef" :detail-data="detailData" /> | |||
</div> | |||
</el-collapse-item> | |||
<el-collapse-item v-if="basicInfoRef?.formData?.baseProjIsConfidentiality==='01'" name="3" class="mb-16"> | |||
<el-collapse-item v-if="basicInfoRef?.formData?.baseProjIsConfidentiality==='01'&&basicInfoRef?.formData?.projectType!=='04'&&basicInfoRef?.formData?.projectType!=='05'" name="3" class="mb-16"> | |||
<template #title> | |||
<div class="collapse-title"> | |||
资金分配情况(单位:万元) | |||
@@ -719,7 +753,7 @@ async function reuseItem (data) { | |||
<!-- </div>--> | |||
<!-- </el-collapse-item>--> | |||
<el-collapse-item | |||
v-if="basicInfoRef?.formData?.baseProjIsConfidentiality==='01'" | |||
v-if="basicInfoRef?.formData?.baseProjIsConfidentiality==='01'&&basicInfoRef?.formData?.projectType!=='04'&&basicInfoRef?.formData?.projectType!=='05'" | |||
name="4" | |||
class="mb-16" | |||
> | |||
@@ -757,12 +791,20 @@ async function reuseItem (data) { | |||
<projectImageProgress ref="projectImageProgressRef" /> | |||
</div> | |||
</el-collapse-item> | |||
<el-collapse-item v-if="getIsShowReviewCheck()&&formConfig.isReviewChecklist&&($route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status))" name="8" class="mb-16"> | |||
<el-collapse-item | |||
v-if="getIsShowReviewCheck()&&formConfig.isReviewChecklist&&($route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status))" | |||
name="8" | |||
class="mb-16" | |||
> | |||
<template #title> | |||
<div class="collapse-title">审查清单</div> | |||
</template> | |||
<div class="p-24"> | |||
<review-check ref="reviewCheckRef" :detail-data="detailData" :data="detailData.reviewChecklist||formConfig.reviewChecklist" /> | |||
<review-check | |||
ref="reviewCheckRef" | |||
:detail-data="detailData" | |||
:data="detailData.reviewChecklist||formConfig.reviewChecklist" | |||
/> | |||
</div> | |||
</el-collapse-item> | |||
<el-collapse-item name="8" class="mb-16"> | |||
@@ -810,11 +852,19 @@ async function reuseItem (data) { | |||
<div class="collapse-title">应用信息</div> | |||
</template> | |||
<div class="p-24"> | |||
<applications ref="applicationsRef" :is-first="basicInfoRef?.formData?.isFirst" :core-business="coreBusinessRef?.formData?.coreBusiness" /> | |||
<applications | |||
ref="applicationsRef" | |||
:is-first="basicInfoRef?.formData?.isFirst" | |||
:core-business="coreBusinessRef?.formData?.coreBusiness" | |||
/> | |||
</div> | |||
</el-collapse-item> | |||
<el-collapse-item v-if="($route.name==='declarePlan')||([10012,10016,10013].includes(detailData.status))" name="1" class="mb-16"> | |||
<el-collapse-item | |||
v-if="($route.name==='declarePlan')||([10012,10016,10013].includes(detailData.status))" | |||
name="1" | |||
class="mb-16" | |||
> | |||
<template #title> | |||
<div class="collapse-title">计划使用资源</div> | |||
</template> | |||
@@ -833,68 +883,82 @@ async function reuseItem (data) { | |||
:is-first="basicInfoRef?.formData?.isFirst" | |||
/> | |||
<div class="footer"> | |||
<el-button @click="router.go(-1)"> 返回 </el-button> | |||
<el-button @click="router.go(-1)"> 返回</el-button> | |||
<el-button | |||
v-if="route.name==='declarePage'&&(!route.query.id||(route.query.id&&route.query.isDraft))" | |||
plain | |||
type="primary" | |||
:loading="saveLoading" | |||
@click="toSaveDraft" | |||
> 暂 存 </el-button> | |||
<el-button type="primary" :loading="submitLoading" @click="submitAllForm"> 提交审核 </el-button> | |||
> 暂 存 | |||
</el-button> | |||
<el-button type="primary" :loading="submitLoading" @click="submitAllForm"> 提交审核</el-button> | |||
</div> | |||
</div> | |||
<flow-record-dialog :visible="flowRecordDialogData.visible" :flow-data="flowRecordDialogData.flowData" @close="closeFlowRecordDialog" /> | |||
<flow-record-dialog | |||
:visible="flowRecordDialogData.visible" | |||
:flow-data="flowRecordDialogData.flowData" | |||
@close="closeFlowRecordDialog" | |||
/> | |||
</template> | |||
<style lang="less" scoped> | |||
.declarePage { | |||
//position: relative; | |||
.errorTip{ | |||
.errorTip { | |||
background: #FFF0EF; | |||
border-radius: 4px; | |||
border: 1px solid #FF9E99; | |||
padding: 18px 24px; | |||
display: flex; | |||
font-size: 14px; | |||
color: rgba(0,0,0,0.85); | |||
.icon{ | |||
color:#FF3B30; | |||
color: rgba(0, 0, 0, 0.85); | |||
.icon { | |||
color: #FF3B30; | |||
font-size: 24px; | |||
margin-right: 8px; | |||
} | |||
.title{ | |||
.title { | |||
font-size: 20px; | |||
font-weight: 500; | |||
color: rgba(0,0,0,0.85); | |||
color: rgba(0, 0, 0, 0.85); | |||
line-height: 28px; | |||
margin-bottom: 17px; | |||
} | |||
} | |||
} | |||
:deep(.el-collapse) { | |||
.el-collapse-item__header { | |||
padding: 0px 16px; | |||
font-size: 14px; | |||
} | |||
.el-collapse-item__content { | |||
padding: 16px 16px 16px 0px; | |||
} | |||
.el-collapse-item__header.is-active { | |||
border-bottom: 1px solid rgba(0, 0, 0, 0.1); | |||
} | |||
.collapse-title { | |||
flex: 1 0 90%; | |||
order: 1; | |||
.el-collapse-item__header { | |||
flex: 1 0 auto; | |||
order: -1; | |||
} | |||
.el-input-number { | |||
width: 150px !important; | |||
} | |||
} | |||
} | |||
.btnClass { | |||
:deep(.el-form-item__content) { | |||
line-height: 24px; | |||
@@ -904,9 +968,11 @@ async function reuseItem (data) { | |||
.marginTop { | |||
margin-top: 16px; | |||
} | |||
.delClass { | |||
color: #e65151; | |||
} | |||
.btn { | |||
display: flex; | |||
align-items: center; | |||
@@ -918,6 +984,7 @@ async function reuseItem (data) { | |||
border: 1px solid rgba(0, 100, 235, 1); | |||
cursor: pointer; | |||
} | |||
.bottomBtn { | |||
width: calc(100% - 201px); | |||
position: fixed; | |||
@@ -928,6 +995,7 @@ async function reuseItem (data) { | |||
padding: 10px 0px; | |||
border-top: 1px solid rgba(0, 0, 0, 0.1); | |||
} | |||
.applyBottomBtn { | |||
width: 1000px; | |||
position: fixed; | |||
@@ -938,7 +1006,8 @@ async function reuseItem (data) { | |||
padding: 10px 0px; | |||
border-top: 1px solid rgba(0, 0, 0, 0.1); | |||
} | |||
.ocupation{ | |||
.ocupation { | |||
height: 80px; | |||
} | |||
</style> |
@@ -122,12 +122,12 @@ onMounted(async () => { | |||
<el-card class="w-full mb-16"> | |||
<el-row> | |||
<el-col :span="12"> | |||
<el-form-item label="发改编码" :rules="[{ required: true, message: '请输入' }]" prop="developCode"> | |||
<el-form-item label="发改编码" :rules="[{ required: true, message: '请输入' },{ min: 20, max: 20, message: '长度必须为20位', trigger: 'blur' }]" prop="developCode"> | |||
<el-input v-model="formData.developCode" placeholder="请输入" /> | |||
</el-form-item> | |||
</el-col> | |||
<el-col :span="12"> | |||
<el-form-item label="财政编码" prop="financialCode" :rules="[{ required: true, message: '请输入' }]"> | |||
<el-form-item label="财政编码" prop="financialCode" :rules="[{ required: true, message: '请输入' },{ min: 21, max: 21, message: '长度必须为21位', trigger: 'blur' }]"> | |||
<el-input v-model="formData.financialCode" placeholder="请填写" /> | |||
</el-form-item> | |||
</el-col> | |||
@@ -7,7 +7,7 @@ | |||
@close="closeDialog" | |||
> | |||
<el-form v-loading="loading"> | |||
<el-table :data="tableData" style="width: 100%"> | |||
<el-table ref="tableRef" :data="tableData" style="width: 100%;height: 60vh"> | |||
<el-table-column prop="index" width="50"> | |||
<template #default="scope"> | |||
<el-radio | |||
@@ -24,22 +24,22 @@ | |||
{{ scope.$index + 1 }} | |||
</template> | |||
</el-table-column> | |||
<el-table-column prop="date" label="运维包名称" width="180"> | |||
<el-table-column prop="operationPackageName" label="运维包名称" width="180"> | |||
<template #default="scope"> | |||
<div v-if="!scope.row.edit">{{ scope.row.name }}</div> | |||
<div v-if="!scope.row.edit">{{ scope.row.operationPackageName }}</div> | |||
<el-form-item v-else> | |||
<el-input v-model="scope.row.name" /> | |||
<el-input v-model="scope.row.operationPackageName" placeholder="请输入运维包名称" /> | |||
</el-form-item> | |||
</template> | |||
</el-table-column> | |||
<el-table-column prop="name" label="预算年度" width="250"> | |||
<el-table-column prop="operationPackageYear" label="预算年度" width="250"> | |||
<template #default="scope"> | |||
<div v-if="!scope.row.edit">{{ scope.row.year }}</div> | |||
<el-form-item v-if="scope.row.edit" prop="year"> | |||
<div v-if="!scope.row.edit">{{ scope.row.operationPackageYear }}</div> | |||
<el-form-item v-if="scope.row.edit" prop="operationPackageYear"> | |||
<el-date-picker | |||
v-model="scope.row.year" | |||
v-model="scope.row.operationPackageYear" | |||
type="year" | |||
placeholder="请选择" | |||
placeholder="请选择预算年度" | |||
format="YYYY" | |||
value-format="YYYY" | |||
/> | |||
@@ -48,7 +48,11 @@ | |||
</el-table-column> | |||
<el-table-column prop="address" label="操作" width="120"> | |||
<template #default="scope"> | |||
<a v-if="!scope.row.edit" @click="scope.row.edit=true">编辑{{ scope.row.data }}</a> | |||
<a | |||
v-if="!scope.row.edit" | |||
@click="scope.row.edit=true, | |||
scope.row.operationPackageYear=scope.row.operationPackageYear+''" | |||
>编辑{{ scope.row.data }}</a> | |||
<a v-else @click="savePackage(scope.row)">保存</a> | |||
</template> | |||
</el-table-column> | |||
@@ -95,6 +99,11 @@ import { ElMessage } from 'element-plus' | |||
const title = '关联运维包' | |||
import { defineModel, ref, watch, defineEmits } from 'vue' | |||
import { | |||
operationPackageList, | |||
operationPackageSave, | |||
relevancyPackage | |||
} from '@/http/apis/projectStoreManage/annualPlanStore' | |||
const visible = defineModel() | |||
@@ -103,6 +112,7 @@ const selectProjectList = defineModel('selectProjectList', { | |||
defult: [] | |||
}) | |||
const tableRef = ref() | |||
const radio = ref() | |||
const loading = ref(false) | |||
const sureLoading = ref(false) | |||
@@ -114,16 +124,15 @@ function radioChange (e) { | |||
const tableData = ref([]) | |||
const emits = defineEmits(['relevanceSuccess']) | |||
function savePackage (row) { | |||
if (!row.name) { | |||
async function savePackage (row) { | |||
if (!row.operationPackageName) { | |||
ElMessage({ | |||
message: '运维包名称', | |||
type: 'warning' | |||
}) | |||
return | |||
} | |||
if (!row.year) { | |||
if (!row.operationPackageYear) { | |||
ElMessage({ | |||
message: '请选择预算年度', | |||
type: 'warning' | |||
@@ -132,46 +141,63 @@ function savePackage (row) { | |||
} | |||
loading.value = true | |||
setTimeout(function () { | |||
loading.value = false | |||
}, 1000) | |||
await operationPackageSave(row) | |||
loading.value = false | |||
row.edit = false | |||
getList() | |||
} | |||
function addPackage () { | |||
tableData.value.push({ | |||
year: '', | |||
name: '', | |||
operationPackageYear: '', | |||
operationPackageName: '', | |||
edit: true | |||
}) | |||
} | |||
function relevance () { | |||
console.log(selectData) | |||
console.log(selectProjectList.value) | |||
async function relevance () { | |||
if (!selectData) { | |||
ElMessage({ | |||
message: '请先选择关联包', | |||
type: 'warning' | |||
}) | |||
return | |||
} | |||
const postData = { | |||
operationPackageId: selectData.id, | |||
projectIds: selectProjectList.value.map(item => item.projectId) | |||
} | |||
sureLoading.value = true | |||
setTimeout(function () { | |||
try { | |||
await relevancyPackage(postData) | |||
sureLoading.value = false | |||
}, 1000) | |||
visible.value = false | |||
emits('relevanceSuccess') | |||
closeDialog() | |||
emits('relevanceSuccess') | |||
} catch { | |||
sureLoading.value = false | |||
} | |||
} | |||
function cancelRelevance () { | |||
async function cancelRelevance () { | |||
cancelLoading.value = true | |||
setTimeout(function () { | |||
const postData = { | |||
projectIds: selectProjectList.value.map(item => item.projectId) | |||
} | |||
try { | |||
await relevancyPackage(postData) | |||
cancelLoading.value = false | |||
}, 1000) | |||
visible.value = false | |||
emits('relevanceSuccess') | |||
closeDialog() | |||
emits('relevanceSuccess') | |||
} catch { | |||
cancelLoading.value = false | |||
} | |||
} | |||
function closeDialog () { | |||
visible.value = false | |||
selectData = undefined | |||
console.log(selectData) | |||
radio.value = undefined | |||
} | |||
watch(() => visible.value, | |||
@@ -184,29 +210,11 @@ watch(() => visible.value, | |||
async function getList () { | |||
loading.value = true | |||
const res = await testData() | |||
const res = await operationPackageList() | |||
tableData.value = res.data | |||
loading.value = false | |||
} | |||
function testData () { | |||
return new Promise(resolve => { | |||
setTimeout(() => { | |||
resolve({ | |||
data: [ | |||
{ | |||
year: '2016', | |||
name: 'Tom' | |||
}, | |||
{ | |||
year: '2016', | |||
name: 'Tom' | |||
} | |||
] | |||
}) | |||
}, 1000) | |||
}) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
@@ -6,7 +6,7 @@ import { fileFormatVerification, handleFileSuccess, handleFileError } from '@/ut | |||
import { | |||
list, | |||
startDeclare, | |||
exportAnnualPlanEditTable, projectExcel | |||
exportAnnualPlanEditTable, projectExcel, operationPackageList | |||
} from '@/http/apis/projectStoreManage/annualPlanStore' | |||
import store from '@/store' | |||
import ApprovalDialog from './approvalDialog.vue' | |||
@@ -29,6 +29,7 @@ const { proxy } = getCurrentInstance(), | |||
projectName: undefined, | |||
buildOrg: undefined, | |||
projectType: undefined, | |||
operationPackageId: undefined, | |||
status: undefined, | |||
declareAmountMin: undefined, | |||
declareAmountMax: undefined, | |||
@@ -52,6 +53,9 @@ const { proxy } = getCurrentInstance(), | |||
}, | |||
getTableData = async (pageParams = tableListRef.value.pageParams) => { | |||
if (queryProjectType.value !== '02') { | |||
searchForm.operationPackageId = undefined | |||
} | |||
const res = await list({ | |||
...pageParams, | |||
...searchForm, | |||
@@ -88,6 +92,7 @@ const { proxy } = getCurrentInstance(), | |||
reset = () => { | |||
searchForm.projectName = undefined | |||
searchForm.buildOrg = undefined | |||
searchForm.operationPackageId = undefined | |||
searchForm.projectType = undefined | |||
searchForm.status = undefined | |||
searchForm.declareAmountMin = undefined | |||
@@ -174,9 +179,9 @@ const { proxy } = getCurrentInstance(), | |||
closeExportFieldDialog() | |||
}, | |||
// 编辑 | |||
toEdit = (data) => { | |||
router.push({ name: 'planEdit', query: { id: data.projectId }}) | |||
}, | |||
// toEdit = (data) => { | |||
// router.push({ name: 'planEdit', query: { id: data.projectId }}) | |||
// }, | |||
// 暂缓 | |||
// projectDefer = (data) => { | |||
// proxy.$messageBox | |||
@@ -210,8 +215,11 @@ watch( | |||
search() | |||
} | |||
) | |||
const operationList = ref([]) | |||
onMounted(async () => { | |||
if (!getIsShowRegionTree(['SUPER_ADMIN', 'REGION_MANAGER'])) getTableData() | |||
const res = await operationPackageList() | |||
operationList.value = res.data | |||
}) | |||
function tabChange () { | |||
@@ -375,6 +383,24 @@ function relevanceSuccess () { | |||
</el-form-item> | |||
</el-col> | |||
</el-row> | |||
<el-col v-if="queryProjectType==='02'" :span="8"> | |||
<el-form-item label="运维包"> | |||
<el-select | |||
v-model="searchForm.operationPackageId" | |||
reserve-keyword | |||
filterable | |||
placeholder="全部" | |||
class="w-full" | |||
> | |||
<el-option | |||
v-for="(v,k) in operationList" | |||
:key="k" | |||
:label="v.operationPackageName" | |||
:value="v.id" | |||
/> | |||
</el-select> | |||
</el-form-item> | |||
</el-col> | |||
<el-row> | |||
<el-col :span="24"> | |||
<el-form-item class="btn"> | |||
@@ -425,7 +451,7 @@ function relevanceSuccess () { | |||
>关联运维包 | |||
</el-button> | |||
</div> | |||
<div class="flex items-center relative"> | |||
<div v-if="false" class="flex items-center relative"> | |||
<!-- <el-button | |||
type="primary" | |||
plain | |||
@@ -493,19 +519,19 @@ function relevanceSuccess () { | |||
<a @click="router.push({name:'projectDetail',query:{id:scope.row.projectId}})">详情</a> | |||
</template> | |||
<template v-if="queryProjectType==='01'"> | |||
<a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a> | |||
<!-- <a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a>--> | |||
<!-- <a v-if="scope.row.status===10010" @click="projectDefer(scope.row)">暂缓</a>--> | |||
<a v-if="scope.row.status===10014" @click="showApprovalDialog(scope.row)">立项批复</a> | |||
<a @click="router.push({name:'projectDetail',query:{id:scope.row.projectId}})">详情</a> | |||
</template> | |||
<template v-if="queryProjectType==='02'"> | |||
<a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a> | |||
<!-- <a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a>--> | |||
<a @click="router.push({name:'projectDetail',query:{id:scope.row.projectId}})">详情</a> | |||
</template> | |||
<template v-if="queryProjectType==='03'"> | |||
<a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a> | |||
<!-- <a v-if="scope.row.status===10010" v-hasRole="['超级管理员']" @click="toEdit(scope.row)">编辑</a>--> | |||
<a @click="router.push({name:'projectDetail',query:{id:scope.row.projectId}})">详情</a> | |||
</template> | |||
</template> | |||
@@ -201,8 +201,8 @@ export const maintenanceColumn = [ | |||
}, | |||
{ | |||
label: '运维包', | |||
key: 'declaredAmount', | |||
prop: 'declaredAmount', | |||
key: 'operationPackageName', | |||
prop: 'operationPackageName', | |||
width: '150' | |||
}, | |||
{ | |||
@@ -263,12 +263,12 @@ onMounted(() => { | |||
style="width: 98%;" | |||
/> | |||
</el-descriptions-item> | |||
<el-descriptions-item label="发改编码"> | |||
{{ detailData.developCode || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="财政编码"> | |||
{{ detailData.financialCode || '-' }} | |||
</el-descriptions-item> | |||
<!-- <el-descriptions-item label="发改编码">--> | |||
<!-- {{ detailData.developCode || '-' }}--> | |||
<!-- </el-descriptions-item>--> | |||
<!-- <el-descriptions-item label="财政编码">--> | |||
<!-- {{ detailData.financialCode || '-' }}--> | |||
<!-- </el-descriptions-item>--> | |||
<el-descriptions-item label="绩效评价类型"> | |||
{{ templateTypeListData?.find(i => i.id === detailData.templateType)?.name || "-" }} | |||
</el-descriptions-item> | |||
@@ -278,7 +278,7 @@ onMounted(() => { | |||
>{{ detailData.isTemporaryAugment ? '是' : '否' }} | |||
</el-descriptions-item> | |||
<template v-if="detailData.status>10011"> | |||
<template v-if="detailData.status>10011&&detailData.projectType!=='04'&&detailData.projectType!=='05'"> | |||
<el-descriptions-item label="项目内容与预期成效" :span="2"> | |||
<table-list | |||
ref="tableList2" | |||
@@ -29,37 +29,44 @@ onMounted(async () => { | |||
class="mb-16" | |||
> | |||
<el-descriptions-item label="标段名称"> | |||
{{ item.bidName||'-' }} | |||
{{ item.bidName || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="供应商"> | |||
{{ item.supplier||'-' }} | |||
{{ item.supplier || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="供应商统一社会信用代码"> | |||
{{ item.supplierSocialCreditCode||'-' }} | |||
{{ item.supplierSocialCreditCode || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="供应商联系人"> | |||
{{ item.supplierContact||'-' }} | |||
{{ item.supplierContact || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="供应商联系方式"> | |||
{{ item.supplierContactInfo||'-' }} | |||
{{ item.supplierContactInfo || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="采购方式"> | |||
{{ dictionaryList?.filter(i => i.type === 'PURCHASE_METHOD').find(i=>i.value===item.purchaseMethod)?.label ||'-' }} | |||
{{ dictionaryList?.filter(i => i.type === 'PURCHASE_METHOD').find(i => i.value === item.purchaseMethod)?.label || '-' | |||
}} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="成交金额(万元)"> | |||
{{ item.transactionAmount||'-' }} | |||
{{ item.transactionAmount || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="成交时间"> | |||
{{ item.transactionTime||'-' }} | |||
{{ item.transactionTime || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="采购代理机构"> | |||
{{ item.agency||'-' }} | |||
{{ item.agency || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="采购代理机构统一社会信用代码"> | |||
{{ item.purchaseSocialCreditCode||'-' }} | |||
{{ item.purchaseSocialCreditCode || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="预算执行确认书编号"> | |||
{{ item.budgetExecConfirmNo||'-' }} | |||
<el-descriptions-item label="监理单位"> | |||
{{ item.supervisingUnit || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="监理单位统一社会信用代码"> | |||
{{ item.supervisingUnitCode || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="预算执行确认书编号" :span="2"> | |||
{{ item.budgetExecConfirmNo || '-' }} | |||
</el-descriptions-item> | |||
<el-descriptions-item label="投标文件" :span="2"> | |||
<p v-for="(file,key) in item.biddingDoc&&JSON.parse(item.biddingDoc)" :key="key" class="mb-4"> | |||
@@ -11,7 +11,7 @@ defineProps({ | |||
<template> | |||
<el-descriptions :column="2" border> | |||
<el-descriptions-item label="初步方案"> | |||
<el-descriptions-item label="项目申报书"> | |||
<p v-for="(item,index) in detailData.preliminaryPlanFile&&JSON.parse(detailData.preliminaryPlanFile)" :key="index" class="mb-4"> | |||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | |||
</p> | |||
@@ -31,16 +31,23 @@ defineProps({ | |||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | |||
</p> | |||
</el-descriptions-item> | |||
<el-descriptions-item v-if="detailData?.projectType!=='03'&&false" label="项目申报书"> | |||
<p v-for="(item,index) in detailData.projectApplicationForm&&JSON.parse(detailData.projectApplicationForm)" :key="index" class="mb-4"> | |||
<!-- <el-descriptions-item v-if="detailData?.projectType!=='03'&&false" label="项目申报书">--> | |||
<!-- <p v-for="(item,index) in detailData.projectApplicationForm&&JSON.parse(detailData.projectApplicationForm)" :key="index" class="mb-4">--> | |||
<!-- <accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" />--> | |||
<!-- </p>--> | |||
<!-- </el-descriptions-item>--> | |||
<el-descriptions-item v-if="detailData?.projectType!=='04'&&detailData?.projectType!=='05'" label="可行性研究报告"> | |||
<p v-for="(item,index) in detailData.baseResearchReportFile&&JSON.parse(detailData.baseResearchReportFile)" :key="index" class="mb-4"> | |||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | |||
</p> | |||
</el-descriptions-item> | |||
<el-descriptions-item v-if="detailData?.projectType!=='03'" label="可行性研究报告"> | |||
<p v-for="(item,index) in detailData.baseResearchReportFile&&JSON.parse(detailData.baseResearchReportFile)" :key="index" class="mb-4"> | |||
<el-descriptions-item v-if="detailData?.projectType==='04'||detailData?.projectType==='05'" label="运维方案"> | |||
<p v-for="(item,index) in detailData.operationPlan&&JSON.parse(detailData.operationPlan)" :key="index" class="mb-4"> | |||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | |||
</p> | |||
</el-descriptions-item> | |||
<el-descriptions-item v-if="detailData.constructionPlanFile&&JSON.parse(detailData.constructionPlanFile)?.length" label="建设方案"> | |||
<p v-for="(item,index) in detailData.constructionPlanFile&&JSON.parse(detailData.constructionPlanFile)" :key="index" class="mb-4"> | |||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | |||
@@ -64,8 +64,22 @@ const props = defineProps({ | |||
} | |||
} | |||
tabList.value = [...new Set(tabList.value)] | |||
if (props.detailData.projectType === '04' || props.detailData.projectType === '05') { | |||
removeTab('年度支付计划') | |||
removeTab('投资分配情况') | |||
removeTab('应用信息') | |||
} | |||
if (props.detailData.projectType === '03') { | |||
removeTab('应用信息') | |||
} | |||
} | |||
} | |||
function removeTab (name) { | |||
const index = tabList.value.indexOf(name) | |||
if (index > -1) { | |||
tabList.value.splice(index, 1) | |||
} | |||
} | |||
watch( | |||
() => props.detailData, | |||
async val => { | |||
@@ -1,5 +1,5 @@ | |||
<script name="summarizeInfo" setup> | |||
import { ref, onMounted } from 'vue' | |||
import { ref, onMounted, watch } from 'vue' | |||
import ApprovalInfo from './approvalInfo.vue' | |||
import ExpertReviewInfo from './expertReviewInfo.vue' | |||
import BiddingRegistration from './biddingRegistration.vue' | |||
@@ -12,7 +12,7 @@ import ImplementationPlan from '@/pages/projectStoreManage/projectStore/projectD | |||
import ReviewCheckList from '@/pages/projectStoreManage/projectStore/projectDetail/components/reviewCheckList.vue' | |||
import { getIsShowReviewCheck } from '@/utils/getIsShowReviewCheck' | |||
defineProps({ | |||
const props = defineProps({ | |||
detailData: Object | |||
}) | |||
const activeName = ref('专家评审'), | |||
@@ -21,30 +21,39 @@ const activeName = ref('专家评审'), | |||
'批复信息', | |||
'招标登记', | |||
'实施计划', | |||
'建设方案审查意见', | |||
// '建设方案审查意见', | |||
'合同登记', | |||
'初验登记', | |||
// '初验登记', | |||
'试运行报告', | |||
'终验信息', | |||
'项目变更' | |||
'终验信息' | |||
// '项目变更' | |||
]), | |||
setActiveName = (val) => { | |||
activeName.value = val | |||
} | |||
defineExpose({ setActiveName }) | |||
onMounted(() => { | |||
getTabs() | |||
}) | |||
function removeTab (name) { | |||
const index = tabList.value.indexOf(name) | |||
if (index > -1) { | |||
tabList.value.splice(index, 1) | |||
} | |||
} | |||
function getTabs () { | |||
if (getIsShowReviewCheck()) { | |||
tabList.value = [ | |||
'专家评审', | |||
'批复信息', | |||
'招标登记', | |||
'实施计划', | |||
'建设方案审查意见', | |||
// '建设方案审查意见', | |||
'合同登记', | |||
'初验登记', | |||
// '初验登记', | |||
'试运行报告', | |||
'终验信息', | |||
'项目变更' | |||
'终验信息' | |||
// '项目变更' | |||
] | |||
} else { | |||
tabList.value = [ | |||
@@ -53,13 +62,28 @@ onMounted(() => { | |||
'招标登记', | |||
'实施计划', | |||
'合同登记', | |||
'初验登记', | |||
// '初验登记', | |||
'试运行报告', | |||
'终验信息', | |||
'项目变更' | |||
'终验信息' | |||
// '项目变更' | |||
] | |||
} | |||
}) | |||
if (props.detailData.projectType === '04' || props.detailData.projectType === '05') { | |||
removeTab('批复信息') | |||
removeTab('合同登记') | |||
removeTab('试运行报告') | |||
removeTab('终验信息') | |||
} | |||
} | |||
watch( | |||
() => props.detailData, | |||
async val => { | |||
if (val?.id) { | |||
getTabs() | |||
} | |||
}, | |||
{ deep: true } | |||
) | |||
</script> | |||
<template> | |||
@@ -207,7 +207,7 @@ onMounted(async () => { | |||
:dictionary-list="dictionaryList" | |||
/> | |||
</el-tab-pane> | |||
<el-tab-pane label="归集信息" name="3"> | |||
<el-tab-pane v-if="detailData.projectType!=='03'" label="归集信息" name="3"> | |||
<summarize-info v-if="detailData" ref="summarizeInfoRef" :detail-data="constructDetailData||detailData" /> | |||
</el-tab-pane> | |||
</el-tabs> | |||
@@ -5,10 +5,12 @@ import VueSetupExtend from 'vite-plugin-vue-setup-extend' | |||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' | |||
import vueJsx from '@vitejs/plugin-vue-jsx' | |||
import path from 'path' | |||
// import vueDevTools from 'vite-plugin-vue-devtools' | |||
// https://vitejs.dev/config/ | |||
export default defineConfig(() => { | |||
return { | |||
plugins: [ | |||
// vueDevTools(), | |||
vue(), | |||
VueSetupExtend(), | |||
vueJsx({ | |||