You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
<script>
|
|
import {downLoadObjectFile} from '@/api/eam/eam_object_list.js'
|
|
export default {
|
|
name: "qcReportFileTable",
|
|
props:{
|
|
dataList:{
|
|
type:Array,
|
|
required:true
|
|
},
|
|
queryLoading:{
|
|
type:Boolean,
|
|
default:false,
|
|
},
|
|
columns:{
|
|
type:Array,
|
|
required: true,
|
|
}
|
|
},
|
|
methods: {
|
|
// 预览
|
|
previewFile (row) {
|
|
const fileName = row.fileName || row.fileType
|
|
downLoadObjectFile(row).then(({data}) => {
|
|
this.$filePreview.previewFile(data, fileName).then(result => {
|
|
if (result.message) {
|
|
this.$message.success(result.message)
|
|
}
|
|
}).catch(error => {
|
|
this.$message.error('文件预览失败:' + (error.message || '未知错误'))
|
|
})
|
|
}).catch(() => {
|
|
this.$message.error('文件下载失败,请稍后重试')
|
|
})
|
|
},
|
|
|
|
// 文件下载
|
|
downloadFile (row) {
|
|
downLoadObjectFile(row)
|
|
.then(({data}) => {
|
|
// 不限制文件下载类型
|
|
const blob = new Blob([data], {type: "application/octet-stream"})
|
|
// 下载文件名称
|
|
const fileName = row.fileName
|
|
// a标签下载
|
|
const linkNode = document.createElement('a')
|
|
// a标签的download属性规定下载文件的名称
|
|
linkNode.download = fileName
|
|
linkNode.style.display = 'none'
|
|
// 生成一个Blob URL
|
|
linkNode.href = URL.createObjectURL(blob)
|
|
document.body.appendChild(linkNode)
|
|
// 模拟在按钮上的一次鼠标单击
|
|
linkNode.click()
|
|
// 释放URL 对象
|
|
URL.revokeObjectURL(linkNode.href)
|
|
document.body.removeChild(linkNode)
|
|
})
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<el-table
|
|
:height="350"
|
|
:data="dataList"
|
|
border
|
|
v-loading="queryLoading"
|
|
element-loading-text="拼命加载中"
|
|
style="width: 100%; ">
|
|
<el-table-column
|
|
v-for="(item,index) in columns" :key="index"
|
|
:sortable="item.columnSortable"
|
|
:prop="item.columnProp"
|
|
:header-align="item.headerAlign"
|
|
:show-overflow-tooltip="item.showOverflowTooltip"
|
|
:align="item.align"
|
|
:fixed="item.fixed===''?false:item.fixed"
|
|
:min-width="item.columnWidth"
|
|
:label="item.columnLabel">
|
|
<template slot-scope="scope">
|
|
<span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
|
|
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column
|
|
header-align="center"
|
|
align="center"
|
|
width="100"
|
|
label="操作">
|
|
<template slot-scope="scope">
|
|
<el-link style="cursor: pointer" @click="previewFile(scope.row)">预览</el-link>
|
|
<el-link style="cursor: pointer" @click="downloadFile(scope.row)">下载</el-link>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</template>
|
|
|
|
<style scoped>
|
|
|
|
</style>
|