wujingjing
2025-03-11 c144c39d9f3f86e1b52ae4247f8322f6396a4320
src/components/chat/hooks/useLoadData.ts
@@ -3,7 +3,13 @@
import { AnswerType, MultiChatType, RoleEnum, StepEnum } from '../model/types';
import { GetHistoryAnswer } from '/@/api/ai/chat';
import moment from 'moment';
import type { Attach } from '../components/playBar/hook/useAttach';
import {
   getFileGroupType,
   getFileSuffix,
   getIconByGroupType,
   getIconClassByGroupType,
} from '../components/playBar/hook/useUploadFile';
export const useLoadData = () => {
   const parseExtraContent = (res) => {
      if (!res) return {};
@@ -108,6 +114,26 @@
      return content;
   };
   /**
    * 获取步骤组列表
    * @param reports
    * @returns
    */
   const getStepGroupList = (reports: any[]) => {
      const stepGroupList = (reports ?? []).map((item) => ({
         value: convertProcessToStep(item?.exec_process),
         isShow: false,
      }));
      /** @description 全部放到第一个 */
      stepGroupList.map((item, index) => {
         if (index !== 0) {
            stepGroupList[0].value.push(...item.value);
            item.value = [];
         }
      });
      return stepGroupList;
   };
   const formatShowTimeYear = (str: string) => {
      const date = moment(str);
      const now = moment();
@@ -134,6 +160,48 @@
         history_id: historyId,
      });
   };
   const convertAttach = (userValues: any): Attach[] => {
      const attachList: Attach[] = [];
      if (userValues?.attach_tables) {
         userValues.attach_tables.forEach((item: any) => {
            attachList.push({
               title: item.title,
               type: 'table',
               model: item,
               icon: 'biaoge',
               iconClass: 'ywicon-biaoge text-[#c5e0ff]',
            });
         });
      }
      if (userValues?.attach_metrics) {
         userValues.attach_metrics.forEach((item: any) => {
            attachList.push({
               title: item.title,
               type: 'metric',
               model: item,
               icon: 'zhibiao',
               iconClass: 'ywicon-zhibiao text-[#c5e0ff]',
            });
         });
      }
      if (userValues?.attach_files) {
         userValues.attach_files.forEach((item: any) => {
            const suffix = getFileSuffix(item.file_name);
            const groupType = getFileGroupType(suffix);
            attachList.push({
               title: item.file_name,
               type: 'file',
               model: item,
               icon: getIconByGroupType(groupType),
               iconClass: getIconClassByGroupType(groupType),
            });
         });
      }
      return attachList;
   };
   /**
    * 获取用户回复数据,并插入到对话当中去
    */
@@ -153,8 +221,8 @@
         } as ChatMessage;
      });
      const resList = await Promise.all(
         (userMsg ?? []).map((item) => {
            userItemIdMap.set(item.history_id, item);
         (userMsg ?? []).map((item, index) => {
            userItemIdMap.set(index, item);
            return getAnswerById(item.history_id);
         })
      );
@@ -163,22 +231,12 @@
         const insertIndex = index + 1 + i;
         const currentUserMsg = tmpMessageList[insertIndex - 1];
         currentUserMsg.content.values = item?.answer?.question ?? currentUserMsg.content.values;
         const mapUser = userItemIdMap.get(item.answer?.history_id);
         const attachList = convertAttach(item?.answer);
         currentUserMsg.attachList = attachList;
         const mapUser = userItemIdMap.get(index);
         const historyId = mapUser?.history_id;
         const answerTime = formatShowTimeYear(mapUser?.create_time);
         //#region ====================== 都合并到第一个,后面都是空壳子 ======================
         const stepGroupList = (item?.answer?.reports ?? []).map((item) => ({
            value: convertProcessToStep(item?.exec_process),
            isShow: false,
         }));
         stepGroupList.map((item, index) => {
            if (index !== 0) {
               stepGroupList[0].value.push(...item.value);
               item.value = [];
            }
         });
         //#endregion
         tmpMessageList.splice(
            insertIndex,
@@ -186,7 +244,7 @@
            item.answer === null
               ? null
               : {
                     historyId: item.answer?.history_id,
                     historyId: historyId,
                     role: RoleEnum.assistant,
                     content: parseContent(item?.answer),
                     state: item.answer_state,
@@ -196,7 +254,7 @@
                     //    value: convertProcessToStep(item?.exec_process),
                     //    isShow: false,
                     // }))
                     stepGroup: stepGroupList,
                     stepGroup: getStepGroupList(item?.answer?.reports ?? []),
                     conclusion: item?.answer?.conclusion ?? [],
                     isChecked: false,
@@ -220,6 +278,8 @@
      } as StepItem;
   };
   const convertProcessToStep = (process: any[], isHistory = true) => {
      let streamIsStart = false;
      const stepList = (process ?? []).reduce((preVal, curVal) => {
         if (curVal.mode === 'question') {
            if (isHistory) return preVal;
@@ -232,6 +292,15 @@
               type: MultiChatType.Select,
            };
            last.subStep.push(sub);
         } else if (curVal.mode === 'begin_stream') {
            streamIsStart = true;
            const cur = convertProcessItem(curVal);
            preVal.push(cur);
         } else if (curVal.mode === 'end_stream') {
            streamIsStart = false;
         } else if (streamIsStart) {
            const last = preVal.at(-1);
            last.title += curVal.value;
         } else {
            const cur = convertProcessItem(curVal);
            preVal.push(cur);
@@ -247,5 +316,7 @@
      convertProcessToStep,
      convertProcessItem,
      formatShowTimeYear,
      getStepGroupList,
      convertAttach,
   };
};