wujingjing
2024-12-18 97f9289dd8a19616bc0a5935eede4a92a0137e20
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
<template>
    <div class="flex px-4 py-6 rounded-lg relative" :class="{ 'px-10': isShareCheck }">
        <div class="absolute top-0 left-[72px] text-[#8d8e99]">{{ msg?.createTime }}</div>
 
        <img class="rounded-full size-12 flex-0 mr-4" :src="roleImageMap[msg.role]" alt="" srcset="" />
        <div class="flex-auto flex">
            <div class="inline-flex flex-col w-full">
                <div class="w-full">
                    <div class="rounded-[6px] p-4 leading-relaxed bg-white">
                        <!-- 意图分析 -->
                        <IntentAnalysis 
                            v-if="msg?.stepList?.length > 0"
                            :stepList="msg.stepList"
                            :stepIsShow="msg.stepIsShow"
                            :isTalking="isTalking"
                            :msgIndex="msgIndex"
                            @toggleStepList="toggleStepList"
                            @askMoreClick="askMoreClick"
                        />
 
                        <!-- 消息内容 -->
                        <MessageContent
                            v-if="msg.content?.values"
                            :content="msg.content"
                            :msg="msg"
                            :isTalking="isTalking"
                            :msgIndex="msgIndex"
                            @fixQuestionClick="fixQuestionClick"
                            @relativeQueryClick="relativeQueryClick"
                        />
 
                        <!-- 附加内容 -->
                        <MessageExtra 
                            :msg="msg"
                            :isTalking="isTalking"
                        />
                    </div>
 
                    <!-- 消息操作 -->
                    <MessageActions
                        v-if="msg.role === RoleEnum.assistant && msg.content?.values && !isSharePage && !isShareCheck"
                        :msg="msg"
                        @copyClick="copyClick"
                        @shareClick="shareClick"
                        @likeClick="likeClick"
                        @unLikeClick="unLikeClick"
                        @feedbackClick="feedbackClick"
                    />
                </div>
            </div>
        </div>
    </div>
</template>
 
<script setup lang="ts">
import { RoleEnum, roleImageMap } from '../model/types';
import type { ChatMessage } from '../model/types';
import IntentAnalysis from './message/IntentAnalysis.vue';
import MessageContent from './message/MessageContent.vue';
import MessageExtra from './message/MessageExtra.vue';
import MessageActions from './message/MessageActions.vue';
 
defineProps<{
    msg: ChatMessage;
    msgIndex: number;
    isTalking: boolean;
    isSharePage: boolean;
    isShareCheck: boolean;
}>();
 
const emit = defineEmits<{
    copyClick: [msg: ChatMessage];
    shareClick: [msg: ChatMessage];
    likeClick: [msg: ChatMessage];
    unLikeClick: [msg: ChatMessage];
    feedbackClick: [event: MouseEvent, msg: ChatMessage, index: number];
    askMoreClick: [item: any];
    fixQuestionClick: [question: string, origin: any];
    relativeQueryClick: [val: any];
}>();
 
const copyClick = (msg: ChatMessage) => emit('copyClick', msg);
const shareClick = (msg: ChatMessage) => emit('shareClick', msg);
const likeClick = (msg: ChatMessage) => emit('likeClick', msg);
const unLikeClick = (msg: ChatMessage) => emit('unLikeClick', msg);
const feedbackClick = (event: MouseEvent, msg: ChatMessage, index: number) => emit('feedbackClick', event, msg, index);
const askMoreClick = (item: any) => emit('askMoreClick', item);
const fixQuestionClick = (question: string, origin: any) => emit('fixQuestionClick', question, origin);
const relativeQueryClick = (val: any) => emit('relativeQueryClick', val);
 
const toggleStepList = (msg: ChatMessage) => {
    msg.stepIsShow = !msg.stepIsShow;
};
</script>