Kaynağa Gözat

fix: bug

master
yxhc 1 hafta önce
ebeveyn
işleme
94f1712f53
17 değiştirilmiş dosya ile 384 ekleme ve 196 silme
  1. +1
    -1
      package-lock.json
  2. +1
    -1
      package.json
  3. +28
    -0
      src/http/apis/projectStoreManage/annualPlanStore.js
  4. +26
    -1
      src/pages/declareManage/projectDeclare/declarePage/components/accessory.vue
  5. +6
    -28
      src/pages/declareManage/projectDeclare/declarePage/components/basicInfo.vue
  6. +130
    -61
      src/pages/declareManage/projectDeclare/declarePage/index.vue
  7. +2
    -2
      src/pages/declareManage/purchaseResults/fillPurchasingResult/index.vue
  8. +61
    -53
      src/pages/projectStoreManage/components/operationDialog.vue
  9. +34
    -8
      src/pages/projectStoreManage/components/planList.vue
  10. +2
    -2
      src/pages/projectStoreManage/components/planlist.js
  11. +7
    -7
      src/pages/projectStoreManage/projectStore/projectDetail/components/basicInfo.vue
  12. +19
    -12
      src/pages/projectStoreManage/projectStore/projectDetail/components/biddingRegistration.vue
  13. +12
    -5
      src/pages/projectStoreManage/projectStore/projectDetail/components/filesInfo.vue
  14. +14
    -0
      src/pages/projectStoreManage/projectStore/projectDetail/components/projectInfo.vue
  15. +38
    -14
      src/pages/projectStoreManage/projectStore/projectDetail/components/summarizeInfo.vue
  16. +1
    -1
      src/pages/projectStoreManage/projectStore/projectDetail/index.vue
  17. +2
    -0
      vite.config.js

+ 1
- 1
package-lock.json Dosyayı Görüntüle

@@ -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",


+ 1
- 1
package.json Dosyayı Görüntüle

@@ -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",


+ 28
- 0
src/http/apis/projectStoreManage/annualPlanStore.js Dosyayı Görüntüle

@@ -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) // 年度计划-编辑

+ 26
- 1
src/pages/declareManage/projectDeclare/declarePage/components/accessory.vue Dosyayı Görüntüle

@@ -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


+ 6
- 28
src/pages/declareManage/projectDeclare/declarePage/components/basicInfo.vue Dosyayı Görüntüle

@@ -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


+ 130
- 61
src/pages/declareManage/projectDeclare/declarePage/index.vue Dosyayı Görüntüle

@@ -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>

+ 2
- 2
src/pages/declareManage/purchaseResults/fillPurchasingResult/index.vue Dosyayı Görüntüle

@@ -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>


+ 61
- 53
src/pages/projectStoreManage/components/operationDialog.vue Dosyayı Görüntüle

@@ -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">


+ 34
- 8
src/pages/projectStoreManage/components/planList.vue Dosyayı Görüntüle

@@ -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>


+ 2
- 2
src/pages/projectStoreManage/components/planlist.js Dosyayı Görüntüle

@@ -201,8 +201,8 @@ export const maintenanceColumn = [
},
{
label: '运维包',
key: 'declaredAmount',
prop: 'declaredAmount',
key: 'operationPackageName',
prop: 'operationPackageName',
width: '150'
},
{


+ 7
- 7
src/pages/projectStoreManage/projectStore/projectDetail/components/basicInfo.vue Dosyayı Görüntüle

@@ -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"


+ 19
- 12
src/pages/projectStoreManage/projectStore/projectDetail/components/biddingRegistration.vue Dosyayı Görüntüle

@@ -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">


+ 12
- 5
src/pages/projectStoreManage/projectStore/projectDetail/components/filesInfo.vue Dosyayı Görüntüle

@@ -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" />


+ 14
- 0
src/pages/projectStoreManage/projectStore/projectDetail/components/projectInfo.vue Dosyayı Görüntüle

@@ -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 => {


+ 38
- 14
src/pages/projectStoreManage/projectStore/projectDetail/components/summarizeInfo.vue Dosyayı Görüntüle

@@ -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>


+ 1
- 1
src/pages/projectStoreManage/projectStore/projectDetail/index.vue Dosyayı Görüntüle

@@ -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>


+ 2
- 0
vite.config.js Dosyayı Görüntüle

@@ -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({


Yükleniyor…
İptal
Kaydet