Merge pull request 'master' (#681) from master into prod

Reviewed-on: http://git.feashow.cn/clay/mosr-web/pulls/681
This commit is contained in:
2024-08-07 14:51:34 +00:00
27 changed files with 224 additions and 133 deletions

View File

@@ -588,3 +588,23 @@ html, body, #app, .el-container, .el-aside, .el-main {
position: relative; position: relative;
} }
} }
//绘制下拉选择框远程搜索时右侧的箭头
.el-select {
.el-select__wrapper {
.el-select__suffix::before {
content: "";
width: 6px;
height: 6px;
border: solid #a8abb2;
border-width: 0 0 1px 1px;
transform: translate(-50%, -50%) rotate(-45deg);
}
}
.is-focused {
.el-select__suffix::before {
margin-top: 10px;
transform: translate(-50%, -50%) rotate(-225deg) !important;
}
}
}

View File

@@ -1,5 +1,5 @@
<template> <template>
<el-form :model="formData" ref="applyForm" :rules="rules" :label-position="labelPosition"> <el-form :model="formData" ref="applyForm" :rules="rules" :label-position="labelPosition" style="margin-left: 5px">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item :label="label" prop="attachment" > <el-form-item :label="label" prop="attachment" >

View File

@@ -2,11 +2,11 @@
<div v-loading="loading"> <div v-loading="loading">
<el-row v-if="type==='execute'"> <el-row v-if="type==='execute'">
<el-col :span="24"> <el-col :span="24">
<baseTitle :title="'附件信息'"></baseTitle> <baseTitle :title="'附件信息'" style="margin-bottom: 5px"></baseTitle>
</el-col> </el-col>
<el-form :model="attachmentParam" inline style="margin-top: 15px"> <el-form :model="attachmentParam" inline style="margin-top: 15px;margin-left: 15px">
<el-form-item label="标签" prop="tag"> <el-form-item label="标签" prop="tag">
<el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable style="width: 300px"> <el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable remote style="width: 300px">
<el-option <el-option
v-for="item in tagsOption" v-for="item in tagsOption"
:key="item.value" :key="item.value"
@@ -20,7 +20,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<fvTable style="width: 100%;min-height:162px;max-height: 162px" v-if="showAttachmentTable" height="162" <fvTable style="width: 100%;min-height:162px;max-height: 162px" v-if="showAttachmentTable" height="162"
:tableConfig="executeTableConfig" :tableConfig="executeTableConfig" class="execute-table"
:data="otherAttachmentList" :isSettingCol="false" :pagination="false"> :data="otherAttachmentList" :isSettingCol="false" :pagination="false">
<template #empty> <template #empty>
<el-empty :image-size="55" description="暂无数据" style="padding: 0"/> <el-empty :image-size="55" description="暂无数据" style="padding: 0"/>
@@ -28,7 +28,7 @@
</fvTable> </fvTable>
</el-row> </el-row>
<baseTitle v-if="type!='phase'" :title="getTagName(type)+getTitleInfo(data.taskId)"></baseTitle> <baseTitle v-if="type!='phase'" :title="getTagName(type)+getTitleInfo(data.taskId)"></baseTitle>
<fvForm :schema="schema" @getInstance="(e)=>form = e"></fvForm> <fvForm :schema="schema" @getInstance="(e)=>form = e" style="margin-left: 15px"></fvForm>
<el-form :model="formData" label-width="auto" style="margin-top: -15px"> <el-form :model="formData" label-width="auto" style="margin-top: -15px">
<file-component :title="getTagName(type)+'附件'" :tag="getTagName(type)" <file-component :title="getTagName(type)+'附件'" :tag="getTagName(type)"
v-model:value="formData.fileList" :processViewer="processViewer" v-model:value="formData.fileList" :processViewer="processViewer"
@@ -92,24 +92,26 @@ const executeTableConfig = reactive({
type: 'index', type: 'index',
label: '序号', label: '序号',
align: 'center', align: 'center',
width: '80',
}, },
{ {
prop: 'originalFileName', prop: 'originalFileName',
label: '文件名', label: '文件名',
align: 'center', align: 'center',
width: 700,
currentRender: ({row, index}) => ( currentRender: ({row, index}) => (
<div style="color: #2a99ff;cursor: pointer;" onClick={() => clickToPreview(row)}>{row.originalFileName}</div>) <div style="color: #2a99ff;cursor: pointer;" onClick={() => clickToPreview(row)}>{row.originalFileName}</div>)
}, },
{ {
prop: 'tag', prop: 'tag',
label: '标签', label: '标签',
align: 'center' align: 'center',
width: 200,
}, },
{ {
prop: 'size', prop: 'size',
label: '文件大小', label: '文件大小',
align: 'center', align: 'center',
width: 450,
currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB') currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB')
}, },
{ {
@@ -264,7 +266,7 @@ const schema = computed(() => {
label: '项目负责人', label: '项目负责人',
prop: 'projectChargePerson', prop: 'projectChargePerson',
colProps: { colProps: {
span: 24 span: 6
}, },
labelWidth: 'left', labelWidth: 'left',
component: () => ( component: () => (
@@ -281,14 +283,15 @@ const schema = computed(() => {
label: '项目成员', label: '项目成员',
prop: 'projectPersonList', prop: 'projectPersonList',
colProps: { colProps: {
span: 24 span: 6
}, },
labelWidth: 'left', labelWidth: 'left',
component: () => ( component: () => (
<div> <div>
{ {
props.formData.projectPersonList ? props.formData.projectPersonList.map(item => { props.formData.projectPersonList ? props.formData.projectPersonList.map((item, index) => {
return <span>{item.name} </span> return <span>{item.name}
<span>{index != props.formData.projectPersonList?.length - 1 ? '' : ''}</span></span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }
</div> </div>
@@ -298,13 +301,13 @@ const schema = computed(() => {
label: '部门分管领导', label: '部门分管领导',
prop: 'optionalChargeLeadership', prop: 'optionalChargeLeadership',
colProps: { colProps: {
span: 24 span: 6
}, },
labelWidth: 'left', labelWidth: 'left',
component: () => ( component: () => (
<div> <div>
{ {
props.formData.optionalChargeLeadership?.length>0 ? props.formData.optionalChargeLeadership.map(item => { props.formData.optionalChargeLeadership?.length > 0 ? props.formData.optionalChargeLeadership.map(item => {
return <span>{item.name} </span> return <span>{item.name} </span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }
@@ -377,7 +380,7 @@ const schema = computed(() => {
component: () => ( component: () => (
<div> <div>
{ {
props.formData.optionalChargeLeadership?.length>0 ? props.formData.optionalChargeLeadership.map(item => { props.formData.optionalChargeLeadership?.length > 0 ? props.formData.optionalChargeLeadership.map(item => {
return <span>{item.name} </span> return <span>{item.name} </span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }
@@ -557,7 +560,41 @@ watch(() => props.loading, (newVal) => {
props.loading = newVal props.loading = newVal
}, {deep: true}) }, {deep: true})
</script> </script>
<style lang="scss">
.execute-table {
.el-table__header {
.el-table__cell:last-child {
.cell {
margin-left: -160px !important;
}
}
}
.el-table__body {
.el-table__cell:last-child{
.cell {
margin-left: -160px !important;
}
}
}
}
</style>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.el-table__header) {
.is-leaf:first-child {
.cell {
margin-left: 10px !important;
white-space: nowrap;
padding: 0;
}
}
}
//:deep(.el-table__body) {
// .el-table__cell:first-child {
// .cell {
// margin-left: -13px !important;
// }
// }
//}
</style> </style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<el-form :label-position="labelAlign"> <el-form :label-position="labelAlign">
<el-form-item :label="title?'其他文件':''" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" :label-position="labelAlign" :label-width="title?95:''" style="margin-top: 10px"> <el-form-item :label="title?'其他文件':''" v-if="fileListShow === 'READ' || fileListShow === 'EDIT'" :label-position="labelAlign" :label-width="title?95:''" :style="{marginTop: '10px',marginLeft: tag!=='需求上报'?'15px':'0'}">
<file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/> <file-upload @getFile="getOtherFile" v-if="fileListShow === 'EDIT'"/>
<fvTable style="width: 100%;max-height: 162px;" v-if="processViewer" height="162" :tableConfig="tableConfig" <fvTable style="width: 100%;max-height: 162px;" v-if="processViewer" height="162" :tableConfig="tableConfig"
:data="_value" :isSettingCol="false" :pagination="false"> :data="_value" :isSettingCol="false" :pagination="false">
@@ -196,19 +196,5 @@ watch(() => props.processViewer, (newVal) => {
:deep(.el-table--fit ) { :deep(.el-table--fit ) {
height: 162px !important; height: 162px !important;
} }
:deep(.el-table__header) {
.is-leaf:first-child {
.cell {
margin-left: -25px !important;
}
}
}
:deep(.el-table__body) {
.el-table__cell:first-child {
.cell {
margin-left: -13px !important;
}
}
}
</style> </style>

View File

@@ -4,7 +4,7 @@
<el-col :span="24"> <el-col :span="24">
<baseTitle :title="'附件信息'"></baseTitle> <baseTitle :title="'附件信息'"></baseTitle>
</el-col> </el-col>
<el-form :model="attachmentParam" inline > <el-form :model="attachmentParam" inline style="margin-left: 15px">
<el-form-item label="标签" prop="tag"> <el-form-item label="标签" prop="tag">
<el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable style="width: 300px"> <el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable style="width: 300px">
<el-option <el-option
@@ -21,7 +21,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<fvTable style="width: 100%;min-height:162px;max-height: 162px" v-if="showAttachmentTable" height="162" <fvTable style="width: 100%;min-height:162px;max-height: 162px" v-if="showAttachmentTable" height="162"
:tableConfig="tableConfig" :tableConfig="executeTableConfig" class="execute-apply-table"
:data="otherAttachmentList" :isSettingCol="false" :pagination="false"> :data="otherAttachmentList" :isSettingCol="false" :pagination="false">
<template #empty> <template #empty>
<el-empty :image-size="55" description="暂无数据" style="padding: 0"/> <el-empty :image-size="55" description="暂无数据" style="padding: 0"/>
@@ -31,9 +31,10 @@
<baseTitle :title="getTitleName(title)+'信息'"></baseTitle> <baseTitle :title="getTitleName(title)+'信息'"></baseTitle>
<el-form :model="localFormData" ref="formRef" label-width="auto" v-if="step!=='50'"> <el-form :model="localFormData" ref="formRef" label-width="auto" v-if="step!=='50'">
<el-row> <el-row>
<el-col :span="24" v-if="title==='apply'"> <el-col :span="6" v-if="title==='apply'">
<el-form-item label="项目负责人" :required="true" prop="" <!-- label-width="106"-->
label-width="106"> <el-form-item label="项目负责人" :required="true" prop="" label-width="111"
>
<el-button style="margin-right: 10px" color="#DED0B2" @click="handleShowProjectChargePersonTable"> <el-button style="margin-right: 10px" color="#DED0B2" @click="handleShowProjectChargePersonTable">
{{ projectChargePersonUserList?.length !== 0 ? '更改' : '请选择' }} {{ projectChargePersonUserList?.length !== 0 ? '更改' : '请选择' }}
</el-button> </el-button>
@@ -44,9 +45,9 @@
v-model:value="projectChargePersonUserList" @ok="projectChargePersonUserPickerOk"/> v-model:value="projectChargePersonUserList" @ok="projectChargePersonUserPickerOk"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="title==='apply'"> <el-col :span="6" v-if="title==='apply'">
<el-form-item label="项目成员" :required="true" prop="" <el-form-item label="项目成员" :required="true" prop="" label-width="85"
label-width="106"> >
<el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowProjectPersonTable"> <el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowProjectPersonTable">
{{ projectPersonUserList?.length !== 0 ? '更改' : getProjectPerson(projectPersonUserList) ? '更改' : '请选择' }} {{ projectPersonUserList?.length !== 0 ? '更改' : getProjectPerson(projectPersonUserList) ? '更改' : '请选择' }}
</el-button> </el-button>
@@ -57,13 +58,16 @@
v-model:value="projectPersonUserList" @ok="projectPersonUserPickerOk"/> v-model:value="projectPersonUserList" @ok="projectPersonUserPickerOk"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="title==='apply'||title==='check'"> <el-col :span="6" v-if="title==='apply'||title==='check'">
<el-form-item label="部门分管领导" <el-form-item label="部门分管领导" label-width="115"
label-width="106"> >
<el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker"> <el-button color="#DED0B2" style="margin-right: 10px" @click="handleShowOptionalChargeLeadershipPicker">
{{ optionalChargeLeadershipList?.length !== 0 ? '更改' : getOptionalChargeLeadershipList(optionalChargeLeadershipList) ? '更改' : '请选择' }} {{
optionalChargeLeadershipList?.length !== 0 ? '更改' : getOptionalChargeLeadershipList(optionalChargeLeadershipList) ? '更改' : '请选择'
}}
</el-button> </el-button>
<div v-for="item in getOptionalChargeLeadershipList(optionalChargeLeadershipList)" :key="item.id" style="margin-right: 5px"> <div v-for="item in getOptionalChargeLeadershipList(optionalChargeLeadershipList)" :key="item.id"
style="margin-right: 5px">
{{ item.name }} {{ item.name }}
</div> </div>
<user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择部门分管领导" <user-picker :multiple="true" ref="optionalChargeLeadershipPickerRef" title="请选择部门分管领导"
@@ -79,7 +83,8 @@
</el-button> </el-button>
<div v-for="(item,index) in getRequestName(localFormData.preProcess)" :key="item.requestId"> <div v-for="(item,index) in getRequestName(localFormData.preProcess)" :key="item.requestId">
<a :href="item.baseUrl" target="_blank" <a :href="item.baseUrl" target="_blank"
style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span v-if="index != localFormData.preProcess?.length -1"></span> style="color: #2a99ff;cursor: pointer">{{ item.requestName }}<span
v-if="index != localFormData.preProcess?.length -1"></span>
</a> </a>
</div> </div>
</el-form-item> </el-form-item>
@@ -95,8 +100,8 @@
<div> <div>
<div class="approval-record"> <div class="approval-record">
<div class="approval-title" style="margin-top: -15px"> <div class="approval-title" style="margin-top: -15px">
<!-- <baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>--> <!-- <baseTitle title="审批记录" v-if="mode === 'resubmit'"></baseTitle>-->
<!-- <div v-else></div>--> <!-- <div v-else></div>-->
<baseTitle title="审批记录"></baseTitle> <baseTitle title="审批记录"></baseTitle>
<div class="diagram"> <div class="diagram">
<div class="base-title">流程图</div> <div class="base-title">流程图</div>
@@ -106,10 +111,12 @@
/> />
</div> </div>
</div> </div>
<el-empty :image-size="100" description="暂无审批记录" v-if="!data?.operationList&&!changeDiagram"/> <el-empty :image-size="100" description="暂无审批记录" v-if="!data?.operationList&&!changeDiagram"/>
<div class="process"> <div class="process">
<operation-render v-if="mode === 'resubmit'&&processDiagramViewer&& data?.operationList && data?.operationList.length > 0&&!changeDiagram" :operation-list="data.operationList" <operation-render
:state="data.state"/> v-if="mode === 'resubmit'&&processDiagramViewer&& data?.operationList && data?.operationList.length > 0&&!changeDiagram"
:operation-list="data.operationList"
:state="data.state"/>
<process-diagram-viewer mode="view" :idName="title" v-if="processDiagramViewer&&changeDiagram"/> <process-diagram-viewer mode="view" :idName="title" v-if="processDiagramViewer&&changeDiagram"/>
</div> </div>
</div> </div>
@@ -120,7 +127,8 @@
<el-button @click="handleBack">返回</el-button> <el-button @click="handleBack">返回</el-button>
</div> </div>
<file-preview ref="filePreviewRef" v-if="filePreviewShow" :fileName="filePreviewParam.fileName" :fileUrl="filePreviewParam.fileUrl" <file-preview ref="filePreviewRef" v-if="filePreviewShow" :fileName="filePreviewParam.fileName"
:fileUrl="filePreviewParam.fileUrl"
:fileType="filePreviewParam.fileType"/> :fileType="filePreviewParam.fileType"/>
<el-dialog v-if="showPreTable" title="前置流程" v-model="showPreTable" width="80%"> <el-dialog v-if="showPreTable" title="前置流程" v-model="showPreTable" width="80%">
<el-form :model="preProcessForm" inline @submit.prevent="searchPreProcess"> <el-form :model="preProcessForm" inline @submit.prevent="searchPreProcess">
@@ -201,7 +209,7 @@ const otherAttachmentList = ref([])
const attachmentParam = reactive({ const attachmentParam = reactive({
tag: '' tag: ''
}) })
const tableConfig = reactive({ const executeTableConfig = reactive({
columns: [ columns: [
{ {
prop: 'index', prop: 'index',
@@ -214,17 +222,21 @@ const tableConfig = reactive({
prop: 'originalFileName', prop: 'originalFileName',
label: '文件名', label: '文件名',
align: 'center', align: 'center',
currentRender: ({row, index}) => (<div style="color: #2a99ff;cursor: pointer;" onClick={()=>clickToPreview(row)}>{row.originalFileName}</div>) width: 620,
currentRender: ({row, index}) => (
<div style="color: #2a99ff;cursor: pointer;" onClick={() => clickToPreview(row)}>{row.originalFileName}</div>)
}, },
{ {
prop: 'tag', prop: 'tag',
label: '标签', label: '标签',
align: 'center' align: 'center',
width: 160,
}, },
{ {
prop: 'size', prop: 'size',
label: '文件大小', label: '文件大小',
align: 'center', align: 'center',
width: 600,
currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB') currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB')
}, },
{ {
@@ -333,14 +345,14 @@ const optionalChargeLeaderPickerOk = (userList) => {
localStorage.setItem('optionalChargeLeadershipList', JSON.stringify(optionalChargeLeadershipList.value)) localStorage.setItem('optionalChargeLeadershipList', JSON.stringify(optionalChargeLeadershipList.value))
} }
const clickToPreview=(row)=>{ const clickToPreview = (row) => {
filePreviewShow.value = false filePreviewShow.value = false
filePreviewParam.value = { filePreviewParam.value = {
fileUrl: row.url, fileUrl: row.url,
fileName: row.originalFileName, fileName: row.originalFileName,
fileType: row.fileType fileType: row.fileType
} }
nextTick(()=>{ nextTick(() => {
filePreviewShow.value = true filePreviewShow.value = true
}) })
} }
@@ -732,14 +744,14 @@ const init = async () => {
watchEffect(() => { watchEffect(() => {
if (props.formData.projectChargePerson == null) { if (props.formData.projectChargePerson == null) {
projectChargePersonUserList.value = [] projectChargePersonUserList.value = []
} else { } else {
projectChargePersonUserList.value = [props.formData.projectChargePerson] projectChargePersonUserList.value = [props.formData.projectChargePerson]
} }
if (props.formData.optionalChargeLeadership == null) { if (props.formData.optionalChargeLeadership == null) {
optionalChargeLeadershipList.value = [] optionalChargeLeadershipList.value = []
} else { } else {
optionalChargeLeadershipList.value=props.formData.optionalChargeLeadership optionalChargeLeadershipList.value = props.formData.optionalChargeLeadership
} }
projectPersonUserList.value = props.formData.projectPersonList ? props.formData.projectPersonList : [] projectPersonUserList.value = props.formData.projectPersonList ? props.formData.projectPersonList : []
let flag = Object.keys(props.formData).length && (localFormData.value = props.formData) let flag = Object.keys(props.formData).length && (localFormData.value = props.formData)
@@ -801,11 +813,30 @@ onMounted(async () => {
await init() await init()
}) })
</script> </script>
<style lang="scss">
.execute-apply-table {
.el-table__header {
.el-table__cell:last-child {
.cell {
margin-left: -108px !important;
}
}
}
<style scoped> .el-table__body {
.el-table__cell:last-child {
.cell {
margin-left: -108px !important;
}
}
}
}
</style>
<style scoped lang="scss">
.oper { .oper {
margin-top: 20px; margin-top: 20px;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
</style> </style>

View File

@@ -46,12 +46,12 @@
<el-row gutter="20" style="margin-left: 5px;margin-bottom: -18px;"> <el-row gutter="20" style="margin-left: 5px;margin-bottom: -18px;">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="现有业务描述" prop="serviceDescription"> <el-form-item label="现有业务描述" prop="serviceDescription">
<span>{{ localFormData.serviceDescription }}</span> <span style="white-space: pre-wrap">{{ localFormData.serviceDescription }}</span>
</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">
<span>{{ localFormData.contentDescription }}</span> <span style="white-space: pre-wrap">{{ localFormData.contentDescription }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -322,4 +322,19 @@ getFundOptions()
overflow-y: auto; overflow-y: auto;
padding-bottom: 0 !important; padding-bottom: 0 !important;
} }
:deep(.el-table__header) {
.is-leaf:first-child {
.cell {
margin-left: -25px !important;
}
}
}
:deep(.el-table__body) {
.el-table__cell:first-child {
.cell {
margin-left: -13px !important;
}
}
}
</style> </style>

View File

@@ -5,7 +5,7 @@
<el-input v-model="attachment.fileName" placeholder="请输入附件名称查询" clearable filterable style="width: 300px"/> <el-input v-model="attachment.fileName" placeholder="请输入附件名称查询" clearable filterable style="width: 300px"/>
</el-form-item> </el-form-item>
<el-form-item label="标签" prop="tag" v-if="type==='40'"> <el-form-item label="标签" prop="tag" v-if="type==='40'">
<el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable style="width: 300px"> <el-select v-model="attachment.tag" placeholder="请选择标签" clearable remote filterable style="width: 300px">
<el-option <el-option
v-for="item in tagsOption" v-for="item in tagsOption"
:key="item.value" :key="item.value"

View File

@@ -11,12 +11,12 @@
v-bind="item.colProps || { span: 12}" v-bind="item.colProps || { span: 12}"
:key="item.prop" :key="item.prop"
> >
<el-form-item <el-form-item
v-bind="item" v-bind="item"
:key="item.prop" :key="item.prop"
> >
<template #default> <template #default>
<component <component
v-if="item.component" v-if="item.component"
:is="item.component" :is="item.component"
v-bind="item.props || {}" v-bind="item.props || {}"
@@ -105,4 +105,4 @@ defineExpose({ getValues, setValues, validate, resetFields, formInstance, form }
<style lang="scss" scoped> <style lang="scss" scoped>
</style> </style>

View File

@@ -44,9 +44,9 @@ export const useTagsView = defineStore('tagsView',()=>{
} }
//删除其他标签页 //删除其他标签页
const delOtherVisitedViews = ({path,meta}) => { const delOtherVisitedViews = ({path,meta,query}) => {
visitedViews.value = [] visitedViews.value = []
visitedViews.value.push({path,meta}) visitedViews.value.push({path,meta,query})
toLastTagView(visitedViews) toLastTagView(visitedViews)
} }

View File

@@ -23,7 +23,8 @@ const searchConfig = ref([
clearable: true, clearable: true,
data: [], data: [],
filterable: true, filterable: true,
checkStrictly: true checkStrictly: true,
remote: true
} }
}, },
{ {
@@ -60,6 +61,7 @@ const searchConfig = ref([
clearable: true, clearable: true,
filterable: true, filterable: true,
cacheKey: 'project_cost', cacheKey: 'project_cost',
remote: true
} }
}, },
{ {
@@ -72,6 +74,7 @@ const searchConfig = ref([
filterable: true, filterable: true,
checkStrictly: true, checkStrictly: true,
cacheKey: 'fee_stage', cacheKey: 'fee_stage',
remote: true
} }
}, },
{ {

View File

@@ -169,7 +169,7 @@ const formData = ref({
deadline: '', deadline: '',
collectExplain: '', collectExplain: '',
fileList: [], fileList: [],
isSpecialFund: true isSpecialFund: false
}) })
const routerName = ref(router.currentRoute.value.name) const routerName = ref(router.currentRoute.value.name)
const processDiagramViewer = ref(false) const processDiagramViewer = ref(false)

View File

@@ -39,7 +39,6 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<!-- <fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>-->
<fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick"> <fvTable ref="tableIns" :tableConfig="tableConfig" @headBtnClick="headBtnClick">
<template #empty> <template #empty>
@@ -60,41 +59,6 @@ import {getRequirementStatePerm} from "@/api/project-demand";
const cacheStore = useCacheStore() const cacheStore = useCacheStore()
const authStore = useAuthStore() const authStore = useAuthStore()
const router = useRouter() const router = useRouter()
const collectTypeSelectRef=ref()
const searchConfig = reactive([
{
label: '征集名称',
prop: 'requirementName',
component: 'el-input',
props: {
placeholder: '请输入征集名称查询',
clearable: true,
filterable: true,
checkStrictly: true
}
},
{
label: '征集类型',
prop: 'collectType',
component: shallowRef(fvSelect),
props: {
placeholder: '请选择征集类型',
clearable: true,
filterable: true,
cacheKey: 'collect_type'
}
},
{
label: '状态',
prop: 'state',
component: shallowRef(fvSelect),
props: {
placeholder: '请选择状态',
clearable: true,
cacheKey: 'demand_collection'
}
},
])
const selectForm = ref({}) const selectForm = ref({})
const tableIns = ref() const tableIns = ref()
const formRef = ref() const formRef = ref()

View File

@@ -348,9 +348,9 @@ const showSingleTable = ref(false)
const otherFileList = ref([]) const otherFileList = ref([])
const singleList = ref([]) const singleList = ref([])
const formData = ref({ const formData = ref({
isSpecialFund: true, isSpecialFund: false,
industryUniversityResearch: '0', industryUniversityResearch: '1',
governmentDeclaration: '0', governmentDeclaration: '1',
resultForm: [] resultForm: []
}) })

View File

@@ -61,6 +61,7 @@ const searchConfig = reactive([
cacheKey: 'project_type', cacheKey: 'project_type',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
}, },
colProps: {} colProps: {}
}, },
@@ -73,6 +74,7 @@ const searchConfig = reactive([
placeholder: '请选择项目影响', placeholder: '请选择项目影响',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
}, },
colProps: {} colProps: {}
}, },
@@ -85,6 +87,7 @@ const searchConfig = reactive([
cacheKey: 'rd_subject', cacheKey: 'rd_subject',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -107,7 +110,9 @@ const searchConfig = reactive([
props: { props: {
placeholder: '请选择状态', placeholder: '请选择状态',
clearable: true, clearable: true,
cacheKey: 'demand_summary' filterable:true,
cacheKey: 'demand_summary',
remote: true
} }
}, },
// { // {

View File

@@ -54,7 +54,8 @@ const searchConfig = ref([
clearable: true, clearable: true,
data: [], data: [],
filterable: true, filterable: true,
checkStrictly: true checkStrictly: true,
remote:true
} }
}, },
{ {
@@ -76,6 +77,7 @@ const searchConfig = ref([
cacheKey: 'project_type', cacheKey: 'project_type',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -87,6 +89,7 @@ const searchConfig = ref([
placeholder: '请选择项目影响', placeholder: '请选择项目影响',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
}, },
colProps: {} colProps: {}
}, },
@@ -99,6 +102,7 @@ const searchConfig = ref([
cacheKey: 'rd_subject', cacheKey: 'rd_subject',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -121,7 +125,9 @@ const searchConfig = ref([
props: { props: {
placeholder: '请选择状态', placeholder: '请选择状态',
clearable: true, clearable: true,
cacheKey: 'project_filing' cacheKey: 'project_filing',
filterable: true,
remote: true
} }
}, },
// { // {

View File

@@ -324,6 +324,7 @@ const searchConfig = reactive([
clearable: true, clearable: true,
filterable: true, filterable: true,
cacheKey: 'project_cost', cacheKey: 'project_cost',
remote: true
} }
}, },
{ {
@@ -336,6 +337,7 @@ const searchConfig = reactive([
filterable: true, filterable: true,
checkStrictly: true, checkStrictly: true,
cacheKey: 'fee_stage', cacheKey: 'fee_stage',
remote: true
} }
}, },
{ {

View File

@@ -3,7 +3,7 @@
<fvForm :schema="schema" @getInstance="(e)=>baseForm = e" label-position="left" label-width="left"></fvForm> <fvForm :schema="schema" @getInstance="(e)=>baseForm = e" label-position="left" label-width="left"></fvForm>
<el-form :model="attachment" inline style="margin-top: 15px"> <el-form :model="attachment" inline style="margin-top: 15px">
<el-form-item label="标签" prop="tag"> <el-form-item label="标签" prop="tag">
<el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable style="width: 300px"> <el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable remote style="width: 300px">
<el-option <el-option
v-for="item in tagsOption" v-for="item in tagsOption"
:key="item.value" :key="item.value"

View File

@@ -52,7 +52,8 @@ const searchConfig = ref([
clearable: true, clearable: true,
data: [], data: [],
filterable: true, filterable: true,
checkStrictly: true checkStrictly: true,
remote: true
} }
}, },
{ {
@@ -75,6 +76,7 @@ const searchConfig = ref([
cacheKey: 'project_type', cacheKey: 'project_type',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -86,6 +88,7 @@ const searchConfig = ref([
cacheKey: 'project_impact', cacheKey: 'project_impact',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
}, },
colProps: {} colProps: {}
}, },
@@ -98,6 +101,7 @@ const searchConfig = ref([
cacheKey: 'rd_subject', cacheKey: 'rd_subject',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -120,7 +124,9 @@ const searchConfig = ref([
props: { props: {
placeholder: '请选择状态', placeholder: '请选择状态',
clearable: true, clearable: true,
cacheKey: 'project_implementation' filterable: true,
cacheKey: 'project_implementation',
remote: true
} }
}, },
// { // {

View File

@@ -51,7 +51,8 @@ const searchConfig = ref([
clearable: true, clearable: true,
data: [], data: [],
filterable: true, filterable: true,
checkStrictly: true checkStrictly: true,
remote: true
} }
}, },
{ {
@@ -73,6 +74,7 @@ const searchConfig = ref([
cacheKey: 'project_type', cacheKey: 'project_type',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -84,6 +86,7 @@ const searchConfig = ref([
placeholder: '请选择项目影响', placeholder: '请选择项目影响',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
}, },
colProps: {} colProps: {}
}, },
@@ -96,6 +99,7 @@ const searchConfig = ref([
cacheKey: 'rd_subject', cacheKey: 'rd_subject',
clearable: true, clearable: true,
filterable: true, filterable: true,
remote: true
} }
}, },
{ {
@@ -118,7 +122,9 @@ const searchConfig = ref([
props: { props: {
placeholder: '请选择状态', placeholder: '请选择状态',
clearable: true, clearable: true,
cacheKey: 'project_initiation' filterable: true,
remote: true,
cacheKey: 'project_initiation',
} }
}, },
// { // {

View File

@@ -2,9 +2,9 @@
<div v-loading="loading"> <div v-loading="loading">
<el-row v-if="type==='execute'"> <el-row v-if="type==='execute'">
<el-col :span="24"> <el-col :span="24">
<baseTitle :title="'附件信息'"></baseTitle> <baseTitle :title="'附件信息'" style="margin-bottom: 5px"></baseTitle>
</el-col> </el-col>
<el-form :model="attachmentParam" inline style="margin-top: 15px" @submit.prevent> <el-form :model="attachmentParam" inline style="margin-top: 15px;margin-left: 15px" @submit.prevent>
<el-form-item label="标签" prop="tag"> <el-form-item label="标签" prop="tag">
<el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable style="width: 200px"> <el-select v-model="attachmentParam.tag" placeholder="请选择标签" clearable filterable style="width: 200px">
<el-option <el-option
@@ -28,10 +28,11 @@
</el-row> </el-row>
<baseTitle v-if="type!='phase'" :title="getTagName(type)+'信息'" ></baseTitle> <baseTitle v-if="type!='phase'" :title="getTagName(type)+'信息'" ></baseTitle>
<fvForm :schema="schema" @getInstance="(e)=>form = e" ></fvForm> <fvForm :schema="schema" @getInstance="(e)=>form = e" style="margin-left: 15px"></fvForm>
<el-form :model="formData" label-width="auto"> <el-form :model="formData" label-width="auto">
<file-component <file-component
:title="getTagName(type)+'附件'" :title="getTagName(type)+'附件'"
:fileNameTableWidth="300"
:tag="getTagName(type)" :tag="getTagName(type)"
v-model:value="formData.fileList" v-model:value="formData.fileList"
:processViewer="processViewer" :processViewer="processViewer"
@@ -105,6 +106,7 @@ const executeTableConfig = reactive({
prop: 'originalFileName', prop: 'originalFileName',
label: '文件名', label: '文件名',
align: 'center', align: 'center',
width: 300
}, },
{ {
prop: 'tag', prop: 'tag',
@@ -189,7 +191,7 @@ const editSingleTableConfig = reactive({
prop: 'originalFileName', prop: 'originalFileName',
label: '文件名', label: '文件名',
align: 'center', align: 'center',
width: 400, width: 300,
currentRender: ({row, index}) => (<div style="color: #2a99ff;cursor: pointer;" onClick={()=>clickToPreview(row)}>{row.originalFileName}</div>) currentRender: ({row, index}) => (<div style="color: #2a99ff;cursor: pointer;" onClick={()=>clickToPreview(row)}>{row.originalFileName}</div>)
}, },
{ {
@@ -289,8 +291,8 @@ const schema = computed(() => {
component: () => ( component: () => (
<div> <div>
{ {
props.formData.projectPersonList ? props.formData.projectPersonList.map(item => { props.formData.projectPersonList ? props.formData.projectPersonList.map((item, index) => {
return <span>{item.name} </span> return <span>{item.name} <span>{index != props.formData.projectPersonList?.length - 1 ? '' : ''}</span></span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }
</div> </div>
@@ -306,7 +308,7 @@ const schema = computed(() => {
component: () => ( component: () => (
<div> <div>
{ {
props.formData.optionalChargeLeadership ? props.formData.optionalChargeLeadership.map(item => { props.formData.optionalChargeLeadership?.length > 0 ? props.formData.optionalChargeLeadership.map(item => {
return <span>{item.name} </span> return <span>{item.name} </span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }
@@ -379,7 +381,7 @@ const schema = computed(() => {
component: () => ( component: () => (
<div> <div>
{ {
props.formData.optionalChargeLeadership ? props.formData.optionalChargeLeadership.map(item => { props.formData.optionalChargeLeadership?.length > 0 ? props.formData.optionalChargeLeadership.map(item => {
return <span>{item.name} </span> return <span>{item.name} </span>
}) : <span>{'--'}</span> }) : <span>{'--'}</span>
} }

View File

@@ -80,7 +80,7 @@ const localSteps = ref([
key: 'approve', key: 'approve',
}, },
{ {
title: '项目实施', title: '项目验收',
key: 'execute', key: 'execute',
}, },
{ {

View File

@@ -47,19 +47,19 @@
<el-row gutter="20" style="margin-bottom: -18px;margin-left: 5px;"> <el-row gutter="20" style="margin-bottom: -18px;margin-left: 5px;">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="现有业务描述" prop="serviceDescription"> <el-form-item label="现有业务描述" prop="serviceDescription">
<span>{{ localFormData.serviceDescription }}</span> <span style="white-space: pre-wrap">{{ localFormData.serviceDescription }}</span>
</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">
<span>{{ localFormData.contentDescription }}</span> <span style="white-space: pre-wrap">{{ localFormData.contentDescription }}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<baseTitle title="需求上报申请书" style="margin-bottom: 10px">></baseTitle> <baseTitle title="需求上报申请书" style="margin-bottom: 10px">></baseTitle>
<el-row gutter="20" style="margin-bottom: -15px;"> <el-row gutter="20" style="margin-bottom: -15px;">
<el-col :span="24"> <el-col :span="24">
<single-file-component tag="需求上报" :fileNameTableWidth="200" :fullscreen="true" <single-file-component tag="需求上报" :fileNameTableWidth="300" :fullscreen="true"
v-model:value="localFormData.singleFile" :processViewer="processViewer" v-model:value="localFormData.singleFile" :processViewer="processViewer"
labelAlign="top"/> labelAlign="top"/>
<!-- <el-form-item label="需求上报申请书" label-position="top" style="display:block;">--> <!-- <el-form-item label="需求上报申请书" label-position="top" style="display:block;">-->
@@ -74,7 +74,7 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<file-component <file-component
tag="需求上报" :fileNameTableWidth="200" :fullscreen="true" tag="需求上报" :fileNameTableWidth="300" :fullscreen="true"
v-model:value="localFormData.fileList" v-model:value="localFormData.fileList"
:processViewer="processViewer" :processViewer="processViewer"
:file-list-show="fileListShow" :file-list-show="fileListShow"

View File

@@ -322,4 +322,8 @@ onMounted(async () => {
:deep(.el-table--fit ) { :deep(.el-table--fit ) {
height: 300px !important; height: 300px !important;
} }
.add-block{
padding: 0 30px 30px 15px;
}
</style> </style>

View File

@@ -31,7 +31,9 @@ const searchConfig = reactive([
props: { props: {
placeholder: '请选择状态', placeholder: '请选择状态',
clearable: true, clearable: true,
cacheKey: 'special_fund' filterable:true,
cacheKey: 'special_fund',
remote: true
} }
}, },
{ {

View File

@@ -82,7 +82,8 @@ const searchConfig = ref([
props: { props: {
placeholder: '请选择', placeholder: '请选择',
clearable: true, clearable: true,
cacheKey: 'normal_disable' cacheKey: 'normal_disable',
remote: true
} }
}, },
{ {

View File

@@ -71,7 +71,8 @@ const searchConfig = ref([
props: { props: {
placeholder: '请输入', placeholder: '请输入',
cacheKey: 'normal_disable', cacheKey: 'normal_disable',
clearable: true clearable: true,
remote: true
} }
}, },
]) ])

View File

@@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<el-button v-print="print" color="#ded0b2" icon="Printer" style="margin-left: 15px"> 打印</el-button> <el-button v-print="print" color="#ded0b2" icon="Printer"> 打印</el-button>
</div> </div>
<div style="margin: 10px" id="printBox"> <div style="margin: 10px" id="printBox">
<el-timeline> <el-timeline>