wcs_client_s7_baoying/src/view/component/runningInfo/DownloadLog.vue

185 lines
5.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<el-form :model="downLoadLog" :label-width="120" style="width: 30vh">
<div style="font-size: 0.8rem; margin-bottom: 1rem; color: coral">
下载路径在您的浏览器里设置哦
</div>
<el-form-item label="日志类型:">
<el-select v-model="downLoadLog.logType" @change="changeLogType">
<el-option label="系统日志" value="系统日志" />
<el-option label="事件日志" value="事件日志" />
<el-option label="接口请求日志" value="接口请求日志" />
<el-option label="接口接收日志" value="接口接收日志" />
<el-option label="异常日志" value="异常日志" />
<el-option label="数据库日志" value="数据库日志" />
</el-select>
</el-form-item>
<el-form-item label="日志时间:">
<el-badge :value="fileName.length">
<el-select v-model="downLoadLog.logFileName" style="width: calc(30vh - 120px)">
<el-option v-for="item in fileName" :label="item" :value="item" />
</el-select>
</el-badge>
</el-form-item>
</el-form>
<span class="dialog-footer">
<el-button @click="preview">预览</el-button>
<el-button type="primary" @click="startDownLoad">下载</el-button>
</span>
</div>
</template>
<script>
// import 《组件名称》 from '《组件路径》 ';
import sysApi from "@/axios/system";
import {ElMessage} from "element-plus";
export default {
// import 引入的组件需要注入到对象中才能使用
components: {},
props: ['modelValue'],
emits: ['update:modelValue'],
data() {
// 这里存放数据
return {
downLoadLog: {
// log类型
logType: '',
// log文件名
logFileName: ''
},
// 文件列表
fileName: []
}
},
// 计算属性 类似于 data 概念
computed: {
},
// 监控 data 中的数据变化
watch: {},
// 方法集合
methods: {
// 下载文件
startDownLoad() {
if(this.downLoadLog.logFileName === '' || this.downLoadLog.logType === '')
{
ElMessage({
message: '需要先选择类型和时间',
type: 'warning',
})
return
}
sysApi.checkDownloadFile(this.downLoadLog).then((response) => {
const responseData = response.data
if(responseData.success === false) {
ElMessage({
message: '文件不存在',
type: 'warning',
})
return
}
sysApi.downloadFile(this.downLoadLog).then((response) => {
const responseData = response.data
const link = document.createElement('a');
link.href = window.URL.createObjectURL(new Blob([responseData]));
link.setAttribute('download', this.downLoadLog.logType + this.downLoadLog.logFileName);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
ElMessage({
message: '您的下载将在 30秒内开始请稍后',
type: 'success',
})
}).catch((ex) => {
// 通讯报错
ElMessage({
message: '下载出现异常:' + ex,
type: 'error',
})
})
}).catch((ex) => {
// 通讯报错
ElMessage({
message: '下载文件验证出现异常:' + ex,
type: 'error',
})
})
},
changeLogType() {
this.downLoadLog.logFileName = ''
sysApi.getLogFileName(this.downLoadLog.logType).then((response) => {
const responseData = response.data
if(responseData.code !== 0 || responseData["returnData"] === undefined || responseData["returnData"] === null) {
ElMessage({
message: '没有文件',
type: 'warning',
})
this.fileName = []
return
}
this.fileName = responseData["returnData"]
}).catch((ex) => {
// 通讯报错
ElMessage({
message: '请求出现异常:' + ex,
type: 'error',
})
this.fileName = []
})
},
// 预览
preview() {
if(this.downLoadLog.logFileName === '' || this.downLoadLog.logType === '')
{
ElMessage({
message: '需要先选择类型和时间',
type: 'warning',
})
return
}
this.$emit('update:modelValue', '')
sysApi.checkDownloadFile(this.downLoadLog).then((response) => {
const responseData = response.data
if(responseData.success === false) {
ElMessage({
message: '文件不存在',
type: 'warning',
})
return
}
sysApi.downloadFile(this.downLoadLog).then((response) => {
const responseData = response.data
responseData.text().then(data=>{
this.$emit('update:modelValue', data)
}).catch(err=>{
ElMessage({
message: '预览出现异常:' + err,
type: 'error',
})
})
}).catch((ex) => {
// 通讯报错
ElMessage({
message: '预览出现异常:' + ex,
type: 'error',
})
})
}).catch((ex) => {
// 通讯报错
ElMessage({
message: '预览文件验证出现异常:' + ex,
type: 'error',
})
})
}
},
// 生命周期 - 挂载完成(可以访问 DOM 元素)
mounted() {
}
}
</script>
<style scoped>
</style>