@@ -37,6 +37,8 @@ const exportList = { | |||||
export const declareExport = (state, params) => | export const declareExport = (state, params) => | ||||
http.get(exportList[state], { params, responseType: 'blob' }) // 导出列表 | http.get(exportList[state], { params, responseType: 'blob' }) // 导出列表 | ||||
export const firstCreatProjectEdit = (userId) => http.post(`/api/v1/user-info/first-creat-project-edit/${userId}`) | |||||
const projectStartList = { | const projectStartList = { | ||||
1: '/api/v1/declared/start', // 项目申报-新增 | 1: '/api/v1/declared/start', // 项目申报-新增 | ||||
2: '/api/v1/declared/restart' // 重新申报 | 2: '/api/v1/declared/restart' // 重新申报 | ||||
@@ -1,7 +1,14 @@ | |||||
<script name="basicInfo" setup> | <script name="basicInfo" setup> | ||||
import { nextTick, reactive, ref, onMounted, watch } from 'vue' | import { nextTick, reactive, ref, onMounted, watch } from 'vue' | ||||
import store from '@/store' | import store from '@/store' | ||||
import { fileFormatVerification, handleFileSuccess, handleFilePreview, handleFileError, reviewFileParam, fileTypes } from '@/utils/uploadAction.js' | |||||
import { | |||||
fileFormatVerification, | |||||
handleFileSuccess, | |||||
handleFilePreview, | |||||
handleFileError, | |||||
reviewFileParam, | |||||
fileTypes | |||||
} from '@/utils/uploadAction.js' | |||||
import { storeToRefs } from 'pinia' | import { storeToRefs } from 'pinia' | ||||
import { useRoute } from 'vue-router' | import { useRoute } from 'vue-router' | ||||
import { govStripList } from '@/http/apis/declareMange' | import { govStripList } from '@/http/apis/declareMange' | ||||
@@ -11,6 +18,7 @@ import RelatedProjectDialog from '@/pages/projectCollection/projectCollectionEnt | |||||
import ProjectContentDialog from '@/pages/projectCollection/projectCollectionEnter/components/projectContentDialog.vue' | import ProjectContentDialog from '@/pages/projectCollection/projectCollectionEnter/components/projectContentDialog.vue' | ||||
import { getOrganizationByCode } from '@/http/apis/commonApi' | import { getOrganizationByCode } from '@/http/apis/commonApi' | ||||
import { templateTypePage } from '@/http/apis/performanceEvaluation/indicatorTemplate' | import { templateTypePage } from '@/http/apis/performanceEvaluation/indicatorTemplate' | ||||
const props = defineProps({ | const props = defineProps({ | ||||
detailData: { | detailData: { | ||||
type: Object, | type: Object, | ||||
@@ -26,11 +34,7 @@ const props = defineProps({ | |||||
type: Number | type: Number | ||||
} | } | ||||
}) | }) | ||||
const { | |||||
fourSystem, | |||||
businessTerritory | |||||
// projectConTypeOptions | |||||
} = store.dictStore.globalDicts || {}, | |||||
const | |||||
route = useRoute(), | route = useRoute(), | ||||
uploadUrl = store.dictStore.uploadUrl, | uploadUrl = store.dictStore.uploadUrl, | ||||
userInfo = storeToRefs(store.userStore).userInfo || {}, | userInfo = storeToRefs(store.userStore).userInfo || {}, | ||||
@@ -81,9 +85,9 @@ const { | |||||
{ required: true, message: '请选择是否首次新建', trigger: 'change' } | { required: true, message: '请选择是否首次新建', trigger: 'change' } | ||||
], | ], | ||||
isInnovateWholeProvinceShare: [ | |||||
{ required: true, message: '请选择是否为一地创新全省共享项目', trigger: 'change' } | |||||
], | |||||
// isInnovateWholeProvinceShare: [ | |||||
// { required: true, message: '请选择是否为一地创新全省共享项目', trigger: 'change' } | |||||
// ], | |||||
isTemporaryAugment: [ | isTemporaryAugment: [ | ||||
{ required: true, message: '请选择是否为临时增补', trigger: 'change' } | { required: true, message: '请选择是否为临时增补', trigger: 'change' } | ||||
], | ], | ||||
@@ -120,18 +124,7 @@ const { | |||||
{ required: true, message: '请选择上级主管单位', trigger: 'change' } | { required: true, message: '请选择上级主管单位', trigger: 'change' } | ||||
], | ], | ||||
buildDuration: [{ required: true, message: '请选择建设起止年限', trigger: 'change' }], | buildDuration: [{ required: true, message: '请选择建设起止年限', trigger: 'change' }], | ||||
fourSystems: [{ required: true, message: '请选择四大体系', trigger: 'change' }], | |||||
templateType: [{ required: true, message: '请选择绩效评价类型', trigger: 'change' }], | templateType: [{ required: true, message: '请选择绩效评价类型', trigger: 'change' }], | ||||
isDigitalReform: [ | |||||
{ | |||||
required: true, | |||||
message: '请选择是否数字化改革项目', | |||||
trigger: 'change' | |||||
} | |||||
], | |||||
bizDomain: [ | |||||
{ required: true, message: '请选择综合业务领域', trigger: 'change' } | |||||
], | |||||
buildLevel: [{ required: true, message: '请选择建设层级', trigger: 'change' }], | buildLevel: [{ required: true, message: '请选择建设层级', trigger: 'change' }], | ||||
lowestLevel: [{ required: true, message: '请选择贯通层级', trigger: 'change' }], | lowestLevel: [{ required: true, message: '请选择贯通层级', trigger: 'change' }], | ||||
baseProjBasis: [{ required: true, message: '请选择立项依据', trigger: 'change' }], | baseProjBasis: [{ required: true, message: '请选择立项依据', trigger: 'change' }], | ||||
@@ -140,12 +133,14 @@ const { | |||||
financialCode: [{ required: true, message: '请填写财政编码', trigger: 'blur' }], | financialCode: [{ required: true, message: '请填写财政编码', trigger: 'blur' }], | ||||
isCloud: [{ required: true, message: '请选择是否上云', trigger: 'change' }], | isCloud: [{ required: true, message: '请选择是否上云', trigger: 'change' }], | ||||
cloudType: [{ required: true, message: '请选择云类型', trigger: 'change' }], | cloudType: [{ required: true, message: '请选择云类型', trigger: 'change' }], | ||||
systemPosition: [{ required: true, message: '请输入系统定位', trigger: 'blur' }], | |||||
projectIntroduction: [{ required: true, message: '请输入项目简介', trigger: 'blur' }], | |||||
projectOverview: [{ required: true, message: '请输入项目概述', trigger: 'blur' }], | |||||
baseHistorProjs: [{ required: true, message: '请至少关联一个历年项目' }], | baseHistorProjs: [{ required: true, message: '请至少关联一个历年项目' }], | ||||
beseExpectedResults: [{ required: true, message: '请至少添加一个项目内容与预期成效' }], | beseExpectedResults: [{ required: true, message: '请至少添加一个项目内容与预期成效' }], | ||||
projectYear: [{ required: true, message: '请选择预算年度' }], | projectYear: [{ required: true, message: '请选择预算年度' }], | ||||
declareAmount: [{ required: true, message: '请输入申报金额', trigger: 'blur' }, { validator: moneyValidator, trigger: 'blur' }], | |||||
declareAmount: [{ required: true, message: '请输入申报金额', trigger: 'blur' }, { | |||||
validator: moneyValidator, | |||||
trigger: 'blur' | |||||
}], | |||||
annualPlanAmount: [ | annualPlanAmount: [ | ||||
{ required: true, message: '请输入年度支付金额', trigger: 'blur' }, | { required: true, message: '请输入年度支付金额', trigger: 'blur' }, | ||||
{ validator: moneyValidator, trigger: 'blur' } | { validator: moneyValidator, trigger: 'blur' } | ||||
@@ -234,7 +229,7 @@ const { | |||||
projectType: data.projectType, | projectType: data.projectType, | ||||
isFirst: data.isFirst, | isFirst: data.isFirst, | ||||
baseConstructionType: data?.baseConstructionType?.split(';') || undefined, | baseConstructionType: data?.baseConstructionType?.split(';') || undefined, | ||||
isInnovateWholeProvinceShare: data.isInnovateWholeProvinceShare, | |||||
// isInnovateWholeProvinceShare: data.isInnovateWholeProvinceShare, | |||||
isTemporaryAugment: data.isTemporaryAugment, | isTemporaryAugment: data.isTemporaryAugment, | ||||
responsibleMan: data.responsibleMan, | responsibleMan: data.responsibleMan, | ||||
responsibleManMobile: data.responsibleManMobile, | responsibleManMobile: data.responsibleManMobile, | ||||
@@ -249,10 +244,7 @@ const { | |||||
higherSuperOrgCode: data.higherSuperOrgCode, | higherSuperOrgCode: data.higherSuperOrgCode, | ||||
higherSuperOrg: data.higherSuperOrg, | higherSuperOrg: data.higherSuperOrg, | ||||
buildDuration: data.beginTime && data.endTime ? [data.beginTime, data.endTime] : [], | buildDuration: data.beginTime && data.endTime ? [data.beginTime, data.endTime] : [], | ||||
fourSystems: data.fourSystems, | |||||
templateType: data.templateType, | templateType: data.templateType, | ||||
isDigitalReform: data.isDigitalReform, | |||||
bizDomain: data.bizDomain && data.isDigitalReform === 1 ? data.bizDomain.split(',') : undefined, | |||||
buildLevel: data.buildLevel, | buildLevel: data.buildLevel, | ||||
lowestLevel: data.lowestLevel, | lowestLevel: data.lowestLevel, | ||||
buildBasis: undefined, | buildBasis: undefined, | ||||
@@ -268,9 +260,7 @@ const { | |||||
baseBasisEstablish: data.baseBasisEstablish || '', | baseBasisEstablish: data.baseBasisEstablish || '', | ||||
developCode: data.developCode, | developCode: data.developCode, | ||||
financialCode: data.financialCode, | financialCode: data.financialCode, | ||||
isCloud: data.isCloud, | |||||
cloudType: data.cloudType && data.cloudType.split(',') || [], | |||||
systemPosition: data.systemPosition, | |||||
projectOverview: data.projectOverview, | |||||
projectIntroduction: data.projectIntroduction, | projectIntroduction: data.projectIntroduction, | ||||
baseHistorProjs: data?.baseHistorProjId?.split(';').map((i, k) => { | baseHistorProjs: data?.baseHistorProjId?.split(';').map((i, k) => { | ||||
return { | return { | ||||
@@ -526,9 +516,6 @@ onMounted(() => { | |||||
getCode('orgCreditCode') | getCode('orgCreditCode') | ||||
}) | }) | ||||
watch(() => props.declareAmount, val => { | watch(() => props.declareAmount, val => { | ||||
if (val >= 1000) { | |||||
formData.value.isDigitalReform = 1 | |||||
} | |||||
}) | }) | ||||
defineExpose({ validForm, formData, setFormData }) | defineExpose({ validForm, formData, setFormData }) | ||||
@@ -577,7 +564,10 @@ watch(() => formData.value, val => { | |||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="项目类型" prop="projectType"> | <el-form-item label="项目类型" prop="projectType"> | ||||
<el-radio-group v-model="formData.projectType" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio-group | |||||
v-model="formData.projectType" | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
> | |||||
<el-radio label="01">首次建设</el-radio> | <el-radio label="01">首次建设</el-radio> | ||||
<el-radio label="02">迭代升级</el-radio> | <el-radio label="02">迭代升级</el-radio> | ||||
</el-radio-group> | </el-radio-group> | ||||
@@ -586,30 +576,42 @@ watch(() => formData.value, val => { | |||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="内容类别" prop="baseConstructionType"> | <el-form-item label="内容类别" prop="baseConstructionType"> | ||||
<el-checkbox-group v-model="formData.baseConstructionType"> | <el-checkbox-group v-model="formData.baseConstructionType"> | ||||
<el-checkbox v-for="(item,index) in dictionaryList?.filter(i => i.type === 'CONTENT_TYPE')" :key="index" :label="item.value">{{ item.label }}</el-checkbox> | |||||
<el-checkbox | |||||
v-for="(item,index) in dictionaryList?.filter(i => i.type === 'CONTENT_TYPE')" | |||||
:key="index" | |||||
:label="item.value" | |||||
>{{ item.label }} | |||||
</el-checkbox> | |||||
</el-checkbox-group> | </el-checkbox-group> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<template v-if="formData.baseProjIsConfidentiality==='01'"> | <template v-if="formData.baseProjIsConfidentiality==='01'"> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="是否首次新建" prop="isFirst"> | <el-form-item label="是否首次新建" prop="isFirst"> | ||||
<el-radio-group v-model="formData.isFirst" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" @change="changeIsFirst"> | |||||
<el-radio-group | |||||
v-model="formData.isFirst" | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
@change="changeIsFirst" | |||||
> | |||||
<el-radio :label="1">是</el-radio> | <el-radio :label="1">是</el-radio> | ||||
<el-radio :label="0">否</el-radio> | <el-radio :label="0">否</el-radio> | ||||
</el-radio-group> | </el-radio-group> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | |||||
<el-form-item label="是否一地创新全省共享项目" label-width="auto" prop="isInnovateWholeProvinceShare"> | |||||
<el-radio-group v-model="formData.isInnovateWholeProvinceShare" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio :label="true">是</el-radio> | |||||
<el-radio :label="false">否</el-radio> | |||||
</el-radio-group> | |||||
</el-form-item> | |||||
</el-col> | |||||
<!-- <el-col :span="12">--> | |||||
<!-- <el-form-item label="是否一地创新全省共享项目" label-width="auto" prop="isInnovateWholeProvinceShare">--> | |||||
<!-- <el-radio-group v-model="formData.isInnovateWholeProvinceShare" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)">--> | |||||
<!-- <el-radio :label="true">是</el-radio>--> | |||||
<!-- <el-radio :label="false">否</el-radio>--> | |||||
<!-- </el-radio-group>--> | |||||
<!-- </el-form-item>--> | |||||
<!-- </el-col>--> | |||||
<el-col v-if="route.name!='planEdit'" :span="12"> | <el-col v-if="route.name!='planEdit'" :span="12"> | ||||
<el-form-item label="是否临时增补" prop="isTemporaryAugment"> | <el-form-item label="是否临时增补" prop="isTemporaryAugment"> | ||||
<el-radio-group v-model="formData.isTemporaryAugment" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio-group | |||||
v-model="formData.isTemporaryAugment" | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
> | |||||
<el-radio :label="1">是</el-radio> | <el-radio :label="1">是</el-radio> | ||||
<el-radio :label="0">否</el-radio> | <el-radio :label="0">否</el-radio> | ||||
</el-radio-group> | </el-radio-group> | ||||
@@ -690,7 +692,11 @@ watch(() => formData.value, val => { | |||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="上级主管单位类型" prop="baseProvManDeprtType"> | <el-form-item label="上级主管单位类型" prop="baseProvManDeprtType"> | ||||
<el-radio-group v-model="formData.baseProvManDeprtType" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" @change="changeBaseProvManDeprtType"> | |||||
<el-radio-group | |||||
v-model="formData.baseProvManDeprtType" | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
@change="changeBaseProvManDeprtType" | |||||
> | |||||
<el-radio label="1">省级</el-radio> | <el-radio label="1">省级</el-radio> | ||||
<el-radio label="2">非省级</el-radio> | <el-radio label="2">非省级</el-radio> | ||||
</el-radio-group> | </el-radio-group> | ||||
@@ -698,7 +704,11 @@ watch(() => formData.value, val => { | |||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="上级主管单位" prop="higherSuperOrg"> | <el-form-item label="上级主管单位" prop="higherSuperOrg"> | ||||
<el-input v-if="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" v-model="formData.higherSuperOrg" disabled /> | |||||
<el-input | |||||
v-if="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
v-model="formData.higherSuperOrg" | |||||
disabled | |||||
/> | |||||
<el-input | <el-input | ||||
v-else-if="formData.baseProvManDeprtType==='1'" | v-else-if="formData.baseProvManDeprtType==='1'" | ||||
v-model="formData.higherSuperOrg" | v-model="formData.higherSuperOrg" | ||||
@@ -717,7 +727,11 @@ watch(() => formData.value, val => { | |||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="本级主管单位" prop="superOrg"> | <el-form-item label="本级主管单位" prop="superOrg"> | ||||
<el-input v-if="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" v-model="formData.superOrg" disabled /> | |||||
<el-input | |||||
v-if="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
v-model="formData.superOrg" | |||||
disabled | |||||
/> | |||||
<el-input | <el-input | ||||
v-else | v-else | ||||
v-model="formData.superOrg" | v-model="formData.superOrg" | ||||
@@ -731,20 +745,20 @@ watch(() => formData.value, val => { | |||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="本级主管单位统一社会信用代码" prop="superOrgCreditCode"> | <el-form-item label="本级主管单位统一社会信用代码" prop="superOrgCreditCode"> | ||||
<el-input v-model="formData.superOrgCreditCode" placeholder="请填写" :disabled="isDisabledCreditCode['superOrgCreditCode']||$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" /> | |||||
<el-input | |||||
v-model="formData.superOrgCreditCode" | |||||
placeholder="请填写" | |||||
:disabled="isDisabledCreditCode['superOrgCreditCode']||$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
/> | |||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<template v-if="formData.baseProjIsConfidentiality==='01'"> | <template v-if="formData.baseProjIsConfidentiality==='01'"> | ||||
<el-col :span="24"> | <el-col :span="24"> | ||||
<el-form-item label="四大体系" prop="fourSystems"> | |||||
<el-radio-group v-model="formData.fourSystems" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio v-for="(v,k) in fourSystem" :key="k" :label="k*1">{{ v }}</el-radio> | |||||
</el-radio-group> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="24"> | |||||
<el-form-item label="绩效评价类型" prop="templateType"> | <el-form-item label="绩效评价类型" prop="templateType"> | ||||
<el-radio-group v-model="formData.templateType" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio-group | |||||
v-model="formData.templateType" | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
> | |||||
<el-radio | <el-radio | ||||
v-for="(v,k) in templateTypeListData" | v-for="(v,k) in templateTypeListData" | ||||
:key="k" | :key="k" | ||||
@@ -755,32 +769,6 @@ watch(() => formData.value, val => { | |||||
</el-radio-group> | </el-radio-group> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="12"> | |||||
<el-form-item label="是否数字化改革项目" prop="isDigitalReform"> | |||||
<el-radio-group v-model="formData.isDigitalReform" :disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)"> | |||||
<el-radio :label="1">是</el-radio> | |||||
<el-radio :label="0">否</el-radio> | |||||
</el-radio-group> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="12"> | |||||
<el-form-item v-if="formData.isDigitalReform === 1" label="综合业务领域" prop="bizDomain"> | |||||
<el-select | |||||
v-model="formData.bizDomain" | |||||
placeholder="请选择" | |||||
class="w-full" | |||||
multiple | |||||
:disabled="$route.name==='declarePlan'||[10012,10013,10016].includes(detailData?.status)" | |||||
> | |||||
<el-option | |||||
v-for="(v, k) in businessTerritory" | |||||
:key="k" | |||||
:label="v" | |||||
:value="k" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="24"> | <el-col :span="24"> | ||||
<el-form-item label="建设层级" prop="buildLevel"> | <el-form-item label="建设层级" prop="buildLevel"> | ||||
<el-radio-group v-model="formData.buildLevel"> | <el-radio-group v-model="formData.buildLevel"> | ||||
@@ -793,7 +781,10 @@ watch(() => formData.value, val => { | |||||
</el-radio-group> | </el-radio-group> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col v-if="!(formData?.baseConstructionType?.includes('03')&&!formData?.baseConstructionType?.includes('01'))" :span="24"> | |||||
<el-col | |||||
v-if="!(formData?.baseConstructionType?.includes('03')&&!formData?.baseConstructionType?.includes('01'))" | |||||
:span="24" | |||||
> | |||||
<el-form-item v-if="formData?.baseConstructionType?.includes('01')" label="贯通层级" prop="lowestLevel"> | <el-form-item v-if="formData?.baseConstructionType?.includes('01')" label="贯通层级" prop="lowestLevel"> | ||||
<el-radio-group v-model="formData.lowestLevel"> | <el-radio-group v-model="formData.lowestLevel"> | ||||
<el-radio | <el-radio | ||||
@@ -826,7 +817,9 @@ watch(() => formData.value, val => { | |||||
@selection-change="selectionChange" | @selection-change="selectionChange" | ||||
> | > | ||||
<template #fileName="{scope}"> | <template #fileName="{scope}"> | ||||
<el-form-item v-if="formData.baseProjBasis&&formData.baseProjBasis.map(i=>i.value).includes(scope.row.value)"> | |||||
<el-form-item | |||||
v-if="formData.baseProjBasis&&formData.baseProjBasis.map(i=>i.value).includes(scope.row.value)" | |||||
> | |||||
<el-input | <el-input | ||||
:value="formData.baseProjBasis[formData.baseProjBasis.findIndex(i=>i.value===scope.row.value)]?.fileList?.[0]?.name" | :value="formData.baseProjBasis[formData.baseProjBasis.findIndex(i=>i.value===scope.row.value)]?.fileList?.[0]?.name" | ||||
placeholder="请输入" | placeholder="请输入" | ||||
@@ -917,38 +910,9 @@ watch(() => formData.value, val => { | |||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="24"> | <el-col :span="24"> | ||||
<el-form-item label="是否上云" prop="isCloud"> | |||||
<el-radio-group v-model="formData.isCloud"> | |||||
<el-radio :label="1">是</el-radio> | |||||
<el-radio :label="0">否</el-radio> | |||||
</el-radio-group> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col v-if="formData.isCloud===1" :span="24"> | |||||
<el-form-item label="云类型" prop="cloudType"> | |||||
<el-checkbox-group v-model="formData.cloudType"> | |||||
<el-checkbox label="1">政务云(非信创)</el-checkbox> | |||||
<el-checkbox label="2">政务云(信创)</el-checkbox> | |||||
<el-checkbox label="3">其他</el-checkbox> | |||||
</el-checkbox-group> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="24"> | |||||
<el-form-item label="系统定位" prop="systemPosition"> | |||||
<el-form-item label="项目概述" prop="projectOverview"> | |||||
<el-input | <el-input | ||||
v-model="formData.systemPosition" | |||||
:rows="4" | |||||
type="textarea" | |||||
placeholder="请输入" | |||||
show-word-limit | |||||
maxlength="2000" | |||||
/> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="24"> | |||||
<el-form-item label="项目简介" prop="projectIntroduction"> | |||||
<el-input | |||||
v-model="formData.projectIntroduction" | |||||
v-model="formData.projectOverview" | |||||
:rows="4" | :rows="4" | ||||
type="textarea" | type="textarea" | ||||
placeholder="请输入" | placeholder="请输入" | ||||
@@ -991,7 +955,7 @@ watch(() => formData.value, val => { | |||||
</table-list> | </table-list> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="24"> | |||||
<el-col v-if="($route.name==='declarePlan')||([10012,10016,10013].includes(detailData.status))" :span="24"> | |||||
<el-form-item label="项目内容与预期成效" prop="beseExpectedResults"> | <el-form-item label="项目内容与预期成效" prop="beseExpectedResults"> | ||||
<table-list | <table-list | ||||
:pagination="false" | :pagination="false" | ||||
@@ -1012,7 +976,8 @@ watch(() => formData.value, val => { | |||||
plain | plain | ||||
icon="Plus" | icon="Plus" | ||||
@click="()=>showProjectContentDialog()" | @click="()=>showProjectContentDialog()" | ||||
>添加</el-button> | |||||
>添加 | |||||
</el-button> | |||||
</p> | </p> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
@@ -1095,10 +1060,12 @@ watch(() => formData.value, val => { | |||||
<el-button | <el-button | ||||
type="primary" | type="primary" | ||||
@click="getTableData" | @click="getTableData" | ||||
>查询</el-button> | |||||
>查询 | |||||
</el-button> | |||||
<el-button | <el-button | ||||
@click="reset" | @click="reset" | ||||
>重置</el-button> | |||||
>重置 | |||||
</el-button> | |||||
</div> | </div> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
@@ -1146,14 +1113,16 @@ watch(() => formData.value, val => { | |||||
</template> | </template> | ||||
<style lang="less"> | <style lang="less"> | ||||
.el-upload-list{ | |||||
.el-upload-list { | |||||
width: 100%; | width: 100%; | ||||
} | } | ||||
.basicUploadItem{ | |||||
.el-upload-list__item-file-name{ | |||||
.basicUploadItem { | |||||
.el-upload-list__item-file-name { | |||||
white-space: pre-wrap; | white-space: pre-wrap; | ||||
} | } | ||||
.el-form-item__error{ | |||||
.el-form-item__error { | |||||
top: 60%; | top: 60%; | ||||
width: 100%; | width: 100%; | ||||
text-align: center; | text-align: center; | ||||
@@ -0,0 +1,284 @@ | |||||
<template> | |||||
<el-form | |||||
ref="ruleFormRef" | |||||
:model="formData" | |||||
label-position="right" | |||||
label-width="180px" | |||||
label-suffix=":" | |||||
scroll-to-error | |||||
:rules="rules" | |||||
:validate-on-rule-change="false" | |||||
> | |||||
<el-form-item label="移动端入口" prop="mobileTerminalEntry"> | |||||
<el-checkbox-group v-model="formData.mobileTerminalEntry"> | |||||
<el-checkbox | |||||
v-for="item in mobileType" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.value" | |||||
/> | |||||
</el-checkbox-group> | |||||
</el-form-item> | |||||
<el-form-item label="是否使用云资源"> | |||||
<el-switch | |||||
v-model="formData.isCloudResource" | |||||
active-value="1" | |||||
inactive-value="0" | |||||
/> | |||||
</el-form-item> | |||||
<el-form-item v-if="formData.isCloudResource==='1'" prop="cloudResource"> | |||||
<el-table :data="formData.cloudResource" style="width: 100%"> | |||||
<el-table-column type="index" label="序号" width="60" /> | |||||
<el-table-column prop="state" label="*云资源类型"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`cloudResource[${scope.$index}].cloudResourceType`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.cloudResource[scope.$index].cloudResourceType" | |||||
placeholder="云资源类型" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="city" label="*基础规格"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`cloudResource[${scope.$index}].baseSpecification`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.cloudResource[scope.$index].baseSpecification" | |||||
placeholder="基础规格" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="address" label="*台数"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`cloudResource[${scope.$index}].serversCount`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.cloudResource[scope.$index].serversCount" | |||||
placeholder="台数" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="zip" label="描述"> | |||||
<template #default="scope"> | |||||
<el-form-item> | |||||
<el-input | |||||
v-model="formData.cloudResource[scope.$index].description" | |||||
placeholder="描述" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column fixed="right" label="操作"> | |||||
<template #default="scope"> | |||||
<el-button link type="primary" @click="formData.cloudResource.splice(scope.$index,1)">删除</el-button> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
<el-button | |||||
type="primary" | |||||
plain | |||||
icon="Plus" | |||||
class="w-full mb-8" | |||||
@click="formData.cloudResource.push({})" | |||||
>添加云资源 | |||||
</el-button> | |||||
</el-form-item> | |||||
<el-form-item label="是否产生数据"> | |||||
<el-switch | |||||
v-model="formData.isProduceData" | |||||
active-value="1" | |||||
inactive-value="0" | |||||
/> | |||||
</el-form-item> | |||||
<el-form-item v-if="formData.isProduceData==='1'" prop="isProduceData"> | |||||
<el-table :data="formData.produceData" style="width: 100%"> | |||||
<el-table-column type="index" label="序号" width="60" /> | |||||
<el-table-column prop="state" label="*数据目录名称"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`produceData[${scope.$index}].dataDirectoryName`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.produceData[scope.$index].dataDirectoryName" | |||||
placeholder="数据目录名称" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="city" label="*数据项"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`produceData[${scope.$index}].dataItem`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.produceData[scope.$index].dataItem" | |||||
placeholder="数据项" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column fixed="right" label="操作"> | |||||
<template #default="scope"> | |||||
<el-button link type="primary" @click="formData.produceData.splice(scope.$index,1)">删除</el-button> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
<el-button | |||||
type="primary" | |||||
plain | |||||
icon="Plus" | |||||
class="w-full mb-8" | |||||
@click="formData.produceData.push({})" | |||||
>添加数据项 | |||||
</el-button> | |||||
</el-form-item> | |||||
<el-form-item label="是否使用公共组件"> | |||||
<el-switch | |||||
v-model="formData.isCommonComponent" | |||||
active-value="1" | |||||
inactive-value="0" | |||||
/> | |||||
</el-form-item> | |||||
<el-form-item v-if="formData.isCommonComponent==='1'" prop="isProduceData"> | |||||
<el-table :data="formData.commonComponent" style="width: 100%"> | |||||
<el-table-column type="index" label="序号" width="60" /> | |||||
<el-table-column prop="state" label="*公告组件名称"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`commonComponent[${scope.$index}].componentName`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.commonComponent[scope.$index].componentName" | |||||
placeholder="数据目录名称" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column prop="city" label="*公共组件类型"> | |||||
<template #default="scope"> | |||||
<el-form-item | |||||
:prop="`commonComponent[${scope.$index}].componentType`" | |||||
:rules="[{required:true,message:''}]" | |||||
> | |||||
<el-input | |||||
v-model="formData.commonComponent[scope.$index].componentType" | |||||
placeholder="数据项" | |||||
/> | |||||
</el-form-item> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column fixed="right" label="操作"> | |||||
<template #default="scope"> | |||||
<el-button link type="primary" @click="formData.commonComponent.splice(scope.$index,1)">删除</el-button> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
<el-button | |||||
type="primary" | |||||
plain | |||||
icon="Plus" | |||||
class="w-full mb-8" | |||||
@click="formData.commonComponent.push({})" | |||||
>添加组件 | |||||
</el-button> | |||||
</el-form-item> | |||||
</el-form> | |||||
</template> | |||||
<script setup> | |||||
import { ref } from 'vue' | |||||
const ruleFormRef = ref() | |||||
const formData = ref({ | |||||
mobileTerminalEntry: [], | |||||
cloudResource: [ | |||||
{ | |||||
cloudResourceType: '', // - 云资源类型 | |||||
baseSpecification: '', // - 基础规格 | |||||
serversCount: '', // - 台数 | |||||
description: '' // - 描述 | |||||
} | |||||
], | |||||
produceData: [ | |||||
{ | |||||
dataDirectoryName: '', // - 数据目录名称 | |||||
dataItem: '' // - 数据项 | |||||
} | |||||
], | |||||
commonComponent: [ | |||||
{ | |||||
componentName: '', // - 组件名称 | |||||
componentType: '' // - 公共组件类型 | |||||
} | |||||
], | |||||
isCloudResource: '0', | |||||
isProduceData: '0', | |||||
isCommonComponent: '0' | |||||
}) | |||||
const rules = { | |||||
mobileTerminalEntry: [{ required: true, message: '请选择移动端入口' }], | |||||
cloudResource: [{ required: true, message: '请至少添加一个云资源' }], | |||||
produceData: [{ required: true, message: '请至少添加一个产生数据' }], | |||||
commonComponent: [{ required: true, message: '请至少添加一个公共组件' }] | |||||
} | |||||
function validForm (callback) { | |||||
ruleFormRef.value.validate(valid => { | |||||
callback(valid) | |||||
}) | |||||
} | |||||
defineExpose({ validForm, formData }) | |||||
// const submit = async (formEl) => { | |||||
// if (!formEl) return | |||||
// await formEl.validate((valid, fields) => { | |||||
// if (valid) { | |||||
// console.log('submit!') | |||||
// } else { | |||||
// console.log('error submit!', fields) | |||||
// } | |||||
// }) | |||||
// } | |||||
const mobileType = ref([ | |||||
{ | |||||
label: '浙里办', | |||||
value: '1' | |||||
}, | |||||
{ | |||||
label: '浙政钉', | |||||
value: '2' | |||||
}, | |||||
{ | |||||
label: '其他', | |||||
value: '3' | |||||
}, | |||||
{ | |||||
label: '无移动端', | |||||
value: '4' | |||||
} | |||||
]) | |||||
</script> | |||||
<style scoped lang="less"> | |||||
</style> |
@@ -5,6 +5,7 @@ import { useRoute, useRouter } from 'vue-router' | |||||
import { storeToRefs } from 'pinia' | import { storeToRefs } from 'pinia' | ||||
import store from '@/store' | import store from '@/store' | ||||
import BasicInfo from './components/basicInfo.vue' | import BasicInfo from './components/basicInfo.vue' | ||||
import plannedUseResources from './components/plannedUseResources.vue' | |||||
import FundsInfo from './components/fundsInfo.vue' | import FundsInfo from './components/fundsInfo.vue' | ||||
import FundsAllocation from './components/fundsAllocation.vue' | import FundsAllocation from './components/fundsAllocation.vue' | ||||
import AnnualPaymentPlan from './components/annualPaymentPlan.vue' | import AnnualPaymentPlan from './components/annualPaymentPlan.vue' | ||||
@@ -34,6 +35,7 @@ const { proxy } = getCurrentInstance(), | |||||
formConfig = ref({}), | formConfig = ref({}), | ||||
collapseModal = ref(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']), | collapseModal = ref(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']), | ||||
basicInfoRef = ref(), // 基本信息 | basicInfoRef = ref(), // 基本信息 | ||||
planndedUseResourcesRef = ref(), // 计划使用资源 | |||||
fundsInfoRef = ref(), // 资金申报情况 | fundsInfoRef = ref(), // 资金申报情况 | ||||
fundsAllocationRef = ref(), // 资金分配情况 | fundsAllocationRef = ref(), // 资金分配情况 | ||||
provincialExamineRef = ref(), // 重大项目省级联审 | provincialExamineRef = ref(), // 重大项目省级联审 | ||||
@@ -154,6 +156,11 @@ const { proxy } = getCurrentInstance(), | |||||
} | } | ||||
}) | }) | ||||
})) | })) | ||||
planndedUseResourcesRef.value && form.push(new Promise((resolve, reject) => { | |||||
planndedUseResourcesRef.value.validForm((valid) => { | |||||
if (valid) resolve() | |||||
}) | |||||
})) | |||||
} | } | ||||
Promise.all([...form]).then(async () => { | Promise.all([...form]).then(async () => { | ||||
if (basicInfoRef.value.formData?.baseProjIsConfidentiality === '02') { | if (basicInfoRef.value.formData?.baseProjIsConfidentiality === '02') { | ||||
@@ -266,7 +273,8 @@ const { proxy } = getCurrentInstance(), | |||||
...basicInfoRef.value.formData, | ...basicInfoRef.value.formData, | ||||
...fundsInfoRef.value.formData, | ...fundsInfoRef.value.formData, | ||||
...fundsAllocationRef.value.formData, | ...fundsAllocationRef.value.formData, | ||||
bizDomain: basicInfoRef.value.formData?.isDigitalReform === 1 ? basicInfoRef.value.formData.bizDomain.join(',') : undefined, | |||||
...planndedUseResourcesRef.value?.formData, | |||||
// bizDomain: basicInfoRef.value.formData?.isDigitalReform === 1 ? basicInfoRef.value.formData.bizDomain.join(',') : undefined, | |||||
baseConstructionType: basicInfoRef.value.formData?.baseConstructionType?.join(';') || '', | baseConstructionType: basicInfoRef.value.formData?.baseConstructionType?.join(';') || '', | ||||
baseProvManDeprtType: basicInfoRef.value.formData.baseProvManDeprtType * 1 || undefined, | baseProvManDeprtType: basicInfoRef.value.formData.baseProvManDeprtType * 1 || undefined, | ||||
projectYear: fundsInfoRef.value.formData?.projectYear * 1, | projectYear: fundsInfoRef.value.formData?.projectYear * 1, | ||||
@@ -277,7 +285,7 @@ const { proxy } = getCurrentInstance(), | |||||
// buildBasis: buildBasis && JSON.stringify(buildBasis), | // buildBasis: buildBasis && JSON.stringify(buildBasis), | ||||
baseProjBasis: basicInfoRef.value.formData?.baseProjBasis?.map(i => i.value)?.join(';') || undefined, | baseProjBasis: basicInfoRef.value.formData?.baseProjBasis?.map(i => i.value)?.join(';') || undefined, | ||||
baseProjBasisFile: basicInfoRef.value.formData?.baseProjBasis?.map(i => i.fileList && JSON.stringify(changFilesParam(i.fileList)))?.join(';') || '', | baseProjBasisFile: basicInfoRef.value.formData?.baseProjBasis?.map(i => i.fileList && JSON.stringify(changFilesParam(i.fileList)))?.join(';') || '', | ||||
cloudType: basicInfoRef.value.formData?.isCloud && basicInfoRef.value.formData?.cloudType?.length && basicInfoRef.value.formData.cloudType.join(',') || undefined, | |||||
// cloudType: basicInfoRef.value.formData?.isCloud && basicInfoRef.value.formData?.cloudType?.length && basicInfoRef.value.formData.cloudType.join(',') || undefined, | |||||
baseHistorProjId: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjId)?.join(';') || '', | baseHistorProjId: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjId)?.join(';') || '', | ||||
baseHistorProjName: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjName)?.join(';') || '', | baseHistorProjName: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjName)?.join(';') || '', | ||||
baseHistorProjYear: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjSetYear)?.join(';') || '', | baseHistorProjYear: basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjSetYear)?.join(';') || '', | ||||
@@ -606,6 +614,7 @@ onMounted(async () => { | |||||
<el-row> | <el-row> | ||||
<el-col class="leftCol" :span="24"> | <el-col class="leftCol" :span="24"> | ||||
<el-collapse v-model="collapseModal"> | <el-collapse v-model="collapseModal"> | ||||
<el-collapse-item name="1" class="mb-16"> | <el-collapse-item name="1" class="mb-16"> | ||||
<template #title> | <template #title> | ||||
<div class="collapse-title">基本信息</div> | <div class="collapse-title">基本信息</div> | ||||
@@ -748,8 +757,18 @@ onMounted(async () => { | |||||
<div class="p-24"> | <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> | </div> | ||||
</el-collapse-item> | |||||
<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> | |||||
<div class="p-24"> | |||||
<planned-use-resources ref="planndedUseResourcesRef" /> | |||||
</div> | |||||
</el-collapse-item> | </el-collapse-item> | ||||
</template> | </template> | ||||
</el-collapse> | </el-collapse> | ||||
</el-col> | </el-col> | ||||
</el-row> | </el-row> | ||||
@@ -1,14 +1,17 @@ | |||||
<script setup name = 'projectDeclare'> | |||||
<script setup name='projectDeclare'> | |||||
import { ref, reactive, h, onMounted, getCurrentInstance } from 'vue' | import { ref, reactive, h, onMounted, getCurrentInstance } from 'vue' | ||||
import { useRouter } from 'vue-router' | import { useRouter } from 'vue-router' | ||||
import { getProjectList, draftList, declareExport, removeProject } from '@/http/apis/declareMange' | |||||
import { getProjectList, draftList, declareExport, removeProject, firstCreatProjectEdit } from '@/http/apis/declareMange' | |||||
import store from '@/store' | import store from '@/store' | ||||
import useExportExc from '@/utils/useExportExc' | import useExportExc from '@/utils/useExportExc' | ||||
import { ElMessageBox } from 'element-plus' | |||||
const { | const { | ||||
statusOptionsCascader, statusOptions, | statusOptionsCascader, statusOptions, | ||||
projectConTypeOptions | projectConTypeOptions | ||||
} = store.dictStore.globalDicts || {}, | } = store.dictStore.globalDicts || {}, | ||||
{ proxy } = getCurrentInstance(), | { proxy } = getCurrentInstance(), | ||||
dialogVideVisible = ref(false), | |||||
// 搜索栏表单数据 | // 搜索栏表单数据 | ||||
searchForm = reactive({ | searchForm = reactive({ | ||||
stage: undefined, | stage: undefined, | ||||
@@ -195,7 +198,18 @@ const { | |||||
$router = useRouter(), | $router = useRouter(), | ||||
// 去项目申报页 | // 去项目申报页 | ||||
toDeclarePage = () => { | toDeclarePage = () => { | ||||
$router.push({ name: 'declarePage' }) | |||||
if (store.userStore.userInfo.isFirstCreateProject === 0) { | |||||
$router.push({ name: 'declarePage' }) | |||||
return | |||||
} | |||||
ElMessageBox.alert('您是第一次使用项目申报,请先观看教学视频', { | |||||
showCancelButton: false | |||||
}).then(() => { | |||||
dialogVideVisible.value = true | |||||
// 请求接口 | |||||
firstCreatProjectEdit(store.userStore.userInfo.userId) | |||||
store.userStore.userInfo.isFirstCreateProject = 0 | |||||
}) | |||||
}, | }, | ||||
tableListRef = ref(), | tableListRef = ref(), | ||||
// 导出excel文件 | // 导出excel文件 | ||||
@@ -394,13 +408,15 @@ onMounted(async () => { | |||||
plain | plain | ||||
:loading="exportLoading" | :loading="exportLoading" | ||||
@click="handleExcel" | @click="handleExcel" | ||||
>导出</el-button> | |||||
>导出 | |||||
</el-button> | |||||
<el-button | <el-button | ||||
type="primary" | type="primary" | ||||
size="small" | size="small" | ||||
icon="plus" | icon="plus" | ||||
@click="toDeclarePage" | @click="toDeclarePage" | ||||
>项目申报</el-button> | |||||
>项目申报 | |||||
</el-button> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</template> | </template> | ||||
@@ -414,12 +430,19 @@ onMounted(async () => { | |||||
<template #action="{ scope }"> | <template #action="{ scope }"> | ||||
<a @click="checkDetail(scope.row)">详情</a> | <a @click="checkDetail(scope.row)">详情</a> | ||||
<a v-if="!tabStatus" @click="editProject(scope.row)">编辑</a> | <a v-if="!tabStatus" @click="editProject(scope.row)">编辑</a> | ||||
<a v-if="tabStatus && [10002,10005,10007,10013,20005].includes(scope.row.status)" @click="reDeclare(scope.row)">重新申报</a> | |||||
<a | |||||
v-if="tabStatus && [10002,10005,10007,10013,20005].includes(scope.row.status)" | |||||
@click="reDeclare(scope.row)" | |||||
>重新申报</a> | |||||
<a v-if="tabStatus && [10007].includes(scope.row.status)" @click="remove(scope.row)">删除</a> | <a v-if="tabStatus && [10007].includes(scope.row.status)" @click="remove(scope.row)">删除</a> | ||||
</template> | </template> | ||||
</table-list> | </table-list> | ||||
</el-card> | </el-card> | ||||
</el-row> | </el-row> | ||||
<el-dialog v-model="dialogVideVisible" title="项目申报教学视频" width="800"> | |||||
<video src="http://www.heletech.com.cn/img/%E5%AE%98%E7%BD%91%E4%BB%8B%E7%BB%8D.mp4" controls></video> | |||||
</el-dialog> | |||||
</template> | </template> | ||||
<style lang='less' scoped> | <style lang='less' scoped> | ||||
@@ -11,7 +11,7 @@ const | |||||
data: Object | data: Object | ||||
}), | }), | ||||
form = ref({ | form = ref({ | ||||
perIndicator: [] | |||||
perIndicator: [{}, {}, {}] | |||||
}), | }), | ||||
formRef = ref(), | formRef = ref(), | ||||
rules = { | rules = { | ||||
@@ -76,7 +76,7 @@ watch( | |||||
} else { | } else { | ||||
formRef.value?.resetFields() | formRef.value?.resetFields() | ||||
form.value = { | form.value = { | ||||
perIndicator: [] | |||||
perIndicator: [{}, {}, {}] | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -186,7 +186,7 @@ watch( | |||||
</el-form-item> | </el-form-item> | ||||
</template> | </template> | ||||
<template #action="{scope}"> | <template #action="{scope}"> | ||||
<a class="text-danger cursor-pointer" @click="del(scope.$index)">移除</a> | |||||
<a v-if="scope.$index>2" class="text-danger cursor-pointer" @click="del(scope.$index)">移除</a> | |||||
</template> | </template> | ||||
</table-list> | </table-list> | ||||
</el-form> | </el-form> | ||||
@@ -15,7 +15,24 @@ const props = defineProps({ | |||||
default: () => [] | default: () => [] | ||||
} | } | ||||
}) | }) | ||||
const { statusOptions, cloudTypeOptions, fourSystem, businessTerritory, projectTypeOptions } = store.dictStore.globalDicts || {}, | |||||
function getMobileText (list) { | |||||
if (list && list instanceof Array) { | |||||
const map = { | |||||
1: '浙里办', | |||||
2: '浙政钉', | |||||
3: '其他', | |||||
4: '无移动端' | |||||
} | |||||
const newlist = list.map(i => { | |||||
return map[i] | |||||
}) | |||||
return newlist.join(',') | |||||
} | |||||
return '-' | |||||
} | |||||
const { statusOptions, projectTypeOptions } = store.dictStore.globalDicts || {}, | |||||
column = reactive([ | column = reactive([ | ||||
{ | { | ||||
label: '序号', | label: '序号', | ||||
@@ -89,102 +106,106 @@ watch(() => props.detailData, val => { | |||||
<template> | <template> | ||||
<el-descriptions :column="2" border> | <el-descriptions :column="2" border> | ||||
<el-descriptions-item label="是否涉密"> | <el-descriptions-item label="是否涉密"> | ||||
{{ detailData.baseProjIsConfidentiality==='02'?'是':'否' }} | |||||
{{ detailData.baseProjIsConfidentiality === '02' ? '是' : '否' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目ID"> | <el-descriptions-item label="项目ID"> | ||||
{{ detailData.projectCode ||'-' }} | |||||
{{ detailData.projectCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目名称"> | <el-descriptions-item label="项目名称"> | ||||
{{ detailData.projectName ||'-' }} | |||||
{{ detailData.projectName || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目类型"> | <el-descriptions-item label="项目类型"> | ||||
{{ detailData?.projectType&&projectTypeOptions[detailData?.projectType] }} | |||||
{{ detailData?.projectType && projectTypeOptions[detailData?.projectType] }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="内容类别"> | <el-descriptions-item label="内容类别"> | ||||
{{ detailData?.baseConstructionType?.split(';').map(i=>dictionaryList?.filter(j => j.type === 'CONTENT_TYPE').find(k=>k.value===i)?.label).join('、') ||'-' }} | |||||
{{ | |||||
detailData?.baseConstructionType?.split(';').map(i => dictionaryList?.filter(j => j.type === 'CONTENT_TYPE').find(k => k.value === i)?.label).join('、') || '-' | |||||
}} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<template v-if="detailData?.baseProjIsConfidentiality !== '02'"> | <template v-if="detailData?.baseProjIsConfidentiality !== '02'"> | ||||
<el-descriptions-item label="是否首次新建"> | <el-descriptions-item label="是否首次新建"> | ||||
{{ detailData.isFirst?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="是否一地创新全省共享项目"> | |||||
{{ detailData.isInnovateWholeProvinceShare?'是':'否' }} | |||||
{{ detailData.isFirst ? '是' : '否' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
</template> | </template> | ||||
<el-descriptions-item label="行政区划编码"> | <el-descriptions-item label="行政区划编码"> | ||||
{{ detailData.areaCode ||'-' }} | |||||
{{ detailData.areaCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="行政区划名称"> | <el-descriptions-item label="行政区划名称"> | ||||
{{ detailData.area ||'-' }} | |||||
{{ detailData.area || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目负责人"> | <el-descriptions-item label="项目负责人"> | ||||
{{ detailData.responsibleMan||'-' }} | |||||
{{ detailData.responsibleMan || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目负责人手机号码"> | <el-descriptions-item label="项目负责人手机号码"> | ||||
{{ detailData.responsibleManMobile||'-' }} | |||||
{{ detailData.responsibleManMobile || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目联系人"> | <el-descriptions-item label="项目联系人"> | ||||
{{ detailData.contactName||'-' }} | |||||
{{ detailData.contactName || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目联系人手机号码"> | <el-descriptions-item label="项目联系人手机号码"> | ||||
{{ detailData.contactPhone||'-' }} | |||||
{{ detailData.contactPhone || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="上级业务主管单位"> | <el-descriptions-item label="上级业务主管单位"> | ||||
{{ detailData.higherSuperOrg||'-' }} | |||||
{{ detailData.higherSuperOrg || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="上级业务主管单位浙政钉ID"> | <el-descriptions-item label="上级业务主管单位浙政钉ID"> | ||||
{{ detailData.higherSuperOrgCode||'-' }} | |||||
{{ detailData.higherSuperOrgCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="本级主管部门单位"> | <el-descriptions-item label="本级主管部门单位"> | ||||
{{ detailData.superOrg||'-' }} | |||||
{{ detailData.superOrg || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="本级主管单位浙政钉ID"> | <el-descriptions-item label="本级主管单位浙政钉ID"> | ||||
{{ detailData.superOrgCode||'-' }} | |||||
{{ detailData.superOrgCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="本级主管单位统一社会信用代码"> | <el-descriptions-item label="本级主管单位统一社会信用代码"> | ||||
{{ detailData.superOrgCreditCode||'-' }} | |||||
{{ detailData.superOrgCreditCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="建设单位:"> | <el-descriptions-item label="建设单位:"> | ||||
{{ detailData.buildOrgName||'-' }} | |||||
{{ detailData.buildOrgName || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="建设单位浙政钉ID"> | <el-descriptions-item label="建设单位浙政钉ID"> | ||||
{{ detailData.buildOrgCode||'-' }} | |||||
{{ detailData.buildOrgCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="建设单位统一信用代码"> | <el-descriptions-item label="建设单位统一信用代码"> | ||||
{{ detailData.orgCreditCode||'-' }} | |||||
{{ detailData.orgCreditCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="主管单位"> | <el-descriptions-item label="主管单位"> | ||||
{{ detailData.superOrg||'-' }} | |||||
{{ detailData.superOrg || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="上级主管单位类型"> | <el-descriptions-item label="上级主管单位类型"> | ||||
{{ detailData.baseProvManDeprtType===1?'省级': detailData.baseProvManDeprtType===2?'非省级':'-' }} | |||||
{{ detailData.baseProvManDeprtType === 1 ? '省级' : detailData.baseProvManDeprtType === 2 ? '非省级' : '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="上级条线主管单位"> | <el-descriptions-item label="上级条线主管单位"> | ||||
{{ detailData.higherSuperOrg||'-' }} | |||||
{{ detailData.higherSuperOrg || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目状态"> | <el-descriptions-item label="项目状态"> | ||||
{{ statusOptions[detailData.status]?.name||'-' }} | |||||
{{ statusOptions[detailData.status]?.name || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="预算年度"> | <el-descriptions-item label="预算年度"> | ||||
{{ detailData.projectYear ||'-' }} | |||||
{{ detailData.projectYear || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<template v-if="detailData?.baseProjIsConfidentiality !== '02'"> | <template v-if="detailData?.baseProjIsConfidentiality !== '02'"> | ||||
<el-descriptions-item label="建设起止年限"> | <el-descriptions-item label="建设起止年限"> | ||||
{{ detailData.beginTime }}~{{ detailData.endTime }} | {{ detailData.beginTime }}~{{ detailData.endTime }} | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="建设层级"> | <el-descriptions-item label="建设层级"> | ||||
{{ dictionaryList?.filter(i => i.type === 'BUILD_LEVEL').find(i=>i.value===detailData?.buildLevel)?.label ||'-' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="贯通层级"> | |||||
{{ dictionaryList?.filter(i => i.type === 'BUILD_LEVEL').find(i=>i.value===detailData?.lowestLevel)?.label ||'-' }} | |||||
{{ | |||||
dictionaryList?.filter(i => i.type === 'BUILD_LEVEL').find(i => i.value === detailData?.buildLevel)?.label || '-' | |||||
}} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="系统定位" span="2"> | |||||
<span style="word-break:break-all">{{ detailData.systemPosition||'-' }}</span> | |||||
<el-descriptions-item label="贯通层级" span="2"> | |||||
{{ | |||||
dictionaryList?.filter(i => i.type === 'BUILD_LEVEL').find(i => i.value === detailData?.lowestLevel)?.label || '-' | |||||
}} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="项目简介" span="2"> | |||||
<span style="word-break:break-all">{{ detailData.projectIntroduction||'-' }}</span> | |||||
<el-descriptions-item label="项目概述" span="2"> | |||||
<span style="word-break:break-all">{{ detailData.projectOverview || '-' }}</span> | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item v-if="detailData.buildBasis&&JSON.parse(detailData.buildBasis)?.length" label="立项依据" span="2"> | |||||
<el-descriptions-item | |||||
v-if="detailData.buildBasis&&JSON.parse(detailData.buildBasis)?.length" | |||||
label="立项依据" | |||||
span="2" | |||||
> | |||||
<table-list | <table-list | ||||
:column="column" | :column="column" | ||||
:data="detailData.buildBasis&&JSON.parse(detailData.buildBasis)" | :data="detailData.buildBasis&&JSON.parse(detailData.buildBasis)" | ||||
@@ -223,36 +244,23 @@ watch(() => props.detailData, val => { | |||||
</table-list> | </table-list> | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="立项依据说明" span="2"> | <el-descriptions-item label="立项依据说明" span="2"> | ||||
<span style="word-break:break-all">{{ detailData.baseBasisEstablish||'-' }}</span> | |||||
<span style="word-break:break-all">{{ detailData.baseBasisEstablish || '-' }}</span> | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="发改编码"> | <el-descriptions-item label="发改编码"> | ||||
{{ detailData.developCode ||'-' }} | |||||
{{ detailData.developCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="财政编码"> | <el-descriptions-item label="财政编码"> | ||||
{{ detailData.financialCode ||'-' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="是否数字化改革项目"> | |||||
{{ detailData.isDigitalReform?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="综合业务领域"> | |||||
{{ detailData.bizDomain?.split(',').map(i=>businessTerritory[i]).join(',')||'-' }} | |||||
{{ detailData.financialCode || '-' }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item label="是否上云"> | |||||
{{ detailData.isCloud?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item v-if="detailData.isCloud" label="云类型"> | |||||
{{ detailData.cloudType&&detailData.cloudType.split(',').map(i=>cloudTypeOptions[i]).join('、')|| '-' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item | |||||
label="四大体系" | |||||
>{{ fourSystem[detailData.fourSystems] }}</el-descriptions-item> | |||||
<el-descriptions-item label="绩效评价类型"> | <el-descriptions-item label="绩效评价类型"> | ||||
{{ templateTypeListData?.find(i=>i.id===detailData.templateType)?.name||"-" }} | |||||
{{ templateTypeListData?.find(i => i.id === detailData.templateType)?.name || "-" }} | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item | <el-descriptions-item | ||||
label="是否临时增补项目" | label="是否临时增补项目" | ||||
:span="2" | :span="2" | ||||
>{{ detailData.isTemporaryAugment?'是':'否' }}</el-descriptions-item> | |||||
>{{ detailData.isTemporaryAugment ? '是' : '否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="历年项目名称" :span="2"> | <el-descriptions-item label="历年项目名称" :span="2"> | ||||
<table-list | <table-list | ||||
:column="column1" | :column="column1" | ||||
@@ -272,8 +280,16 @@ watch(() => props.detailData, val => { | |||||
:empty-temp="false" | :empty-temp="false" | ||||
/> | /> | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item v-if="detailData?.projectApplicationForm&&JSON.parse(detailData.projectApplicationForm)?.length" label="项目申报书"> | |||||
<p v-for="(item,index) in detailData.projectApplicationForm&&JSON.parse(detailData.projectApplicationForm)" :key="index" class="mb-4"> | |||||
<el-descriptions-item | |||||
v-if="detailData?.projectApplicationForm&&JSON.parse(detailData.projectApplicationForm)?.length" | |||||
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" /> | <accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | ||||
</p> | </p> | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
@@ -282,14 +298,22 @@ watch(() => props.detailData, val => { | |||||
label="预审申请单" | label="预审申请单" | ||||
span="2" | span="2" | ||||
> | > | ||||
<accessory :file-name="detailData.pretrialFileName" :file-id="detailData.pretrialFileId" :is-down-load="isDownLoadFile" /> | |||||
<accessory | |||||
:file-name="detailData.pretrialFileName" | |||||
:file-id="detailData.pretrialFileId" | |||||
:is-down-load="isDownLoadFile" | |||||
/> | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
<el-descriptions-item | <el-descriptions-item | ||||
v-if="false" | v-if="false" | ||||
label="上级条线主管单位审核意见" | label="上级条线主管单位审核意见" | ||||
span="2" | span="2" | ||||
> | > | ||||
<p v-for="(item,index) in detailData.higherLineSuperOrgReviewComments&&JSON.parse(detailData.higherLineSuperOrgReviewComments)" :key="index" class="mb-4"> | |||||
<p | |||||
v-for="(item,index) in detailData.higherLineSuperOrgReviewComments&&JSON.parse(detailData.higherLineSuperOrgReviewComments)" | |||||
:key="index" | |||||
class="mb-4" | |||||
> | |||||
<accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | <accessory :file-name="item.originalFileName" :file-id="item.id" :is-down-load="isDownLoadFile" /> | ||||
</p> | </p> | ||||
</el-descriptions-item> | </el-descriptions-item> | ||||
@@ -298,7 +322,46 @@ watch(() => props.detailData, val => { | |||||
label="建设方案审查意见文件" | label="建设方案审查意见文件" | ||||
span="2" | span="2" | ||||
> | > | ||||
<accessory :file-name="detailData.constructFileName" :file-id="detailData.constructFileId" :is-down-load="isDownLoadFile" /> | |||||
<accessory | |||||
:file-name="detailData.constructFileName" | |||||
:file-id="detailData.constructFileId" | |||||
:is-down-load="isDownLoadFile" | |||||
/> | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="移动端入口" :span="2"> | |||||
{{ getMobileText(detailData.mobileTerminalEntry) }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="是否使用云资源" :span="2"> | |||||
{{ detailData.isCloudResource===1?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="云资源" :span="2"> | |||||
<el-table :data="detailData.cloudResource" style="width: 100%"> | |||||
<el-table-column prop="cloudResourceType" label="云资源类型" /> | |||||
<el-table-column prop="baseSpecification" label="基础规格" /> | |||||
<el-table-column prop="serversCount" label="台数" /> | |||||
<el-table-column prop="description" label="描述" /> | |||||
</el-table> | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="是否产生数据" :span="2"> | |||||
{{ detailData.isProduceData===1?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="数据列表" :span="2"> | |||||
<el-table :data="detailData.produceData" style="width: 100%"> | |||||
<el-table-column prop="dataDirectoryName" label="数据目录名称" /> | |||||
<el-table-column prop="dataItem" label="数据项" /> | |||||
</el-table> | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="是否是用公共组件" :span="2"> | |||||
{{ detailData.isCommonComponent===1?'是':'否' }} | |||||
</el-descriptions-item> | |||||
<el-descriptions-item label="公共组件列表" :span="2"> | |||||
<el-table :data="detailData.commonComponent" style="width: 100%"> | |||||
<el-table-column prop="componentName" label="数据目录名称" /> | |||||
<el-table-column prop="componentType" label="数据项" /> | |||||
</el-table> | |||||
</el-descriptions-item> | </el-descriptions-item> | ||||
</template> | </template> | ||||
</el-descriptions> | </el-descriptions> | ||||