fix : 修复项目实施附件查询功能及上传附件页面初始
This commit is contained in:
@@ -82,3 +82,11 @@ export const deleteDemand = (id) => {
|
||||
method: "delete"
|
||||
});
|
||||
};
|
||||
//需求征集附件列表(归档)
|
||||
export const getRequirementAttachment = (params) => {
|
||||
return request({
|
||||
url: '/workflow/mosr/requirement/attachments',
|
||||
method: "get",
|
||||
params:params
|
||||
});
|
||||
};
|
||||
|
||||
@@ -27,6 +27,13 @@ export const resubmitApply = (data) => {
|
||||
data: data
|
||||
});
|
||||
};
|
||||
export const getInitiationAttachment = (params) => {
|
||||
return request({
|
||||
url: '/workflow/mosr/project/approval/attachments',
|
||||
method: "get",
|
||||
params:params
|
||||
});
|
||||
};
|
||||
//项目实施
|
||||
export const getCheckDetail = (projectId) => {
|
||||
return request({
|
||||
@@ -112,3 +119,10 @@ export const getProjectConclusionProcess = () => {
|
||||
method: "get"
|
||||
});
|
||||
};
|
||||
export const getFilingAttachment = (params) => {
|
||||
return request({
|
||||
url: '/workflow/mosr/project/filing/attachments',
|
||||
method: "get",
|
||||
params:params
|
||||
});
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
<script setup lang="jsx">
|
||||
import FileUpload from '@/components/FileUpload.vue'
|
||||
import {deleteFile, downloadFile} from "../api/project-demand";
|
||||
import {deleteFile, downloadFile} from "@/api/project-demand";
|
||||
import {ElMessage, ElMessageBox, ElNotification} from "element-plus";
|
||||
|
||||
const emit = defineEmits(["getAttachment", "getOtherFile"])
|
||||
|
||||
148
src/components/SearchFilesByTag.vue
Normal file
148
src/components/SearchFilesByTag.vue
Normal file
@@ -0,0 +1,148 @@
|
||||
<template>
|
||||
<el-form :model="attachment" inline>
|
||||
<el-form-item label="关键词" prop="name">
|
||||
<el-input v-model="attachment.name" placeholder="请输入" clearable filterable style="width: 300px"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="标签" prop="tag" v-if="type==='3'">
|
||||
<el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable style="width: 300px">
|
||||
<el-option
|
||||
v-for="item in tagsOption"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleSearch" color="#DED0B2">搜索</el-button>
|
||||
<el-button color="#DED0B2" @click="handleUpload">上传附件</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-card style="width: 100%">
|
||||
<fvTable style="width: 100%;max-height: 250px" v-if="showTable" :tableConfig="tableConfig"
|
||||
:data="otherFileList" :isSettingCol="false" :pagination="false">
|
||||
<template #empty>
|
||||
<el-empty :image-size="90" description="暂无数据" style="padding: 0"/>
|
||||
</template>
|
||||
</fvTable>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
import {downloadFile} from "@/api/project-demand";
|
||||
import {ElNotification} from "element-plus";
|
||||
import {getTags} from "@/api/project-manage";
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const attachment = reactive({
|
||||
name: '',
|
||||
tag: ''
|
||||
})
|
||||
const emit = defineEmits(['search'])
|
||||
const props = defineProps({
|
||||
otherFileList: {
|
||||
type: Array,
|
||||
default: []
|
||||
}, type: {
|
||||
type: String,
|
||||
default: '0'
|
||||
}
|
||||
})
|
||||
const tagsOption = ref([])
|
||||
const tableConfig = reactive({
|
||||
columns: [
|
||||
{
|
||||
prop: 'originalFileName',
|
||||
label: '附件名称',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
prop: 'tag',
|
||||
label: '自定义标签',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'processNodeTag',
|
||||
label: '内置标签',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'size',
|
||||
label: '上传时间',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
prop: 'oper',
|
||||
label: '操作',
|
||||
align: 'center',
|
||||
showOverflowTooltip: false,
|
||||
currentRender: ({row, index}) => {
|
||||
return (
|
||||
<div>
|
||||
<el-button type="primary" link onClick={() => handleDownload(row)}>下载</el-button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
const showTable = ref(true)
|
||||
const getTagsOption = () => {
|
||||
if (!route.query.id) return
|
||||
let params = {
|
||||
projectId: route.query.id
|
||||
}
|
||||
getTags(params).then(res => {
|
||||
|
||||
if (res.code === 1000) {
|
||||
tagsOption.value = res.data
|
||||
} else {
|
||||
ElNotification({
|
||||
title: '提示',
|
||||
message: res.msg,
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
const handleSearch = () => {
|
||||
emit('search', attachment)
|
||||
}
|
||||
const handleUpload = () => {
|
||||
emit('upload')
|
||||
}
|
||||
const handleDownload = (row) => {
|
||||
downloadFile(row.fileId).then(res => {
|
||||
const blob = new Blob([res])
|
||||
let a = document.createElement('a')
|
||||
a.href = URL.createObjectURL(blob)
|
||||
a.download = row.originalFileName
|
||||
a.click()
|
||||
})
|
||||
}
|
||||
watch(() => props.type, (val) => {
|
||||
console.log('va四川省l',val)
|
||||
props.type = val
|
||||
if (val === '3') {
|
||||
getTagsOption()
|
||||
}
|
||||
})
|
||||
watch(() => props.otherFileList, (val) => {
|
||||
showTable.value = false
|
||||
nextTick(() => {
|
||||
showTable.value = true
|
||||
})
|
||||
props.otherFileList = val
|
||||
})
|
||||
if (props.type === '3') {
|
||||
getTagsOption()
|
||||
}
|
||||
defineExpose({
|
||||
tagsOption
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -2,8 +2,8 @@
|
||||
<baseTitle title="标签名称"></baseTitle>
|
||||
<el-form :model="formData" ref="tagForm" label-width="auto" :rules="rules">
|
||||
<el-form-item label="标签名称" prop="tagName">
|
||||
<el-input v-model="formData.tagName" placeholder="请输入标签名称" style="width: 400px" v-if="showInput"/>
|
||||
<el-select v-model="formData.tagName" placeholder="请选择标签" clearable filterable style="width: 200px" v-else>
|
||||
<el-input v-model="formData.tagName" placeholder="请输入标签名称" style="width: 300px" v-if="showInput"/>
|
||||
<el-select v-model="formData.tagName" placeholder="请选择标签" clearable filterable style="width: 300px" v-else>
|
||||
<el-option
|
||||
v-for="item in tagsOption"
|
||||
:key="item.label"
|
||||
@@ -38,7 +38,7 @@ const props = defineProps({
|
||||
default: []
|
||||
}, showInput: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: true
|
||||
},
|
||||
})
|
||||
const rules = reactive({
|
||||
|
||||
@@ -115,9 +115,9 @@ const tableConfig = reactive({
|
||||
// if (buttons.has("delete")) {
|
||||
// btn.push({label: '删除',prem: ['mosr:requirement:del'], func: () => handleDelete(row), type: 'primary'})
|
||||
// }
|
||||
// if (buttons.has("report")) {
|
||||
if (buttons.has("report")) {
|
||||
btn.push({label: '需求上报', prem: ['mosr:requirement:info'], func: () => handleReport(row), type: 'primary'})
|
||||
// }
|
||||
}
|
||||
return (
|
||||
<div style={{width: '100%'}}>
|
||||
{
|
||||
|
||||
11
src/views/project-demand/requirement/upload.vue
Normal file
11
src/views/project-demand/requirement/upload.vue
Normal file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<tag-and-file-upload />
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -38,3 +38,11 @@ export const resubmitReported = (data) => {
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
export const getCollectAttachment = (params) => {
|
||||
return request({
|
||||
url: '/workflow/mosr/requirement/collect/attachments',
|
||||
method: "get",
|
||||
params:params
|
||||
});
|
||||
};
|
||||
|
||||
11
src/views/project-demand/summary/upload.vue
Normal file
11
src/views/project-demand/summary/upload.vue
Normal file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<tag-and-file-upload />
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -1,111 +1,204 @@
|
||||
<template>
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
<el-tab-pane label="需求征集" name="first">
|
||||
<el-form :model="attachment" inline class="query-form">
|
||||
<el-form-item label="关键词" prop="tag">
|
||||
<el-input v-model="attachment.tag" placeholder="请输入" clearable filterable style="width: 200px"/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleSearch" color="#DED0B2">搜索</el-button>
|
||||
<el-button color="#DED0B2" @click="handleUpload">上传附件</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <fvSearchForm :searchConfig="searchConfig" @search="search"></fvSearchForm>-->
|
||||
<el-card style="width: 100%">
|
||||
<file-upload @getFile="getOtherFile" :showFileList="true"/>
|
||||
<fvTable style="width: 100%;max-height: 250px" v-if="showTable" :tableConfig="tableConfig"
|
||||
:data="otherFileList" :isSettingCol="false" :pagination="false">
|
||||
<template #empty>
|
||||
<el-empty :image-size="90" description="暂无数据" style="padding: 0"/>
|
||||
</template>
|
||||
</fvTable>
|
||||
</el-card>
|
||||
<el-tab-pane label="需求征集" name="0">
|
||||
<search-files-by-tag @search="searchRequirement" @upload="upload"
|
||||
:otherFileList="otherFileList"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="分摊汇总" name="second">
|
||||
|
||||
<el-tab-pane label="需求上报" name="1">
|
||||
<search-files-by-tag @search="searchReport" @upload="upload"
|
||||
:otherFileList="otherFileList"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目立项" name="2">
|
||||
<search-files-by-tag @search="searchInitiation" @upload="upload"
|
||||
:otherFileList="otherFileList"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目实施" name="3">
|
||||
<search-files-by-tag type="3" @search="searchImplementation" @upload="upload" ref="implementation"
|
||||
:otherFileList="otherFileList"/>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目归档" name="4">
|
||||
<search-files-by-tag @search="searchFiling" @upload="upload"
|
||||
:otherFileList="otherFileList"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
import {downloadFile} from "@/api/project-demand";
|
||||
import {ElNotification} from "element-plus";
|
||||
import {getImplementationAttachment} from "@/api/project-manage";
|
||||
import {getRequirementAttachment} from "@/api/project-demand";
|
||||
import {getCollectAttachment} from "@/views/project-demand/summary/api";
|
||||
import {getFilingAttachment, getInitiationAttachment} from "@/api/project-manage";
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const activeName = ref('first')
|
||||
const attachment = reactive({
|
||||
tag: ''
|
||||
})
|
||||
const searchConfig = reactive([
|
||||
{
|
||||
label: '关键词',
|
||||
prop: 'collectType',
|
||||
component: 'el-input',
|
||||
props: {
|
||||
placeholder: '请输入',
|
||||
clearable: true,
|
||||
filterable: true,
|
||||
const activeName = ref('3')
|
||||
const attachment = ref({})
|
||||
const showTable = ref(true)
|
||||
const implementation = ref()
|
||||
const otherFileList = ref([])
|
||||
const handleClick = (tab) => {
|
||||
let name = {}
|
||||
switchSearch(name, tab.index)
|
||||
}
|
||||
const getParams = (param, type) => {
|
||||
let targetId
|
||||
let params
|
||||
if (type === 1) {
|
||||
targetId = route.query.requirementId
|
||||
params = {
|
||||
targetId: targetId,
|
||||
...param
|
||||
}
|
||||
}
|
||||
])
|
||||
const tableConfig = reactive({
|
||||
columns: [
|
||||
{
|
||||
prop: 'originalFileName',
|
||||
label: '附件名称',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
prop: 'tag',
|
||||
label: '自定义标签',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'tag',
|
||||
label: '内置标签',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'tag',
|
||||
label: '上传时间',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'oper',
|
||||
label: '操作',
|
||||
align: 'center',
|
||||
currentRender: ({row, index}) => {
|
||||
return (
|
||||
<div>
|
||||
<el-button type="primary" link onClick={() => handleDownload(row)}>下载</el-button>
|
||||
</div>
|
||||
)
|
||||
} else if (type === 2){
|
||||
targetId = route.query.id
|
||||
if(JSON.stringify(param) !== '{}'){
|
||||
if (param.tag &&!param.name) {
|
||||
implementation.value.tagsOption?.forEach(item => {
|
||||
if (item.value === param.tag) {
|
||||
param.tag = item.label
|
||||
}
|
||||
})
|
||||
params = {
|
||||
targetId: targetId,
|
||||
tag:param.tag
|
||||
}
|
||||
}else if(!param.tag &¶m.name){
|
||||
params = {
|
||||
targetId: targetId,
|
||||
...param
|
||||
}
|
||||
} else if (!param.tag &&!param.name) {
|
||||
params = {
|
||||
targetId: targetId,
|
||||
}
|
||||
}
|
||||
}else {
|
||||
params = {
|
||||
targetId: targetId
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
const showTable = ref(true)
|
||||
const otherFileList = ref([])
|
||||
const handleUpload = () => {
|
||||
}else {
|
||||
targetId = route.query.id
|
||||
params = {
|
||||
targetId: targetId,
|
||||
...param
|
||||
}
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
const searchRequirement = async (param) => {
|
||||
await search(param)
|
||||
}
|
||||
const search = async (param, type) => {
|
||||
const res = await getRequirementAttachment(getParams(param, type))
|
||||
changeFileList(res)
|
||||
}
|
||||
const searchReport = async (param) => {
|
||||
const res = await getCollectAttachment(getParams(param))
|
||||
changeFileList(res)
|
||||
}
|
||||
const searchInitiation = async (param) => {
|
||||
const res = await getInitiationAttachment(getParams(param))
|
||||
changeFileList(res)
|
||||
}
|
||||
const searchImplementation = async (param) => {
|
||||
const res = await getImplementationAttachment(getParams(param,2))
|
||||
changeFileList(res)
|
||||
}
|
||||
const searchFiling = async (param) => {
|
||||
const res = await getFilingAttachment(getParams(param))
|
||||
changeFileList(res)
|
||||
}
|
||||
const changeFileList = (res) => {
|
||||
showTable.value = false
|
||||
if (res.code === 1000) {
|
||||
otherFileList.value = res.data
|
||||
nextTick(() => {
|
||||
showTable.value = true
|
||||
})
|
||||
} else {
|
||||
ElNotification({
|
||||
title: '提示',
|
||||
message: res.msg,
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
}
|
||||
const upload = () => {
|
||||
router.push({
|
||||
name: 'Filing/upload',
|
||||
name: switchUpload(activeName.value),
|
||||
query: {
|
||||
id: route.query.id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleDownload = (row) => {
|
||||
downloadFile(row.fileId).then(res => {
|
||||
const blob = new Blob([res])
|
||||
let a = document.createElement('a')
|
||||
a.href = URL.createObjectURL(blob)
|
||||
a.download = row.originalFileName
|
||||
a.click()
|
||||
})
|
||||
const switchUpload=(index)=>{
|
||||
switch (index) {
|
||||
case '0':
|
||||
return 'Requirement/upload';
|
||||
case '1':
|
||||
return 'Summary/upload';
|
||||
case '2':
|
||||
return 'Initiation/upload';
|
||||
case '3':
|
||||
return 'Implementation/upload';
|
||||
case '4':
|
||||
return 'Filing/upload';
|
||||
}
|
||||
}
|
||||
const switchSearch = (name, index) => {
|
||||
switch (index) {
|
||||
case '0':
|
||||
search(name, 1)
|
||||
break
|
||||
case '1':
|
||||
searchReport(name)
|
||||
break
|
||||
case '2':
|
||||
searchInitiation(name)
|
||||
break
|
||||
case '3':
|
||||
searchImplementation(name)
|
||||
break
|
||||
case '4':
|
||||
searchFiling(name)
|
||||
break
|
||||
}
|
||||
}
|
||||
onMounted(() => {
|
||||
if (activeName.value === '4') {
|
||||
let name = {
|
||||
name: ''
|
||||
}
|
||||
searchFiling(name)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style scoped lang="scss">
|
||||
:deep(.el-tabs__header) {
|
||||
margin: 15px 0 30px 0;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__nav-scroll) {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
|
||||
.el-tabs__nav {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
|
||||
.el-tabs__item {
|
||||
flex: 1;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.is-active {
|
||||
color: black;
|
||||
//background-color: #DED0B2;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -207,9 +207,9 @@ const tableConfig = reactive({
|
||||
if (buttons.has("details")) {
|
||||
btn.push({label: '详情', prem: ['mosr:requirement:info'], func: () => handleDetail(row), type: 'primary'})
|
||||
}
|
||||
if (buttons.has("attachments")) {
|
||||
// if (buttons.has("attachments")) {
|
||||
btn.push({label: '附件', prem: ['mosr:requirement:resubmit'], func: () => handleAttachment(row), type: 'primary'})
|
||||
}
|
||||
// }
|
||||
if (buttons.has("entry")) {
|
||||
btn.push({label: '结项', prem: ['mosr:requirement:del'], func: () => handleConclusion(row), type: 'primary'})
|
||||
}
|
||||
@@ -265,8 +265,8 @@ const handleAttachment = (row) => {
|
||||
router.push({
|
||||
name: 'Filing/attachment',
|
||||
query: {
|
||||
id: row.requirementId,
|
||||
projectId: row.projectId
|
||||
id: row.projectId,
|
||||
requirementId:row.requirementId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
11
src/views/project-management/filing/upload.vue
Normal file
11
src/views/project-management/filing/upload.vue
Normal file
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<tag-and-file-upload />
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<el-form :model="attachment" inline class="query-form">
|
||||
<el-form :model="attachment" inline style="margin-top: 15px">
|
||||
<el-form-item label="标签" prop="tag">
|
||||
<el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable style="width: 200px">
|
||||
<el-select v-model="attachment.tag" placeholder="请选择标签" clearable filterable style="width: 300px">
|
||||
<el-option
|
||||
v-for="item in tagsOption"
|
||||
:key="item.value"
|
||||
@@ -119,7 +119,6 @@ const handleSearch = () => {
|
||||
})
|
||||
showTable.value = false
|
||||
if (res.code === 1000) {
|
||||
// tagsOption.value = res.data
|
||||
otherFileList.value = res.data
|
||||
nextTick(() => {
|
||||
showTable.value = true
|
||||
@@ -145,7 +144,7 @@ const handleDownload = (row) => {
|
||||
})
|
||||
}
|
||||
getTagsOption()
|
||||
// handleSearch()
|
||||
handleSearch()
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<tag-and-file-upload :showInput="true"/>
|
||||
<tag-and-file-upload />
|
||||
</template>
|
||||
|
||||
<script setup lang="jsx">
|
||||
|
||||
Reference in New Issue
Block a user