7 changed files with 363 additions and 4 deletions
@ -0,0 +1,8 @@ |
|||||
|
import request from "@/utils/request"; |
||||
|
export function exportPdf(data) { |
||||
|
return request({ |
||||
|
url: "/reportPDF", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,263 @@ |
|||||
|
<template> |
||||
|
<div class="box" style="position: relative"> |
||||
|
<div style="position: fixed; top: 20px; right: 20px"> |
||||
|
<el-button |
||||
|
@click="handleDownload" |
||||
|
icon="el-icon-download" |
||||
|
type="warning" |
||||
|
plain |
||||
|
>下载</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<div class="box-cent"> |
||||
|
<div class="box-cent1"> |
||||
|
<div class="div-pdf"> |
||||
|
<pdf |
||||
|
v-for="i in loadedPages" |
||||
|
:key="i" |
||||
|
:src="filePdfUrl" |
||||
|
:page="i" |
||||
|
></pdf> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import pdf from "vue-pdf"; |
||||
|
export default { |
||||
|
name: "MeetingList", |
||||
|
props: ["pdfPath"], |
||||
|
components: { |
||||
|
pdf, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
filePdfUrl: "", |
||||
|
numPages: 0, |
||||
|
show: false, |
||||
|
loadedPages: [], |
||||
|
currentPage: 1, |
||||
|
loadInterval: null, |
||||
|
loadCount: 5, // 默认每次加载5页 |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
this.filePdfUrl = this.pdfPath; |
||||
|
this.getNumPages(this.filePdfUrl); |
||||
|
}, |
||||
|
beforeDestroy() { |
||||
|
if (this.loadInterval) { |
||||
|
clearInterval(this.loadInterval); |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
handleDownload() { |
||||
|
window.open(this.filePdfUrl); |
||||
|
}, |
||||
|
getNumPages(url) { |
||||
|
this.pdfSrc = url; |
||||
|
this.pdfSrc = pdf.createLoadingTask(this.pdfSrc); |
||||
|
this.pdfSrc.promise.then((pdf) => { |
||||
|
this.numPages = pdf.numPages; |
||||
|
this.startLoadingPages(); |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
startLoadingPages() { |
||||
|
this.loadInterval = setInterval(() => { |
||||
|
if (this.currentPage <= this.numPages) { |
||||
|
// 每次加载loadCount页 |
||||
|
const endPage = Math.min( |
||||
|
this.currentPage + this.loadCount - 1, |
||||
|
this.numPages |
||||
|
); |
||||
|
for (let i = this.currentPage; i <= endPage; i++) { |
||||
|
this.loadedPages.push(i); |
||||
|
} |
||||
|
this.currentPage = endPage + 1; |
||||
|
} else { |
||||
|
clearInterval(this.loadInterval); |
||||
|
} |
||||
|
}, 500); |
||||
|
}, |
||||
|
}, |
||||
|
onLoad() {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
::v-deep .u-modal__content { |
||||
|
text-align: center; |
||||
|
} |
||||
|
.popup-close { |
||||
|
position: fixed; |
||||
|
right: 20px; |
||||
|
top: 20px; |
||||
|
z-index: 9999; |
||||
|
|
||||
|
::v-deep.uni-icons { |
||||
|
font-size: 40px !important; |
||||
|
color: #fff !important; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.div-gb { |
||||
|
max-width: 100px; |
||||
|
margin-left: 16px; |
||||
|
} |
||||
|
|
||||
|
.div-li { |
||||
|
// padding-left: 10px; |
||||
|
} |
||||
|
|
||||
|
.div-pdf { |
||||
|
max-width: 100%; |
||||
|
} |
||||
|
|
||||
|
.tools { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
position: absolute; |
||||
|
bottom: 26px; |
||||
|
left: 16px; |
||||
|
right: 16px; |
||||
|
|
||||
|
uni-button { |
||||
|
font-size: 18px; |
||||
|
line-height: 44px; |
||||
|
height: 44px; |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
.page { |
||||
|
line-height: 44px; |
||||
|
height: 44px; |
||||
|
width: 100px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.pathsName { |
||||
|
color: #fff; |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
|
||||
|
.pdfBox .el-button { |
||||
|
background: rgba(255, 255, 255, 0); |
||||
|
border: none; |
||||
|
/* width: 30px; */ |
||||
|
} |
||||
|
|
||||
|
.pdfBox >>> .el-icon-arrow-left, |
||||
|
.pdfBox >>> .el-icon-arrow-right { |
||||
|
font-size: 18px; |
||||
|
color: #000; |
||||
|
} |
||||
|
|
||||
|
.pdfBox .page { |
||||
|
margin: 0 10px; |
||||
|
} |
||||
|
|
||||
|
.pdfBox .el-button-group { |
||||
|
width: 100%; |
||||
|
justify-content: center; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding-top: 20px; |
||||
|
} |
||||
|
|
||||
|
.pdfBox { |
||||
|
padding-bottom: 20px; |
||||
|
margin-top: 20px; |
||||
|
background: #fff; |
||||
|
min-height: 300px; |
||||
|
} |
||||
|
|
||||
|
.contLeft-pane >>> .el-form-item__label { |
||||
|
text-align: right; |
||||
|
margin-right: 10px !important; |
||||
|
padding: 0 !important; |
||||
|
} |
||||
|
|
||||
|
.contLeft-pane >>> .el-form-item--medium .el-form-item__content { |
||||
|
flex: 1; |
||||
|
} |
||||
|
|
||||
|
.li-item { |
||||
|
uni-div { |
||||
|
font-size: 20px; |
||||
|
line-height: 40px; |
||||
|
|
||||
|
span { |
||||
|
font-size: 20px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.li-title { |
||||
|
font-size: 20px; |
||||
|
font-weight: bold; |
||||
|
line-height: 30px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.div-box { |
||||
|
margin-top: 50px; |
||||
|
} |
||||
|
|
||||
|
.div-none { |
||||
|
height: 100%; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
font-size: 40px !important; |
||||
|
} |
||||
|
|
||||
|
.div-ul { |
||||
|
text-align: left; |
||||
|
margin-bottom: 16px; |
||||
|
|
||||
|
.div-li { |
||||
|
span { |
||||
|
font-size: 20px; |
||||
|
line-height: 40px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.div-title { |
||||
|
display: inline-block; |
||||
|
border: 1px solid #000; |
||||
|
padding: 0 14px; |
||||
|
margin-bottom: 30px; |
||||
|
line-height: 50px; |
||||
|
border-radius: 6px; |
||||
|
font-size: 20px; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.box { |
||||
|
width: 50vw; |
||||
|
height: 90vh; |
||||
|
background-size: cover; |
||||
|
box-sizing: border-box; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
|
||||
|
.box-cent { |
||||
|
flex: 1; |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.box-cent1 { |
||||
|
position: absolute; |
||||
|
top: 0; |
||||
|
bottom: 0; |
||||
|
left: 0; |
||||
|
right: 0; |
||||
|
overflow-y: scroll; |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
<style></style> |
||||
@ -0,0 +1,75 @@ |
|||||
|
<template> |
||||
|
<div class="container" v-loading="loading"> |
||||
|
<div v-if="pdfPath"> |
||||
|
<pdf :pdfPath="pdfPath"></pdf> |
||||
|
</div> |
||||
|
<div v-else class="zw">未查询到报告单</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { exportPdf } from "@/api/report.js"; |
||||
|
import pdf from "./components/pdf.vue"; |
||||
|
export default { |
||||
|
components: { |
||||
|
pdf, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
loading: false, |
||||
|
qzUrl: process.env.VUE_APP_API_QZURL, |
||||
|
pdfPath: null, |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
// 下载 |
||||
|
handleDownload() { |
||||
|
if (this.pdfPath) { |
||||
|
window.open(this.pdfPath); |
||||
|
} |
||||
|
}, |
||||
|
// 查询 |
||||
|
async getExportPdf() { |
||||
|
this.loading = true; |
||||
|
exportPdf({ |
||||
|
patientNo: this.$route.query.patient_no, |
||||
|
emplCode: this.$route.query.empl_code, |
||||
|
}) |
||||
|
.then((res) => { |
||||
|
this.loading = false; |
||||
|
this.pdfPath = null; |
||||
|
if (res.data) { |
||||
|
this.$modal.msgSuccess("查询成功"); |
||||
|
this.pdfPath = this.qzUrl + res.data; |
||||
|
} |
||||
|
}) |
||||
|
.catch((error) => { |
||||
|
this.loading = false; |
||||
|
// this.$modal.msgError("查询失败"); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
created() { |
||||
|
// this.getExportPdf(); |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.zw { |
||||
|
font-size: 100px; |
||||
|
color: #b0b0b0; |
||||
|
} |
||||
|
.container { |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 100vh; |
||||
|
padding: 16px; |
||||
|
background: url("./back.png"); |
||||
|
background-size: cover; |
||||
|
background-repeat: no-repeat; |
||||
|
} |
||||
|
</style> |
||||
|
<style></style> |
||||
Loading…
Reference in new issue