Преглед на файлове

fix: 现在可直接分享链接,修复从评论区跳转无法加载pdf的bbug

ChenYangfan преди 6 години
родител
ревизия
cf17ab5ecf

+ 6 - 6
src/components/Discussion/DiscussionArea.vue

@@ -40,7 +40,8 @@ export default {
   data () {
     return {
       comments: null,
-      wsComments: []
+      wsComments: [],
+      slideId: this.$route.params.slideId
     }
   },
   mounted () {
@@ -54,8 +55,7 @@ export default {
   computed: {
     ...mapState({
       userInfo: state => state.main.userInfo,
-      currentPage: state => state.pdf.currentPage,
-      slide: state => state.pdf.slideInfo
+      currentPage: state => state.pdf.currentPage
     }),
     writingAreaPlaceholder () {
       return '写下针对本页的讨论(标题)'
@@ -72,7 +72,7 @@ export default {
   },
   methods: {
     initWs () {
-      this._ws = new WebsocketPublisher(useCommentWsServer('/slide/') + this.slide.id)
+      this._ws = new WebsocketPublisher(useCommentWsServer('/slide/') + this.$route.params.slideId)
       this._ws.subscribe({
         onNext: data => {
           this.wsComments.unshift(data)
@@ -89,7 +89,7 @@ export default {
       })
     },
     getComments (size) {
-      return getComments({ slideId: this.slide.id, size, pageNumber: this.currentPage, sort: ['topNumber,desc', 'createAt,desc'] }).then(res => {
+      return getComments({ slideId: this.slideId, size, pageNumber: this.currentPage, sort: ['topNumber,desc', 'createAt,desc'] }).then(res => {
         this.wsComments = []
         this.comments = res.data
       }).catch(err => {
@@ -98,7 +98,7 @@ export default {
     },
     handleCommentSubmit (comment) {
       createComment({
-        slideId: this.slide.id,
+        slideId: this.slideId,
         pageNumber: this.currentPage,
         title: comment.title,
         content: comment.content

+ 1 - 8
src/components/DiscussionTab/CMessage.vue

@@ -30,8 +30,6 @@
 import momentFromNow from '@/utils/moment-from-now'
 import messageTypeMap from '@/utils/message-type-map'
 import IconButton from '@/components/Basic/IconButton'
-import { getSlideInfo } from '@/server/slide'
-import { SET_SLIDE_INFO } from '@/store/types/pdf-types'
 
 export default {
   components: { IconButton },
@@ -60,12 +58,7 @@ export default {
     handlePush () {
       if (this.message.slideId) {
         const handler = () => {
-          getSlideInfo({ slideId: this.message.slideId }).then(res => {
-            this.$store.commit(SET_SLIDE_INFO, { slideInfo: res })
-            this.$router.push({ name: 'pdf-reader' })
-          }).catch(err => {
-            this.$setErrorMessage('跳转过程出错,可能是相关幻灯片已不存在:' + err.response.data.msg)
-          })
+          this.$router.push({ name: 'pdf-reader', params: { slideId: this.message.slideId } })
         }
 
         if (this.edit) {

+ 5 - 5
src/components/PDF/Pdf.vue

@@ -28,6 +28,11 @@ export default {
 
     if (this.src) {
       this.load(this.src)
+    } else {
+      // ! 1秒后重试
+      setTimeout(() => {
+        this.load(this.src)
+      }, 1000)
     }
   },
   computed: {
@@ -52,11 +57,6 @@ export default {
         this.getScreenShot()
         this.$store.commit(USE_SCREEN_SHOT)
       }
-    },
-    src (value) {
-      // if (this.loading && value) {
-      //   this.load(value)
-      // }
     }
   },
   methods: {

+ 1 - 1
src/router/pdf.js

@@ -1,7 +1,7 @@
 export default [
   {
     meta: { roles: ['teacher', 'student'] },
-    path: '/pdf-reader',
+    path: '/pdf-reader/:slideId',
     name: 'pdf-reader',
     component: () => import(/* webpackChunkName: "pdf-reader" */ '../views/reader/PdfReader.vue')
   }

+ 13 - 3
src/views/reader/PdfReader.vue

@@ -16,7 +16,7 @@ import PdfViewer from '@/components/PDF/PdfViewer'
 import { mapState } from 'vuex'
 import BackTitle from '@/components/Basic/BackTitle'
 import DiscussionArea from '@/components/Discussion/DiscussionArea'
-import { getSlideUrl } from '@/server/slide'
+import { getSlideInfo, getSlideUrl } from '@/server/slide'
 import { RESET, SET_SRC } from '@/store/types/pdf-types'
 
 export default {
@@ -24,13 +24,23 @@ export default {
   computed: {
     ...mapState({
       src: state => state.pdf.src,
-      slide: state => state.pdf.slideInfo,
       showDiscussion: state => state.pdf.showDiscussion
     })
   },
+  data () {
+    return {
+      slide: {}
+    }
+  },
   mounted () {
     this.$store.commit(RESET)
-    getSlideUrl({ slideId: this.slide.id }).then(res => {
+    const _slideId = this.$route.params.slideId
+    getSlideInfo({ slideId: _slideId }).then(res => {
+      this.slide = res
+    }).catch(err => {
+      this.$setErrorMessage(err.response.data.msg)
+    })
+    getSlideUrl({ slideId: _slideId }).then(res => {
       this.$store.commit(SET_SRC, { src: res })
     }).catch(err => {
       this.$setErrorMessage('获取课件链接的过程中:' + err.response.data.msg)

+ 1 - 1
src/views/student/components/StudentSlideDetail.vue

@@ -53,7 +53,7 @@ export default {
   },
   methods: {
     handleReadSlide () {
-      this.$router.push({ name: 'pdf-reader', params: { slide: this.slide } })
+      this.$router.push({ name: 'pdf-reader', params: { slideId: this.slide.id } })
     },
     handleToQuiz () {
       this.$router.push({ name: 'quiz', params: { slideId: this.slide.id } })

+ 1 - 1
src/views/teacher/components/TeacherSlideDetail.vue

@@ -87,7 +87,7 @@ export default {
   },
   methods: {
     handleReadSlide () {
-      this.$router.push({ name: 'pdf-reader' })
+      this.$router.push({ name: 'pdf-reader', params: { slideId: this.slide.id } })
     },
     handleQuizSetting () {
       this.$router.push({ name: 'teacher-quiz-setting', params: { slideId: this.slide.id } })