fix : 修复需求上报功能

This commit is contained in:
2024-05-19 12:29:59 +08:00
parent 62620b1dc5
commit 10bc019866
2 changed files with 272 additions and 225 deletions

View File

@@ -72,8 +72,9 @@ const tableConfig = reactive({
] ]
}) })
const rules = reactive({ const rules = reactive({
attachment: [{required: true, message: '请上传附件', trigger: 'blur'}], attachment: [{required: true, message: '请上传附件', trigger: ['blur','change']}],
}) })
const applyForm=ref()
const props = defineProps({ const props = defineProps({
showFileList: { showFileList: {
type: Boolean, type: Boolean,
@@ -117,7 +118,7 @@ const deleteOtherFile = (row) => {
deleteFile(row.fileId).then(res => { deleteFile(row.fileId).then(res => {
if (res.code === 1000) { if (res.code === 1000) {
ElMessage.success("删除成功"); ElMessage.success("删除成功");
otherFileList.value.splice(otherFileList.value.findIndex((item) => item.id === row.fileId), 1); props.otherFileList.splice(props.otherFileList.findIndex((item) => item.id === row.fileId), 1);
} }
}); });
}).catch(() => { }).catch(() => {
@@ -133,6 +134,14 @@ const handleDownload = (row) => {
a.click() a.click()
}) })
} }
defineExpose({
validate(){
return applyForm.value.validate()
},
clearValidate(){
return applyForm.value.clearValidate()
}
})
</script> </script>
<style scoped> <style scoped>

View File

@@ -1,219 +1,219 @@
<template> <template>
<div class="detail-block"> <div class="detail-block">
<baseTitle title="需求上报"></baseTitle> <baseTitle title="需求上报"></baseTitle>
<el-form :model="formData" ref="summaryForm" :rules="rules"> <el-form :model="formData" ref="summaryForm" :rules="rules">
<el-row gutter="50"> <el-row gutter="50">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="名称" prop="projectName"> <el-form-item label="名称" prop="projectName">
<el-input v-model="formData.projectName" placeholder="请输入名称" clearable></el-input> <el-input v-model="formData.projectName" placeholder="请输入名称" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="专项资金" prop="specialFund"> <el-form-item label="专项资金" prop="specialFund">
<el-select v-model="formData.specialFund" placeholder="请选择专项资金" clearable filterable> <el-select v-model="formData.specialFund" placeholder="请选择专项资金" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开始时间" prop="startTime"> <el-form-item label="开始时间" prop="startTime">
<el-config-provider> <el-config-provider>
<el-date-picker <el-date-picker
v-model="formData.startTime" v-model="formData.startTime"
type="datetime" type="datetime"
placeholder="截止时间" placeholder="截止时间"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%" style="width: 100%"
/> />
</el-config-provider> </el-config-provider>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属公司" prop="companyName"> <el-form-item label="所属公司" prop="companyName">
<el-input v-model="formData.companyName" placeholder="请输入所属公司" clearable></el-input> <el-input v-model="formData.companyName" placeholder="请输入所属公司" clearable></el-input>
</el-form-item> </el-form-item>
</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-select v-model="formData.projectType" placeholder="请选择项目类型" clearable filterable> <el-select v-model="formData.projectType" placeholder="请选择项目类型" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="结束时间" prop="endTime"> <el-form-item label="结束时间" prop="endTime">
<el-config-provider> <el-config-provider>
<el-date-picker <el-date-picker
v-model="formData.endTime" v-model="formData.endTime"
type="datetime" type="datetime"
placeholder="截止时间" placeholder="截止时间"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 100%" style="width: 100%"
/> />
</el-config-provider> </el-config-provider>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出资类型" prop="investmentType"> <el-form-item label="出资类型" prop="investmentType">
<el-select v-model="formData.investmentType" placeholder="请选择出资类型" clearable filterable> <el-select v-model="formData.investmentType" placeholder="请选择出资类型" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目影响" prop="projectImpact"> <el-form-item label="项目影响" prop="projectImpact">
<el-select v-model="formData.projectImpact" placeholder="请选择项目影响" clearable filterable> <el-select v-model="formData.projectImpact" placeholder="请选择项目影响" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属业务板块" prop="businessSegment"> <el-form-item label="所属业务板块" prop="businessSegment">
<el-select v-model="formData.businessSegment" placeholder="请选择所属业务板块" clearable filterable> <el-select v-model="formData.businessSegment" placeholder="请选择所属业务板块" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="预期成果形式" prop="resultForm"> <el-form-item label="预期成果形式" prop="resultForm">
<el-select v-model="formData.resultForm" placeholder="请选择预期成果形式" clearable filterable> <el-select v-model="formData.resultForm" placeholder="请选择预期成果形式" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="预期技术标准制定" prop="technicalStandard"> <el-form-item label="预期技术标准制定" prop="technicalStandard">
<el-select v-model="formData.technicalStandard" placeholder="请选择预期技术标准制定" clearable filterable> <el-select v-model="formData.technicalStandard" placeholder="请选择预期技术标准制定" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="产学研联合" prop="industryUniversityResearch"> <el-form-item label="产学研联合" prop="industryUniversityResearch">
<el-select v-model="formData.industryUniversityResearch" placeholder="请选择产学研联合" clearable filterable> <el-select v-model="formData.industryUniversityResearch" placeholder="请选择产学研联合" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开展政府申报" prop="governmentDeclaration"> <el-form-item label="开展政府申报" prop="governmentDeclaration">
<el-select v-model="formData.governmentDeclaration" placeholder="请选择开展政府申报" clearable filterable> <el-select v-model="formData.governmentDeclaration" placeholder="请选择开展政府申报" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="知识产权状况" prop="intellectualProperty"> <el-form-item label="知识产权状况" prop="intellectualProperty">
<el-select v-model="formData.intellectualProperty" placeholder="请选择知识产权状况" clearable filterable> <el-select v-model="formData.intellectualProperty" placeholder="请选择知识产权状况" clearable filterable>
<el-option <el-option
v-for="item in cacheStore.getDict('todo_type')" v-for="item in cacheStore.getDict('todo_type')"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="发明专利(项)" prop="inventionPatent"> <el-form-item label="发明专利(项)" prop="inventionPatent">
<el-input v-model="formData.inventionPatent" clearable></el-input> <el-input v-model="formData.inventionPatent" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="实用性新型专利(项)" prop="newPatent"> <el-form-item label="实用性新型专利(项)" prop="newPatent">
<el-input v-model="formData.newPatent" clearable></el-input> <el-input v-model="formData.newPatent" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="软件著作权(项)" prop="softwareCopyright"> <el-form-item label="软件著作权(项)" prop="softwareCopyright">
<el-input v-model="formData.softwareCopyright" clearable></el-input> <el-input v-model="formData.softwareCopyright" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="著作权(项)" prop="copyright"> <el-form-item label="著作权(项)" prop="copyright">
<el-input v-model="formData.copyright" clearable></el-input> <el-input v-model="formData.copyright" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="其他(项)" prop="other"> <el-form-item label="其他(项)" prop="other">
<el-input v-model="formData.other" clearable></el-input> <el-input v-model="formData.other" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="经济概算(万元)" prop="economicEstimate"> <el-form-item label="经济概算(万元)" prop="economicEstimate">
<el-input v-model="formData.economicEstimate" clearable></el-input> <el-input v-model="formData.economicEstimate" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="其中申请公司总部科技创新专项资金(万元)" prop="specialFundAmount"> <el-form-item label="其中申请公司总部科技创新专项资金(万元)" prop="specialFundAmount">
<el-input v-model="formData.specialFundAmount" clearable :disabled="formData.specialFund===null"></el-input> <el-input v-model="formData.specialFundAmount" clearable :disabled="formData.specialFund===null"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="现有业务描述" prop="serviceDescription"> <el-form-item label="现有业务描述" prop="serviceDescription">
<el-input v-model="formData.serviceDescription" type="textarea" clearable></el-input> <el-input v-model="formData.serviceDescription" type="textarea" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="研发项目关键内容描述" prop="contentDescription"> <el-form-item label="研发项目关键内容描述" prop="contentDescription">
<el-input v-model="formData.contentDescription" type="textarea" clearable></el-input> <el-input v-model="formData.contentDescription" type="textarea" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<AttachmentUpload label="需求申请书附件" :showTable="showTable" :otherFileList="otherFileList" <AttachmentUpload ref="attachment" label="需求申请书附件" :showTable="showTable" :otherFileList="otherFileList"
@getAttachment="getAttachment" @getAttachment="getAttachment"
@getOtherFile="getOtherFile" :showFileList="true"/> @getOtherFile="getOtherFile" :showFileList="true"/>
<!-- <fvForm :schema="schame" @getInstance="getInstance"></fvForm>--> <!-- <fvForm :schema="schame" @getInstance="getInstance"></fvForm>-->
<div class="oper-page-btn"> <div class="oper-page-btn">
<el-button type="primary" @click="staging">存为草稿</el-button> <el-button type="primary" @click="staging">存为草稿</el-button>
<el-button type="primary" @click="handleSubmit(summaryForm)">发布</el-button> <el-button type="primary" @click="handleSubmit(summaryForm)">发布</el-button>
</div> </div>
</div> </div>
</template> </template>
@@ -227,11 +227,13 @@ const cacheStore = useCacheStore()
const router = useRouter() const router = useRouter()
const tagsViewStore = useTagsView() const tagsViewStore = useTagsView()
const summaryForm = ref() const summaryForm = ref()
const attachment = ref()
const deploymentId = ref() const deploymentId = ref()
const showTable = ref(true) const showTable = ref(true)
const otherFileList = ref([]) const otherFileList = ref([])
const fileList = ref([])
const formData = ref({ const formData = ref({
specialFund:null specialFund: null
}) })
const rules = reactive({ const rules = reactive({
projectName: [{required: true, message: '请输入名称', trigger: 'blur'}], projectName: [{required: true, message: '请输入名称', trigger: 'blur'}],
@@ -254,31 +256,66 @@ const rules = reactive({
copyright: [{required: true, message: '请输入著作权', trigger: 'blur'}], copyright: [{required: true, message: '请输入著作权', trigger: 'blur'}],
other: [{required: true, message: '请输入其他', trigger: 'blur'}], other: [{required: true, message: '请输入其他', trigger: 'blur'}],
economicEstimate: [{required: true, message: '请输入经济概算', trigger: 'blur'}], economicEstimate: [{required: true, message: '请输入经济概算', trigger: 'blur'}],
specialFundAmount: [{required: true, message: '请输入专项资金', trigger: 'blur'}], // specialFundAmount: [{required: true, message: '请输入专项资金', trigger: 'blur'}],
serviceDescription: [{required: true, message: '请输入现有业务描述', trigger: 'blur'}], serviceDescription: [{required: true, message: '请输入现有业务描述', trigger: 'blur'}],
contentDescription: [{required: true, message: '请输入研发项目关键内容描述', trigger: 'blur'}], contentDescription: [{required: true, message: '请输入研发项目关键内容描述', trigger: 'blur'}]
}) })
const compositeParam = (item, type) => {
let tag = ''
if (router.currentRoute.value.name === 'Summary/add') {
tag = '需求汇总'
}
return {
fileId: item.id,
size: item.size,
type: type,
originalFileName: item.originalFilename,
fileType: item.fileType,
url: item.url,
processNodeTag: null,
tag: tag
}
}
const getAttachment = (val) => { const getAttachment = (val) => {
console.log('上传文件getAttachment', val) console.log('上传文件getAttachment', val)
let fileObj = compositeParam(val) let fileObj = compositeParam(val, 1)
// fileList.value.push(fileObj) fileList.value.push(fileObj)
} }
const getOtherFile = (val) => { const getOtherFile = (val) => {
console.log('上传文件getOtherFile', val) console.log('上传文件getOtherFile', val)
showTable.value = false showTable.value = false
let fileObj = compositeParam(val) let fileObj = compositeParam(val, 2)
otherFileList.value.push(fileObj) otherFileList.value.push(fileObj)
nextTick(() => { nextTick(() => {
showTable.value = true showTable.value = true
}) })
} }
const getFileParam = (item) => {
return {
fileId: item.fileId,
type: item.type
}
}
const handleSubmit = async (instance) => { const handleSubmit = async (instance) => {
if (!instance) return if (!instance) return
instance.validate(async (valid, fields) => { instance.validate(async (valid, fields) => {
if(fileList.value.length===0){
attachment.value.validate()
}else {
attachment.value.clearValidate()
}
if (!valid) return if (!valid) return
let files = []
fileList.value.forEach(item => {
files.push(getFileParam(item))
})
otherFileList.value.forEach(item => {
files.push(getFileParam(item))
})
let params = { let params = {
...formData.value, ...formData.value,
deploymentId: deploymentId.value deploymentId: deploymentId.value,
files: files
} }
let res = await requirementReported(params) let res = await requirementReported(params)
ElNotification({ ElNotification({
@@ -317,8 +354,9 @@ const staging = async () => {
overflow: hidden; overflow: hidden;
padding-bottom: 30px; padding-bottom: 30px;
} }
:deep(.el-table--fit){
height: auto!important; :deep(.el-table--fit) {
height: auto !important;
} }
</style> </style>