|
|
<script>import UploadFileList from "../../common/uploadFileList.vue";import {downloadFileList, getFileContentList, removeFile} from "../../../../api/test/testInformation";import {deleteQuotationFile, downLoadQuotationFile} from "../../../../api/quotation/quotationInformation";
export default { name: "testFile", components: {UploadFileList}, props:{ dataList:{ type: Array, default: ()=>[], }, testNo:{ type:String, }, columnList:{ type: Array, default: ()=>[], }, height:{ type:Number, default:300 }, }, model:{ prop:"dataList", event:"change" }, data(){ return{ uploadDialog:false, fileRemark:'', token:'', fileList:[], } }, methods:{ getFileContentList(){ let params = { orderRef1:this.$store.state.user.site, orderRef2:this.testNo } getFileContentList(params).then(({data})=>{ if (data && data.code === 0){ this.$emit("change",data.rows) }else { this.$message.warning(data.msg) } }).catch((error)=>{ this.$message.error(error) }) }, downloadFile (row) { downLoadQuotationFile(row).then(({data}) => { // 不限制文件下载类型
const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'}) // 下载文件名称
const fileName = row.fileName // a标签下载
const linkNode = document.createElement('a') linkNode.download = fileName // a标签的download属性规定下载文件的名称
linkNode.style.display = 'none' linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
document.body.appendChild(linkNode) linkNode.click() // 模拟在按钮上的一次鼠标单击
URL.revokeObjectURL(linkNode.href) // 释放URL 对象
document.body.removeChild(linkNode) }) }, removeFile(row){ this.$confirm('确定要删除此文件?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { deleteQuotationFile(row).then(({data}) => { if (data && data.code === 0) { this.getFileContentList() } else { this.$alert(data.msg, '错误', { confirmButtonText: '确定' }) } }) }).catch(() => { }) }, previewFile(row){ // 预览文件
let type = ''; let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']; if (image.includes(row.fileType.toLowerCase())){ type = 'image/' + row.fileType; } let video = ['mp4', 'avi', 'mov', 'wmv', 'flv']; if (video.includes(row.fileType.toLowerCase())){ type = 'video/' + row.fileType; }
let txt = ['txt']; if (txt.includes(row.fileType.toLowerCase())){ type = 'text/plain'; } let office = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']; if (office.includes(row.fileType.toLowerCase())){ this.$message.warning(`该文件格式暂不支持预览`) return }
let pdf = ['pdf']; if (pdf.includes(row.fileType.toLowerCase())){ type = 'application/pdf'; }
if (type === ''){ this.$message.warning(`该文件格式暂不支持预览`) return; } downLoadQuotationFile(row).then(({data}) => { const blob = new Blob([data], { type: type }); // 创建URL来生成预览
const fileURL = URL.createObjectURL(blob); // 在新标签页中打开文件预览
const newTab = window.open(fileURL, '_blank'); }); }, downloadBtn(){ if (this.selectionFile.length < 1){ this.$message.warning('请选择需要下载的文件') return } for (let i = 0; i < this.selectionFile.length; i++) { this.downloadFile(this.selectionFile[i]) } }, handleSelectionChange(val){ this.selectionFile = val } }, watch:{ uploadDialog(newValue,oldValue){ if (newValue === false){ this.getFileContentList(); } }, }}</script>
<template><div> <div style="margin: 5px 0px"> <el-button type="primary" @click="uploadDialog = true">上传文件</el-button> <el-button type="primary" @click="downloadBtn" >下载</el-button> </div> <el-table :height="height" :data="dataList" border @selection-change="handleSelectionChange" style="width: 100%"> <el-table-column type="selection" label="序号" align="center"/> <el-table-column v-for="(item,index) in columnList" :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 fixed="right" header-align="center" align="center" width="120" label="操作"> <template slot-scope="{row,$index}"><!-- <el-link style="cursor:pointer;" @click="downloadFile(row)">下载</el-link>--> <el-link style="cursor:pointer;" @click="removeFile(row)">删除</el-link> <el-link style="cursor:pointer;" @click="previewFile(row)">预览</el-link> </template> </el-table-column> </el-table> <upload-file-list folder="testFile" :label="'测试单号:'" :file-list.sync="fileList" :no="testNo" :upload-dialog.sync="uploadDialog" path="/upload/test"></upload-file-list></div></template>
<style scoped>
</style>
|