DeekSeekHome.tsx 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import * as React from 'react';
  2. import { useNavigate } from "react-router-dom";
  3. import { Dropdown, Spin, Input, Button, Space } from 'antd';
  4. import { Chat } from './DeepSeekChat';
  5. import whiteLogo from "../icons/whiteLogo.png";
  6. import jkxz from "../icons/jkxz.png";
  7. import { useChatStore } from "../store";
  8. import { useMobileScreen } from '../utils';
  9. import api from "@/app/api/api";
  10. import { SideBar } from './sidebar';
  11. import './deepSeekHome.scss';
  12. const { TextArea } = Input;
  13. const DeekSeek: React.FC = () => {
  14. const chatStore = useChatStore();
  15. const isMobileScreen = useMobileScreen();
  16. const navigate = useNavigate();
  17. const [listLoading, setListLoading] = React.useState(false);
  18. const [isChatActive, setIsChatActive] = React.useState(false); // 新增状态:聊天是否激活
  19. const [userInput, setUserInput] = React.useState(''); // 新增状态:用户输入
  20. type List = {
  21. title: string,
  22. children: {
  23. title: string,
  24. showMenu: string,
  25. chatMode: string,
  26. appId: string,
  27. children: List[number]['children'],
  28. }[],
  29. }[];
  30. const [list, setList] = React.useState<List>([]);
  31. const init = async () => {
  32. setListLoading(true);
  33. try {
  34. const res = await api.get('/deepseek/api/appType');
  35. setList(res.data);
  36. } catch (error) {
  37. console.error(error);
  38. } finally {
  39. setListLoading(false);
  40. }
  41. }
  42. React.useEffect(() => {
  43. chatStore.clearSessions();
  44. const userInfo = localStorage.getItem('userInfo');
  45. if (userInfo) {
  46. init();
  47. }
  48. }, []);
  49. // 处理发送消息
  50. const handleSend = () => {
  51. if (userInput.trim()) {
  52. setIsChatActive(true);
  53. // 这里可以添加发送消息的逻辑
  54. console.log('发送消息:', userInput);
  55. }
  56. };
  57. // 处理输入框点击,激活聊天界面
  58. const handleInputClick = () => {
  59. setIsChatActive(true);
  60. };
  61. // 重置到初始状态
  62. const resetToHome = () => {
  63. setIsChatActive(false);
  64. setUserInput('');
  65. };
  66. return (
  67. <Spin spinning={listLoading}>
  68. <div className='deekSeek'>
  69. {/* 左侧 Sidebar */}
  70. <SideBar />
  71. {/* 主要区域 */}
  72. <div className='deekSeek-main'>
  73. {!isChatActive ? (
  74. // 未交互状态:显示简化对话框
  75. <div className='deekSeek-content'>
  76. <div className='deekSeek-content-title'>
  77. <img src={jkxz.src} />
  78. </div>
  79. <div className='deekSeek-content-title-sm' style={{ marginBottom: isMobileScreen ? 14 : 20 }}>
  80. 您好, 我是小智文件处理助手!
  81. </div>
  82. {/* 输入区域 */}
  83. <div className='deekSeek-input-section'>
  84. <div className='deekSeek-input-tabs'>
  85. <Button className='deekSeek-tab-button active'>
  86. <span className='deekSeek-tab-icon'>⚛️</span>
  87. DeepSeek-R1
  88. </Button>
  89. <Button className='deekSeek-tab-button'>
  90. <span className='deekSeek-tab-icon'>🌐</span>
  91. 联网搜索
  92. </Button>
  93. </div>
  94. <div className='deekSeek-input-container' onClick={handleInputClick}>
  95. <TextArea
  96. value={userInput}
  97. onChange={(e) => setUserInput(e.target.value)}
  98. placeholder="输入您的问题或需求, Control+Enter换行"
  99. className='deekSeek-main-input'
  100. autoSize={{ minRows: 3, maxRows: 6 }}
  101. onKeyDown={(e) => {
  102. if (e.ctrlKey && e.key === 'Enter') {
  103. handleSend();
  104. }
  105. }}
  106. onClick={(e) => e.stopPropagation()} // 阻止事件冒泡
  107. />
  108. <div className='deekSeek-input-actions'>
  109. <Button
  110. type='text'
  111. className='deekSeek-clear-button'
  112. onClick={(e) => {
  113. e.stopPropagation();
  114. setUserInput('');
  115. }}
  116. >
  117. </Button>
  118. <Button
  119. type='primary'
  120. className='deekSeek-send-button'
  121. onClick={(e) => {
  122. e.stopPropagation();
  123. handleSend();
  124. }}
  125. >
  126. ✈️
  127. </Button>
  128. </div>
  129. </div>
  130. </div>
  131. {/* 底部提示 */}
  132. <div className='deekSeek-footer-text'>
  133. 内容由AI生成,仅供参考
  134. </div>
  135. </div>
  136. ) : (
  137. // 激活状态:显示完整对话界面
  138. <div className='deekSeek-content'>
  139. <div className='deekSeek-content-title'>
  140. <img src={jkxz.src} />
  141. </div>
  142. <div className='deekSeek-content-title-sm' style={{ marginBottom: isMobileScreen ? 14 : 20 }}>
  143. 智能问答助手
  144. </div>
  145. <div className={isMobileScreen ? 'deekSeek-content-mobile' : 'deekSeek-content-pc'}>
  146. <Chat />
  147. </div>
  148. {/* 返回按钮 */}
  149. <Button
  150. className='deekSeek-back-button'
  151. onClick={resetToHome}
  152. style={{ marginTop: 20 }}
  153. >
  154. 返回首页
  155. </Button>
  156. </div>
  157. )}
  158. </div>
  159. </div>
  160. </Spin>
  161. );
  162. };
  163. export default DeekSeek;