Browse Source

fix: 更换内容页 pdf-js

zhangyuhan 4 years ago
parent
commit
2489e99c92
3 changed files with 124 additions and 61 deletions
  1. 1 1
      jydocs-mobile/package.json
  2. 41 57
      jydocs-mobile/src/views/details/details.vue
  3. 82 3
      jydocs-mobile/yarn.lock

+ 1 - 1
jydocs-mobile/package.json

@@ -14,10 +14,10 @@
     "html2canvas": "^1.0.0-rc.6",
     "js-cookie": "^2.2.1",
     "moment": "^2.24.0",
-    "pdfjs-dist": "^2.1.266",
     "vant": "^2.8.2",
     "vue": "^2.6.11",
     "vue-class-component": "^7.2.3",
+    "vue-pdf": "^4.2.0",
     "vue-property-decorator": "^8.4.2",
     "vue-router": "^3.2.0",
     "vuex": "^3.4.0"

+ 41 - 57
jydocs-mobile/src/views/details/details.vue

@@ -11,17 +11,17 @@
             <p>{{detailData.docSummary}}</p>
             <div class="continue" v-show="buyed == 0">全文共{{detailData.docPageSize}}页,<span @click="continued">继续阅读<van-icon name="arrow-down" size="18" /></span></div>
         </div>
-        <van-sticky offset-top="120vh" @scroll="stickyScroll" v-show="buyed == 1">
+        <van-sticky :offset-top="Offset" @scroll="stickyScroll" v-show="buyed == 1">
           <div class="head-tip" :class="{'is-fixed':fixed}">
-              <h3 v-show="fixed">
+              <h3 class="flex" v-show="fixed">
                 <van-icon class="word01" :name="'diy-' + fileType(detailData.docFileType)" />
-                <span>{{detailData.docName}}</span>
+                <span class="flex">{{detailData.docName}}</span>
               </h3>
-              <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>
+<!--              <span class="pages"><i id="page_num"></i> / <i id="page_count"></i></span>-->
           </div>
         </van-sticky>
         <div class="botts" v-show="buyed == 1">
-            <div class="cont-page" id="pdfPage"></div>
+            <pdf  v-for="i in pdfPage.pageNum" :key="i"  :src="pdfPage.url" :page="i"></pdf>
         </div>
         <van-goods-action>
             <van-goods-action-icon class="no-icon">
@@ -49,8 +49,7 @@ import Recharge from '@/components/Recharge.vue'
 import sharePop from '@/components/SharePopup.vue'
 import { MixinTop } from '@/utils/mixin-top'
 import { weChatShare } from '@/utils/wxShare'
-const pdfjsLib = require('pdfjs-dist/build/pdf.js')
-const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
+import pdf from 'vue-pdf'
 
 @Component({
   name: 'details-p',
@@ -62,7 +61,8 @@ const pdfjsViewer = require('pdfjs-dist/web/pdf_viewer.js')
     [GoodsActionIcon.name]: GoodsActionIcon,
     [GoodsActionButton.name]: GoodsActionButton,
     Recharge,
-    sharePop
+    sharePop,
+    pdf
   },
   methods: {
     ...mapActions({
@@ -90,7 +90,11 @@ export default class extends Vue {
   docIds = ''
   fixed = false
   coins: any = []
-  conts: any = []
+  pdfPage = {
+    pageNum: 0,
+    url: ''
+  }
+
   getAdd: any
   getRemove: any
   detailData: any = []
@@ -101,9 +105,9 @@ export default class extends Vue {
   config: any = {
     PAGE_TO_VIEW: 0,
     SCALE: 0,
-    CMAP_URL: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/cmaps/',
+    CMAP_URL: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.6.347/cmaps/',
     CMAP_PACKED: true,
-    workerSrc: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.1.266/build/pdf.worker.min.js'
+    workerSrc: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.6.347/build/pdf.worker.min.js'
   }
 
   pData: any = {
@@ -136,7 +140,7 @@ export default class extends Vue {
 
   initHeight () {
     const top = window.scrollY
-    console.log(top)
+    // console.log(top)
     let base = 0
     for (let i = 0; i < this.pData.heightList.length; i++) {
       base += this.pData.heightList[i]
@@ -147,6 +151,25 @@ export default class extends Vue {
     }
   }
 
+  get Offset () {
+    const tempN = document.querySelector('.j-header.jy-app-header') as HTMLDivElement
+    if (tempN) {
+      return tempN.offsetHeight - 1
+    } else {
+      return 0
+    }
+  }
+
+  getNumPages (url: string) {
+    const loadingTask = pdf.createLoadingTask(url)
+    loadingTask.promise.then((pdf: any) => {
+      this.pdfPage.url = loadingTask
+      this.pdfPage.pageNum = pdf.numPages
+    }).catch((err: any) => {
+      console.error('pdf加载失败', err)
+    })
+  }
+
   async getShareUrl () {
     const { data } = await this.getShare({ docId: this.docIds })
     this.links = data.url || location.href
@@ -164,8 +187,8 @@ export default class extends Vue {
     ;(this.$refs.shares as any).show = true
   }
 
-  updateText (data) {
-    console.log(data)
+  updateText (data: any) {
+    // console.log(data)
     switch (data.type) {
       case 'count': {
         ;(document.getElementById('page_count') as HTMLDivElement).textContent = data.value
@@ -178,46 +201,9 @@ export default class extends Vue {
     }
   }
 
-  renders () {
-    const container = document.getElementById('pdfPage')
-    return this.pdfDocument.getPage(this.config.PAGE_TO_VIEW).then((pdfPage: any) => {
-      const pdfPageView = new pdfjsViewer.PDFPageView({
-        container: container,
-        id: this.config.PAGE_TO_VIEW,
-        scale: this.config.SCALE,
-        defaultViewport: pdfPage.getViewport({ scale: this.config.SCALE }),
-        eventBus: new pdfjsViewer.EventBus(),
-        annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory()
-      })
-      pdfPageView.setPdfPage(pdfPage)
-      this.pData.heightList.push(pdfPageView.viewport.height)
-      return pdfPageView.draw()
-    })
-  }
-
-  init () {
-    console.log(this.conts)
-    pdfjsLib.GlobalWorkerOptions.workerSrc = this.config.workerSrc
-    const loadingTask = pdfjsLib.getDocument({
-      url: this.conts,
-      cMapUrl: this.config.CMAP_URL,
-      cMapPacked: this.config.CMAP_PACKED
-    })
-    loadingTask.promise.then((pdfDocument: any) => {
-      this.pdfDocument = pdfDocument
-      console.log(this.pdfDocument.numPages)
-      this.updateText({ type: 'count', value: this.pdfDocument.numPages })
-      this.updateText({ type: 'num', value: 1 })
-      for (let i = 0; i < this.pdfDocument.numPages; i++) {
-        this.config.PAGE_TO_VIEW++
-        this.renders()
-      }
-    })
-  }
-
   stickyScroll (data: any) {
     const tops = data.scrollTop
-    console.log(this.$parent.$el.scrollTop)
+    // console.log(this.$parent.$el.scrollTop)
     let base = 0
     for (let i = 0; i < this.pData.heightList.length; i++) {
       base += this.pData.heightList[i]
@@ -235,15 +221,13 @@ export default class extends Vue {
 
   buyShow () {
     this.getShow({ docId: this.docIds }).then((res: any) => {
-      console.log(res.data)
-      this.conts = res.data
-      this.init()
+      this.getNumPages(res.data)
     })
   }
 
   onList () {
     this.getDetails({ docId: this.docIds, from: this.$route.query.from }).then((res: any) => {
-      console.log(res.data)
+      // console.log(res.data)
       this.detailData = res.data.detail
       this.detailData.docSummary = res.data.detail.docSummary.split('').length >= 500 ? res.data.detail.docSummary + '...' : res.data.detail.docSummary
       this.buyed = res.data.status
@@ -254,7 +238,7 @@ export default class extends Vue {
       this.getShareUrl()
     })
     this.getCoin({ B: true }).then((res: any) => {
-      console.log(res.data.data)
+      // console.log(res.data.data)
       this.coins = res.data.points
     })
   }

+ 82 - 3
jydocs-mobile/yarn.lock

@@ -976,6 +976,11 @@
   resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
   integrity sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=
 
+"@types/json-schema@^7.0.6":
+  version "7.0.7"
+  resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz?cache=0&sync_timestamp=1613378919536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+  integrity sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=
+
 "@types/json5@^0.0.29":
   version "0.0.29"
   resolved "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -1557,7 +1562,7 @@ ajv-errors@^1.0.0:
   resolved "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
   integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0=
 
-ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
   version "3.5.2"
   resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595906977498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
   integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
@@ -1572,6 +1577,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3:
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
+ajv@^6.12.5:
+  version "6.12.6"
+  resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1616485066833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
 alphanum-sort@^1.0.0:
   version "1.0.2"
   resolved "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
@@ -1875,6 +1890,11 @@ babel-plugin-dynamic-import-node@^2.3.3:
   dependencies:
     object.assign "^4.1.0"
 
+babel-plugin-syntax-dynamic-import@^6.18.0:
+  version "6.18.0"
+  resolved "https://registry.npm.taobao.org/babel-plugin-syntax-dynamic-import/download/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+  integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=
+
 balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -5779,7 +5799,7 @@ loader-utils@^0.2.16:
     json5 "^0.5.0"
     object-assign "^4.0.1"
 
-loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
   version "1.4.0"
   resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
   integrity sha1-xXm140yzSxp07cbB+za/o3HVphM=
@@ -5788,6 +5808,15 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4
     emojis-list "^3.0.0"
     json5 "^1.0.1"
 
+loader-utils@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+  integrity sha1-5MrOW4FtQloWa18JfhDNErNgZLA=
+  dependencies:
+    big.js "^5.2.2"
+    emojis-list "^3.0.0"
+    json5 "^2.1.2"
+
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -6947,7 +6976,7 @@ pbkdf2@^3.0.3:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
-pdfjs-dist@^2.1.266:
+pdfjs-dist@^2.5.207:
   version "2.6.347"
   resolved "https://registry.npm.taobao.org/pdfjs-dist/download/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
   integrity sha1-8lftZug76QDND9KFJKIYf7niXNU=
@@ -7577,6 +7606,14 @@ raw-body@2.4.0:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
+raw-loader@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.npm.taobao.org/raw-loader/download/raw-loader-4.0.2.tgz?cache=0&sync_timestamp=1604056003687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
+  integrity sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY=
+  dependencies:
+    loader-utils "^2.0.0"
+    schema-utils "^3.0.0"
+
 read-pkg-up@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -8020,6 +8057,14 @@ sax@~1.2.4:
   resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk=
 
+schema-utils@^0.4.0:
+  version "0.4.7"
+  resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
+  integrity sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=
+  dependencies:
+    ajv "^6.1.0"
+    ajv-keywords "^3.1.0"
+
 schema-utils@^1.0.0:
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
@@ -8038,6 +8083,15 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6
     ajv "^6.12.2"
     ajv-keywords "^3.4.1"
 
+schema-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
+  integrity sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=
+  dependencies:
+    "@types/json-schema" "^7.0.6"
+    ajv "^6.12.5"
+    ajv-keywords "^3.5.2"
+
 select-hose@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@@ -9352,6 +9406,18 @@ vue-loader@^15.9.2:
     vue-hot-reload-api "^2.3.0"
     vue-style-loader "^4.1.0"
 
+vue-pdf@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npm.taobao.org/vue-pdf/download/vue-pdf-4.2.0.tgz#d553e2a46704f9acd15479d8cf32c73e90989b77"
+  integrity sha1-1VPipGcE+azRVHnYzzLHPpCYm3c=
+  dependencies:
+    babel-plugin-syntax-dynamic-import "^6.18.0"
+    loader-utils "^1.4.0"
+    pdfjs-dist "^2.5.207"
+    raw-loader "^4.0.1"
+    vue-resize-sensor "^2.0.0"
+    worker-loader "^2.0.0"
+
 vue-property-decorator@^8.4.2:
   version "8.5.1"
   resolved "https://registry.npm.taobao.org/vue-property-decorator/download/vue-property-decorator-8.5.1.tgz#571a91cf8d2b507f537d79bf8275af3184572fff"
@@ -9359,6 +9425,11 @@ vue-property-decorator@^8.4.2:
   dependencies:
     vue-class-component "^7.1.0"
 
+vue-resize-sensor@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/vue-resize-sensor/download/vue-resize-sensor-2.0.0.tgz#3a587fd6802e1688709cf2c5aadae7a0075952bf"
+  integrity sha1-Olh/1oAuFohwnPLFqtrnoAdZUr8=
+
 vue-router@^3.2.0:
   version "3.4.3"
   resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.3.tgz#fa93768616ee338aa174f160ac965167fa572ffa"
@@ -9613,6 +9684,14 @@ worker-farm@^1.7.0:
   dependencies:
     errno "~0.1.7"
 
+worker-loader@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/worker-loader/download/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac"
+  integrity sha1-Rf2j73asqBV3GokQc5nuQRm0MKw=
+  dependencies:
+    loader-utils "^1.0.0"
+    schema-utils "^0.4.0"
+
 worker-rpc@^0.1.0:
   version "0.1.1"
   resolved "https://registry.npm.taobao.org/worker-rpc/download/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5"