hc-pdf1.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <div v-loading="loading" element-loading-text="加载文件并初始渲染中..." class="h-full">
  3. <div :id="`pdf-view-${uuid}`" class="h-full" />
  4. </div>
  5. </template>
  6. <script setup>
  7. import { onMounted, ref, watch } from 'vue'
  8. import HcPdfSign from '~src/plugins/HcPdfSign'
  9. import { getArrValue, getRandom } from 'js-fast-way'
  10. //参数
  11. const props = defineProps({
  12. sign: {
  13. type: [String, Number],
  14. default: '',
  15. },
  16. src: {
  17. type: [String, Number],
  18. default: '',
  19. },
  20. batch: {
  21. type: Boolean,
  22. default: false,
  23. },
  24. dom: {
  25. type: Array,
  26. default: () => ([]),
  27. },
  28. imgHeight:{
  29. type: [Number, String],
  30. default: '',
  31. },
  32. imgWidth:{
  33. type: [Number, String],
  34. default: '',
  35. },
  36. })
  37. //事件
  38. const emit = defineEmits(['change'])
  39. const pdf = ref(props.src)
  40. const uuid = getRandom(6)
  41. const signImg = ref(props.sign)
  42. const loading = ref(false)
  43. const imgWidth = ref(props.imgWidth)
  44. const imgHeight = ref(props.imgHeight)
  45. //监听
  46. watch(() => [
  47. props.imgWidth, props.imgHeight,
  48. ], ([width, height]) => {
  49. imgWidth.value = width
  50. imgHeight.value = height
  51. if (width && height) {
  52. getPdf()
  53. }
  54. })
  55. //监听PDFurl
  56. watch(() => props.src, (src) => {
  57. if (src) {
  58. loading.value = true
  59. pdf.value = src
  60. getPdf()
  61. } else {
  62. noPdfUrl()
  63. }
  64. })
  65. //监听签章图片
  66. watch(() => props.sign, (val) => {
  67. signImg.value = val
  68. getPdf()
  69. })
  70. //监听是否批量签章
  71. watch(() => props.batch, (val) => {
  72. console.log(val)
  73. HcPdfSign.setBatchSign(val)
  74. }, { immediate: true })
  75. //渲染完成
  76. onMounted(()=> {
  77. getPdf()
  78. })
  79. //设置PDF签章实例
  80. const getPdf = () => {
  81. if (!pdf.value ) {
  82. noPdfUrl()
  83. return false
  84. }
  85. HcPdfSign.createPdf({
  86. ele: 'pdf-view-' + uuid, //挂载元素的id
  87. url: pdf.value, //pdf的url地址
  88. img: signImg.value, //签章图片的url地址
  89. width: imgWidth.value, //签章图片的宽度
  90. height: imgHeight.value, //签章图片的宽度
  91. //加载完成
  92. load: () => {
  93. //恢复签章记录
  94. setTimeout(()=> {
  95. HcPdfSign.setPdfSignImg(getArrValue(props.dom))
  96. loading.value = false
  97. }, 500)
  98. },
  99. //签章数据改变
  100. change: (data) => {
  101. emit('change', data)
  102. },
  103. isShowYinzhang:signImg.value.length > 0 ? true : false,
  104. })
  105. }
  106. const noPdfUrl = () => {
  107. pdf.value = ''
  108. loading.value = false
  109. document.getElementById('pdf-view-' + uuid).innerHTML = ''
  110. }
  111. </script>