Files
hb_pqs_web/src/views/Process-supervision/components/TerminalDetection/File.vue

237 lines
6.1 KiB
Vue
Raw Normal View History

2025-01-09 19:02:44 +08:00
<template>
<div class="upload-file">
<el-upload
multiple
:action="uploadFileUrl"
:before-upload="handleBeforeUpload"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
:on-success="handleUploadSuccess"
:show-file-list="false"
:headers="headers"
class="upload-file-uploader"
accept=".doc,.docx,.xls,.xlsx,.pdf,.txt"
ref="upload"
>
<!-- 上传按钮 -->
<div style="display: flex">
<el-input
style="width: 240px"
v-model="fileList.name"
placeholder="文件名称"
disabled
></el-input>
<el-button
size="small"
style="margin-left: 10px"
type="primary"
icon="el-icon-upload2"
>上传本地报告</el-button
>
</div>
<!-- 上传提示 -->
</el-upload>
</div>
</template>
<script>
// import { getAccessToken } from "@/utils/auth";
// import { getfile } from "@/api/core/ProjectList";
export default {
name: "FileUpload",
props: {
// 值
value: [String, Object, Array],
// 数量限制
limit: {
type: Number,
default: 100,
},
id: {},
originalName: {},
originalReport: {},
// 大小限制(MB)
fileSize: {
type: Number,
default: 512,
},
// 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: {
type: Array,
default: () => ["doc"],
},
// 是否显示提示
isShowTip: {
type: Boolean,
default: true,
},
},
data() {
return {
number: 0,
uploadList: [],
uploadFileUrl: "/api/process-boot/process/pmsTerminalDetection/upload", // 请求地址
headers: {
Authorization: window.sessionStorage.getItem("cntoken"),
}, // 设置上传的请求头部
fileList: {
name: "",
data: "",
},
};
},
watch: {
// value: {
// handler(val) {
// if (val) {
// let temp = 1;
// // 首先将值转为数组
// const list = Array.isArray(val) ? val : this.value.split(",");
// // 然后将数组转为对象数组
// this.fileList = list.map((item) => {
// if (typeof item === "string") {
// item = { name: item, url: item };
// }
// item.uid = item.uid || new Date().getTime() + temp++;
// return item;
// });
// } else {
// this.fileList = [];
// return [];
// }
// },
// deep: true,
// immediate: true,
// },
},
computed: {
// 是否显示提示
showTip() {
return this.isShowTip && (this.fileType || this.fileSize);
},
},
mounted() {
this.fileList = {
name: this.originalName,
data: this.originalReport,
};
},
methods: {
// 上传前校检格式和大小
handleBeforeUpload(file) {
// 校检文件类型
if (this.fileType) {
let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
}
const isTypeOk = this.fileType.some((type) => {
if (file.type.indexOf(type) > -1) return true;
return !!(fileExtension && fileExtension.indexOf(type) > -1);
});
if (!isTypeOk) {
this.$message.error(
`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`
);
return false;
}
}
// 校检文件大小
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
this.$message("正在上传文件,请稍候...");
this.number++;
return true;
},
// 文件个数超出
handleExceed() {
// this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`);
},
// 上传失败
handleUploadError(err) {
this.$message.error(err);
},
// 上传成功回调
handleUploadSuccess(res) {
this.$message({
message: "上传成功!",
type: "success",
});
this.fileList.name = `${this.id}-原始数据报告`;
this.fileList.data = res.data;
// console.log(`123`, res);
},
// 删除文件
handleDelete(index) {
// this.fileList.splice(index, 1);
// this.$emit("input", this.fileList);
},
// 获取文件名称
getFileName(name) {
if (name.lastIndexOf("/") > -1) {
return name.slice(name.lastIndexOf("/") + 1);
} else {
return "";
}
},
// 对象转成指定字符串分隔
listToString(list, separator) {
let strs = "";
separator = separator || ",";
for (let i in list) {
strs += list[i].url + separator;
}
return strs !== "" ? strs.substr(0, strs.length - 1) : "";
},
// 下载
exportExcels(e) {
getfile(e.url.substring(32)).then((res) => {
let blob = new Blob([res], {
type: "application/vnd.ms-excel",
});
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a"); // 创建a标签
link.href = url; // link.download = "电压暂降事件分析报告"; // 设置下载的文件名
link.download = e.url.substring(
e.url.lastIndexOf("/") + 1,
e.url.length
); // 设置下载的文件名
document.body.appendChild(link);
link.click(); //执行下载
document.body.removeChild(link);
});
},
},
};
</script>
<style scoped lang="scss">
.upload-file-uploader {
margin-bottom: 5px;
}
.upload-file-list .el-upload-list__item {
border: 1px solid #e4e7ed;
line-height: 2;
margin-bottom: 10px;
position: relative;
}
.upload-file-list .ele-upload-list__item-content {
display: flex;
justify-content: space-between;
align-items: center;
color: inherit;
}
.ele-upload-list__item-content-action .el-link {
margin-right: 10px;
}
</style>