@@ -30,7 +30,7 @@ const uploadUrl = store.dictStore.uploadUrl, | |||||
formRef = ref(), | formRef = ref(), | ||||
rules = { | rules = { | ||||
preliminaryPlanFile: [ | preliminaryPlanFile: [ | ||||
{ required: true, message: '请上传初步方案', trigger: 'blur' } | |||||
{ required: true, message: '项目申报书', trigger: 'blur' } | |||||
], | ], | ||||
supportingMaterialsFile: [ | supportingMaterialsFile: [ | ||||
{ required: true, message: '请上传佐证材料', trigger: 'blur' } | { required: true, message: '请上传佐证材料', trigger: 'blur' } | ||||
@@ -199,7 +199,7 @@ defineExpose({ validForm, formData, setFormData }) | |||||
</el-upload> | </el-upload> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col v-if="projectType!=='03'" :span="12"> | |||||
<el-col :span="12"> | |||||
<el-form-item label="可行性研究报告" prop="baseResearchReportFile"> | <el-form-item label="可行性研究报告" prop="baseResearchReportFile"> | ||||
<el-upload | <el-upload | ||||
v-model:file-list="formData.baseResearchReportFile" | v-model:file-list="formData.baseResearchReportFile" | ||||
@@ -704,6 +704,7 @@ watch(() => formData.value, val => { | |||||
<el-col :span="12"> | <el-col :span="12"> | ||||
<el-form-item label="建设单位" prop="buildOrgName"> | <el-form-item label="建设单位" prop="buildOrgName"> | ||||
<!-- :disabled="formData.projectType!=='03'"--> | |||||
<el-input v-model="formData.buildOrgName" placeholder="请输入" :disabled="true" /> | <el-input v-model="formData.buildOrgName" placeholder="请输入" :disabled="true" /> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
@@ -254,6 +254,7 @@ | |||||
</template> | </template> | ||||
<script setup> | <script setup> | ||||
import { onMounted, ref, watch } from 'vue' | import { onMounted, ref, watch } from 'vue' | ||||
import { componentResource } from '@/utils/dictionary' | |||||
const props = defineProps({ | const props = defineProps({ | ||||
detailData: { | detailData: { | ||||
@@ -276,30 +277,7 @@ function getDisdataItem (name) { | |||||
function cloudTypeChange (index) { | function cloudTypeChange (index) { | ||||
formData.value.cloudResource[index].baseSpecification = '' | formData.value.cloudResource[index].baseSpecification = '' | ||||
} | } | ||||
const disData = ref([ | |||||
{ | |||||
name: 'ECS', | |||||
children: [ | |||||
{ | |||||
name: '1核1G' | |||||
}, | |||||
{ | |||||
name: '2核4G' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
name: 'OSS', | |||||
children: [ | |||||
{ | |||||
name: '100G' | |||||
}, | |||||
{ | |||||
name: '200G' | |||||
} | |||||
] | |||||
} | |||||
]) | |||||
const disData = ref(componentResource) | |||||
const ruleFormRef = ref() | const ruleFormRef = ref() | ||||
const formData = ref({ | const formData = ref({ | ||||
mobileTerminalEntry: [], | mobileTerminalEntry: [], | ||||
@@ -571,6 +571,9 @@ async function reuseItem (data) { | |||||
// 取出不复用的字段 | // 取出不复用的字段 | ||||
const projectType = basicInfoRef.value.formData.projectType | const projectType = basicInfoRef.value.formData.projectType | ||||
const projectName = basicInfoRef.value.formData.projectName | const projectName = basicInfoRef.value.formData.projectName | ||||
const buildOrgName = basicInfoRef.value.formData.buildOrgName | |||||
const orgCreditCode = basicInfoRef.value.formData.orgCreditCode | |||||
const baseHistorProjId = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjId)?.join(';') || '' | const baseHistorProjId = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjId)?.join(';') || '' | ||||
const baseHistorProjName = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjName)?.join(';') || '' | const baseHistorProjName = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjName)?.join(';') || '' | ||||
const baseHistorProjYear = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjSetYear)?.join(';') || '' | const baseHistorProjYear = basicInfoRef.value.formData?.baseHistorProjs?.map(i => i.baseProjSetYear)?.join(';') || '' | ||||
@@ -586,7 +589,7 @@ async function reuseItem (data) { | |||||
} | } | ||||
detailData.value = { | detailData.value = { | ||||
...res.data, | ...res.data, | ||||
projectType, baseHistorProjId, baseHistorProjName, baseHistorProjYear, projectYear, projectName, | |||||
projectType, baseHistorProjId, baseHistorProjName, baseHistorProjYear, projectYear, projectName, buildOrgName, orgCreditCode, | |||||
...annualPaymentFormData, | ...annualPaymentFormData, | ||||
// 新项目不应该有状态 | // 新项目不应该有状态 | ||||
status: undefined | status: undefined | ||||
@@ -6,6 +6,7 @@ import { useRouter, useRoute } from 'vue-router' | |||||
import { submitResult } from '@/http/apis/declareMange/purchaseResults' | import { submitResult } from '@/http/apis/declareMange/purchaseResults' | ||||
import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | import { dictionary } from '@/http/apis/projectCollection/projectCollectionEnter' | ||||
import { getProjectDetail } from '@/http/apis/declareMange' | import { getProjectDetail } from '@/http/apis/declareMange' | ||||
import { unitCodeRules } from '@/utils/validate' | |||||
const uploadUrl = store.dictStore.uploadUrl, | const uploadUrl = store.dictStore.uploadUrl, | ||||
{ proxy } = getCurrentInstance(), | { proxy } = getCurrentInstance(), | ||||
@@ -41,6 +42,7 @@ const formRef = ref(), | |||||
bidDoc: [{ required: true, message: '请上传招标文件' }], | bidDoc: [{ required: true, message: '请上传招标文件' }], | ||||
acceptanceLetter: [{ required: true, message: '请上传中标通知书' }] | acceptanceLetter: [{ required: true, message: '请上传中标通知书' }] | ||||
}, | }, | ||||
formData = ref({ | formData = ref({ | ||||
sections: [{ | sections: [{ | ||||
biddingDoc: [], | biddingDoc: [], | ||||
@@ -229,7 +231,7 @@ onMounted(async () => { | |||||
v-else | v-else | ||||
label="采购代理机构统一社会信用代码" | label="采购代理机构统一社会信用代码" | ||||
:prop="`sections[${index}].purchaseSocialCreditCode`" | :prop="`sections[${index}].purchaseSocialCreditCode`" | ||||
:rules="[{ required: true, message: '请输入' }]" | |||||
:rules="unitCodeRules(true)" | |||||
> | > | ||||
<el-input v-model="formData.sections[index].purchaseSocialCreditCode" placeholder="请输入" /> | <el-input v-model="formData.sections[index].purchaseSocialCreditCode" placeholder="请输入" /> | ||||
</el-form-item> | </el-form-item> | ||||
@@ -357,6 +359,22 @@ onMounted(async () => { | |||||
</el-upload> | </el-upload> | ||||
</el-form-item> | </el-form-item> | ||||
</el-col> | </el-col> | ||||
<el-col :span="24"> | |||||
<el-row :gutter="40"> | |||||
<el-col :span="12"> | |||||
<el-form-item label="监理单位"> | |||||
<el-input v-model="formData.sections[index].supervisingUnit" maxlength="50" placeholder="请输入" /> | |||||
</el-form-item> | |||||
</el-col> | |||||
<el-col :span="12"> | |||||
<el-form-item label="监理单位统一社会信用代码" :rules="unitCodeRules(false)"> | |||||
<el-input v-model="formData.sections[index].supervisingUnitCode" placeholder="请输入" /> | |||||
</el-form-item> | |||||
</el-col> | |||||
</el-row> | |||||
</el-col> | |||||
</el-row> | </el-row> | ||||
</el-card> | </el-card> | ||||
<p> | <p> | ||||
@@ -0,0 +1,270 @@ | |||||
export const componentResource = | |||||
[ | |||||
{ | |||||
'name': 'ECS (CPU)', | |||||
'children': [ | |||||
{ | |||||
'name': '1C1G' | |||||
}, | |||||
{ | |||||
'name': '1C2G' | |||||
}, | |||||
{ | |||||
'name': '1C4G' | |||||
}, | |||||
{ | |||||
'name': '1C8G' | |||||
}, | |||||
{ | |||||
'name': '2C4G' | |||||
}, | |||||
{ | |||||
'name': '2C8G' | |||||
}, | |||||
{ | |||||
'name': '2C16G' | |||||
}, | |||||
{ | |||||
'name': '4C8G' | |||||
}, | |||||
{ | |||||
'name': '4C16G' | |||||
}, | |||||
{ | |||||
'name': '4C32G' | |||||
}, | |||||
{ | |||||
'name': '8C16G' | |||||
}, | |||||
{ | |||||
'name': '8C32G' | |||||
}, | |||||
{ | |||||
'name': '8C64G' | |||||
}, | |||||
{ | |||||
'name': '16C32G' | |||||
}, | |||||
{ | |||||
'name': '16C64G' | |||||
}, | |||||
{ | |||||
'name': '16C128G' | |||||
}, | |||||
{ | |||||
'name': '32C64G' | |||||
}, | |||||
{ | |||||
'name': '32C128G' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'ECS (GPU)', | |||||
'children': [ | |||||
{ | |||||
'name': '20C80G + 1GPU' | |||||
}, | |||||
{ | |||||
'name': '28C112G + 2GPU' | |||||
}, | |||||
{ | |||||
'name': '56C224G + 4GPU' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'RDS (MySQL)', | |||||
'children': [ | |||||
{ | |||||
'name': '1C1G (最大连接数300)' | |||||
}, | |||||
{ | |||||
'name': '1C2G (最大连接数600)' | |||||
}, | |||||
{ | |||||
'name': '2C4G (最大连接数1200)' | |||||
}, | |||||
{ | |||||
'name': '2C8G (最大连接数2000)' | |||||
}, | |||||
{ | |||||
'name': '2C16G (最大连接数2500) (独享)' | |||||
}, | |||||
{ | |||||
'name': '4C8G (最大连接数2000)' | |||||
}, | |||||
{ | |||||
'name': '4C16G (最大连接数2500) (独享)' | |||||
}, | |||||
{ | |||||
'name': '4C32G (最大连接数4000)' | |||||
}, | |||||
{ | |||||
'name': '8C16G (最大连接数4000)' | |||||
}, | |||||
{ | |||||
'name': '8C32G (最大连接数5000) (独享)' | |||||
}, | |||||
{ | |||||
'name': '8C32G (最大连接数8000) (独享)' | |||||
}, | |||||
{ | |||||
'name': '16C64G (最大连接数10000) (独享)' | |||||
}, | |||||
{ | |||||
'name': '16C96G (最大连接数16000)' | |||||
}, | |||||
{ | |||||
'name': '16C128G (最大连接数20000) (独享)' | |||||
}, | |||||
{ | |||||
'name': '32C128G (最大连接数20000) (独享)' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'PostgreSQL', | |||||
'children': [ | |||||
{ | |||||
'name': '8C32G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '16C64G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '2C4G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '2C16G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '4C32G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '8C16G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '8C32G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '16C64G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '32C128G (独享型)' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'redis', | |||||
'children': [ | |||||
{ | |||||
'name': '主从(高配)版1G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版2G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版4G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版8G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版16G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版32G' | |||||
}, | |||||
{ | |||||
'name': '主从(高配)版64G' | |||||
}, | |||||
{ | |||||
'name': '集群版16G' | |||||
}, | |||||
{ | |||||
'name': '集群版32G' | |||||
}, | |||||
{ | |||||
'name': '集群版64G' | |||||
}, | |||||
{ | |||||
'name': '集群版128G' | |||||
}, | |||||
{ | |||||
'name': '集群版256G' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'MongoDB', | |||||
'children': [ | |||||
{ | |||||
'name': '2C4G (三节点副本版本)' | |||||
}, | |||||
{ | |||||
'name': '4C8G (三节点副本版本)' | |||||
}, | |||||
{ | |||||
'name': '8C16G (三节点副本版本)' | |||||
}, | |||||
{ | |||||
'name': '8C32G (三节点副本版本)' | |||||
}, | |||||
{ | |||||
'name': '16C64G (三节点副本版本)' | |||||
}, | |||||
{ | |||||
'name': '2C16G (独享)' | |||||
}, | |||||
{ | |||||
'name': '4C32G (独享)' | |||||
}, | |||||
{ | |||||
'name': '8C64G (独享)' | |||||
}, | |||||
{ | |||||
'name': '16C128G (独享)' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
'name': 'PolarDB O引擎', | |||||
'children': [ | |||||
{ | |||||
'name': '1C4G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '2C8G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '2C16G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '4C16G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '4C32G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '8C32G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '8C64G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '16C64G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '16C128G (独享型)' | |||||
}, | |||||
{ | |||||
'name': '32C128G (独享型)' | |||||
}, | |||||
{ | |||||
'name': 'PolarDB O专用存储(GB)' | |||||
} | |||||
] | |||||
} | |||||
] |
@@ -0,0 +1,11 @@ | |||||
export function unitCodeRules (required = true) { | |||||
return [ | |||||
{ required: required, message: '请输入统一信用代码' }, | |||||
{ | |||||
pattern: /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/g, | |||||
message: '格式错误,统一信用代码由十八位的数字或大写英文字母组成' | |||||
} | |||||
] | |||||
} | |||||