1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<template>
  <j-modal :centered="true" :title="title" :visible="visible" :fullScreen="true" @cancel="handleCancel" style="top:-50px;">
    <div>
      <!-- <el-button-group>
      <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button>
      <el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button>
    </el-button-group>
    <div style="marginTop: 10px; color: #409EFF">{{ pageNum }} / {{ pageTotalNum }}</div> -->
 
      <pdf v-for="i in pageTotalNum" :key=i ref="pdf" :page=i :src="url"></pdf>
    </div>
    <template slot="footer">
    </template>
  </j-modal>
</template>
 
<script>
import pdf from 'vue-pdf'
import Vue from 'vue'
export default {
  name: "PdfView",
  components: {
      pdf
  },
  data() {
    return {
      title: '',
      confirmLoading: false,
      visible: false,
      url: "http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf",
      pageNum: 1,
      pageTotalNum: 0, // 总页数
      loadedRatio: 0, // 当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了
 
    }
  },
  created() {
 
  },
  methods: {
    // 计算pdf页码总数
    getNumPages() {
 
      let loadingTask = pdf.createLoadingTask(this.url)
      loadingTask.promise.then(pdf => {
        if (pdf.numPages <= 50) {
          this.pageTotalNum = pdf.numPages
        } else {
          this.pageTotalNum = 50;
        }
 
      }).catch(err => {
        console.error('pdf 加载失败', err);
      })
    },
 
    showPdf(url) {
      // url = "https://mes-dejg.app.cmfg.cn/sys/mes/sys/common/static//2022-12/27/cb6dc5217e8b276850e0abc6f6b69e3d40f906d38cf84a8227e4f9cfa0f10c60"
      let ssoLoginFlag = Vue.ls.get("ssoLoginFlag");
      let deployMode = Vue.ls.get("deployMode");
 
      if (ssoLoginFlag && deployMode == "container") {
        var baseProject = "/" + Vue.ls.get("baseProject") + "/";
        var prefix = "";
        console.log("baseProject==>" + baseProject)
        if (url.lastIndexOf(".cn") != -1) {
          var prefix = url.substring(0, url.lastIndexOf(".cn") + 3);
        }
        var suffix = url.substring(url.lastIndexOf(baseProject));
        this.url = (prefix + suffix).trim();
      } else {
        this.url = url;
 
      }
 
      this.getNumPages();
      this.visible = true
    },
    // 上一页
    prePage() {
      let page = this.pageNum
      page = page > 1 ? page - 1 : this.pageTotalNum
      this.pageNum = page
    },
 
    // 下一页
    nextPage() {
      let page = this.pageNum
      page = page < this.pageTotalNum ? page + 1 : 1
      this.pageNum = page
    },
 
    close() {
      this.$emit('close')
      this.visible = false
    },
    handleCancel() {
      this.close()
    },
  },
  mounted() {
 
  },
}
</script>
<style lang="less" scoped>
</style>