Skip to content

Commit e8670cd

Browse files
authored
Merge pull request #21 from ovineio/feat-amisAi
feat: #20 Ai机器人主体功能已完成
2 parents 945b20c + 05b4fa1 commit e8670cd

26 files changed

+1166
-15
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ node_modules
44
.pnpm-debug.log
55
report.html
66
dist
7-
.DS_Store
7+
.DS_Store
8+
aiKnowledge

index.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
rel="stylesheet"
1010
href="/node_modules/@fortawesome/fontawesome-free/css/v4-shims.css"
1111
/>
12+
<link rel="stylesheet" href="https://g.alicdn.com/code/npm/@ali/chatui-sdk/6.6.2/ChatSDK.css" />
1213
<title>Amis Playground</title>
1314
<script>
1415
window.enableAMISDebug = true;
@@ -27,6 +28,11 @@
2728
</head>
2829
<body>
2930
<div id="root"></div>
31+
<div id="aiChatRoot"></div>
3032
<script type="module" src="/src/main.tsx"></script>
33+
<!--TODO: 将 react 从 chatSdk 剥离出来 使用 pure.js () -->
34+
<script src="https://g.alicdn.com/code/npm/@ali/chatui-sdk/6.6.2/ChatSDK.js"></script>
35+
<script src="https://g.alicdn.com/chatui/icons/2.0.2/index.js"></script>
36+
<script type="module" src="/src/aiChat/index.tsx"></script>
3137
</body>
3238
</html>

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@
7575
"monaco-jsx-syntax-highlight": "^1.2.0",
7676
"react": "^18.2.0",
7777
"react-dom": "^18.2.0",
78+
"react-json-view": "1.21.3",
7879
"react-router": "5.2.1",
7980
"react-router-dom": "5.3.0",
80-
"sinon": "^19.0.2",
81-
"react-json-view": "1.21.3"
81+
"sinon": "^19.0.2"
8282
},
8383
"peerDependencies": {
8484
"react": ">=18.2.0",
@@ -106,6 +106,7 @@
106106
"eslint-plugin-react-hooks": "^4.6.0",
107107
"eslint-plugin-react-refresh": "^0.4.3",
108108
"eslint-plugin-standard": "^5.0.0",
109+
"glob": "^11.0.1",
109110
"husky": "^8.0.3",
110111
"less": "^4.1.3",
111112
"less-loader": "^11.1.2",

pnpm-lock.yaml

Lines changed: 84 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/AiChat/assets/def-bot.jpeg

92 KB
Loading

src/AiChat/assets/def-user.png

14 KB
Loading
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
.wrapper {
2+
display: flex;
3+
justify-content: space-between;
4+
align-items: center;
5+
height: 40px;
6+
padding: 0 8px;
7+
border-bottom: 1px solid #e3e3e3;
8+
9+
button {
10+
border: none;
11+
padding: 4px;
12+
border-radius: 4px;
13+
font-size: 14px;
14+
display: flex;
15+
justify-content: center;
16+
align-items: center;
17+
cursor: nesw-resize;
18+
&:hover {
19+
background: #e0e0e0;
20+
}
21+
}
22+
svg {
23+
width: 18px;
24+
height: 18px;
25+
}
26+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import SizeIcon from './Size.svg?raw'
2+
3+
import styles from './index.module.less'
4+
5+
export const Header = () => {
6+
const storeRef = React.useRef<any>({
7+
resizeTrigger: null,
8+
resizeContainer: null,
9+
isResizing: false,
10+
x: 0,
11+
y: 0,
12+
width: 0,
13+
height: 0,
14+
})
15+
16+
React.useEffect(() => {
17+
const { resizeTrigger } = storeRef.current
18+
if (!resizeTrigger) {
19+
return
20+
}
21+
22+
storeRef.current.resizeContainer = document.querySelector('#aiChatRoot .ChatWrapper')
23+
24+
storeRef.current.resizeTrigger.addEventListener('mousedown', (e) => {
25+
const { resizeContainer } = storeRef.current
26+
storeRef.current = {
27+
...storeRef.current,
28+
isResizing: true,
29+
x: e.clientX,
30+
y: e.clientY,
31+
width: resizeContainer.offsetWidth,
32+
height: resizeContainer.offsetHeight,
33+
}
34+
document.addEventListener('mousemove', resize)
35+
document.addEventListener('mouseup', stopResize)
36+
})
37+
38+
const resize = (e) => {
39+
const { isResizing, resizeContainer, x, y, width, height } = storeRef.current
40+
if (isResizing) {
41+
const newWidth = width + (e.clientX - x)
42+
const newHeight = height - (e.clientY - y)
43+
resizeContainer.style.width = `${newWidth}px`
44+
resizeContainer.style.height = `${newHeight}px`
45+
}
46+
}
47+
48+
const stopResize = () => {
49+
storeRef.current.isResizing = false
50+
document.removeEventListener('mousemove', resize)
51+
document.removeEventListener('mouseup', stopResize)
52+
}
53+
54+
return () => {
55+
storeRef.current.resizeTrigger.removeEventListener('mousedown')
56+
}
57+
}, [])
58+
59+
return (
60+
<div className={styles.wrapper}>
61+
<i></i>
62+
<span>Amis Bot</span>
63+
<button
64+
title='调整大小'
65+
ref={(ref) => (storeRef.current.resizeTrigger = ref)}
66+
dangerouslySetInnerHTML={{ __html: SizeIcon }}
67+
/>
68+
</div>
69+
)
70+
}

0 commit comments

Comments
 (0)