RefferenceFlag.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <span class="refference-container">
  3. <a-popover :content-style="{ width: '500px', maxWidth: '500px' }">
  4. <span class="refference-flag-circle"></span>
  5. <template #title></template>
  6. <template #content>
  7. <div class="refference-content">
  8. <AsideImage v-if="img_url" :src="img_url" />
  9. <div class="refference-description">
  10. <div class="ref-text-content">
  11. {{ text }}
  12. </div>
  13. <FileNameDisplay @click="handleClick" :file_name="doc_name" :file_id="doc_id" />
  14. </div>
  15. </div>
  16. </template>
  17. </a-popover>
  18. <a-drawer
  19. ref="drawer"
  20. :width="DOC_WIDTH + 20"
  21. :visible="visible"
  22. @ok="handleOk"
  23. @cancel="handleCancel"
  24. unmountOnClose
  25. :data-flag="'doc-ref-effect-contaienr'"
  26. :footer="false"
  27. >
  28. <template #title>
  29. {{ doc_name }}
  30. </template>
  31. <ViewerPDFFromUrl v-if="doc_type === 'pdf'" :url="pdf_url" :doc_width="DOC_WIDTH" :positions="positions" />
  32. <ViewerDocxFromUrl v-if="doc_type === 'doc'" :url="pdf_url" :doc_width="DOC_WIDTH" :positions="positions" />
  33. </a-drawer>
  34. </span>
  35. </template>
  36. <script setup>
  37. import { defineComponent, inject, ref, useTemplateRef, onMounted, computed } from 'vue';
  38. import ViewerPDFFromUrl from '../viewer-pdf/ViewerPDFFromUrl.vue';
  39. import ViewerDocxFromUrl from '../viewer-docx/ViewerDocxFromUrl.vue';
  40. import AsideImage from './AsideImage.vue';
  41. import FileNameDisplay from '../file-name/FileNameDisplay.vue';
  42. import { getDocumentUrl, getImageUrl } from './document';
  43. /**
  44. * 此页面可能用到的文档
  45. * @see https://arco.design/vue/component/popover
  46. */
  47. const props = defineProps({
  48. img: String, // 图片链接
  49. image_id: String,
  50. text: String, // 文本地址
  51. doc_id: String,
  52. doc_name: String,
  53. positions: Array
  54. });
  55. const DOC_WIDTH = window.innerWidth / 2;
  56. const pdf_url = getDocumentUrl(props.doc_id);
  57. const img_url = getImageUrl(props.image_id);
  58. const visible = ref(false);
  59. /**
  60. * 文档类别:doc/pdf
  61. */
  62. const doc_type = computed(() => {
  63. const doc_name = props.doc_name;
  64. if (!doc_name) {
  65. return '';
  66. }
  67. const arr = doc_name.split('.');
  68. const len = arr.length;
  69. const end_fix = arr[len - 1];
  70. if (end_fix === 'pdf') {
  71. return 'pdf';
  72. }
  73. if (end_fix === 'docx' || end_fix === 'doc') {
  74. return 'doc';
  75. }
  76. return '';
  77. });
  78. const handleClick = () => {
  79. // console.log('点击事件触发');
  80. const doc_nm = props.doc_name;
  81. // console.log('点击事件触发', doc_nm);
  82. if (doc_type.value === 'doc' || doc_type.value === 'pdf') {
  83. visible.value = true;
  84. } else {
  85. }
  86. // if (doc_nm && doc_nm.indexOf('.pdf') === doc_nm.length - 4) {
  87. // visible.value = true;
  88. // } else {
  89. // }
  90. };
  91. const handleOk = () => {
  92. visible.value = false;
  93. };
  94. const handleCancel = () => {
  95. visible.value = false;
  96. };
  97. onMounted(() => {
  98. // console.log(props.img, props.image_id, props.text, props.doc_id, props.doc_name, '--->>>>>');
  99. });
  100. </script>
  101. <style scoped>
  102. .refference-content {
  103. display: flex;
  104. justify-content: space-between;
  105. align-items: flex-start;
  106. }
  107. .refference-description {
  108. flex-grow: 1;
  109. }
  110. .ref-text-content {
  111. max-width: 460px;
  112. max-height: 340px;
  113. overflow-y: auto;
  114. }
  115. </style>
  116. <style>
  117. .arco-drawer-container[data-flag='doc-ref-effect-contaienr'] .arco-drawer-body {
  118. overflow: hidden;
  119. padding: 0;
  120. }
  121. </style>