@myun/gimi-chat 0.0.3 → 0.0.5
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.
- package/dist/apis/fetch.d.ts +64 -0
- package/dist/apis/fetch.js +512 -0
- package/dist/apis/useApi.d.ts +57 -0
- package/dist/apis/useApi.js +378 -0
- package/dist/assets/image/Subtract.png +0 -0
- package/dist/assets/image/ai-logo.png +0 -0
- package/dist/assets/image/copyIcon.png +0 -0
- package/dist/assets/image/deepthinkActive.png +0 -0
- package/dist/assets/image/empty-img-dark.png +0 -0
- package/dist/assets/image/empty-img.png +0 -0
- package/dist/assets/image/like_active.png +0 -0
- package/dist/assets/image/love.png +0 -0
- package/dist/assets/image/retry.png +0 -0
- package/dist/assets/image/soundOut.png +0 -0
- package/dist/assets/image/unlike_active.png +0 -0
- package/dist/assets/image/unlove.png +0 -0
- package/dist/assets/lottie/ai-bg.json +1704 -0
- package/dist/assets/lottie/ai-loading.json +192 -0
- package/dist/assets/lottie/ai-output-loading.json +272 -0
- package/dist/assets/lottie/ai-output-normal.json +17694 -0
- package/dist/assets/lottie/ai-output-strengthen.json +17321 -0
- package/dist/assets/lottie/ai-voice-play.json +1 -0
- package/dist/assets/lottie/living.json +705 -0
- package/dist/assets/lottie/myun-living.json +726 -0
- package/dist/assets/lottie/myun-loading.json +530 -0
- package/dist/components/ai-chat-dialogue/index.d.ts +16 -0
- package/dist/components/ai-chat-dialogue/index.js +1056 -0
- package/dist/components/ai-chat-dialogue/index.module.css +230 -0
- package/dist/components/ai-chat-dialogue/message-parser.d.ts +36 -0
- package/dist/components/ai-chat-dialogue/message-parser.js +52 -0
- package/dist/components/ai-chat-dialogue/tlv.d.ts +7 -0
- package/dist/components/ai-chat-dialogue/tlv.js +32 -0
- package/dist/components/ai-chat-dialogue/volc-voice-call-client.d.ts +47 -0
- package/dist/components/ai-chat-dialogue/volc-voice-call-client.js +246 -0
- package/dist/components/ai-correction/index.d.ts +5 -0
- package/dist/components/ai-correction/index.js +45 -0
- package/dist/components/ai-loading/index.d.ts +3 -0
- package/dist/components/ai-loading/index.js +14 -0
- package/dist/components/ai-loading/index.module.css +11 -0
- package/dist/components/answer-item/index.d.ts +27 -0
- package/dist/components/answer-item/index.js +194 -0
- package/dist/components/answer-item/index.module.css +266 -0
- package/dist/components/ask-card/index.d.ts +10 -0
- package/dist/components/ask-card/index.js +76 -0
- package/dist/components/ask-card/index.module.css +122 -0
- package/dist/components/chat-input/index.d.ts +31 -0
- package/dist/components/chat-input/index.js +433 -0
- package/dist/components/chat-input/index.module.css +42 -0
- package/dist/components/chat-voice/VoiceCommunication.d.ts +7 -0
- package/dist/components/chat-voice/VoiceCommunication.js +69 -0
- package/dist/components/chat-voice/VoiceRecord.d.ts +7 -0
- package/dist/components/chat-voice/VoiceRecord.js +34 -0
- package/dist/components/conversation-delete/index.d.ts +5 -0
- package/dist/components/conversation-delete/index.js +24 -0
- package/dist/components/dots-loading/index.d.ts +2 -0
- package/dist/components/dots-loading/index.js +11 -0
- package/dist/components/dots-loading/index.module.css +41 -0
- package/dist/components/empty/index.d.ts +9 -0
- package/dist/components/empty/index.js +32 -0
- package/dist/components/empty/index.module.css +24 -0
- package/dist/components/excel-components/ExcelCard.d.ts +11 -0
- package/dist/components/excel-components/ExcelCard.js +35 -0
- package/dist/components/excel-components/ExcelExcuting.d.ts +10 -0
- package/dist/components/excel-components/ExcelExcuting.js +263 -0
- package/dist/components/excel-components/ExcelFailCard.d.ts +9 -0
- package/dist/components/excel-components/ExcelFailCard.js +20 -0
- package/dist/components/excel-components/ExcelSuccessCard.d.ts +5 -0
- package/dist/components/excel-components/ExcelSuccessCard.js +50 -0
- package/dist/components/excel-components/index.module.css +212 -0
- package/dist/components/excel-components/styles.module.css +178 -0
- package/dist/components/file-card/fileCardSidebar.d.ts +8 -0
- package/dist/components/file-card/fileCardSidebar.js +56 -0
- package/dist/components/file-card/index.d.ts +15 -0
- package/dist/components/file-card/index.js +97 -0
- package/dist/components/file-card/index.module.css +139 -0
- package/dist/components/file-preview/index.d.ts +3 -0
- package/dist/components/file-preview/index.js +227 -0
- package/dist/components/file-preview/index.module.css +83 -0
- package/dist/components/file-upload/index.d.ts +16 -0
- package/dist/components/file-upload/index.js +238 -0
- package/dist/components/file-upload/uploadV1.d.ts +16 -0
- package/dist/components/file-upload/uploadV1.js +267 -0
- package/dist/components/gimi-sidebar/index.d.ts +17 -0
- package/dist/components/gimi-sidebar/index.js +41 -0
- package/dist/components/gimi-sidebar/index.module.css +118 -0
- package/dist/components/header/index.d.ts +5 -0
- package/dist/components/header/index.js +20 -0
- package/dist/components/header/index.module.css +19 -0
- package/dist/components/iconfont-com/index.d.ts +11 -0
- package/dist/components/iconfont-com/index.js +29 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/knowledge-trace/KnowledgeIconComponent.d.ts +7 -0
- package/dist/components/knowledge-trace/KnowledgeIconComponent.js +101 -0
- package/dist/components/knowledge-trace/classList.d.ts +6 -0
- package/dist/components/knowledge-trace/classList.js +72 -0
- package/dist/components/knowledge-trace/documentList.d.ts +6 -0
- package/dist/components/knowledge-trace/documentList.js +75 -0
- package/dist/components/knowledge-trace/index.d.ts +18 -0
- package/dist/components/knowledge-trace/index.js +155 -0
- package/dist/components/knowledge-trace/index.module.css +254 -0
- package/dist/components/knowledge-trace/interfaces.d.ts +166 -0
- package/dist/components/knowledge-trace/interfaces.js +1 -0
- package/dist/components/knowledge-trace/videoList.d.ts +6 -0
- package/dist/components/knowledge-trace/videoList.js +91 -0
- package/dist/components/lottie-img/index.d.ts +8 -0
- package/dist/components/lottie-img/index.js +99 -0
- package/dist/components/message-actions/CopyButton.d.ts +7 -0
- package/dist/components/message-actions/CopyButton.js +33 -0
- package/dist/components/message-actions/LikeButton.d.ts +7 -0
- package/dist/components/message-actions/LikeButton.js +34 -0
- package/dist/components/message-actions/RegenerateButton.d.ts +5 -0
- package/dist/components/message-actions/RegenerateButton.js +27 -0
- package/dist/components/message-actions/UnLikeButton.d.ts +7 -0
- package/dist/components/message-actions/UnLikeButton.js +34 -0
- package/dist/components/message-actions/VoicePlay.d.ts +10 -0
- package/dist/components/message-actions/VoicePlay.js +74 -0
- package/dist/components/message-list/index.d.ts +19 -0
- package/dist/components/message-list/index.js +164 -0
- package/dist/components/message-list/index.module.css +261 -0
- package/dist/components/no-microphone-root/index.d.ts +6 -0
- package/dist/components/no-microphone-root/index.js +36 -0
- package/dist/components/no-microphone-root/index.module.css +48 -0
- package/dist/components/preset-agent-content/index.d.ts +8 -0
- package/dist/components/preset-agent-content/index.js +24 -0
- package/dist/components/preset-agent-content/index.module.css +46 -0
- package/dist/components/quoted-content/index.d.ts +0 -0
- package/dist/components/quoted-content/index.js +171 -0
- package/dist/components/quoted-content/index.module.css +80 -0
- package/dist/components/reasoning-content/index.d.ts +6 -0
- package/dist/components/reasoning-content/index.js +116 -0
- package/dist/components/reasoning-content/index.module.css +169 -0
- package/dist/components/reference-content/index.d.ts +28 -0
- package/dist/components/reference-content/index.js +125 -0
- package/dist/components/reference-content/index.module.css +84 -0
- package/dist/components/templates/CommonChat.d.ts +5 -0
- package/dist/components/templates/CommonChat.js +218 -0
- package/dist/components/templates/GimiChatComponent.d.ts +4 -0
- package/dist/components/templates/GimiChatComponent.js +23 -0
- package/dist/components/templates/demo/demo.d.ts +2 -0
- package/dist/components/templates/demo/demo.js +109 -0
- package/dist/components/templates/index.module.css +109 -0
- package/dist/components/upload-list/index.d.ts +15 -0
- package/dist/components/upload-list/index.js +90 -0
- package/dist/components/upload-list/index.module.css +119 -0
- package/dist/components/voice-bars/index.d.ts +4 -0
- package/dist/components/voice-bars/index.js +174 -0
- package/dist/components/voice-check-dialog/index.d.ts +8 -0
- package/dist/components/voice-check-dialog/index.js +163 -0
- package/dist/components/voice-check-dialog/index.module.css +9 -0
- package/dist/components/voice-recording/index.d.ts +9 -0
- package/dist/components/voice-recording/index.js +54 -0
- package/dist/components/voice-recording/index.module.css +41 -0
- package/dist/components/work-flow-content/demo.d.ts +3 -0
- package/dist/components/work-flow-content/demo.js +11 -0
- package/dist/components/work-flow-content/index.d.ts +6 -0
- package/dist/components/work-flow-content/index.js +55 -0
- package/dist/components/work-flow-content/index.module.css +24 -0
- package/dist/constants.d.ts +24 -0
- package/dist/constants.js +24 -0
- package/dist/hooks/useChatActions.d.ts +12 -0
- package/dist/hooks/useChatActions.js +207 -0
- package/dist/hooks/useChatHistory.d.ts +8 -0
- package/dist/hooks/useChatHistory.js +225 -0
- package/dist/hooks/useChatMessage.d.ts +49 -0
- package/dist/hooks/useChatMessage.js +87 -0
- package/dist/hooks/useChatRecommend.d.ts +8 -0
- package/dist/hooks/useChatRecommend.js +126 -0
- package/dist/hooks/useChatStream.d.ts +20 -0
- package/dist/hooks/useChatStream.js +244 -0
- package/dist/hooks/useChatUI.d.ts +32 -0
- package/dist/hooks/useChatUI.js +134 -0
- package/dist/hooks/useChatVoice.d.ts +11 -0
- package/dist/hooks/useChatVoice.js +379 -0
- package/dist/hooks/useCommonChatAPI.d.ts +27 -0
- package/dist/hooks/useCommonChatAPI.js +1276 -0
- package/dist/hooks/useFile.d.ts +13 -0
- package/dist/hooks/useFile.js +288 -0
- package/dist/hooks/useKnowledgeService.d.ts +17 -0
- package/dist/hooks/useKnowledgeService.js +210 -0
- package/dist/hooks/useLastEventId.d.ts +8 -0
- package/dist/hooks/useLastEventId.js +66 -0
- package/dist/hooks/useLongPoll.d.ts +3 -0
- package/dist/hooks/useLongPoll.js +111 -0
- package/dist/hooks/useScroll.d.ts +4 -0
- package/dist/hooks/useScroll.js +172 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/interfaces/chatMessage.d.ts +139 -0
- package/dist/interfaces/fileInterface.d.ts +10 -0
- package/dist/interfaces/fileInterface.js +11 -0
- package/dist/interfaces/knowledgeTrace.d.ts +177 -0
- package/dist/store/hooks.d.ts +4 -0
- package/dist/store/hooks.js +3 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.js +7 -0
- package/dist/store/slices/gimiMenuSlice.d.ts +95 -0
- package/dist/store/slices/gimiMenuSlice.js +251 -0
- package/dist/utils/chatInputUtil.d.ts +19 -0
- package/dist/utils/chatInputUtil.js +45 -0
- package/dist/utils/tools.d.ts +50 -0
- package/dist/utils/tools.js +474 -0
- package/dist/utils/voice-stream.d.ts +119 -0
- package/dist/utils/voice-stream.js +1162 -0
- package/package.json +5 -6
- package/LICENSE +0 -21
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
@charset "UTF-8";
|
|
2
|
+
.main {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
gap: 10px;
|
|
6
|
+
padding: 10px 0px;
|
|
7
|
+
}
|
|
8
|
+
.main .all {
|
|
9
|
+
width: 78px;
|
|
10
|
+
border-radius: 12px;
|
|
11
|
+
border: 1px solid rgb(233, 235, 242);
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
font-family: PingFang SC;
|
|
16
|
+
font-weight: 400;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
line-height: 14px;
|
|
19
|
+
letter-spacing: 0px;
|
|
20
|
+
color: rgb(46, 57, 76);
|
|
21
|
+
box-shadow: 0px 2px 16px 0px rgba(84, 105, 140, 0.1);
|
|
22
|
+
}
|
|
23
|
+
.main .all:hover {
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.card {
|
|
28
|
+
box-shadow: 0px 2px 16px 0px rgba(84, 105, 140, 0.1);
|
|
29
|
+
background: rgb(255, 255, 255) !important;
|
|
30
|
+
}
|
|
31
|
+
.card:hover {
|
|
32
|
+
background: rgb(241, 247, 255) !important;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.file_main {
|
|
36
|
+
max-width: 328px;
|
|
37
|
+
flex-shrink: 0;
|
|
38
|
+
border-radius: 12px;
|
|
39
|
+
border: 1px solid rgb(233, 235, 242);
|
|
40
|
+
background: linear-gradient(90deg, #EAF2FF 0%, #FFFFFF 100%);
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: 10px;
|
|
44
|
+
padding: 16px;
|
|
45
|
+
}
|
|
46
|
+
.file_main:hover {
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
}
|
|
49
|
+
.file_main .icon {
|
|
50
|
+
display: flex;
|
|
51
|
+
width: 40px;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
align-items: center;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
}
|
|
56
|
+
.file_main .icon img {
|
|
57
|
+
width: 40px;
|
|
58
|
+
height: 36px;
|
|
59
|
+
object-fit: cover;
|
|
60
|
+
padding: 2px;
|
|
61
|
+
}
|
|
62
|
+
.file_main .left {
|
|
63
|
+
flex: 1;
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
justify-content: space-between;
|
|
67
|
+
}
|
|
68
|
+
.file_main .left .iconName {
|
|
69
|
+
display: flex;
|
|
70
|
+
margin-bottom: 4px;
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
}
|
|
74
|
+
.file_main .left .iconName .nameSize {
|
|
75
|
+
flex: 1 1 auto;
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
justify-content: center;
|
|
79
|
+
}
|
|
80
|
+
.file_main .left .iconName .nameSize .type {
|
|
81
|
+
width: fit-content;
|
|
82
|
+
text-align: center;
|
|
83
|
+
color: var(---, #717f94);
|
|
84
|
+
font-family: "PingFang SC";
|
|
85
|
+
font-size: 14px;
|
|
86
|
+
font-style: normal;
|
|
87
|
+
font-weight: 400;
|
|
88
|
+
line-height: normal;
|
|
89
|
+
border-radius: 4px;
|
|
90
|
+
height: 17px;
|
|
91
|
+
margin-right: 12px;
|
|
92
|
+
}
|
|
93
|
+
.file_main .left .iconName .nameSize .name {
|
|
94
|
+
flex: 1;
|
|
95
|
+
color: var(---, #2e394c);
|
|
96
|
+
font-family: "PingFang SC";
|
|
97
|
+
font-size: 16px;
|
|
98
|
+
width: fit-content;
|
|
99
|
+
max-width: 190px;
|
|
100
|
+
font-style: normal;
|
|
101
|
+
font-weight: 400;
|
|
102
|
+
line-height: normal;
|
|
103
|
+
overflow: hidden; /* 隐藏溢出内容 */
|
|
104
|
+
white-space: nowrap; /* 强制文本不换行 */
|
|
105
|
+
text-overflow: ellipsis; /* 超出部分显示省略号 */
|
|
106
|
+
margin-bottom: 6px;
|
|
107
|
+
}
|
|
108
|
+
.file_main .right {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
width: fit-content;
|
|
112
|
+
justify-content: space-between;
|
|
113
|
+
flex-shrink: 0;
|
|
114
|
+
}
|
|
115
|
+
.file_main .right .text {
|
|
116
|
+
color: rgb(64, 134, 255);
|
|
117
|
+
text-align: right;
|
|
118
|
+
font-family: "PingFang SC";
|
|
119
|
+
font-size: 16px;
|
|
120
|
+
font-style: normal;
|
|
121
|
+
font-weight: 600;
|
|
122
|
+
line-height: normal;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.list {
|
|
126
|
+
display: flex;
|
|
127
|
+
flex-direction: column;
|
|
128
|
+
gap: 10px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.text {
|
|
132
|
+
font-family: PingFang SC;
|
|
133
|
+
font-weight: 400;
|
|
134
|
+
font-style: Regular;
|
|
135
|
+
font-size: 15px;
|
|
136
|
+
line-height: 180%;
|
|
137
|
+
letter-spacing: 0px;
|
|
138
|
+
color: rgb(46, 57, 76);
|
|
139
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useAppSelector, useAppDispatch } from "../../store/hooks";
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import styles from "./index.module.css";
|
|
10
|
+
import { Button } from '@douyinfe/semi-ui';
|
|
11
|
+
import { IconClose } from '@douyinfe/semi-icons';
|
|
12
|
+
import { useState, useRef, useEffect, useMemo } from 'react';
|
|
13
|
+
import EmptyShow from "../../components/empty";
|
|
14
|
+
var OfficeFilePreviewPanel = function OfficeFilePreviewPanel() {
|
|
15
|
+
var _useAppSelector = useAppSelector(function (state) {
|
|
16
|
+
return state.gimiMenu.filePreviewState;
|
|
17
|
+
}),
|
|
18
|
+
show = _useAppSelector.show,
|
|
19
|
+
url = _useAppSelector.url,
|
|
20
|
+
filename = _useAppSelector.filename;
|
|
21
|
+
var dispatch = useAppDispatch();
|
|
22
|
+
var _useState = useState(600),
|
|
23
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
24
|
+
width = _useState2[0],
|
|
25
|
+
setWidth = _useState2[1]; // 默认宽度
|
|
26
|
+
var _useState3 = useState(false),
|
|
27
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
28
|
+
isDragging = _useState4[0],
|
|
29
|
+
setIsDragging = _useState4[1];
|
|
30
|
+
var _useState5 = useState(false),
|
|
31
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
32
|
+
iframeError = _useState6[0],
|
|
33
|
+
setIframeError = _useState6[1]; // iframe 加载失败状态
|
|
34
|
+
var _useState7 = useState(false),
|
|
35
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
36
|
+
iframeLoaded = _useState8[0],
|
|
37
|
+
setIframeLoaded = _useState8[1]; // iframe 是否已加载
|
|
38
|
+
var panelRef = useRef(null);
|
|
39
|
+
var resizerRef = useRef(null);
|
|
40
|
+
var startXRef = useRef(0);
|
|
41
|
+
var startWidthRef = useRef(0);
|
|
42
|
+
var widthRef = useRef(600); // 用于在事件处理函数中访问最新的 width 值
|
|
43
|
+
var isDraggingRef = useRef(false);
|
|
44
|
+
var loadTimeoutRef = useRef(null); // 加载超时定时器
|
|
45
|
+
var iframeLoadedRef = useRef(false); // 用于在超时回调中访问最新的加载状态
|
|
46
|
+
|
|
47
|
+
// 同步 widthRef 和 width 状态
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
widthRef.current = width;
|
|
50
|
+
}, [width]);
|
|
51
|
+
|
|
52
|
+
// 同步 isDragging 的 ref
|
|
53
|
+
useEffect(function () {
|
|
54
|
+
isDraggingRef.current = isDragging;
|
|
55
|
+
}, [isDragging]);
|
|
56
|
+
|
|
57
|
+
// 同步 iframeLoadedRef 和 iframeLoaded 状态
|
|
58
|
+
useEffect(function () {
|
|
59
|
+
iframeLoadedRef.current = iframeLoaded;
|
|
60
|
+
}, [iframeLoaded]);
|
|
61
|
+
|
|
62
|
+
// 当 url 变化时,重置 iframe 错误状态和加载状态
|
|
63
|
+
useEffect(function () {
|
|
64
|
+
setIframeError(false);
|
|
65
|
+
setIframeLoaded(false);
|
|
66
|
+
iframeLoadedRef.current = false;
|
|
67
|
+
// 清除之前的超时定时器
|
|
68
|
+
if (loadTimeoutRef.current) {
|
|
69
|
+
clearTimeout(loadTimeoutRef.current);
|
|
70
|
+
loadTimeoutRef.current = null;
|
|
71
|
+
}
|
|
72
|
+
}, [url]);
|
|
73
|
+
|
|
74
|
+
// 缓存 iframe src,只有当 url 变化时才重新计算
|
|
75
|
+
var iframeSrc = useMemo(function () {
|
|
76
|
+
if (!url) return '';
|
|
77
|
+
return "https://view.officeapps.live.com/op/embed.aspx?src=".concat(encodeURIComponent(url));
|
|
78
|
+
}, [url]);
|
|
79
|
+
|
|
80
|
+
// iframe 加载错误处理
|
|
81
|
+
var handleIframeError = function handleIframeError() {
|
|
82
|
+
if (loadTimeoutRef.current) {
|
|
83
|
+
clearTimeout(loadTimeoutRef.current);
|
|
84
|
+
loadTimeoutRef.current = null;
|
|
85
|
+
}
|
|
86
|
+
setIframeError(true);
|
|
87
|
+
setIframeLoaded(false);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// iframe 加载成功处理
|
|
91
|
+
var handleIframeLoad = function handleIframeLoad() {
|
|
92
|
+
if (loadTimeoutRef.current) {
|
|
93
|
+
clearTimeout(loadTimeoutRef.current);
|
|
94
|
+
loadTimeoutRef.current = null;
|
|
95
|
+
}
|
|
96
|
+
setIframeError(false);
|
|
97
|
+
setIframeLoaded(true);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// 当 url 存在时,设置加载超时检测
|
|
101
|
+
useEffect(function () {
|
|
102
|
+
if (url && !iframeLoadedRef.current && !iframeError) {
|
|
103
|
+
// 设置 10 秒超时,如果 iframe 仍未加载成功,则视为加载失败
|
|
104
|
+
loadTimeoutRef.current = setTimeout(function () {
|
|
105
|
+
if (!iframeLoadedRef.current) {
|
|
106
|
+
setIframeError(true);
|
|
107
|
+
}
|
|
108
|
+
}, 10000);
|
|
109
|
+
}
|
|
110
|
+
return function () {
|
|
111
|
+
if (loadTimeoutRef.current) {
|
|
112
|
+
clearTimeout(loadTimeoutRef.current);
|
|
113
|
+
loadTimeoutRef.current = null;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}, [url, iframeError]);
|
|
117
|
+
var handleClose = function handleClose() {
|
|
118
|
+
dispatch({
|
|
119
|
+
type: 'gimiMenu/setFilePreviewState',
|
|
120
|
+
payload: {
|
|
121
|
+
filePreviewState: {
|
|
122
|
+
show: false,
|
|
123
|
+
url: url,
|
|
124
|
+
filename: filename
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// 开始拖拽
|
|
131
|
+
var handleMouseDown = function handleMouseDown(e) {
|
|
132
|
+
e.preventDefault();
|
|
133
|
+
e.stopPropagation();
|
|
134
|
+
// 记录按下时的鼠标位置和当前宽度
|
|
135
|
+
startXRef.current = e.clientX;
|
|
136
|
+
startWidthRef.current = widthRef.current;
|
|
137
|
+
// 立即进入拖拽状态
|
|
138
|
+
setIsDragging(true);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// 拖拽中
|
|
142
|
+
useEffect(function () {
|
|
143
|
+
var handleMouseMove = function handleMouseMove(e) {
|
|
144
|
+
if (!isDraggingRef.current) return;
|
|
145
|
+
|
|
146
|
+
// 计算鼠标移动的距离
|
|
147
|
+
// 按钮在左侧,向左拖动(鼠标X坐标减小):deltaX 为正值,宽度增加
|
|
148
|
+
// 向右拖动(鼠标X坐标增大):deltaX 为负值,宽度减小
|
|
149
|
+
var deltaX = startXRef.current - e.clientX;
|
|
150
|
+
var newWidth = startWidthRef.current + deltaX;
|
|
151
|
+
|
|
152
|
+
// 限制最小和最大宽度
|
|
153
|
+
var minWidth = 400;
|
|
154
|
+
var maxWidth = Math.floor(window.innerWidth * 0.8);
|
|
155
|
+
|
|
156
|
+
// 限制宽度范围
|
|
157
|
+
newWidth = Math.max(minWidth, Math.min(maxWidth, newWidth));
|
|
158
|
+
|
|
159
|
+
// 更新宽度
|
|
160
|
+
if (Math.abs(newWidth - widthRef.current) > 0.5) {
|
|
161
|
+
widthRef.current = newWidth;
|
|
162
|
+
setWidth(newWidth);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
var handleDocumentMouseUp = function handleDocumentMouseUp() {
|
|
166
|
+
setIsDragging(false);
|
|
167
|
+
};
|
|
168
|
+
if (isDragging) {
|
|
169
|
+
// 添加拖动状态的样式类,禁用过渡动画和内容区域的 pointer-events
|
|
170
|
+
if (panelRef.current) {
|
|
171
|
+
panelRef.current.classList.add(styles.dragging);
|
|
172
|
+
}
|
|
173
|
+
document.addEventListener('mousemove', handleMouseMove);
|
|
174
|
+
document.addEventListener('mouseup', handleDocumentMouseUp);
|
|
175
|
+
document.body.style.cursor = 'ew-resize';
|
|
176
|
+
document.body.style.userSelect = 'none';
|
|
177
|
+
} else {
|
|
178
|
+
// 移除拖动状态的样式类,恢复过渡动画和内容区域的 pointer-events
|
|
179
|
+
if (panelRef.current) {
|
|
180
|
+
panelRef.current.classList.remove(styles.dragging);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return function () {
|
|
184
|
+
document.removeEventListener('mousemove', handleMouseMove);
|
|
185
|
+
document.removeEventListener('mouseup', handleDocumentMouseUp);
|
|
186
|
+
if (isDragging) {
|
|
187
|
+
document.body.style.cursor = '';
|
|
188
|
+
document.body.style.userSelect = '';
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}, [isDragging]);
|
|
192
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
193
|
+
ref: panelRef,
|
|
194
|
+
className: show ? styles.main : styles.mainHidden,
|
|
195
|
+
style: {
|
|
196
|
+
width: "".concat(width, "px")
|
|
197
|
+
}
|
|
198
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
199
|
+
className: styles.content
|
|
200
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
201
|
+
className: styles.header
|
|
202
|
+
}, /*#__PURE__*/React.createElement("span", null, filename || '文档预览'), /*#__PURE__*/React.createElement(Button, {
|
|
203
|
+
size: "small",
|
|
204
|
+
theme: "borderless",
|
|
205
|
+
icon: /*#__PURE__*/React.createElement(IconClose, null),
|
|
206
|
+
onClick: handleClose
|
|
207
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
208
|
+
className: styles.iframeContainer
|
|
209
|
+
}, url && !iframeError ? /*#__PURE__*/React.createElement("iframe", {
|
|
210
|
+
key: url,
|
|
211
|
+
src: iframeSrc,
|
|
212
|
+
width: "100%",
|
|
213
|
+
height: "100%",
|
|
214
|
+
style: {
|
|
215
|
+
border: 0
|
|
216
|
+
},
|
|
217
|
+
onError: handleIframeError,
|
|
218
|
+
onLoad: handleIframeLoad
|
|
219
|
+
}) : /*#__PURE__*/React.createElement(EmptyShow, {
|
|
220
|
+
title: iframeError ? '文档加载失败' : '暂无内容'
|
|
221
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
222
|
+
ref: resizerRef,
|
|
223
|
+
className: styles.resizer,
|
|
224
|
+
onMouseDown: handleMouseDown
|
|
225
|
+
}));
|
|
226
|
+
};
|
|
227
|
+
export default OfficeFilePreviewPanel;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
.main {
|
|
2
|
+
flex-shrink: 0;
|
|
3
|
+
height: 100%;
|
|
4
|
+
background: #ffffff;
|
|
5
|
+
box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: row;
|
|
8
|
+
transition: width 0.2s ease;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
position: relative;
|
|
11
|
+
}
|
|
12
|
+
.main.dragging {
|
|
13
|
+
transition: none;
|
|
14
|
+
}
|
|
15
|
+
.main.dragging .content {
|
|
16
|
+
pointer-events: none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.content {
|
|
20
|
+
flex: 1;
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
height: 100%;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.resizer {
|
|
28
|
+
position: absolute;
|
|
29
|
+
left: 0;
|
|
30
|
+
top: 0;
|
|
31
|
+
bottom: 0;
|
|
32
|
+
width: 6px;
|
|
33
|
+
cursor: ew-resize;
|
|
34
|
+
z-index: 1001;
|
|
35
|
+
transition: all 0.2s ease;
|
|
36
|
+
background: transparent;
|
|
37
|
+
}
|
|
38
|
+
.resizer:hover {
|
|
39
|
+
background: rgba(64, 134, 255, 0.2);
|
|
40
|
+
}
|
|
41
|
+
.resizer:active {
|
|
42
|
+
background: rgba(64, 134, 255, 0.4);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.header {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
justify-content: space-between;
|
|
49
|
+
padding: 16px 20px;
|
|
50
|
+
border-bottom: 1px solid #e8e8e8;
|
|
51
|
+
flex-shrink: 0;
|
|
52
|
+
background: #ffffff;
|
|
53
|
+
}
|
|
54
|
+
.header span {
|
|
55
|
+
font-family: "PingFang SC", sans-serif;
|
|
56
|
+
font-size: 16px;
|
|
57
|
+
font-weight: 600;
|
|
58
|
+
color: #2e394c;
|
|
59
|
+
line-height: 22px;
|
|
60
|
+
}
|
|
61
|
+
.header :global(.ant-btn) {
|
|
62
|
+
color: #8c8c8c;
|
|
63
|
+
}
|
|
64
|
+
.header :global(.ant-btn):hover {
|
|
65
|
+
color: #4086ff;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.iframeContainer {
|
|
69
|
+
flex: 1;
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
position: relative;
|
|
72
|
+
background: #f5f5f5;
|
|
73
|
+
}
|
|
74
|
+
.iframeContainer iframe {
|
|
75
|
+
width: 100%;
|
|
76
|
+
height: 100%;
|
|
77
|
+
border: none;
|
|
78
|
+
display: block;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.mainHidden {
|
|
82
|
+
display: none;
|
|
83
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FileItem } from '../../types/file';
|
|
3
|
+
interface IProps {
|
|
4
|
+
maxSize?: number;
|
|
5
|
+
limit?: number;
|
|
6
|
+
accept?: string[];
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface IFileUploadRef {
|
|
11
|
+
abortUpload: () => void;
|
|
12
|
+
handleSSEFileAnalyize: (file: FileItem) => void;
|
|
13
|
+
retryUpload: (uid: string) => void;
|
|
14
|
+
}
|
|
15
|
+
declare const FileUpload: React.ForwardRefExoticComponent<IProps & React.RefAttributes<unknown>>;
|
|
16
|
+
export default FileUpload;
|