gerson
2024-07-27 4fdf0c121815857cceecf0aeb57cacb046fed0d7
关联查询
已修改3个文件
68 ■■■■■ 文件已修改
src/api/ai/chat.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/chat/Chat.vue 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/ai/chat.ts
@@ -344,3 +344,16 @@
        },
    });
};
/** @description 关联查询 */
export const extCallQuery = async (params, req: any = request) => {
    return req({
        url: 'chat/ext_call_query',
        method: 'POST',
        data: params,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
    });
};
src/components/chat/Chat.vue
@@ -43,9 +43,29 @@
                                                </div>
                                            </div>
                                        </div>
                                        <component v-else :is="answerTypeMapCom[item.content.type]" :data="item.content.values" :originData="item" />
                                        <template v-else>
                                            <component :is="answerTypeMapCom[item.content.type]" :data="item.content.values" :originData="item" />
                                            <div
                                                v-if="item.role === RoleEnum.assistant && item.content.origin?.ext_call_list"
                                                class="flex font-bold items-center mt-6"
                                            >
                                                <div class="flex-0 mr-1.5">关联功能:</div>
                                                <div class="flex-0 space-x-5 flex">
                                                    <div
                                                        v-for="callItem in item.content.origin?.ext_call_list"
                                                        :key="callItem.call_ext_id"
                                                        @click="relativeQueryClick(callItem)"
                                                        class="flex-0 cursor-pointer hover:underline"
                                                    >
                                                        {{ callItem.question }}
                                                    </div>
                                                </div>
                                            </div>
                                        </template>
                                    </div>
                                    <!-- 操作 -->
                                    <div v-if="item.role === RoleEnum.assistant" class="absolute flex items-center right-0 mr-4 mt-2 space-x-2">
                                        <div
                                            class="flex items-center justify-center size-[15px]"
@@ -147,7 +167,7 @@
import { useScrollToBottom } from './hooks/useScrollToBottom';
import type { ChatContent } from './model/types';
import { AnswerState, AnswerType, RoleEnum, answerTypeMapCom, roleImageMap, type ChatMessage } from './model/types';
import { GetHistoryAnswer, QueryHistoryDetail, QuestionAi } from '/@/api/ai/chat';
import { GetHistoryAnswer, QueryHistoryDetail, QuestionAi, extCallQuery } from '/@/api/ai/chat';
import PlayBar from '/@/components/chat/components/playBar/PlayBar.vue';
import CustomDrawer from '/@/components/drawer/CustomDrawer.vue';
import router from '/@/router';
@@ -286,7 +306,7 @@
    });
};
const sendChatMessage = async (content: ChatContent = messageContent.value, cb?: any) => {
const sendChatMessage = async (content: ChatContent = messageContent.value, cb?: any, isCallExtParams?: any) => {
    if (!content?.values) return;
    const isNewChat = messageList.value.length === 0;
    if (isNewChat) {
@@ -315,8 +335,15 @@
        // 出现回复,置空出现等待动画
        messageList.value.push(assistantItem);
        if (isCallExtParams) {
            const extRes = await extCallQuery(isCallExtParams);
            questionRes = extRes;
            resMsgContent = parseContent(extRes);
        resMsgContent = await questionAi(content.values);
        } else {
            resMsgContent = await questionAi(content.values);
        }
        if (isNewChat) {
            const firstResCb = getRoomConfig(currentRouteId, 'firstResCb');
            firstResCb?.(resMsgContent);
@@ -397,6 +424,24 @@
    displayMessageList: computedMessageList,
});
//#region ====================== 关联查询 ======================
const relativeQueryClick = async (val) => {
    sendChatMessage(
        {
            type: AnswerType.Text,
            values: val.question,
        },
        undefined,
        {
            history_group_id: currentRouteId,
            question: val.question,
            call_ext_id: val.call_ext_id,
            call_ext_args: val.agrs ? JSON.stringify(val.agrs) : null,
        }
    );
};
//#endregion
const {
    copyClick,
    likeClick,
vite.config.ts
@@ -35,7 +35,7 @@
            host: '0.0.0.0',
            port: env.VITE_PORT as unknown as number,
            open: JSON.parse(env.VITE_OPEN),
            hmr: false,
            hmr: true,
        },
        build: {
            // outDir: 'dist/' + mode.mode,