Skip to content

Commit 0d486b0

Browse files
authored
Merge pull request #23 from ovineio/feat-amisAi
feat: #20 1. Ai接入上传文件功能 2.调教AI机器人 3. 优化聊天框体验
2 parents 9715925 + ad1799c commit 0d486b0

File tree

22 files changed

+942
-268
lines changed

22 files changed

+942
-268
lines changed
Lines changed: 1 addition & 0 deletions
Loading

src/AiChat/components/ChatWindow/Header/index.module.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@
3636
.resize {
3737
cursor: nesw-resize;
3838
}
39+
40+
.move {
41+
cursor: move;
42+
}
3943
}

src/AiChat/components/ChatWindow/Header/index.tsx

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
// TODO: 整理所有 ICON 封装成组件
2-
import CloseIcon from './Close.svg?raw'
3-
import SizeIcon from './Size.svg?raw'
2+
import CloseIcon from './assets/Close.svg?raw'
3+
import MoveIcon from './assets/Move.svg?raw'
4+
import SizeIcon from './assets/Size.svg?raw'
5+
import { useMoveable } from '../../Common/useMoveable'
6+
import { useResizable } from '../../Common/useReizeable'
47

58
import styles from './index.module.less'
69

710
export const Header = () => {
8-
const storeRef = React.useRef<any>({
11+
const storeRef = React.useRef({
912
resizeTrigger: null,
1013
resizeContainer: null,
14+
dragContainer: null,
15+
dragTrigger: null,
1116
isResizing: false,
1217
x: 0,
1318
y: 0,
@@ -16,47 +21,23 @@ export const Header = () => {
1621
})
1722

1823
React.useEffect(() => {
19-
const { resizeTrigger } = storeRef.current
20-
if (!resizeTrigger) {
21-
return
22-
}
24+
const aiRoot = document.querySelector('#aiChatRoot')
2325

24-
storeRef.current.resizeContainer = document.querySelector('#aiChatRoot .ChatWrapper')
25-
26-
storeRef.current.resizeTrigger.addEventListener('mousedown', (e) => {
27-
const { resizeContainer } = storeRef.current
28-
storeRef.current = {
29-
...storeRef.current,
30-
isResizing: true,
31-
x: e.clientX,
32-
y: e.clientY,
33-
width: resizeContainer.offsetWidth,
34-
height: resizeContainer.offsetHeight,
35-
}
36-
document.addEventListener('mousemove', resize)
37-
document.addEventListener('mouseup', stopResize)
38-
})
39-
40-
const resize = (e) => {
41-
const { isResizing, resizeContainer, x, y, width, height } = storeRef.current
42-
if (isResizing) {
43-
const newWidth = width + (e.clientX - x)
44-
const newHeight = height - (e.clientY - y)
45-
resizeContainer.style.width = `${newWidth}px`
46-
resizeContainer.style.height = `${newHeight}px`
47-
}
48-
}
26+
storeRef.current.resizeContainer = aiRoot.querySelector('.ChatWrapper')
27+
storeRef.current.dragContainer = aiRoot.querySelector('.AiChatEntry')
28+
}, [])
4929

50-
const stopResize = () => {
51-
storeRef.current.isResizing = false
52-
document.removeEventListener('mousemove', resize)
53-
document.removeEventListener('mouseup', stopResize)
54-
}
30+
useMoveable({
31+
reactIns: React,
32+
container: storeRef.current.dragContainer,
33+
trigger: storeRef.current.dragTrigger,
34+
})
5535

56-
return () => {
57-
storeRef.current.resizeTrigger.removeEventListener('mousedown')
58-
}
59-
}, [])
36+
useResizable({
37+
reactIns: React,
38+
container: storeRef.current.resizeContainer,
39+
trigger: storeRef.current.resizeTrigger,
40+
})
6041

6142
const handleClose = () => {
6243
window.postMessage({
@@ -69,6 +50,12 @@ export const Header = () => {
6950
<i></i>
7051
<span>Amis Bot</span>
7152
<div className={styles.right}>
53+
<button
54+
title='移动位置'
55+
className={styles.move}
56+
ref={(ref) => (storeRef.current.dragTrigger = ref)}
57+
dangerouslySetInnerHTML={{ __html: MoveIcon }}
58+
/>
7259
<button
7360
title='调整大小'
7461
className={styles.resize}

0 commit comments

Comments
 (0)