|
@@ -4,7 +4,7 @@ import MessageRich from "@/components/chat-message/MessageRich";
|
|
|
|
|
|
import FigureList from "@/components/list/FigureList";
|
|
|
import FigureListItem from "@/components/list/FigureListItem";
|
|
|
-import EmptyData from "@/components/EmptyData";
|
|
|
+import EmptyData, {EmptyDataTitle, EmptyDataSubInfo} from "@/components/EmptyData";
|
|
|
|
|
|
import { useEffect, useRef, useState } from "react";
|
|
|
import Taro, { useDidShow } from "@tarojs/taro";
|
|
@@ -14,17 +14,14 @@ import KnowledgeIcon from "@/components/KnowledgeIcon";
|
|
|
import {
|
|
|
isParsedFail,
|
|
|
isParsedSuccess,
|
|
|
- isParsing
|
|
|
-} from '../../../knowledgeUtils'
|
|
|
-import {
|
|
|
- getEntKnowledgeStream,
|
|
|
-} from "@/service/knowledge";
|
|
|
+ isParsing,
|
|
|
+} from "../../../knowledgeUtils";
|
|
|
+import { getEntKnowledgeStream } from "@/service/knowledge";
|
|
|
|
|
|
-import type {TKnowledgeStreamResponseData } from "@/types/knowledge";
|
|
|
+import type { TKnowledgeStreamResponseData } from "@/types/knowledge";
|
|
|
import { DEFAULT_AGENT } from "@/config";
|
|
|
import { useLoadMoreInfinite, createKey } from "@/utils/loadMoreInfinite";
|
|
|
|
|
|
-
|
|
|
export interface Iprops {
|
|
|
entId: string | number;
|
|
|
assistantOnly?: boolean;
|
|
@@ -32,123 +29,139 @@ export interface Iprops {
|
|
|
}
|
|
|
|
|
|
const Index = ({ entId, assistantOnly, setTotalCount }: Iprops) => {
|
|
|
-
|
|
|
- const [scrollTop, setScrollTop] = useState(9999)
|
|
|
+ const [scrollTop, setScrollTop] = useState(9999);
|
|
|
const { whoami } = useUserStore();
|
|
|
|
|
|
- const fetcher = async ([_url, {nextId, pageSize}, [entId]]) => {
|
|
|
- const res = await getEntKnowledgeStream({ startId: nextId, pageSize, entId });
|
|
|
+ const fetcher = async ([_url, { nextId, pageSize }, [entId]]) => {
|
|
|
+ const res = await getEntKnowledgeStream({
|
|
|
+ startId: nextId,
|
|
|
+ pageSize,
|
|
|
+ entId,
|
|
|
+ });
|
|
|
return res.data;
|
|
|
};
|
|
|
- const { list, loadMore, pageIndex, mutate, data } = useLoadMoreInfinite<TKnowledgeStreamResponseData[]>(
|
|
|
- createKey(`getEntKnowledgeStream ${entId}`, 20, [entId]),
|
|
|
- fetcher);
|
|
|
+ const { list, loadMore, pageIndex, mutate, data } = useLoadMoreInfinite<
|
|
|
+ TKnowledgeStreamResponseData[]
|
|
|
+ >(createKey(`getEntKnowledgeStream ${entId}`, 20, [entId]), fetcher);
|
|
|
|
|
|
const getFilterList = (list: TKnowledgeStreamResponseData[]) => {
|
|
|
- if(!assistantOnly) return list;
|
|
|
+ if (!assistantOnly) return list;
|
|
|
return list.filter((item) => {
|
|
|
- return item.role === 'assistant';
|
|
|
+ return item.role === "assistant";
|
|
|
});
|
|
|
};
|
|
|
|
|
|
const reversedList = getFilterList(list).reverse();
|
|
|
|
|
|
-
|
|
|
const onScrollToUpper = async () => {
|
|
|
console.log("toUpper");
|
|
|
loadMore();
|
|
|
};
|
|
|
- useDidShow(()=> {
|
|
|
+ useDidShow(() => {
|
|
|
mutate(undefined, { revalidate: true });
|
|
|
- })
|
|
|
+ });
|
|
|
useEffect(() => {
|
|
|
- if(pageIndex === 1){
|
|
|
- setScrollTop(prev => prev + 1)
|
|
|
- }
|
|
|
+ if (pageIndex === 1) {
|
|
|
+ setScrollTop((prev) => prev + 1);
|
|
|
+ }
|
|
|
}, [pageIndex]);
|
|
|
|
|
|
useEffect(() => {
|
|
|
- if(data && pageIndex === 1) {
|
|
|
- setTotalCount(data?.[0].totalCount || 0)
|
|
|
+ if (data && pageIndex === 1) {
|
|
|
+ setTotalCount(data?.[0].totalCount || 0);
|
|
|
}
|
|
|
}, [data, pageIndex]);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
return (
|
|
|
<View className="flex-1 h-full overflow-hidden">
|
|
|
- <ScrollView
|
|
|
- scrollY
|
|
|
- onScrollToUpper={onScrollToUpper}
|
|
|
- scrollTop={scrollTop}
|
|
|
- style={{
|
|
|
- flex: 1,
|
|
|
- height: "100%", // 高度自适应
|
|
|
- }}
|
|
|
- >
|
|
|
- <View className="flex flex-col gap-20 pb-32 mx-16">
|
|
|
- {reversedList.length<=0 ? <View className="pt-46"><EmptyData type={'plane'}/></View> : <></>}
|
|
|
- {reversedList.map((group) => {
|
|
|
- // 渲染自己发送的消息
|
|
|
- if (group.role === "user") {
|
|
|
- return group.knowledgeList.map((item) => {
|
|
|
- return (
|
|
|
- <MessageRich
|
|
|
- data={{
|
|
|
- avatar: whoami?.avatarUrl ?? "",
|
|
|
- name: whoami?.nickName ?? "",
|
|
|
- }}
|
|
|
- >
|
|
|
- <View className="flex items-center gap-12">
|
|
|
- <KnowledgeIcon data={item} />
|
|
|
- <View className="flex flex-col flex-1 gap-2">
|
|
|
- <View className="text-14 leading-22 truncate">{item.title}</View>
|
|
|
- <View className="text-12 leading-20 text-gray-45">
|
|
|
- {item.createTime} | {item.fileSizeStr}
|
|
|
- </View>
|
|
|
- </View>
|
|
|
- </View>
|
|
|
- </MessageRich>
|
|
|
- );
|
|
|
- });
|
|
|
- }
|
|
|
- // 渲染机器人小蓝本助手的消息
|
|
|
- return (
|
|
|
- <MessageRobotRich
|
|
|
- data={{ ...DEFAULT_AGENT, fileLen: group.knowledgeList.length }}
|
|
|
- analyzeStatus={group.isParsing ? "doing" : "done"}
|
|
|
- content={group.content}
|
|
|
- >
|
|
|
- <FigureList>
|
|
|
- {group.knowledgeList.map((item, index) => {
|
|
|
- return (
|
|
|
- <FigureListItem
|
|
|
- figure={() => {
|
|
|
- return <KnowledgeIcon data={item} />;
|
|
|
- }}
|
|
|
- underline={index + 1 < group.knowledgeList.length}
|
|
|
- arrow={isParsedSuccess(item)}
|
|
|
- onClick={() =>
|
|
|
- Taro.navigateTo({
|
|
|
- url: `/pages/knowledge-item/index?knowledgeId=${item.knowledgeId}&entId=${entId}`,
|
|
|
- })
|
|
|
- }
|
|
|
- >
|
|
|
- <View className="flex flex-col flex-1 gap-2 w-full">
|
|
|
- <View className="text-14 leading-22 truncate">{item.title}</View>
|
|
|
+ <ScrollView
|
|
|
+ scrollY
|
|
|
+ onScrollToUpper={onScrollToUpper}
|
|
|
+ scrollTop={scrollTop}
|
|
|
+ style={{
|
|
|
+ flex: 1,
|
|
|
+ height: "100%", // 高度自适应
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <View className="flex flex-col gap-20 pb-32 mx-16">
|
|
|
+ {reversedList.length <= 0 ? (
|
|
|
+ <EmptyData type={"search"}>
|
|
|
+ <View className="text-center text-14 leading-28 text-gray-45 mb-44 w-full">
|
|
|
+ <EmptyDataTitle>暂无数据</EmptyDataTitle>
|
|
|
+ <EmptyDataSubInfo>
|
|
|
+ <View>可登录电报端管理企业知识库</View>
|
|
|
+ <View>也可以开启个人知识库同步到企业知识库</View>
|
|
|
+ </EmptyDataSubInfo>
|
|
|
+ </View>
|
|
|
+ </EmptyData>
|
|
|
+ ) : (
|
|
|
+ <></>
|
|
|
+ )}
|
|
|
+ {reversedList.map((group) => {
|
|
|
+ // 渲染自己发送的消息
|
|
|
+ if (group.role === "user") {
|
|
|
+ return group.knowledgeList.map((item) => {
|
|
|
+ return (
|
|
|
+ <MessageRich
|
|
|
+ data={{
|
|
|
+ avatar: whoami?.avatarUrl ?? "",
|
|
|
+ name: whoami?.nickName ?? "",
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <View className="flex items-center gap-12">
|
|
|
+ <KnowledgeIcon data={item} />
|
|
|
+ <View className="flex flex-col flex-1 gap-2">
|
|
|
+ <View className="text-14 leading-22 truncate">
|
|
|
+ {item.title}
|
|
|
+ </View>
|
|
|
<View className="text-12 leading-20 text-gray-45">
|
|
|
{item.createTime} | {item.fileSizeStr}
|
|
|
</View>
|
|
|
</View>
|
|
|
- </FigureListItem>
|
|
|
- );
|
|
|
- })}
|
|
|
- </FigureList>
|
|
|
- </MessageRobotRich>
|
|
|
- );
|
|
|
- })}
|
|
|
- </View>
|
|
|
- </ScrollView>
|
|
|
+ </View>
|
|
|
+ </MessageRich>
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }
|
|
|
+ // 渲染机器人小蓝本助手的消息
|
|
|
+ return (
|
|
|
+ <MessageRobotRich
|
|
|
+ data={{ ...DEFAULT_AGENT, fileLen: group.knowledgeList.length }}
|
|
|
+ analyzeStatus={group.isParsing ? "doing" : "done"}
|
|
|
+ content={group.content}
|
|
|
+ >
|
|
|
+ <FigureList>
|
|
|
+ {group.knowledgeList.map((item, index) => {
|
|
|
+ return (
|
|
|
+ <FigureListItem
|
|
|
+ figure={() => {
|
|
|
+ return <KnowledgeIcon data={item} />;
|
|
|
+ }}
|
|
|
+ underline={index + 1 < group.knowledgeList.length}
|
|
|
+ arrow={isParsedSuccess(item)}
|
|
|
+ onClick={() =>
|
|
|
+ Taro.navigateTo({
|
|
|
+ url: `/pages/knowledge-item/index?knowledgeId=${item.knowledgeId}&entId=${entId}`,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ >
|
|
|
+ <View className="flex flex-col flex-1 gap-2 w-full">
|
|
|
+ <View className="text-14 leading-22 truncate">
|
|
|
+ {item.title}
|
|
|
+ </View>
|
|
|
+ <View className="text-12 leading-20 text-gray-45">
|
|
|
+ {item.createTime} | {item.fileSizeStr}
|
|
|
+ </View>
|
|
|
+ </View>
|
|
|
+ </FigureListItem>
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </FigureList>
|
|
|
+ </MessageRobotRich>
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </View>
|
|
|
+ </ScrollView>
|
|
|
</View>
|
|
|
);
|
|
|
};
|