DialogItem.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <div class="dialog-item-container">
  3. <DialogQuestion v-if="item_type === 'q'" :question="questionInfo" @select="handleSelectChat" />
  4. <DialogAnswer
  5. v-if="item_type === 'a'"
  6. :answer="answerInfo"
  7. @stop="handleStopChat"
  8. @retry="handleRetryChat"
  9. @select="handleSelectChat"
  10. />
  11. </div>
  12. </template>
  13. <script setup>
  14. import { ref, computed } from 'vue';
  15. import DialogQuestion from '../conversation-item/DialogQuestion.vue';
  16. import DialogAnswer from '../conversation-item/DialogAnswer.vue';
  17. const props = defineProps({
  18. dialog: Object
  19. });
  20. const emit = defineEmits(['stop', 'retry', 'select']);
  21. /**
  22. * 当前这一项的类别,有两个值
  23. * q 提问
  24. * a 智能体的回答
  25. */
  26. const item_type = computed(() => {
  27. const item = props.dialog;
  28. return item.client_custom_item_type;
  29. });
  30. /**
  31. * 客户端提问数据
  32. */
  33. const questionInfo = computed(() => {
  34. return {
  35. content: props.dialog.question,
  36. client_custom_icon: props.dialog.client_custom_icon,
  37. client_custom_upload_file_list: props.dialog.client_custom_upload_file_list,
  38. client_custom_unique_id: props.dialog.client_custom_unique_id
  39. };
  40. });
  41. /**
  42. * 智能体回答的答案
  43. */
  44. const answerInfo = computed(() => {
  45. const chat_info = props.dialog;
  46. const obj = {
  47. client_custom_unique_id: chat_info.client_custom_unique_id
  48. };
  49. // 智能体回答的内容
  50. if (chat_info.answer) {
  51. obj.content = chat_info.answer;
  52. }
  53. /**
  54. * 状态值信息
  55. * 0 加载中
  56. * 1 正在对话
  57. * 2 已结束
  58. */
  59. obj.client_custom_chat_status = chat_info.client_custom_chat_status;
  60. obj.client_custom_icon = chat_info.client_custom_icon;
  61. // 附加数据
  62. obj.client_custom_linked_sql = chat_info.client_custom_linked_sql || '';
  63. obj.client_custom_linked_code = chat_info.client_custom_linked_code || '';
  64. obj.client_custom_linked_refference_full_content = chat_info.client_custom_linked_refference_full_content || '';
  65. obj.client_custom_linked_image = chat_info.client_custom_linked_image || '';
  66. obj.client_custom_linked_download_files = chat_info.client_custom_linked_download_files || '';
  67. obj.client_custom_linked_refference_full_content = chat_info.client_custom_linked_refference_full_content; // 完整引用地址
  68. return obj;
  69. });
  70. /**
  71. * 停止答案的生成
  72. */
  73. const handleStopChat = () => {
  74. emit('stop');
  75. };
  76. const handleRetryChat = () => {
  77. emit('retry');
  78. };
  79. const handleSelectChat = () => {
  80. emit('select');
  81. };
  82. </script>
  83. <style lang="css" scoped>
  84. .dialog-item-container {
  85. margin-top: 10px;
  86. margin-bottom: 10px;
  87. }
  88. </style>