RefferenceFileBlocks.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div>
  3. <header class="client-formated-markdown-element-item client-formated-markdown-refference-header">
  4. <div>{{ $t('conversation.source') }}</div>
  5. <div class="btn-show-related-all" @click="showAllRelated">
  6. {{ $t('conversation.view_links') }} <icon-double-right />
  7. </div>
  8. </header>
  9. <RefferenceFileNameList :document_list="document_list" @showDocDetail="handleShowDocDetail" />
  10. <a-drawer
  11. :width="'90%'"
  12. :height="340"
  13. :visible="visible"
  14. :placement="position"
  15. data-flag="reffernce-file-block-drawer"
  16. :ok-text="$t('conversation.btn_ok')"
  17. :cancel-text="$t('conversation.btn_cancel')"
  18. :footer="false"
  19. @ok="handleOk"
  20. @cancel="handleCancel"
  21. unmountOnClose
  22. >
  23. <template #title> {{ $t('conversation.doc_details') }} </template>
  24. <div>
  25. <RefferenceDocDetail :targetDocument="targetDocument" @back="handleBackQA" />
  26. </div>
  27. </a-drawer>
  28. </div>
  29. </template>
  30. <script setup>
  31. import { ref, computed } from 'vue';
  32. import RefferenceFileNameList from './RefferenceFileNameList.vue';
  33. import RefferenceDocDetail from './RefferenceDocDetail.vue';
  34. const props = defineProps({
  35. doc_aggs: Array,
  36. chunks: Array
  37. });
  38. const visible = ref(false);
  39. const position = ref('right');
  40. const document_list = computed(() => {
  41. const doc_list = props.doc_aggs;
  42. const chunks = props.chunks;
  43. const res_list = [];
  44. if (Array.isArray(doc_list)) {
  45. const len = doc_list.length;
  46. for (let i = 0; i < len; i++) {
  47. if (i >= 3) {
  48. break;
  49. }
  50. const doc = doc_list[i];
  51. const res_doc = {
  52. doc_id: doc.doc_id,
  53. doc_name: doc.doc_name,
  54. count: doc.count,
  55. page: i
  56. };
  57. const cur_doc_id = doc.doc_id;
  58. const cur_doc_peaces = [];
  59. if (chunks && Array.isArray(chunks)) {
  60. chunks.forEach((item, index) => {
  61. const chunk_doc_id = item.document_id;
  62. if (cur_doc_id === chunk_doc_id) {
  63. cur_doc_peaces.push(item.content);
  64. }
  65. });
  66. }
  67. res_doc.content_ltks = cur_doc_peaces;
  68. res_list.push(res_doc);
  69. }
  70. }
  71. return res_list;
  72. });
  73. /**
  74. * 目标数据
  75. */
  76. const targetDocument = ref({
  77. doc_aggs: props.doc_aggs,
  78. chunks: props.chunks
  79. });
  80. const handleClick = () => {
  81. visible.value = true;
  82. };
  83. const handleOk = () => {
  84. visible.value = false;
  85. };
  86. const handleCancel = () => {
  87. visible.value = false;
  88. };
  89. const handleShowDocDetail = (item) => {
  90. // TODO:组装参数数据
  91. const cur_tar = targetDocument.value;
  92. const obj = {
  93. doc_aggs: cur_tar.doc_aggs,
  94. chunks: cur_tar.chunks,
  95. doc_id: item.doc_id,
  96. doc_name: item.doc_name,
  97. count: item.count,
  98. content_ltks: item.content_ltks
  99. };
  100. targetDocument.value = obj;
  101. // 展示文档详情
  102. handleClick();
  103. };
  104. /**
  105. * 显示第一个
  106. */
  107. const showAllRelated = () => {
  108. const item = document_list.value[0];
  109. const cur_tar = targetDocument.value;
  110. const obj = {
  111. doc_aggs: cur_tar.doc_aggs,
  112. chunks: cur_tar.chunks,
  113. doc_id: item.doc_id,
  114. doc_name: item.doc_name,
  115. count: item.count,
  116. content_ltks: item.content_ltks
  117. };
  118. targetDocument.value = obj;
  119. handleClick();
  120. };
  121. // 返回
  122. const handleBackQA = () => {
  123. handleCancel();
  124. };
  125. </script>
  126. <style scoped>
  127. .btn-show-related-all {
  128. cursor: pointer;
  129. }
  130. .btn-show-related-all:hover {
  131. color: #00aea3;
  132. }
  133. </style>
  134. <style>
  135. div.arco-drawer-container[data-flag='reffernce-file-block-drawer'] .arco-drawer-body {
  136. height: calc(100vh - 48px - 65px);
  137. overflow: hidden;
  138. }
  139. </style>