|
@@ -7,7 +7,7 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <el-form-item label="操作时间">
|
|
|
+ <el-form-item label="备份时间">
|
|
|
<el-date-picker
|
|
|
v-model="queryForm.dataTime"
|
|
|
type="daterange"
|
|
@@ -34,12 +34,22 @@
|
|
|
|
|
|
<template #tabColumns={indexGenerate}>
|
|
|
<el-table-column type="index" :index="indexGenerate" label="序号" width="60" align="center"/>
|
|
|
- <el-table-column prop="deviceName" label="备份任务" width="160" />
|
|
|
- <el-table-column prop="startTIme" label="开始时间" width="160" />
|
|
|
+ <el-table-column prop="taskName" label="备份任务" width="160" />
|
|
|
+ <el-table-column prop="startTime" label="开始时间" width="160" />
|
|
|
<el-table-column prop="endTime" label="结束时间" width="160" />
|
|
|
- <el-table-column prop="operator" label="备份人" width="120" />
|
|
|
- <el-table-column prop="status" label="状态" width="120" />
|
|
|
- <el-table-column prop="note" label="备注" width="120" />
|
|
|
+ <el-table-column prop="duration" label="用时(秒)" width="100" />
|
|
|
+ <el-table-column prop="operator" label="操作人" width="120"/>
|
|
|
+ <el-table-column prop="status" label="状态" width="90">
|
|
|
+ <template #default="scope">
|
|
|
+ {{ {'success':'成功','running':'备份中','failed':'已失败'}[scope.row.status] || '' }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="note" label="备份文件" width="100" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-button type="primary" plain size="small" v-if="scope.row.status=='success'" @click="dwnbackup(scope.row)">下载</el-button>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ </el-table-column>
|
|
|
|
|
|
</template>
|
|
|
|
|
@@ -108,14 +118,51 @@
|
|
|
sortidx[data.tagCode]=true
|
|
|
}
|
|
|
})
|
|
|
- let defaultBack={sort:'glb',name:'全部表结构'}
|
|
|
+ let defaultBack={sort:'glb',name:'全库表结构'}
|
|
|
return [defaultBack,...sortary]
|
|
|
}
|
|
|
|
|
|
|
|
|
+ const dwnbackup=(record)=>{
|
|
|
+ api.downloadBackup(record.backupId).then(resp=>{
|
|
|
+ //console.log(resp)
|
|
|
+
|
|
|
+ const fileReader = new FileReader();
|
|
|
+ fileReader.readAsText(resp.data)
|
|
|
+ fileReader.onload = (event) => {
|
|
|
+ try{
|
|
|
+ const data = JSON.parse(event.target.result)
|
|
|
+ if(data.code!=0){
|
|
|
+ ElMessage.error(data.msg || '下载文件失败')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch(err){
|
|
|
+ parseDownloadFile(resp)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }).catch(err=>{
|
|
|
+ console.log(err)
|
|
|
+ ElMessage.error('下载文件出现网络错误')
|
|
|
+ })
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+ const parseDownloadFile=(res)=>{
|
|
|
+ const fileName = decodeURI(res.headers['content-disposition']).replace(/\w+;filename=(.*)/, '$1')
|
|
|
+ //console.log(fileName)
|
|
|
+ const blob = new Blob([res.data], { type: "application/octet-stream"})
|
|
|
+ const fileUrl = window.URL.createObjectURL(blob)
|
|
|
+
|
|
|
+ let link = document.createElement('a')
|
|
|
+ link.href = fileUrl
|
|
|
+ link.download = decodeURI(fileName) //设置下载的文件名
|
|
|
+ link.style.display = 'none'
|
|
|
+ document.body.appendChild(link)
|
|
|
+ link.click()
|
|
|
+
|
|
|
+ document.body.removeChild(link)
|
|
|
+ window.URL.revokeObjectURL(fileUrl)
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|