ViewStyleChat.tsx 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import { ScrollView, View,Image } from "@tarojs/components";
  2. import MessageRobotRich from "@/components/chat-message/MessageRobotRich";
  3. import MessageRich from "@/components/chat-message/MessageRich";
  4. import { WelcomeCard, AddSuccessfulTips } from "../asistant-message";
  5. // import IconFIleTxt from "@/components/icon/IconFIleTxt";
  6. // import IconFIlePDF from "@/components/icon/IconFIlePDF";
  7. // import IconFIleXLSX from "@/components/icon/IconFIleXLSX";
  8. import FigureList from "@/components/list/figure-list";
  9. import FigureListItem from "@/components/list/figure-list-item";
  10. import { useEffect, useRef, useState } from "react";
  11. import Taro, { useDidShow } from "@tarojs/taro";
  12. import { useUserStore } from "@/store/userStore";
  13. import { useKnowledgeStore } from "@/store/knowledge";
  14. const ViewStyleChat = () => {
  15. const { list, scrollTop, loadMore } = useKnowledgeStore();
  16. const {whoami} = useUserStore();
  17. const avatarData = {
  18. avatar: `data:image/png;base64,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`,
  19. name: "小蓝本助手",
  20. };
  21. const onScrollToUpper = async () => {
  22. console.log("toUpper");
  23. loadMore();
  24. };
  25. useEffect(() => {
  26. loadMore()
  27. }, []);
  28. return (
  29. <ScrollView
  30. scrollY
  31. onScrollToUpper={onScrollToUpper}
  32. scrollTop={scrollTop}
  33. style={{
  34. flex: 1,
  35. height: "100%", // 高度自适应
  36. }}
  37. >
  38. <View className="flex flex-col gap-20 pb-120">
  39. {/* 欢迎语 */}
  40. <MessageRobotRich data={avatarData}>
  41. <WelcomeCard />
  42. </MessageRobotRich>
  43. {/* 添加小蓝本助手成功 */}
  44. <MessageRobotRich data={avatarData}>
  45. <AddSuccessfulTips />
  46. </MessageRobotRich>
  47. {list.map((group) => {
  48. // 渲染自己发送的消息
  49. if (group.role === "user") {
  50. return group.knowledgeList.map((item) => {
  51. return (
  52. <MessageRich data={{
  53. avatar: whoami?.avatarUrl ?? '',
  54. name: whoami?.nickName ?? ''
  55. }}>
  56. <View className="flex items-center gap-12">
  57. <Image src={item.icon} mode="widthFix" style={{width: '36px', height: '36px'}}></Image>
  58. <View className="flex flex-col flex-1 gap-2">
  59. <View className="text-14 leading-22">{item.title}</View>
  60. <View className="text-12 leading-20 text-gray-45">
  61. {item.createTime} | {item.fileSizeStr}
  62. </View>
  63. </View>
  64. </View>
  65. </MessageRich>
  66. );
  67. });
  68. }
  69. // 渲染机器人小蓝本助手的消息
  70. return (
  71. <MessageRobotRich
  72. data={{...avatarData, fileLen: group.knowledgeList.length}}
  73. analyzeStatus={group.isParsing ? "doing" : "done"}
  74. >
  75. <FigureList>
  76. {group.knowledgeList.map((item, index) => {
  77. return (
  78. <FigureListItem
  79. figure={()=> {
  80. return <Image src={item.icon} mode="widthFix" style={{width: '36px', height: '36px'}}></Image>
  81. }}
  82. underline={index + 1 < group.knowledgeList.length}
  83. arrow={item.parseStatus === 'parsed'}
  84. onClick={()=> Taro.navigateTo({
  85. url: `/pages/knowledge-item/index?knowledgeId=${item.knowledgeId}`
  86. })}
  87. >
  88. <View className="flex flex-col flex-1 gap-2 w-full">
  89. <View className="text-14 leading-22">{item.title}</View>
  90. <View className="text-12 leading-20 text-gray-45">
  91. {item.createTime} | {item.fileSizeStr}
  92. </View>
  93. </View>
  94. </FigureListItem>
  95. );
  96. })}
  97. </FigureList>
  98. </MessageRobotRich>
  99. );
  100. })}
  101. {/* <MessageRich data={avatarData}>
  102. <View className="flex items-center gap-12">
  103. <IconFIleTxt />
  104. <View className="flex flex-col flex-1 gap-2">
  105. <View className="text-14 leading-22">文件名称</View>
  106. <View className="text-12 leading-20 text-gray-45">
  107. 03-24 12:20 | 822.KB
  108. </View>
  109. </View>
  110. </View>
  111. </MessageRich> */}
  112. {/* <MessageRobotRich data={avatarData} analyzeStatus="doing">
  113. <FigureList>
  114. <FigureListItem figure={IconFIleTxt} underline>
  115. <View className="flex flex-col flex-1 gap-2 w-full">
  116. <View className="text-14 leading-22">文件名称</View>
  117. <View className="text-12 leading-20 text-gray-45">
  118. 03-24 12:20 | 822.KB
  119. </View>
  120. </View>
  121. </FigureListItem>
  122. <FigureListItem figure={IconFIlePDF}>
  123. <View className="flex flex-col flex-1 gap-2 w-full">
  124. <View className="text-14 leading-22">飞秒小知识.pdf</View>
  125. <View className="text-12 leading-20 text-gray-45">
  126. 03-24 12:20 | 822.KB
  127. </View>
  128. </View>
  129. </FigureListItem>
  130. </FigureList>
  131. </MessageRobotRich>
  132. <MessageRobotRich data={avatarData} analyzeStatus="done">
  133. <FigureList className="bg-gray-2 px-16 py-12">
  134. <FigureListItem figure={IconFIleTxt} underline arrow>
  135. <View className="flex flex-col flex-1 gap-2 w-full">
  136. <View className="text-14 leading-22">文件名称</View>
  137. <View className="text-12 leading-20 text-gray-45">
  138. 03-24 12:20 | 822.KB
  139. </View>
  140. </View>
  141. </FigureListItem>
  142. <FigureListItem figure={IconFIlePDF} arrow>
  143. <View className="flex flex-col flex-1 gap-2 w-full">
  144. <View className="text-14 leading-22">飞秒小知识.pdf</View>
  145. <View className="text-12 leading-20 text-gray-45">
  146. 03-24 12:20 | 822.KB
  147. </View>
  148. </View>
  149. </FigureListItem>
  150. </FigureList>
  151. </MessageRobotRich> */}
  152. {/* <MessageRich data={avatarData}>
  153. <View className="flex items-center gap-12">
  154. <IconFIleXLSX />
  155. <View className="flex flex-col flex-1 gap-2">
  156. <View className="text-14 leading-22">文件名称</View>
  157. <View className="text-12 leading-20 text-gray-45">
  158. 03-24 12:20 | 822.KB
  159. </View>
  160. </View>
  161. </View>
  162. </MessageRich> */}
  163. </View>
  164. </ScrollView>
  165. );
  166. };
  167. export default ViewStyleChat;