wujingjing
2024-12-03 3c9dca4d6d09dbf29db217c0e4dcc91e3ef5a13d
提问中断
已修改3个文件
42 ■■■■ 文件已修改
src/components/chat/Chat.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/hooks/useScrollLoad.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/model/types.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/Chat.vue
@@ -39,7 +39,9 @@
                                            :style="{ backgroundColor: item.role === RoleEnum.user ? 'rgb(197 224 255)' : 'white' }"
                                            :class="{ group: item.role === RoleEnum.user }"
                                        >
                                            <!-- #region ====================== 意图分析 ======================-->
                                            <div class="flex flex-col" v-if="item?.stepList?.length > 0">
                                                <!-- #region ====================== 意图分析 ======================-->
                                                <div class="flex items-center">
                                                    <span class="mr-2">意图分析:</span>
                                                    <div
@@ -55,8 +57,9 @@
                                                        ></span>
                                                    </div>
                                                </div>
                                                <!-- #endregion -->
                                                <!-- 过程输出 -->
                                                <!-- #region ====================== 过程输出 ======================-->
                                                <el-steps v-show="item.stepIsShow" class="mt-3" direction="vertical" :active="activeStep">
                                                    <el-step
                                                        v-for="(subItem, index) in item.stepList"
@@ -77,8 +80,11 @@
                                                        </template>
                                                    </el-step>
                                                </el-steps>
                                                <!-- #endregion -->
                                            </div>
                                            <!-- #endregion -->
                                            <!-- #region ====================== 用户操作按钮 ======================-->
                                            <div
                                                v-if="item.role === RoleEnum.user && item.content?.values && !isSharePage && !isShareCheck"
                                                class="absolute flex items-center bottom-0 group invisible"
@@ -114,7 +120,10 @@
                                                </div>
                                            </div>
                                            <!-- #endregion -->
                                            <!-- #region ====================== 消息内容 ======================-->
                                            <template v-if="item.content?.values">
                                                <!-- #region ====================== 报错信息 ======================-->
                                                <div v-if="item.content.errCode === ErrorCode.Message" class="flex-column w-full">
                                                    <p class="text-red-500">
                                                        {{ item.content.errMsg }}
@@ -135,6 +144,8 @@
                                                        </div>
                                                    </div>
                                                </div>
                                                <!-- #endregion -->
                                                <!-- #region ====================== 回答组件 ======================-->
                                                <template v-else>
                                                    <component
                                                        :conclusion="item.conclusion"
@@ -160,9 +171,18 @@
                                                        </div>
                                                    </div>
                                                </template>
                                                <!-- #endregion -->
                                            </template>
                                            <!-- #endregion -->
                                            <!-- #region ====================== 附加内容 ======================-->
                                            <!-- #region ====================== 停止 ======================-->
                                            <span v-if="item.isStopMsg && item?.role === RoleEnum.assistant" class="text-gray-400 text-[12px]"
                                                >(已停止)</span
                                            >
                                            <!-- #endregion -->
                                            <!-- #endregion -->
                                        </div>
                                        <!-- #region ====================== ai 消息操作 ======================-->
                                        <div
                                            v-if="item.role === RoleEnum.assistant && item.content?.values && !isSharePage && !isShareCheck"
                                            class="absolute flex items-center right-0 mr-4 mt-2 space-x-2"
@@ -230,6 +250,7 @@
                                                </div>
                                            </el-tooltip>
                                        </div>
                                        <!-- #endregion -->
                                    </div>
                                </div>
                            </div>
@@ -289,6 +310,7 @@
</template>
<script setup lang="ts">
import axios, { CancelTokenSource } from 'axios';
import { ElMessage } from 'element-plus';
import { findLast, orderBy } from 'lodash-es';
import moment from 'moment';
@@ -297,7 +319,6 @@
import useClipboard from 'vue-clipboard3';
import FeedbackPanel from './components/FeedbackPanel.vue';
import { useAssistantContentOpt } from './hooks/useAssistantContentOpt';
import { useQueryProcess } from './hooks/useQueryProcess';
import { convertProcessItem, useScrollLoad } from './hooks/useScrollLoad';
import { useScrollToBottom } from './hooks/useScrollToBottom';
import type { ChatContent, StepItem } from './model/types';
@@ -322,7 +343,6 @@
import emitter from '/@/utils/mitt';
import { ErrorCode } from '/@/utils/request';
import { toMyFixed } from '/@/utils/util';
import axios, { CancelTokenSource } from 'axios';
const chatWidth = '75%';
const voicePageIsShow = ref(false);
let isTalking = ref(false);
@@ -401,7 +421,6 @@
    content.origin = res;
    return content;
};
const { clearQueryProcess, process, processId, queryProcess } = useQueryProcess();
//#region ====================== 步骤 step ======================
const activeStep = ref(-1);
@@ -576,8 +595,7 @@
    isTalking.value = false;
    chatListLoading.value = false;
    resetStep();
    computedMessageList.value.at(-1).stepIsShow = false;
    computedMessageList.value.at(-1).isStopMsg = true;
};
const sendChatMessage = async (content: ChatContent = messageContent.value, cb?: any, isCallExtParams?: any) => {
@@ -611,6 +629,7 @@
            state: AnswerState.Null,
            stepList: [],
            stepIsShow: true,
            isStopMsg: false,
            isChecked: false,
        } as any;
        // 发送当前
@@ -920,4 +939,8 @@
:deep(.el-step__description) {
    height: 20px;
}
:deep(.el-step:last-of-type .el-step__description) {
    display: none;
}
</style>
src/components/chat/hooks/useScrollLoad.ts
@@ -99,6 +99,8 @@
                            createTime: answerTime,
                            stepList: convertProcessToStep(item?.answer?.exec_process),
                            stepIsShow: false,
                            isStopMsg: false,
                            conclusion: item?.answer?.conclusion ?? [],
                            isChecked: false,
                      }
@@ -138,6 +140,8 @@
            content: parseAnswerContent(msgValue),
            stepList: convertProcessToStep(msgValue.exec_process),
            stepIsShow: false,
            isStopMsg: false,
            conclusion: msgValue.conclusion ?? [],
            isChecked: false,
        };
src/components/chat/model/types.ts
@@ -58,6 +58,7 @@
    createTime?:string,
    stepList?:StepItem[],
    stepIsShow?:boolean,
    isStopMsg?:boolean,
    /** @description 是否被选择分享 */
    isChecked:boolean,
    conclusion?:any[]