feat : 文件预览,项目详情文件表格展示
This commit is contained in:
@@ -27,7 +27,6 @@
|
||||
</template>
|
||||
</fvTable>
|
||||
</el-row>
|
||||
|
||||
<baseTitle v-if="type!='phase'" :title="getTagName(type)+getTitleInfo(data.taskId)"></baseTitle>
|
||||
<fvForm :schema="schema" @getInstance="(e)=>form = e"></fvForm>
|
||||
<el-form :model="formData" label-width="auto" style="margin-top: -15px">
|
||||
@@ -64,6 +63,8 @@
|
||||
<process-diagram-viewer v-if="processViewer&&changeDiagram" :id-name="idName?idName:type"/>
|
||||
</div>
|
||||
</div>
|
||||
<file-preview ref="filePreviewRef" :fullscreen="fullscreen" v-if="filePreviewShow" :fileName="filePreviewParam.fileName" :fileUrl="filePreviewParam.fileUrl"
|
||||
:fileType="filePreviewParam.fileType"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -168,6 +169,70 @@ const props = defineProps({
|
||||
}
|
||||
})
|
||||
const form = ref()
|
||||
|
||||
const editSingleTableConfig = reactive({
|
||||
columns: [
|
||||
{
|
||||
prop: 'index',
|
||||
type: 'index',
|
||||
label: '序号',
|
||||
align: 'center',
|
||||
width: 85,
|
||||
},
|
||||
{
|
||||
prop: 'originalFileName',
|
||||
label: '文件名',
|
||||
align: 'center',
|
||||
width: 400,
|
||||
currentRender: ({row, index}) => (<div style="color: #2a99ff;cursor: pointer;" onClick={()=>clickToPreview(row)}>{row.originalFileName}</div>)
|
||||
},
|
||||
{
|
||||
prop: 'tag',
|
||||
label: '标签',
|
||||
align: 'center'
|
||||
},
|
||||
{
|
||||
prop: 'size',
|
||||
label: '文件大小',
|
||||
align: 'center',
|
||||
width: 150,
|
||||
currentRender: ({row, index}) => (parseInt(row.size / 1024) + 'KB')
|
||||
},
|
||||
{
|
||||
prop: 'oper',
|
||||
label: '操作',
|
||||
align: 'center',
|
||||
showOverflowTooltip: false,
|
||||
currentRender: ({row, index}) => {
|
||||
let btn = []
|
||||
btn.push({label: '下载', func: () => handleDownload(row), type: 'primary'})
|
||||
// if (row.newFile) {
|
||||
// btn.push({label: '删除', func: () => handleDelete(row), type: 'primary'})
|
||||
// }
|
||||
return (
|
||||
<div style={{width: '100%'}}>
|
||||
{
|
||||
btn.map(item => (
|
||||
<el-button
|
||||
type={item.type}
|
||||
onClick={() => item.func()}
|
||||
link>
|
||||
{item.label}
|
||||
</el-button>
|
||||
))
|
||||
}
|
||||
{
|
||||
row.newFile ? <popover-delete name={row.originalFileName} type={'文件'} btnType={'danger'}
|
||||
perm={['mosr:requirement:del']}
|
||||
onDelete={() => handleDelete(row)}/>
|
||||
: ''
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
const schema = computed(() => {
|
||||
let arr
|
||||
if (props.type == 'approval') {
|
||||
@@ -178,7 +243,7 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
labelWidth: 'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
@@ -195,7 +260,7 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
labelWidth: 'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
@@ -212,7 +277,7 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
labelWidth: 'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
@@ -224,31 +289,22 @@ const schema = computed(() => {
|
||||
</div>
|
||||
)
|
||||
},
|
||||
{
|
||||
label: '项目立项附件',
|
||||
prop: 'singleFile',
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth: 'left',
|
||||
component: () => {
|
||||
let singleFileArray = [props.formData.singleFile]
|
||||
return <fvTable style="width: 100%;max-height: 80px;" height="80"
|
||||
tableConfig={editSingleTableConfig}
|
||||
data={singleFileArray} isSettingCol={false} pagination={false}>
|
||||
</fvTable>
|
||||
}
|
||||
},
|
||||
]
|
||||
arr.push(
|
||||
{
|
||||
label: '项目立项附件',
|
||||
prop: 'singleFile',
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
props.formData.singleFile?.originalFileName ?
|
||||
<span
|
||||
style={{color: '#409EFF', cursor: 'pointer'}}
|
||||
onClick={() => handleDownload(props.formData.singleFile)}
|
||||
>
|
||||
{props.formData.singleFile?.originalFileName}
|
||||
</span> :
|
||||
<span>{'--'}</span>
|
||||
}
|
||||
</div>
|
||||
|
||||
)
|
||||
})
|
||||
} else if (props.type == 'execute') {
|
||||
arr = [
|
||||
{
|
||||
@@ -257,7 +313,7 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
labelWidth: 'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
@@ -275,22 +331,14 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
props.formData.singleFile?.originalFileName ?
|
||||
<span
|
||||
style={{color: '#409EFF', cursor: 'pointer'}}
|
||||
onClick={() => handleDownload(props.formData.singleFile)}
|
||||
>
|
||||
{props.formData.singleFile?.originalFileName}
|
||||
</span> :
|
||||
<span>{'--'}</span>
|
||||
}
|
||||
</div>
|
||||
|
||||
)
|
||||
labelWidth: 'left',
|
||||
component: () => {
|
||||
let singleFileArray = [props.formData.singleFile]
|
||||
return <fvTable style="width: 100%;max-height: 80px;" height="80"
|
||||
tableConfig={editSingleTableConfig}
|
||||
data={singleFileArray} isSettingCol={false} pagination={false}>
|
||||
</fvTable>
|
||||
}
|
||||
},
|
||||
]
|
||||
} else if (props.type == 'archivist') {
|
||||
@@ -301,22 +349,14 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
props.formData.singleFile?.originalFileName ?
|
||||
<span
|
||||
style={{color: '#409EFF', cursor: 'pointer'}}
|
||||
onClick={() => handleDownload(props.formData.singleFile)}
|
||||
>
|
||||
{props.formData.singleFile?.originalFileName}
|
||||
</span> :
|
||||
<span>{'--'}</span>
|
||||
}
|
||||
</div>
|
||||
|
||||
)
|
||||
labelWidth: 'left',
|
||||
component: () => {
|
||||
let singleFileArray = [props.formData.singleFile]
|
||||
return <fvTable style="width: 100%;max-height: 80px;" height="80"
|
||||
tableConfig={editSingleTableConfig}
|
||||
data={singleFileArray} isSettingCol={false} pagination={false}>
|
||||
</fvTable>
|
||||
}
|
||||
},
|
||||
]
|
||||
} else if (props.type == 'phase') {
|
||||
@@ -327,51 +367,26 @@ const schema = computed(() => {
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
props.formData.singleFile?.originalFileName ?
|
||||
<span
|
||||
style={{color: '#409EFF', cursor: 'pointer'}}
|
||||
onClick={() => handleDownload(props.formData.singleFile)}
|
||||
>
|
||||
{props.formData.singleFile?.originalFileName}
|
||||
</span> :
|
||||
<span>{'--'}</span>
|
||||
}
|
||||
</div>
|
||||
|
||||
)
|
||||
labelWidth: 'left',
|
||||
component: () => {
|
||||
let singleFileArray = [props.formData.singleFile]
|
||||
return <fvTable style="width: 100%;max-height: 80px;" height="80"
|
||||
tableConfig={editSingleTableConfig}
|
||||
data={singleFileArray} isSettingCol={false} pagination={false}>
|
||||
</fvTable>
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
return arr
|
||||
})
|
||||
|
||||
const setPreProcess = () => {
|
||||
//preProcessShow 为 EDIT 是 可以选择前置流程
|
||||
let pre = {
|
||||
label: '前置流程',
|
||||
prop: 'preProcess',
|
||||
colProps: {
|
||||
span: 24
|
||||
},
|
||||
labelWidth:'left',
|
||||
component: () => (
|
||||
<div>
|
||||
{
|
||||
props.formData.preProcess ? props.formData.preProcess.map(item => {
|
||||
return <span><a target="_blank" style={{color: '#409EFF', cursor: 'pointer'}}
|
||||
href={props.formData.preProcessBaseUrl + item.requestId}>{item.requestName}</a> </span>
|
||||
}) : <span>{'--'}</span>
|
||||
}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const filePreviewParam = ref({
|
||||
fileUrl: '',
|
||||
fileName: '',
|
||||
fileType: 'pdf'
|
||||
})
|
||||
const filePreviewShow = ref(false)
|
||||
const route = useRoute()
|
||||
const emit = defineEmits(['update:value'])
|
||||
const _value = computed({
|
||||
@@ -382,6 +397,17 @@ const _value = computed({
|
||||
emit("update:value", val);
|
||||
}
|
||||
})
|
||||
const clickToPreview=(row)=>{
|
||||
filePreviewShow.value = false
|
||||
filePreviewParam.value = {
|
||||
fileUrl: row.url,
|
||||
fileName: row.originalFileName,
|
||||
fileType: row.fileType
|
||||
}
|
||||
nextTick(()=>{
|
||||
filePreviewShow.value = true
|
||||
})
|
||||
}
|
||||
const getTagsOption = () => {
|
||||
if (!route.query.projectId) return
|
||||
getTags(route.query.projectId).then(res => {
|
||||
|
||||
Reference in New Issue
Block a user