@gientech/modual 1.4.2 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/.editorconfig +38 -0
  2. package/.prettierignore +16 -0
  3. package/.prettierrc +17 -0
  4. package/README.md +129 -129
  5. package/USAGE.md +191 -0
  6. package/bash.exe.stackdump +40 -0
  7. package/components.json +21 -0
  8. package/dist/README.md +129 -0
  9. package/{assets → dist/assets}/database.svg +11 -11
  10. package/{assets → dist/assets}/database_add.svg +53 -53
  11. package/{assets → dist/assets}/database_connect.svg +66 -66
  12. package/{assets → dist/assets}/database_upload.svg +29 -29
  13. package/{assets → dist/assets}/defaultWeLogo.svg +14 -14
  14. package/{assets → dist/assets}/mysql.svg +14 -14
  15. package/dist/database.js +20 -0
  16. package/dist/package.json +63 -0
  17. package/{worker → dist/worker}/pdf.worker.min.js +21 -21
  18. package/doc_assets/2.png +0 -0
  19. package/doc_assets/demo.md +27 -0
  20. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +2 -0
  21. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +23699 -0
  22. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +1 -0
  23. package/doc_assets/demos/dist-app/index.html +14 -0
  24. package/doc_assets/demos/dist-app/vite.svg +1 -0
  25. package/doc_assets/images/1.png +0 -0
  26. package/doc_assets/images/3.png +0 -0
  27. package/doc_assets/images/component-screenshot.png +1 -0
  28. package/doc_assets/install.md +5 -0
  29. package/eslint.config.js +92 -0
  30. package/index.html +13 -0
  31. package/package.json +99 -44
  32. package/package.json.demo-backup +109 -0
  33. package/postcss.config.cjs +19 -0
  34. package/public/vite.svg +1 -0
  35. package/public/worker/pdf.worker.min.js +22 -0
  36. package/scripts/README.md +133 -0
  37. package/scripts/build-demo.js +88 -0
  38. package/scripts/demo-selector.js +216 -0
  39. package/scripts/dev-demo.js +76 -0
  40. package/scripts/preview-demo.js +130 -0
  41. package/scripts/run-demo.bat +34 -0
  42. package/src/assets/img/downArrow.png +0 -0
  43. package/src/assets/img/excel.png +0 -0
  44. package/src/assets/img/img.png +0 -0
  45. package/src/assets/img/pdf.png +0 -0
  46. package/src/assets/img/ppt.png +0 -0
  47. package/src/assets/img/txt.png +0 -0
  48. package/src/assets/img/word.png +0 -0
  49. package/src/assets/login/homeBg.png +0 -0
  50. package/src/assets/login/left.jpg +0 -0
  51. package/src/assets/login/logoImg.png +0 -0
  52. package/src/examples/LoginPage/index.tsx +18 -0
  53. package/src/examples/chat/components/DrawerGraphPreview.tsx +78 -0
  54. package/src/examples/chat/index.tsx +190 -0
  55. package/src/examples/gientechStreamFilesReader/index.tsx +950 -0
  56. package/src/examples/ragDatabaseDataPage/index.tsx +36 -0
  57. package/src/examples/ragDatabaseIdPage/index.tsx +44 -0
  58. package/src/examples/ragDatabasePage/index.tsx +36 -0
  59. package/src/examples/ragModelManagePage/index.tsx +37 -0
  60. package/src/examples/ragSearchPage/index.tsx +0 -0
  61. package/src/examples/ragSensitiveWordsPage/index.tsx +32 -0
  62. package/src/examples/streamFiles/index.tsx +384 -0
  63. package/src/lib_enter.ts +40 -0
  64. package/src/main.tsx +5 -0
  65. package/src/main.tsx.backup +5 -0
  66. package/src/modules/chat/Conversations/Item.tsx +167 -0
  67. package/src/modules/chat/Conversations/List.tsx +206 -0
  68. package/src/modules/chat/Conversations/groupByTime.ts +39 -0
  69. package/src/modules/chat/Conversations/index.tsx +217 -0
  70. package/src/modules/chat/constants.tsx +33 -0
  71. package/src/modules/chat/data.txt +82 -0
  72. package/src/modules/chat/index.tsx +1941 -0
  73. package/src/modules/chat/types.ts +17 -0
  74. package/src/modules/database/CreateModal.tsx +398 -0
  75. package/src/modules/database/assets/Doris.png +0 -0
  76. package/src/modules/database/assets/PostgreSQL.png +0 -0
  77. package/src/modules/database/assets/SQLServer.png +0 -0
  78. package/src/modules/database/assets/database.svg +11 -0
  79. package/src/modules/database/assets/database_add.svg +53 -0
  80. package/src/modules/database/assets/database_connect.svg +66 -0
  81. package/src/modules/database/assets/database_upload.svg +29 -0
  82. package/src/modules/database/assets/empty.png +0 -0
  83. package/src/modules/database/assets/mysql.svg +14 -0
  84. package/src/modules/database/index.tsx +466 -0
  85. package/src/modules/database/server.ts +196 -0
  86. package/src/modules/databaseId/CustomCom.tsx +156 -0
  87. package/src/modules/databaseId/EditConfig.tsx +268 -0
  88. package/src/modules/databaseId/UploadDrawer.tsx +520 -0
  89. package/src/modules/databaseId/assets/aiOptimize.svg +10 -0
  90. package/src/modules/databaseId/assets/empty.png +0 -0
  91. package/src/modules/databaseId/assets/template.svg +6 -0
  92. package/src/modules/databaseId/assets/upload.svg +9 -0
  93. package/src/modules/databaseId/assets/useTemp.svg +6 -0
  94. package/src/modules/databaseId/index.tsx +734 -0
  95. package/src/modules/databaseId/server.ts +286 -0
  96. package/src/modules/databaseId/style.css +5 -0
  97. package/src/modules/databaseTable/EditRowDrawer.tsx +119 -0
  98. package/src/modules/databaseTable/index.tsx +357 -0
  99. package/src/modules/databaseTable/server.ts +180 -0
  100. package/src/modules/headlessChat/constants.tsx +32 -0
  101. package/src/modules/headlessChat/index.tsx +1063 -0
  102. package/src/modules/headlessChat/types.ts +23 -0
  103. package/src/modules/login/components/Login/LoginBox/index.tsx +102 -0
  104. package/src/modules/login/components/Login/RegisterBox/index.tsx +180 -0
  105. package/src/modules/login/components/Login/index.tsx +100 -0
  106. package/src/modules/login/index.tsx +106 -0
  107. package/src/modules/login/style.css +3 -0
  108. package/src/modules/login/useServices.ts +53 -0
  109. package/src/modules/login/utils.ts +42 -0
  110. package/src/modules/modelManage/ConfigDrawer.tsx +249 -0
  111. package/src/modules/modelManage/assets/empty.png +0 -0
  112. package/src/modules/modelManage/const.ts +50 -0
  113. package/src/modules/modelManage/index.tsx +439 -0
  114. package/src/modules/modelManage/server.ts +185 -0
  115. package/src/modules/nodegraph/index.tsx +1 -0
  116. package/src/modules/search/assets/Icon-history.svg +8 -0
  117. package/src/modules/search/assets/answerAwartar.png +0 -0
  118. package/src/modules/search/assets/doc.png +0 -0
  119. package/src/modules/search/assets/genera.gif +0 -0
  120. package/src/modules/search/assets/icon-robot.svg +9 -0
  121. package/src/modules/search/assets/icon-search-bar.svg +14 -0
  122. package/src/modules/search/assets/icon-sub-title.svg +3 -0
  123. package/src/modules/search/assets/icon-title.svg +9 -0
  124. package/src/modules/search/assets/icon-zoomOut.svg +9 -0
  125. package/src/modules/search/assets/iconAi.svg +9 -0
  126. package/src/modules/search/assets/pdf.png +0 -0
  127. package/src/modules/search/assets/ppt.png +0 -0
  128. package/src/modules/search/assets/search.svg +3 -0
  129. package/src/modules/search/assets/selected.svg +4 -0
  130. package/src/modules/search/assets/txt.png +0 -0
  131. package/src/modules/search/assets/xls.png +0 -0
  132. package/src/modules/search/components/AssisSelect.tsx +137 -0
  133. package/src/modules/search/components/Editor/ChatViewEditor.tsx +261 -0
  134. package/src/modules/search/components/Editor/aichat.css +1 -0
  135. package/src/modules/search/components/Editor/constant.ts +13 -0
  136. package/src/modules/search/components/Editor/index.tsx +113 -0
  137. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +332 -0
  138. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +20 -0
  139. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +38 -0
  140. package/src/modules/search/components/Editor/plugins/displayer.ts +298 -0
  141. package/src/modules/search/components/Editor/plugins/imageClick.tsx +32 -0
  142. package/src/modules/search/components/Editor/plugins/myplugin.tsx +98 -0
  143. package/src/modules/search/components/Editor/ui/avatar.tsx +19 -0
  144. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +21 -0
  145. package/src/modules/search/components/Editor/ui/button.tsx +58 -0
  146. package/src/modules/search/components/Editor/ui/calendar.tsx +68 -0
  147. package/src/modules/search/components/Editor/ui/caption.tsx +46 -0
  148. package/src/modules/search/components/Editor/ui/checkbox.tsx +27 -0
  149. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +188 -0
  150. package/src/modules/search/components/Editor/ui/code-block-element.css +434 -0
  151. package/src/modules/search/components/Editor/ui/code-block-element.tsx +39 -0
  152. package/src/modules/search/components/Editor/ui/code-leaf.tsx +24 -0
  153. package/src/modules/search/components/Editor/ui/code-line-element.tsx +10 -0
  154. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +21 -0
  155. package/src/modules/search/components/Editor/ui/column-element.tsx +30 -0
  156. package/src/modules/search/components/Editor/ui/column-group-element.tsx +94 -0
  157. package/src/modules/search/components/Editor/ui/command.tsx +75 -0
  158. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +22 -0
  159. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +37 -0
  160. package/src/modules/search/components/Editor/ui/comment-item.tsx +74 -0
  161. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +49 -0
  162. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +42 -0
  163. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +22 -0
  164. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +32 -0
  165. package/src/modules/search/components/Editor/ui/comment-value.tsx +34 -0
  166. package/src/modules/search/components/Editor/ui/comments-popover.tsx +63 -0
  167. package/src/modules/search/components/Editor/ui/date-element.tsx +83 -0
  168. package/src/modules/search/components/Editor/ui/dialog.tsx +63 -0
  169. package/src/modules/search/components/Editor/ui/draggable.tsx +177 -0
  170. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +180 -0
  171. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +85 -0
  172. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +28 -0
  173. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +76 -0
  174. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +8 -0
  175. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +51 -0
  176. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +77 -0
  177. package/src/modules/search/components/Editor/ui/heading-element.tsx +48 -0
  178. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +17 -0
  179. package/src/modules/search/components/Editor/ui/hr-element.tsx +30 -0
  180. package/src/modules/search/components/Editor/ui/icons.tsx +267 -0
  181. package/src/modules/search/components/Editor/ui/image-element.tsx +74 -0
  182. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +368 -0
  183. package/src/modules/search/components/Editor/ui/input.tsx +25 -0
  184. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +218 -0
  185. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +20 -0
  186. package/src/modules/search/components/Editor/ui/link-element.tsx +29 -0
  187. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +161 -0
  188. package/src/modules/search/components/Editor/ui/list-element.tsx +30 -0
  189. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +24 -0
  190. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +133 -0
  191. package/src/modules/search/components/Editor/ui/media-popover.tsx +97 -0
  192. package/src/modules/search/components/Editor/ui/mention-element.tsx +43 -0
  193. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +141 -0
  194. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +93 -0
  195. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +67 -0
  196. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +4 -0
  197. package/src/modules/search/components/Editor/ui/placeholder.tsx +52 -0
  198. package/src/modules/search/components/Editor/ui/popover.tsx +32 -0
  199. package/src/modules/search/components/Editor/ui/resizable.tsx +66 -0
  200. package/src/modules/search/components/Editor/ui/separator.tsx +25 -0
  201. package/src/modules/search/components/Editor/ui/style.less +12 -0
  202. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +143 -0
  203. package/src/modules/search/components/Editor/ui/table-element.tsx +243 -0
  204. package/src/modules/search/components/Editor/ui/table-row-element.tsx +22 -0
  205. package/src/modules/search/components/Editor/ui/tableValue.tsx +135 -0
  206. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +43 -0
  207. package/src/modules/search/components/Editor/ui/toggle-element.tsx +31 -0
  208. package/src/modules/search/components/Editor/ui/toolbar.tsx +157 -0
  209. package/src/modules/search/components/Editor/ui/tooltip.tsx +65 -0
  210. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +160 -0
  211. package/src/modules/search/components/Editor/ui/with-draggables.tsx +175 -0
  212. package/src/modules/search/components/FileList.tsx +287 -0
  213. package/src/modules/search/components/ImageGroupView/index.tsx +85 -0
  214. package/src/modules/search/components/ResultContent.tsx +232 -0
  215. package/src/modules/search/components/SearchInput.tsx +232 -0
  216. package/src/modules/search/components/SearchLanding.tsx +74 -0
  217. package/src/modules/search/components/SearchView.tsx +563 -0
  218. package/src/modules/search/components/SimpleEditor.tsx +158 -0
  219. package/src/modules/search/components/SimpleFileList.tsx +215 -0
  220. package/src/modules/search/index.tsx +10 -0
  221. package/src/modules/search/reademe.md +1 -0
  222. package/src/modules/search/servers/apis.tsx +19 -0
  223. package/src/modules/search/servers/index.ts +184 -0
  224. package/src/modules/search/style.less +503 -0
  225. package/src/modules/search/type.ts +22 -0
  226. package/src/modules/search/utils.ts +34 -0
  227. package/src/modules/sensitive/index.tsx +313 -0
  228. package/src/modules/sensitive/server.ts +122 -0
  229. package/src/modules/streamFilesReader/GientechStreamReader.tsx +1619 -0
  230. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  231. package/src/modules/streamFilesReader/components/Header/index.tsx +297 -0
  232. package/src/modules/streamFilesReader/index.tsx +3 -0
  233. package/src/style.css +6 -0
  234. package/src/type.d.ts +0 -0
  235. package/src/utils/commonFn.tsx +111 -0
  236. package/src/utils/gientechCommon/components/AppError.tsx +32 -0
  237. package/src/utils/gientechCommon/components/AppLoading.tsx +75 -0
  238. package/src/utils/gientechCommon/components/DeleteModal.tsx +75 -0
  239. package/src/utils/gientechCommon/components/DisplayError.tsx +33 -0
  240. package/src/utils/gientechCommon/components/DisplayLoading.tsx +38 -0
  241. package/src/utils/gientechCommon/components/FeedBackModal.tsx +310 -0
  242. package/src/utils/gientechCommon/components/FileCardCommon.tsx +82 -0
  243. package/src/utils/gientechCommon/components/FileManager/index.tsx +390 -0
  244. package/src/utils/gientechCommon/components/FileManager/style.css +5 -0
  245. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +296 -0
  246. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +339 -0
  247. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +245 -0
  248. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +209 -0
  249. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  250. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +148 -0
  251. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +14 -0
  252. package/src/utils/gientechCommon/components/RenameModal.tsx +86 -0
  253. package/src/utils/gientechCommon/components/style.less +11 -0
  254. package/src/utils/gientechCommon/configs/commonConfig.ts +2 -0
  255. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  256. package/src/utils/gientechCommon/configs/stylesConfig.ts +142 -0
  257. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +345 -0
  258. package/src/utils/gientechCommon/slate/converters/deserializers.ts +763 -0
  259. package/src/utils/gientechCommon/slate/converters/mockData.ts +232 -0
  260. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +258 -0
  261. package/src/utils/gientechCommon/slate/richElements/index.tsx +499 -0
  262. package/src/utils/gientechCommon/utils/request.ts +37 -0
  263. package/src/utils/gientechCommon/utils/serverFn.ts +172 -0
  264. package/src/utils/index.tsx +126 -0
  265. package/src/utils/testconfigs/demologin/index.tsx +32 -0
  266. package/src/utils/testconfigs/index.ts +53 -0
  267. package/src/vite-env.d.ts +11 -0
  268. package/stats.html +4949 -0
  269. package/tailwind.config.js +170 -0
  270. package/tsconfig.app.json +30 -0
  271. package/tsconfig.app.tsbuildinfo +11 -0
  272. package/tsconfig.json +13 -0
  273. package/tsconfig.node.json +22 -0
  274. package/tsconfig.node.tsbuildinfo +1 -0
  275. package/vite.config.ts +216 -0
  276. package/workflows/release.yml +60 -0
  277. package/database.js +0 -20
  278. /package/{assets → dist/assets}/AppLoading-BCu9TPs5.js +0 -0
  279. /package/{assets → dist/assets}/Doris.png +0 -0
  280. /package/{assets → dist/assets}/GientechStreamReader-A8zHypyu.js +0 -0
  281. /package/{assets → dist/assets}/LeftOutlined-BdBZ6FSD.js +0 -0
  282. /package/{assets → dist/assets}/PostgreSQL.png +0 -0
  283. /package/{assets → dist/assets}/SQLServer.png +0 -0
  284. /package/{assets → dist/assets}/empty.png +0 -0
  285. /package/{assets → dist/assets}/homeBg.png +0 -0
  286. /package/{assets → dist/assets}/index-B7u9FawR.js +0 -0
  287. /package/{assets → dist/assets}/index-CFlRqq2H.js +0 -0
  288. /package/{assets → dist/assets}/index-CNJZ9j4J.js +0 -0
  289. /package/{assets → dist/assets}/index-CpW6Dhpp.js +0 -0
  290. /package/{assets → dist/assets}/index-DfSHCQcq.js +0 -0
  291. /package/{assets → dist/assets}/index-DiQ4Me9J.js +0 -0
  292. /package/{assets → dist/assets}/index-EcdpegTC.js +0 -0
  293. /package/{assets → dist/assets}/index-rydP_SDR.js +0 -0
  294. /package/{assets → dist/assets}/left.jpg +0 -0
  295. /package/{assets → dist/assets}/logoImg.png +0 -0
  296. /package/{assets → dist/assets}/plus-ufD39rmY.js +0 -0
  297. /package/{assets → dist/assets}/style.css +0 -0
  298. /package/{assets → dist/assets}/style2.css +0 -0
  299. /package/{assets → dist/assets}/style3.css +0 -0
  300. /package/{assets → dist/assets}/style4.css +0 -0
  301. /package/{assets → dist/assets}/x-_1-UpSBt.js +0 -0
  302. /package/{chat.d.ts → dist/chat.d.ts} +0 -0
  303. /package/{chat.js → dist/chat.js} +0 -0
  304. /package/{database.d.ts → dist/database.d.ts} +0 -0
  305. /package/{databaseId.d.ts → dist/databaseId.d.ts} +0 -0
  306. /package/{databaseId.js → dist/databaseId.js} +0 -0
  307. /package/{databaseTable.d.ts → dist/databaseTable.d.ts} +0 -0
  308. /package/{databaseTable.js → dist/databaseTable.js} +0 -0
  309. /package/{index.d.ts → dist/index.d.ts} +0 -0
  310. /package/{index.js → dist/index.js} +0 -0
  311. /package/{modelManage.d.ts → dist/modelManage.d.ts} +0 -0
  312. /package/{modelManage.js → dist/modelManage.js} +0 -0
  313. /package/{sensitive.d.ts → dist/sensitive.d.ts} +0 -0
  314. /package/{sensitive.js → dist/sensitive.js} +0 -0
  315. /package/{streamFilesReader.d.ts → dist/streamFilesReader.d.ts} +0 -0
  316. /package/{streamFilesReader.js → dist/streamFilesReader.js} +0 -0
  317. /package/{vite.svg → dist/vite.svg} +0 -0
@@ -0,0 +1,950 @@
1
+ import React, { useState } from 'react';
2
+ import { GientechStreamReader } from '../../modules/streamFilesReader';
3
+ import { AppTheme } from '@mxmweb/zui';
4
+ import type { Annotation, MDAnnotation, TableAnnotation } from '../../../../apps/FViewer/dist/core/types';
5
+ import { rag_dev_server } from '../../utils/testconfigs';
6
+ import { registerPDFWorker } from '@mxmweb/fviewer'; // 或从 @gientech/modual re-export 的同名方法
7
+ registerPDFWorker('/worker/pdf.worker.min.js');
8
+
9
+ // 自定义Loading组件示例
10
+ const CustomLoadingComponent: React.FC<{
11
+ status: string;
12
+ theme: AppTheme;
13
+ }> = ({ status, theme }) => {
14
+ return (
15
+ <div
16
+ style={{
17
+ display: 'flex',
18
+ flexDirection: 'column',
19
+ alignItems: 'center',
20
+ justifyContent: 'center',
21
+ height: '100%',
22
+ padding: '40px',
23
+ background: theme.colors.background,
24
+ }}
25
+ >
26
+ {/* 自定义加载动画 */}
27
+ <div
28
+ style={{
29
+ position: 'relative',
30
+ width: '100px',
31
+ height: '100px',
32
+ marginBottom: '24px',
33
+ }}
34
+ >
35
+ {/* 旋转的圆环 */}
36
+ <div
37
+ style={{
38
+ width: '100%',
39
+ height: '100%',
40
+ border: `4px solid ${theme.colors.border}`,
41
+ borderTop: `4px solid ${theme.colors.primary}`,
42
+ borderRadius: '50%',
43
+ animation: 'spin 1s linear infinite',
44
+ }}
45
+ />
46
+
47
+ {/* 中心图标 */}
48
+ <div
49
+ style={{
50
+ position: 'absolute',
51
+ top: '50%',
52
+ left: '50%',
53
+ transform: 'translate(-50%, -50%)',
54
+ fontSize: '24px',
55
+ color: theme.colors.primary,
56
+ }}
57
+ >
58
+ 📄
59
+ </div>
60
+ </div>
61
+
62
+ {/* 状态文本 */}
63
+ <div
64
+ style={{
65
+ fontSize: '18px',
66
+ fontWeight: '600',
67
+ color: theme.colors.text,
68
+ marginBottom: '12px',
69
+ textAlign: 'center',
70
+ }}
71
+ >
72
+ {status}
73
+ </div>
74
+
75
+ {/* 进度条 */}
76
+ <div
77
+ style={{
78
+ width: '300px',
79
+ height: '6px',
80
+ background: theme.colors.border,
81
+ borderRadius: '3px',
82
+ overflow: 'hidden',
83
+ position: 'relative',
84
+ }}
85
+ >
86
+ <div
87
+ style={{
88
+ width: '60%',
89
+ height: '100%',
90
+ background: `linear-gradient(90deg, ${theme.colors.primary}, ${theme.colors.info})`,
91
+ borderRadius: '3px',
92
+ animation: 'loading-progress 2s ease-in-out infinite',
93
+ }}
94
+ />
95
+ </div>
96
+
97
+ {/* 动画样式 */}
98
+ <style>{`
99
+ @keyframes spin {
100
+ 0% { transform: rotate(0deg); }
101
+ 100% { transform: rotate(360deg); }
102
+ }
103
+
104
+ @keyframes loading-progress {
105
+ 0% { transform: translateX(-100%); }
106
+ 50% { transform: translateX(0%); }
107
+ 100% { transform: translateX(100%); }
108
+ }
109
+ `}</style>
110
+ </div>
111
+ );
112
+ };
113
+
114
+ // 自定义Error组件示例
115
+ const CustomErrorComponent: React.FC<{
116
+ error: string;
117
+ theme: AppTheme;
118
+ }> = ({ error, theme }) => {
119
+ return (
120
+ <div
121
+ style={{
122
+ display: 'flex',
123
+ flexDirection: 'column',
124
+ alignItems: 'center',
125
+ justifyContent: 'center',
126
+ height: '100%',
127
+ padding: '40px',
128
+ background: theme.colors.background,
129
+ }}
130
+ >
131
+ {/* 错误图标 */}
132
+ <div
133
+ style={{
134
+ width: '80px',
135
+ height: '80px',
136
+ borderRadius: '50%',
137
+ background: theme.colors.error,
138
+ display: 'flex',
139
+ alignItems: 'center',
140
+ justifyContent: 'center',
141
+ marginBottom: '24px',
142
+ fontSize: '32px',
143
+ color: 'white',
144
+ }}
145
+ >
146
+ ⚠️
147
+ </div>
148
+
149
+ {/* 错误标题 */}
150
+ <div
151
+ style={{
152
+ fontSize: '20px',
153
+ fontWeight: '600',
154
+ color: theme.colors.error,
155
+ marginBottom: '12px',
156
+ textAlign: 'center',
157
+ }}
158
+ >
159
+ 加载失败
160
+ </div>
161
+
162
+ {/* 错误详情 */}
163
+ <div
164
+ style={{
165
+ fontSize: '14px',
166
+ color: theme.colors.text,
167
+ textAlign: 'center',
168
+ maxWidth: '400px',
169
+ lineHeight: '1.5',
170
+ }}
171
+ >
172
+ {error}
173
+ </div>
174
+
175
+ {/* 重试按钮 */}
176
+ <button
177
+ style={{
178
+ marginTop: '24px',
179
+ padding: '12px 24px',
180
+ background: theme.colors.primary,
181
+ color: 'white',
182
+ border: 'none',
183
+ borderRadius: '6px',
184
+ fontSize: '14px',
185
+ fontWeight: '500',
186
+ cursor: 'pointer',
187
+ transition: 'background-color 0.2s',
188
+ }}
189
+ onMouseEnter={e => {
190
+ e.currentTarget.style.background = theme.colors.info;
191
+ }}
192
+ onMouseLeave={e => {
193
+ e.currentTarget.style.background = theme.colors.primary;
194
+ }}
195
+ >
196
+ 重新加载
197
+ </button>
198
+ </div>
199
+ );
200
+ };
201
+
202
+ // 测试标注数据
203
+ export const streamAnnotations: Annotation[] =[
204
+ {
205
+ "id": "f4b6f9516e0",
206
+ "pageNumber": 1,
207
+ "x": 0.4047,
208
+ "y": 0.481,
209
+ "width": 0.1898,
210
+ "height": 0.0172,
211
+ "content": "",
212
+ "color": "#C3F74F"
213
+ },
214
+ {
215
+ "id": "4b6f9516e0d",
216
+ "pageNumber": 1,
217
+ "x": 0.1495,
218
+ "y": 0.5243,
219
+ "width": 0.7003,
220
+ "height": 0.0534,
221
+ "content": "",
222
+ "color": "#C3F74F"
223
+ },
224
+ {
225
+ "id": "b6f9516e0d3",
226
+ "pageNumber": 1,
227
+ "x": 0.1495,
228
+ "y": 0.6057,
229
+ "width": 0.1763,
230
+ "height": 0.016,
231
+ "content": "",
232
+ "color": "#4FC3F7"
233
+ },
234
+ {
235
+ "id": "6f9516e0d32",
236
+ "pageNumber": 3,
237
+ "x": 0.1822,
238
+ "y": 0.1473,
239
+ "width": 0.4509,
240
+ "height": 0.0374,
241
+ "content": "",
242
+ "color": "#C3F74F"
243
+ },
244
+ {
245
+ "id": "f9516e0d32b",
246
+ "pageNumber": 3,
247
+ "x": 0.2275,
248
+ "y": 0.5825,
249
+ "width": 0.3762,
250
+ "height": 0.0214,
251
+ "content": "",
252
+ "color": "#4FC3F7"
253
+ },
254
+ {
255
+ "id": "9516e0d32b4",
256
+ "pageNumber": 4,
257
+ "x": 0.6902,
258
+ "y": 0.1467,
259
+ "width": 0.0311,
260
+ "height": 0.2179,
261
+ "content": "",
262
+ "color": "#4FC3F7"
263
+ },
264
+ {
265
+ "id": "516e0d32b44",
266
+ "pageNumber": 4,
267
+ "x": 0.1478,
268
+ "y": 0.7922,
269
+ "width": 0.7019,
270
+ "height": 0.0689,
271
+ "content": "",
272
+ "color": "#4FC3F7"
273
+ },
274
+ {
275
+ "id": "16e0d32b442",
276
+ "pageNumber": 5,
277
+ "x": 0.1495,
278
+ "y": 0.5137,
279
+ "width": 0.7003,
280
+ "height": 0.0695,
281
+ "content": "",
282
+ "color": "#4FC3F7"
283
+ },
284
+ {
285
+ "id": "6e0d32b442a",
286
+ "pageNumber": 6,
287
+ "x": 0.1495,
288
+ "y": 0.6805,
289
+ "width": 0.6952,
290
+ "height": 0.0315,
291
+ "content": "",
292
+ "color": "#4FC3F7"
293
+ },
294
+ {
295
+ "id": "e0d32b442a4",
296
+ "pageNumber": 6,
297
+ "x": 0.1478,
298
+ "y": 0.7173,
299
+ "width": 0.7019,
300
+ "height": 0.0315,
301
+ "content": "",
302
+ "color": "#4FC3F7"
303
+ },
304
+ {
305
+ "id": "0d32b442a43",
306
+ "pageNumber": 6,
307
+ "x": 0.1495,
308
+ "y": 0.7548,
309
+ "width": 0.7003,
310
+ "height": 0.0315,
311
+ "content": "",
312
+ "color": "#4FC3F7"
313
+ },
314
+ {
315
+ "id": "d32b442a43b",
316
+ "pageNumber": 6,
317
+ "x": 0.1495,
318
+ "y": 0.8165,
319
+ "width": 0.7003,
320
+ "height": 0.0315,
321
+ "content": "",
322
+ "color": "#4FC3F7"
323
+ },
324
+ {
325
+ "id": "32b442a43b6",
326
+ "pageNumber": 6,
327
+ "x": 0.1495,
328
+ "y": 0.8539,
329
+ "width": 0.7003,
330
+ "height": 0.0315,
331
+ "content": "",
332
+ "color": "#4FC3F7"
333
+ },
334
+ {
335
+ "id": "2b442a43b6e",
336
+ "pageNumber": 6,
337
+ "x": 0.2301,
338
+ "y": 0.8913,
339
+ "width": 0.6062,
340
+ "height": 0.0125,
341
+ "content": "",
342
+ "color": "#4FC3F7"
343
+ },
344
+ {
345
+ "id": "b442a43b6e3",
346
+ "pageNumber": 7,
347
+ "x": 0.1478,
348
+ "y": 0.0879,
349
+ "width": 0.2343,
350
+ "height": 0.0119,
351
+ "content": "",
352
+ "color": "#4FC3F7"
353
+ },
354
+ {
355
+ "id": "442a43b6e3f",
356
+ "pageNumber": 7,
357
+ "x": 0.1495,
358
+ "y": 0.1069,
359
+ "width": 0.6994,
360
+ "height": 0.0303,
361
+ "content": "",
362
+ "color": "#4FC3F7"
363
+ }
364
+ ]
365
+
366
+ // 测试Markdown标注数据
367
+ export const streamMDAnnotations: MDAnnotation[] = [
368
+ {
369
+ id: 'md-anno-1',
370
+ start: 0,
371
+ end: 20, // 标注前20个字符
372
+ content: '这是第一个 Markdown 标注',
373
+ color: '#FFEB3B',
374
+ },
375
+ {
376
+ id: 'md-anno-2',
377
+ start: 50,
378
+ end: 70, // 标注第50-70个字符
379
+ content: '这是第二个 Markdown 标注',
380
+ color: '#A8E6CF',
381
+ },
382
+ ];
383
+
384
+ // 测试表格标注数据
385
+ export const streamTableAnnotations: TableAnnotation[] = [
386
+ {
387
+ "id": "2bd1e2b0fed",
388
+ "offsets": [
389
+ [
390
+ 0,
391
+ 0
392
+ ],
393
+ [
394
+ 0,
395
+ 1
396
+ ],
397
+ [
398
+ 0,
399
+ 2
400
+ ],
401
+ [
402
+ 1,
403
+ 0
404
+ ],
405
+ [
406
+ 1,
407
+ 1
408
+ ],
409
+ [
410
+ 1,
411
+ 2
412
+ ],
413
+ [
414
+ 2,
415
+ 0
416
+ ],
417
+ [
418
+ 2,
419
+ 1
420
+ ],
421
+ [
422
+ 2,
423
+ 2
424
+ ],
425
+ [
426
+ 3,
427
+ 0
428
+ ],
429
+ [
430
+ 3,
431
+ 1
432
+ ],
433
+ [
434
+ 3,
435
+ 2
436
+ ],
437
+ [
438
+ 4,
439
+ 0
440
+ ],
441
+ [
442
+ 4,
443
+ 1
444
+ ],
445
+ [
446
+ 4,
447
+ 2
448
+ ]
449
+ ],
450
+ content: '这是表格标注',
451
+ color: '#FFEB3B',
452
+ },
453
+ ];
454
+
455
+ export default function StreamPreview() {
456
+ const [isVisible, setIsVisible] = useState(false);
457
+
458
+ // 可配置的参数
459
+ const [fileType, setFileType] = useState<'pdf'|'pdf_slides' | 'markdown' | 'markdown_table' | 'image' | 'html' | 'text'>('pdf');
460
+
461
+ // 统一的标注状态
462
+ const [annotations, setAnnotations] = useState<(Annotation | MDAnnotation | TableAnnotation)[]>([
463
+ ...streamAnnotations,
464
+ ...streamMDAnnotations,
465
+ ...streamTableAnnotations,
466
+ ]);
467
+
468
+ //http://10.15.12.13:9000/dev-rag-data/测试南自/电压和电池容量的关系.md/V0/电压和电池容量的关系.md
469
+ //http://10.15.12.13:9000/dev-rag-data/测试南自/中国电子规章制度汇编(2024版)-集团公司第二分册.pdf/V0/中国电子规章制度汇编(2024版)-集团公司第二分册.pdf
470
+ //http://10.15.12.13:9000/dev-rag-data/测试南自/服务发布专利具体步骤.md/V0/服务发布专利具体步骤.md
471
+ //http://10.15.12.13:9000/dev-rag-data/测试南自/测试文档.txt/V0/测试文档.txt
472
+ const [convertedFilePath, setConvertedFilePath] = useState(
473
+ 'http://10.15.12.13:9000/dev-rag-data/合肥晶合演示JBB/一般_山地自行车的组装1.pdf/V0/一般_山地自行车的组装1.pdf'
474
+ );
475
+ const [fileName, setFileName] = useState('VR设备专题:Pancake迎来渗透加速,产业链受益硬件升级2023-02-02行业研报.pdf');
476
+ const [totalPages, setTotalPages] = useState(29); // 根据响应头更新为实际总页数
477
+ const [initialPage, setInitialPage] = useState(1);
478
+ const [pageO, setPageO] = useState(1);
479
+ const [initialZoom, setInitialZoom] = useState(1.5);
480
+ const [authorization, setAuthorization] = useState(
481
+ rag_dev_server.token
482
+ );
483
+ const [streamApiUrl, setStreamApiUrl] = useState(
484
+ '/proxy/index/knowledgeBase/file/stream'
485
+ );
486
+ const [pageSize, setPageSize] = useState(5); // 修改为5,与网络请求一致
487
+
488
+ const handleEventsEmit = (name: string, data?: any, innerFn?: any) => {
489
+ console.log('GientechStreamReader 事件:', name, data);
490
+
491
+ switch (name) {
492
+ case 'viewer:close':
493
+ setIsVisible(false);
494
+ break;
495
+ case 'pageChange':
496
+ console.log('页面变化事件:', data);
497
+ console.log('当前页面状态:', data.pageNumber, '总页数:', data.totalPages);
498
+ break;
499
+ case 'zoomChange':
500
+ console.log('缩放变化:', data);
501
+ break;
502
+ case 'markdown_scroll_to_top':
503
+ console.log('Markdown滚动到顶部');
504
+ break;
505
+ case 'markdown_scroll_to_bottom':
506
+ console.log('Markdown滚动到底部');
507
+ break;
508
+ case 'md_annotation_add':
509
+ console.log('添加Markdown标注:', data);
510
+ setAnnotations(prev => [...prev, data]);
511
+ break;
512
+ default:
513
+ console.log('其他事件:', name, data);
514
+ break;
515
+ }
516
+ };
517
+
518
+ if (!isVisible) {
519
+ return (
520
+ <div
521
+ className="preview-container"
522
+ style={{
523
+ display: 'flex',
524
+ flexDirection: 'column',
525
+ alignItems: 'center',
526
+ justifyContent: 'center',
527
+ height: '100vh',
528
+ padding: '20px',
529
+ backgroundColor: '#f5f5f5',
530
+ }}
531
+ >
532
+ <h1 style={{ marginBottom: '30px', color: '#333' }}>
533
+ GientechStreamReader 测试 -{' '}
534
+ {fileType === 'markdown'
535
+ ? 'Markdown'
536
+ : fileType === 'pdf_slides'
537
+ ? 'PDF幻灯片'
538
+ : fileType === 'markdown_table'
539
+ ? 'Markdown表格'
540
+ : fileType === 'html'
541
+ ? 'HTML'
542
+ : fileType === 'image'
543
+ ? '图片'
544
+ : fileType === 'text'
545
+ ? '文本'
546
+ : 'PDF'}{' '}
547
+ 模式
548
+ </h1>
549
+
550
+ <div
551
+ style={{
552
+ display: 'flex',
553
+ flexDirection: 'column',
554
+ gap: '15px',
555
+ width: '100%',
556
+ maxWidth: '600px',
557
+ backgroundColor: 'white',
558
+ padding: '20px',
559
+ borderRadius: '8px',
560
+ boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
561
+ }}
562
+ >
563
+ <div>
564
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
565
+ 文件类型 (fileType):
566
+ </label>
567
+ <select
568
+ value={fileType}
569
+ onChange={e => {
570
+ const newFileType = e.target.value as 'pdf' | 'pdf_slides' | 'markdown' | 'markdown_table' | 'image' | 'html' | 'text';
571
+ setFileType(newFileType);
572
+ }}
573
+ style={{
574
+ width: '100%',
575
+ padding: '8px',
576
+ border: '1px solid #ddd',
577
+ borderRadius: '4px',
578
+ }}
579
+ >
580
+ <option value="pdf_slides">PDF幻灯片</option>
581
+ <option value="pdf">PDF文件</option>
582
+ <option value="markdown">Markdown文件</option>
583
+ <option value="markdown_table">Markdown表格文件</option>
584
+ <option value="image">图片文件</option>
585
+ <option value="html">HTML文件</option>
586
+ <option value="text">文本文件</option>
587
+ </select>
588
+ </div>
589
+
590
+ <div>
591
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
592
+ 文件路径 (convertedFilePath):
593
+ </label>
594
+ <input
595
+ type="text"
596
+ value={convertedFilePath}
597
+ onChange={e => setConvertedFilePath(e.target.value)}
598
+ style={{
599
+ width: '100%',
600
+ padding: '8px',
601
+ border: '1px solid #ddd',
602
+ borderRadius: '4px',
603
+ }}
604
+ placeholder="输入文件路径"
605
+ />
606
+ </div>
607
+
608
+ <div>
609
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
610
+ 文件名 (fileName):
611
+ </label>
612
+ <input
613
+ type="text"
614
+ value={fileName}
615
+ onChange={e => setFileName(e.target.value)}
616
+ style={{
617
+ width: '100%',
618
+ padding: '8px',
619
+ border: '1px solid #ddd',
620
+ borderRadius: '4px',
621
+ }}
622
+ placeholder="输入文件名"
623
+ />
624
+ </div>
625
+
626
+ <div>
627
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
628
+ {fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
629
+ ? '总块数 (totalPages) - 仅用于显示:'
630
+ : '总页数 (totalPages):'}
631
+ </label>
632
+ <input
633
+ type="number"
634
+ value={totalPages}
635
+ onChange={e => setTotalPages(Number(e.target.value))}
636
+ min="1"
637
+ style={{
638
+ width: '100%',
639
+ padding: '8px',
640
+ border: '1px solid #ddd',
641
+ borderRadius: '4px',
642
+ }}
643
+ placeholder={
644
+ fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
645
+ ? '仅用于显示'
646
+ : '输入总页数'
647
+ }
648
+ disabled={fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'}
649
+ />
650
+ </div>
651
+
652
+ <div>
653
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
654
+ {fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
655
+ ? '初始块 (initialPage) - 仅用于显示:'
656
+ : '初始页面 (initialPage):'}
657
+ </label>
658
+ <input
659
+ type="number"
660
+ value={initialPage}
661
+ onChange={e => setInitialPage(Number(e.target.value))}
662
+ min="1"
663
+ style={{
664
+ width: '100%',
665
+ padding: '8px',
666
+ border: '1px solid #ddd',
667
+ borderRadius: '4px',
668
+ }}
669
+ placeholder={
670
+ fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
671
+ ? '仅用于显示'
672
+ : '输入初始页面号'
673
+ }
674
+ disabled={fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'}
675
+ />
676
+ </div>
677
+
678
+ <div>
679
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
680
+ Authorization Token:
681
+ </label>
682
+ <input
683
+ type="text"
684
+ value={authorization}
685
+ onChange={e => setAuthorization(e.target.value)}
686
+ style={{
687
+ width: '100%',
688
+ padding: '8px',
689
+ border: '1px solid #ddd',
690
+ borderRadius: '4px',
691
+ }}
692
+ placeholder="输入Authorization token"
693
+ />
694
+ </div>
695
+
696
+ <div>
697
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
698
+ Stream API URL:
699
+ </label>
700
+ <input
701
+ type="text"
702
+ value={streamApiUrl}
703
+ onChange={e => setStreamApiUrl(e.target.value)}
704
+ style={{
705
+ width: '100%',
706
+ padding: '8px',
707
+ border: '1px solid #ddd',
708
+ borderRadius: '4px',
709
+ }}
710
+ placeholder="输入Stream API URL"
711
+ />
712
+ </div>
713
+
714
+ <div>
715
+ <label style={{ display: 'block', marginBottom: '5px', fontWeight: 'bold' }}>
716
+ {fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
717
+ ? '页面大小 (pageSize) - 仅PDF使用:'
718
+ : '页面大小 (pageSize):'}
719
+ </label>
720
+ <input
721
+ type="number"
722
+ value={pageSize}
723
+ onChange={e => setPageSize(Number(e.target.value))}
724
+ min="1"
725
+ style={{
726
+ width: '100%',
727
+ padding: '8px',
728
+ border: '1px solid #ddd',
729
+ borderRadius: '4px',
730
+ }}
731
+ placeholder={
732
+ fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
733
+ ? '仅PDF使用'
734
+ : '输入页面大小'
735
+ }
736
+ disabled={fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'}
737
+ />
738
+ </div>
739
+
740
+ <div style={{ marginBottom: '16px' }}>
741
+ <label style={{ display: 'block', marginBottom: '8px', fontWeight: 'bold' }}>
742
+ 初始缩放比例 (initialZoom):
743
+ </label>
744
+ <input
745
+ type="number"
746
+ value={initialZoom}
747
+ onChange={e => setInitialZoom(Number(e.target.value))}
748
+ min="0.1"
749
+ max="5"
750
+ step="0.1"
751
+ style={{
752
+ width: '100%',
753
+ padding: '8px',
754
+ border: '1px solid #ddd',
755
+ borderRadius: '4px',
756
+ }}
757
+ placeholder="输入初始缩放比例 (0.1-5.0)"
758
+ />
759
+ </div>
760
+
761
+ <button
762
+ onClick={() => setIsVisible(true)}
763
+ style={{
764
+ padding: '12px 24px',
765
+ backgroundColor: '#007bff',
766
+ color: 'white',
767
+ border: 'none',
768
+ borderRadius: '4px',
769
+ cursor: 'pointer',
770
+ fontSize: '16px',
771
+ fontWeight: 'bold',
772
+ }}
773
+ >
774
+ 开始测试{' '}
775
+ {fileType === 'markdown'
776
+ ? 'Markdown完整文件'
777
+ : fileType === 'markdown_table'
778
+ ? 'Markdown表格文件'
779
+ : fileType === 'html'
780
+ ? 'HTML文件'
781
+ : fileType === 'image'
782
+ ? '图片'
783
+ : 'PDF'}{' '}
784
+ Stream Reader
785
+ </button>
786
+ </div>
787
+
788
+ <div style={{ marginTop: '20px', textAlign: 'center', color: '#666' }}>
789
+ <p>
790
+ Stream模式:通过接口获取
791
+ {fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'html'
792
+ ? '完整的文件内容'
793
+ : '分页的PDF数据'}
794
+ </p>
795
+ <p>
796
+ {fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'html'
797
+ ? '支持完整文件渲染、缩放等功能'
798
+ : '支持页面导航、缩放等功能'}
799
+ </p>
800
+
801
+ {(fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'html') && (
802
+ <div
803
+ style={{
804
+ marginTop: '10px',
805
+ padding: '10px',
806
+ backgroundColor: '#e3f2fd',
807
+ borderRadius: '4px',
808
+ }}
809
+ >
810
+ <p style={{ margin: '0', fontSize: '14px' }}>
811
+ <strong>
812
+ {fileType === 'markdown_table'
813
+ ? 'Markdown表格'
814
+ : fileType === 'html'
815
+ ? 'HTML'
816
+ : 'Markdown'}推荐配置:
817
+ </strong>
818
+ <br />
819
+ 文件路径:
820
+ {fileType === 'html'
821
+ ? 'http://10.15.12.13:9000/dev-rag-data/demo/示例.html/V0/示例.html'
822
+ : 'http://10.15.12.13:9000/dev-rag-data/测试南自/服务发布专利具体步骤.md/V0/服务发布专利具体步骤.md'}
823
+ <br />
824
+ 总块数: 10 (仅用于显示,实际获取完整文件)
825
+ <br />
826
+ 注意: {fileType === 'markdown_table'
827
+ ? 'Markdown表格'
828
+ : fileType === 'html'
829
+ ? 'HTML'
830
+ : 'Markdown'}文件会获取完整内容,不支持分块加载
831
+ </p>
832
+ </div>
833
+ )}
834
+
835
+ {fileType === 'image' && (
836
+ <div
837
+ style={{
838
+ marginTop: '10px',
839
+ padding: '10px',
840
+ backgroundColor: '#fff3cd',
841
+ borderRadius: '4px',
842
+ }}
843
+ >
844
+ <p style={{ margin: '0', fontSize: '14px' }}>
845
+ <strong>图片推荐配置:</strong>
846
+ <br />
847
+ 文件路径: 例如 http://10.15.12.13:9000/dev-rag-data/demo/示例图片.png/V0/示例图片.png
848
+ <br />
849
+ 图片将以相同的接口请求方式获取(POST convertedFilePath),支持缩放与旋转
850
+ </p>
851
+ </div>
852
+ )}
853
+
854
+ {fileType === 'pdf' && (
855
+ <div
856
+ style={{
857
+ marginTop: '10px',
858
+ padding: '10px',
859
+ backgroundColor: '#f3e5f5',
860
+ borderRadius: '4px',
861
+ }}
862
+ >
863
+ <p style={{ margin: '0', fontSize: '14px' }}>
864
+ <strong>PDF推荐配置:</strong>
865
+ <br />
866
+ 文件路径:
867
+ http://10.15.12.13:9000/dev-rag-data/测试南自/中国电子规章制度汇编(2024版)-集团公司第二分册.pdf/V0/中国电子规章制度汇编(2024版)-集团公司第二分册.pdf
868
+ <br />
869
+ 总页数: 676, 页面大小: 5
870
+ </p>
871
+ </div>
872
+ )}
873
+
874
+ {fileType === 'text' && (
875
+ <div
876
+ style={{
877
+ marginTop: '10px',
878
+ padding: '10px',
879
+ backgroundColor: '#e8f5e8',
880
+ borderRadius: '4px',
881
+ }}
882
+ >
883
+ <p style={{ margin: '0', fontSize: '14px' }}>
884
+ <strong>文本文件推荐配置:</strong>
885
+ <br />
886
+ 文件路径: 例如 http://10.15.12.13:9000/dev-rag-data/测试南自/测试文档.txt/V0/测试文档.txt
887
+ <br />
888
+ 文本文件会获取完整内容,支持缩放,不支持分页
889
+ </p>
890
+ </div>
891
+ )}
892
+ </div>
893
+ </div>
894
+ );
895
+ }
896
+
897
+ return (
898
+ <div style={{ height: '80vh', width: '85vw' }}>
899
+ <GientechStreamReader
900
+ convertedFilePath={convertedFilePath}
901
+ fileName={fileName}
902
+ fileType={fileType}
903
+ initialPage={initialPage}
904
+ initialZoom={initialZoom} // 传递初始缩放比例
905
+ totalPages={totalPages} // 传递总页数/总块数
906
+ annotations={
907
+ fileType === 'markdown_table'
908
+ ? streamTableAnnotations
909
+ : fileType === 'markdown'
910
+ ? streamMDAnnotations
911
+ : fileType === 'html'
912
+ ? [] // HTML不需要标注
913
+ : streamAnnotations
914
+ }
915
+
916
+ authorization={authorization}
917
+ csrfToken={'csrfToken'}
918
+ streamApiUrl={streamApiUrl}
919
+ pageSize={fileType === 'pdf' ? pageSize : undefined} // 只有PDF模式才传递pageSize
920
+ eventsEmit={handleEventsEmit}
921
+ tools={{
922
+ close: true
923
+ }}
924
+ customComponents={{
925
+ LoadingComponent: CustomLoadingComponent,
926
+ ErrorComponent: CustomErrorComponent,
927
+ }}
928
+ />
929
+ <input
930
+ type="number"
931
+ value={pageO}
932
+ onChange={e => setPageO(Number(e.target.value))}
933
+ min="1"
934
+ style={{
935
+ width: '100%',
936
+ padding: '8px',
937
+ border: '1px solid #ddd',
938
+ borderRadius: '4px',
939
+ }}
940
+ placeholder={
941
+ fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'
942
+ ? '仅用于显示'
943
+ : '输入初始页面号'
944
+ }
945
+ disabled={fileType === 'markdown' || fileType === 'markdown_table' || fileType === 'image' || fileType === 'html' || fileType === 'text'}
946
+ />
947
+ <button onClick={()=>{setInitialPage(pageO)}}>跳转</button>
948
+ </div>
949
+ );
950
+ }