trying to rendering pdf(not succeeded yet)
This commit is contained in:
parent
6386694d02
commit
05d03451dc
@ -26,6 +26,7 @@
|
|||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"bootstrap": "^5.3.1",
|
"bootstrap": "^5.3.1",
|
||||||
|
"buffer": "^6.0.3",
|
||||||
"pdfjs-dist": "^4.2.67",
|
"pdfjs-dist": "^4.2.67",
|
||||||
"pinia": "^2.1.6",
|
"pinia": "^2.1.6",
|
||||||
"quill": "^1.3.7",
|
"quill": "^1.3.7",
|
||||||
|
|||||||
@ -14,6 +14,9 @@ export default {
|
|||||||
mnx_navToContact() {
|
mnx_navToContact() {
|
||||||
this.$router.push('/contact')
|
this.$router.push('/contact')
|
||||||
},
|
},
|
||||||
|
mnx_navToContentViewer(content_id) {
|
||||||
|
this.$router.push('/content-viewer/' + content_id)
|
||||||
|
},
|
||||||
|
|
||||||
//common
|
//common
|
||||||
mnx_navToFrontDoor() {
|
mnx_navToFrontDoor() {
|
||||||
|
|||||||
@ -1,8 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="">Blogs</div>
|
<div v-if="blogs" class="blogs_containter">
|
||||||
|
<div class="blog_containter" v-for="(blog, index) in blogs" :key="index" @click="view_blog(blog)">
|
||||||
|
<h2>{{ blog.blog_name }}</h2>
|
||||||
|
<img :src="blog.cover_picture">
|
||||||
|
<p v-text="retrieve_summary(blog)"> </p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { ContentApi } from '../../utils/index'
|
import { ContentApi, mediaDataHandler } from '../../utils/index'
|
||||||
export default {
|
export default {
|
||||||
name: 'Blogs',
|
name: 'Blogs',
|
||||||
components: {},
|
components: {},
|
||||||
@ -14,12 +20,34 @@ export default {
|
|||||||
retrieve_blogs() {
|
retrieve_blogs() {
|
||||||
ContentApi.retrieve_blogs()
|
ContentApi.retrieve_blogs()
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
response
|
this.blogs = response.data
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
this.mnx_backendErrorHandler(error)
|
this.mnx_backendErrorHandler(error)
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
view_blog(blog) {
|
||||||
|
this.mnx_navToContentViewer(blog.content_id)
|
||||||
|
},
|
||||||
|
retrieve_summary(blog) {
|
||||||
|
return mediaDataHandler.retrieveText(blog.summary_text);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
blogs: null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.blogs_containter {
|
||||||
|
@extend .container;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blog_containter {
|
||||||
|
@extend .container;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
48
frontend/src/pages/public/ContentViewer.vue
Normal file
48
frontend/src/pages/public/ContentViewer.vue
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<template>
|
||||||
|
<div class="">ContentViewer</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { pdfjsLib } from '../../plugins/index'
|
||||||
|
import { ContentApi, mediaDataHandler } from '../../utils/index'
|
||||||
|
import { Buffer } from 'buffer';
|
||||||
|
export default {
|
||||||
|
name: 'ContentViewer',
|
||||||
|
props: {
|
||||||
|
content_id: {
|
||||||
|
required: true,
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {},
|
||||||
|
computed: {},
|
||||||
|
mounted() {
|
||||||
|
this.retrieve_blog_content()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
retrieve_blog_content() {
|
||||||
|
ContentApi.retrieve_blog_content(this.content_id)
|
||||||
|
.then((response) => {
|
||||||
|
this.content_media_data = response.data
|
||||||
|
var loadingTask = pdfjsLib.getDocument({ data: Buffer.from(this.content_media_data, 'base64') })
|
||||||
|
loadingTask.promise.then(function(pdf) {
|
||||||
|
//
|
||||||
|
// Fetch the first page
|
||||||
|
//
|
||||||
|
pdf.getPage(1).then(function(page) {
|
||||||
|
//rendering
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
this.mnx_backendErrorHandler(error)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
content_media_data: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import * as pdfjsLib from 'pdfjs-dist'
|
import * as pdfjsLib from 'pdfjs-dist'
|
||||||
|
//need to set worker before the pdfjs can be used.
|
||||||
//pdfjsLib.GlobalWorkerOptions.workerPort = new Worker()
|
// pdfjsLib.GlobalWorkerOptions.workerPort = new Worker(
|
||||||
//new URL('pdfjs-dist/build/pdf.worker.js', import.meta.url)
|
// new URL('pdfjs-dist/build/pdf.worker.mjs', import.meta.url)
|
||||||
|
// )
|
||||||
|
|
||||||
export { pdfjsLib }
|
export { pdfjsLib }
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
import { createRouter, createWebHistory } from 'vue-router'
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
import { store, userRoleEnum } from '../store/index'
|
import { store, userRoleEnum } from '../store/index'
|
||||||
|
|
||||||
//public
|
//public
|
||||||
import About from '../../pages/public/About.vue'
|
import About from '../../pages/public/About.vue'
|
||||||
import Blogs from '../../pages/public/Blogs.vue'
|
import Blogs from '../../pages/public/Blogs.vue'
|
||||||
import Career from '../../pages/public/Career.vue'
|
import Career from '../../pages/public/Career.vue'
|
||||||
import Contact from '../../pages/public/Contact.vue'
|
import Contact from '../../pages/public/Contact.vue'
|
||||||
|
import ContentViewer from '../../pages/public/ContentViewer.vue'
|
||||||
|
|
||||||
//guest
|
//guest
|
||||||
import FrontDoor from '../../pages/guest/FrontDoor.vue'
|
import FrontDoor from '../../pages/guest/FrontDoor.vue'
|
||||||
@ -107,6 +109,14 @@ const router = createRouter({
|
|||||||
components: { default: Contact, footer: FooterGuest, header: HeaderGuest }
|
components: { default: Contact, footer: FooterGuest, header: HeaderGuest }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
name: 'content-viewer',
|
||||||
|
path: '/content-viewer/:content_id',
|
||||||
|
meta: { requiredRoles: [userRoleEnum.NONE] },
|
||||||
|
components: { default: ContentViewer, footer: FooterGuest, header: HeaderGuest },
|
||||||
|
props: true
|
||||||
|
},
|
||||||
|
|
||||||
// guest
|
// guest
|
||||||
{
|
{
|
||||||
name: 'front-door',
|
name: 'front-door',
|
||||||
|
|||||||
@ -11,5 +11,17 @@ class ContentApi {
|
|||||||
)
|
)
|
||||||
return request
|
return request
|
||||||
}
|
}
|
||||||
|
static retrieve_blog_content(document_id) {
|
||||||
|
const request = backendAxios.post(
|
||||||
|
'/api/content/retrieve-blog-content',
|
||||||
|
{
|
||||||
|
document_id: document_id
|
||||||
|
},
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return request
|
||||||
|
}
|
||||||
}
|
}
|
||||||
export { ContentApi }
|
export { ContentApi }
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
export { textAreaAujuster } from './textArea'
|
export { textAreaAujuster } from './textArea'
|
||||||
export { tooltip } from './tooltip'
|
export { tooltip } from './tooltip'
|
||||||
export { elementHandler } from './element'
|
export { elementHandler } from './element'
|
||||||
|
export { mediaDataHandler } from './mediaData'
|
||||||
14
frontend/src/utils/html/mediaData.js
Normal file
14
frontend/src/utils/html/mediaData.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
class MediaDataHandler {
|
||||||
|
retrieveText(mediaData) {
|
||||||
|
let prefix = "data:text/plain;base64,"
|
||||||
|
let pos = mediaData.search(prefix);
|
||||||
|
if (pos < 0) return "";
|
||||||
|
return atob(mediaData.substring(pos + prefix.length))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const mediaDataHandler = new MediaDataHandler()
|
||||||
|
|
||||||
|
export { mediaDataHandler }
|
||||||
@ -16,4 +16,4 @@ export { ValueChecker, DateUtils, OIDUtils } from './common/index'
|
|||||||
|
|
||||||
export { userProfileValidator } from './validator/index'
|
export { userProfileValidator } from './validator/index'
|
||||||
|
|
||||||
export { textAreaAujuster, tooltip, elementHandler } from './html/index'
|
export { textAreaAujuster, tooltip, elementHandler, mediaDataHandler } from './html/index'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user