Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
fd8135f5
authored
Mar 11, 2023
by
Archer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: md数学表达式;perf: 字体样式;fix: 发送验证码错误提醒。聊天二次加载
parent
9f965931
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
88 additions
and
79 deletions
+88
-79
src/components/Markdown/codeLight.ts
+0
-4
src/components/Markdown/index.module.scss
+5
-5
src/components/Markdown/index.tsx
+5
-3
src/constants/theme.ts
+9
-11
src/hooks/useSendCode.ts
+5
-10
src/pages/api/user/sendEmail.ts
+0
-1
src/pages/chat/index.tsx
+47
-41
src/pages/model/components/ModelPhoneList.tsx
+6
-2
src/pages/model/components/ModelTable.tsx
+5
-1
src/pages/model/detail.tsx
+2
-1
src/service/mongo.ts
+1
-0
src/styles/reset.scss
+3
-0
No files found.
src/components/Markdown/codeLight.ts
View file @
fd8135f5
...
@@ -2,9 +2,7 @@ import React from 'react';
...
@@ -2,9 +2,7 @@ import React from 'react';
export
const
codeLight
:
{
[
key
:
string
]:
React
.
CSSProperties
}
=
{
export
const
codeLight
:
{
[
key
:
string
]:
React
.
CSSProperties
}
=
{
'code[class*=language-]'
:
{
'code[class*=language-]'
:
{
color
:
'#d4d4d4'
,
color
:
'#d4d4d4'
,
fontSize
:
'13px'
,
textShadow
:
'none'
,
textShadow
:
'none'
,
fontFamily
:
'Menlo,Monaco,Consolas,"Andale Mono","Ubuntu Mono","Courier New",monospace'
,
direction
:
'ltr'
,
direction
:
'ltr'
,
textAlign
:
'left'
,
textAlign
:
'left'
,
whiteSpace
:
'pre'
,
whiteSpace
:
'pre'
,
...
@@ -21,9 +19,7 @@ export const codeLight: { [key: string]: React.CSSProperties } = {
...
@@ -21,9 +19,7 @@ export const codeLight: { [key: string]: React.CSSProperties } = {
},
},
'pre[class*=language-]'
:
{
'pre[class*=language-]'
:
{
color
:
'#d4d4d4'
,
color
:
'#d4d4d4'
,
fontSize
:
'13px'
,
textShadow
:
'none'
,
textShadow
:
'none'
,
fontFamily
:
'Menlo,Monaco,Consolas,"Andale Mono","Ubuntu Mono","Courier New",monospace'
,
direction
:
'ltr'
,
direction
:
'ltr'
,
textAlign
:
'left'
,
textAlign
:
'left'
,
whiteSpace
:
'pre'
,
whiteSpace
:
'pre'
,
...
...
src/components/Markdown/index.module.scss
View file @
fd8135f5
...
@@ -341,7 +341,7 @@
...
@@ -341,7 +341,7 @@
background-color
:
#f0f0f0
;
background-color
:
#f0f0f0
;
border
:
1px
solid
#cccccc
;
border
:
1px
solid
#cccccc
;
border-radius
:
3px
3px
3px
3px
;
border-radius
:
3px
3px
3px
3px
;
font-size
:
13px
;
font-size
:
max
(
0
.9em
,
14px
)
;
line-height
:
19px
;
line-height
:
19px
;
overflow
:
auto
;
overflow
:
auto
;
padding
:
6px
10px
;
padding
:
6px
10px
;
...
@@ -352,11 +352,12 @@
...
@@ -352,11 +352,12 @@
border
:
medium
none
;
border
:
medium
none
;
}
}
.markdown
{
.markdown
{
font-size
:
14px
;
line-height
:
1
.6
;
letter-spacing
:
0
.5px
;
text-align
:
justify
;
text-align
:
justify
;
word-break
:
break-all
;
word-break
:
break-all
;
overflow-y
:
hidden
;
tab-size
:
4
;
word-spacing
:
normal
;
pre
{
pre
{
display
:
block
;
display
:
block
;
width
:
100%
;
width
:
100%
;
...
@@ -372,7 +373,6 @@
...
@@ -372,7 +373,6 @@
background-color
:
#222
!
important
;
background-color
:
#222
!
important
;
color
:
#fff
;
color
:
#fff
;
width
:
100%
;
width
:
100%
;
font-family
:
'Söhne,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji'
;
}
}
a
{
a
{
...
...
src/components/Markdown/index.tsx
View file @
fd8135f5
import
React
,
{
memo
,
useMemo
}
from
'react'
;
import
React
,
{
memo
,
useMemo
}
from
'react'
;
import
ReactMarkdown
from
'react-markdown'
;
import
ReactMarkdown
from
'react-markdown'
;
import
styles
from
'./index.module.scss'
;
import
{
Prism
as
SyntaxHighlighter
}
from
'react-syntax-highlighter'
;
import
{
Prism
as
SyntaxHighlighter
}
from
'react-syntax-highlighter'
;
import
{
codeLight
}
from
'./codeLight'
;
import
{
Box
,
Flex
}
from
'@chakra-ui/react'
;
import
{
Box
,
Flex
}
from
'@chakra-ui/react'
;
import
{
useCopyData
}
from
'@/utils/tools'
;
import
{
useCopyData
}
from
'@/utils/tools'
;
import
Icon
from
'@/components/Icon'
;
import
Icon
from
'@/components/Icon'
;
...
@@ -10,8 +8,12 @@ import remarkGfm from 'remark-gfm';
...
@@ -10,8 +8,12 @@ import remarkGfm from 'remark-gfm';
import
remarkMath
from
'remark-math'
;
import
remarkMath
from
'remark-math'
;
import
rehypeKatex
from
'rehype-katex'
;
import
rehypeKatex
from
'rehype-katex'
;
import
'katex/dist/katex.min.css'
;
import
styles
from
'./index.module.scss'
;
import
{
codeLight
}
from
'./codeLight'
;
const
Markdown
=
({
source
,
isChatting
}:
{
source
:
string
;
isChatting
:
boolean
})
=>
{
const
Markdown
=
({
source
,
isChatting
}:
{
source
:
string
;
isChatting
:
boolean
})
=>
{
const
formatSource
=
useMemo
(()
=>
source
.
replace
(
/
\n
/g
,
' \n'
)
,
[
source
]);
const
formatSource
=
useMemo
(()
=>
source
,
[
source
]);
const
{
copyData
}
=
useCopyData
();
const
{
copyData
}
=
useCopyData
();
return
(
return
(
...
...
src/constants/theme.ts
View file @
fd8135f5
...
@@ -20,24 +20,27 @@ const Button = defineStyleConfig({
...
@@ -20,24 +20,27 @@ const Button = defineStyleConfig({
baseStyle
:
{},
baseStyle
:
{},
sizes
:
{
sizes
:
{
sm
:
{
sm
:
{
fontSize
:
'
sm
'
,
fontSize
:
'
xs
'
,
px
:
3
,
px
:
3
,
py
:
0
,
py
:
0
,
fontWeight
:
'normal'
,
fontWeight
:
'normal'
,
height
:
'26px'
height
:
'26px'
,
lineHeight
:
'26px'
},
},
md
:
{
md
:
{
fontSize
:
'
md
'
,
fontSize
:
'
sm
'
,
px
:
6
,
px
:
6
,
py
:
0
,
py
:
0
,
height
:
'34px'
,
height
:
'34px'
,
lineHeight
:
'34px'
,
fontWeight
:
'normal'
fontWeight
:
'normal'
},
},
lg
:
{
lg
:
{
fontSize
:
'
lg
'
,
fontSize
:
'
md
'
,
px
:
8
,
px
:
8
,
py
:
0
,
py
:
0
,
height
:
'42px'
,
height
:
'42px'
,
lineHeight
:
'42px'
,
fontWeight
:
'normal'
fontWeight
:
'normal'
}
}
},
},
...
@@ -58,17 +61,12 @@ export const theme = extendTheme({
...
@@ -58,17 +61,12 @@ export const theme = extendTheme({
global
:
{
global
:
{
'html, body'
:
{
'html, body'
:
{
color
:
'blackAlpha.800'
,
color
:
'blackAlpha.800'
,
fontSize
:
'14px'
,
fontFamily
:
'Söhne,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji'
,
height
:
'100%'
,
height
:
'100%'
,
overflowY
:
'auto'
maxHeight
:
'100vh'
,
overflowY
:
'hidden'
}
}
}
}
},
},
fonts
:
{
body
:
'system-ui, sans-serif'
},
fontSizes
:
{
fontSizes
:
{
xs
:
'0.8rem'
,
xs
:
'0.8rem'
,
sm
:
'0.9rem'
,
sm
:
'0.9rem'
,
...
...
src/hooks/useSendCode.ts
View file @
fd8135f5
import
{
useState
,
useMemo
,
useCallback
}
from
'react'
;
import
{
useState
,
useMemo
,
useCallback
}
from
'react'
;
import
{
sendCodeToEmail
}
from
'@/api/user'
;
import
{
sendCodeToEmail
}
from
'@/api/user'
;
import
{
EmailTypeEnum
}
from
'@/constants/common'
;
import
{
EmailTypeEnum
}
from
'@/constants/common'
;
import
{
useToast
}
from
'@chakra-ui/react'
;
let
timer
:
any
;
let
timer
:
any
;
import
{
useToast
}
from
'./useToast'
;
export
const
useSendCode
=
()
=>
{
export
const
useSendCode
=
()
=>
{
const
toast
=
useToast
({
const
{
toast
}
=
useToast
();
position
:
'top'
,
duration
:
2000
});
const
[
codeSending
,
setCodeSending
]
=
useState
(
false
);
const
[
codeSending
,
setCodeSending
]
=
useState
(
false
);
const
[
codeCountDown
,
setCodeCountDown
]
=
useState
(
0
);
const
[
codeCountDown
,
setCodeCountDown
]
=
useState
(
0
);
const
sendCodeText
=
useMemo
(()
=>
{
const
sendCodeText
=
useMemo
(()
=>
{
...
@@ -43,12 +40,10 @@ export const useSendCode = () => {
...
@@ -43,12 +40,10 @@ export const useSendCode = () => {
status
:
'success'
,
status
:
'success'
,
position
:
'top'
position
:
'top'
});
});
}
catch
(
error
)
{
}
catch
(
error
:
any
)
{
typeof
error
===
'string'
&&
toast
({
toast
({
title
:
error
,
title
:
error
.
message
||
'发送验证码异常'
,
status
:
'error'
,
status
:
'error'
position
:
'top'
});
});
}
}
setCodeSending
(
false
);
setCodeSending
(
false
);
...
...
src/pages/api/user/sendEmail.ts
View file @
fd8135f5
...
@@ -20,7 +20,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
...
@@ -20,7 +20,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
if
(
type
===
EmailTypeEnum
.
register
)
{
if
(
type
===
EmailTypeEnum
.
register
)
{
const
maxCount
=
process
.
env
.
MAX_USER
?
+
process
.
env
.
MAX_USER
:
Infinity
;
const
maxCount
=
process
.
env
.
MAX_USER
?
+
process
.
env
.
MAX_USER
:
Infinity
;
const
userCount
=
await
User
.
count
();
const
userCount
=
await
User
.
count
();
if
(
userCount
>=
maxCount
)
{
if
(
userCount
>=
maxCount
)
{
throw
new
Error
(
'当前注册用户已满,请等待名额~'
);
throw
new
Error
(
'当前注册用户已满,请等待名额~'
);
}
}
...
...
src/pages/chat/index.tsx
View file @
fd8135f5
...
@@ -22,11 +22,10 @@ const Markdown = dynamic(() => import('@/components/Markdown'));
...
@@ -22,11 +22,10 @@ const Markdown = dynamic(() => import('@/components/Markdown'));
const
textareaMinH
=
'22px'
;
const
textareaMinH
=
'22px'
;
const
Chat
=
()
=>
{
const
Chat
=
(
{
chatId
,
windowId
}:
{
chatId
:
string
;
windowId
?:
string
}
)
=>
{
const
{
toast
}
=
useToast
();
const
{
toast
}
=
useToast
();
const
router
=
useRouter
();
const
router
=
useRouter
();
const
{
isPc
,
media
}
=
useScreen
();
const
{
isPc
,
media
}
=
useScreen
();
const
{
chatId
,
windowId
}
=
router
.
query
as
{
chatId
:
string
;
windowId
?:
string
};
const
ChatBox
=
useRef
<
HTMLDivElement
>
(
null
);
const
ChatBox
=
useRef
<
HTMLDivElement
>
(
null
);
const
TextareaDom
=
useRef
<
HTMLTextAreaElement
>
(
null
);
const
TextareaDom
=
useRef
<
HTMLTextAreaElement
>
(
null
);
...
@@ -40,7 +39,6 @@ const Chat = () => {
...
@@ -40,7 +39,6 @@ const Chat = () => {
// 滚动到底部
// 滚动到底部
const
scrollToBottom
=
useCallback
(()
=>
{
const
scrollToBottom
=
useCallback
(()
=>
{
// 滚动到底部
setTimeout
(()
=>
{
setTimeout
(()
=>
{
ChatBox
.
current
&&
ChatBox
.
current
&&
ChatBox
.
current
.
scrollTo
({
ChatBox
.
current
.
scrollTo
({
...
@@ -52,16 +50,14 @@ const Chat = () => {
...
@@ -52,16 +50,14 @@ const Chat = () => {
// 初始化聊天框
// 初始化聊天框
useQuery
(
useQuery
(
[
chatId
,
windowId
],
[
'initData'
],
()
=>
{
()
=>
{
if
(
!
chatId
)
return
null
;
setLoading
(
true
);
setLoading
(
true
);
return
getInitChatSiteInfo
(
chatId
,
windowId
);
return
getInitChatSiteInfo
(
chatId
,
windowId
);
},
},
{
{
cacheTime
:
5
*
60
*
1000
,
onSuccess
(
res
)
{
onSuccess
(
res
)
{
if
(
!
res
)
return
;
// 可能没有 windowId,给它设置一下
router
.
replace
(
`/chat?chatId=
${
chatId
}
&windowId=
${
res
.
windowId
}
`
);
router
.
replace
(
`/chat?chatId=
${
chatId
}
&windowId=
${
res
.
windowId
}
`
);
setChatSiteData
(
res
.
chatSite
);
setChatSiteData
(
res
.
chatSite
);
...
@@ -72,7 +68,6 @@ const Chat = () => {
...
@@ -72,7 +68,6 @@ const Chat = () => {
}))
}))
);
);
scrollToBottom
();
scrollToBottom
();
setLoading
(
false
);
},
},
onError
(
e
:
any
)
{
onError
(
e
:
any
)
{
toast
({
toast
({
...
@@ -81,11 +76,30 @@ const Chat = () => {
...
@@ -81,11 +76,30 @@ const Chat = () => {
isClosable
:
true
,
isClosable
:
true
,
duration
:
5000
duration
:
5000
});
});
},
onSettled
()
{
setLoading
(
false
);
setLoading
(
false
);
}
}
}
}
);
);
// 重置输入内容
const
resetInputVal
=
useCallback
((
val
:
string
)
=>
{
setInputVal
(
val
);
setTimeout
(()
=>
{
/* 回到最小高度 */
if
(
TextareaDom
.
current
)
{
TextareaDom
.
current
.
style
.
height
=
val
===
''
?
textareaMinH
:
`
${
TextareaDom
.
current
.
scrollHeight
}
px`
;
}
},
100
);
},
[]);
// 重载对话
const
resetChat
=
useCallback
(()
=>
{
window
.
open
(
`/chat?chatId=
${
chatId
}
`
,
'_self'
);
},
[
chatId
]);
// gpt3 方法
// gpt3 方法
const
gpt3ChatPrompt
=
useCallback
(
const
gpt3ChatPrompt
=
useCallback
(
async
(
newChatList
:
ChatSiteItemType
[])
=>
{
async
(
newChatList
:
ChatSiteItemType
[])
=>
{
...
@@ -210,17 +224,9 @@ const Chat = () => {
...
@@ -210,17 +224,9 @@ const Chat = () => {
// 插入内容
// 插入内容
setChatList
(
newChatList
);
setChatList
(
newChatList
);
setInputVal
(
''
);
resetInputVal
(
''
);
// 滚动到底部
setTimeout
(()
=>
{
scrollToBottom
();
scrollToBottom
();
/* 回到最小高度 */
if
(
TextareaDom
.
current
)
{
TextareaDom
.
current
.
style
.
height
=
textareaMinH
;
}
},
100
);
const
fnMap
:
{
[
key
:
string
]:
any
}
=
{
const
fnMap
:
{
[
key
:
string
]:
any
}
=
{
[
OpenAiModelEnum
.
GPT35
]:
chatGPTPrompt
,
[
OpenAiModelEnum
.
GPT35
]:
chatGPTPrompt
,
[
OpenAiModelEnum
.
GPT3
]:
gpt3ChatPrompt
[
OpenAiModelEnum
.
GPT3
]:
gpt3ChatPrompt
...
@@ -239,13 +245,13 @@ const Chat = () => {
...
@@ -239,13 +245,13 @@ const Chat = () => {
}
}
}
catch
(
err
)
{
}
catch
(
err
)
{
toast
({
toast
({
title
:
typeof
err
===
'string'
?
err
:
'聊天
已过期
'
,
title
:
typeof
err
===
'string'
?
err
:
'聊天
出错了~
'
,
status
:
'warning'
,
status
:
'warning'
,
duration
:
5000
,
duration
:
5000
,
isClosable
:
true
isClosable
:
true
});
});
setInputVal
(
storeInput
);
re
setInputVal
(
storeInput
);
setChatList
(
newChatList
.
slice
(
0
,
newChatList
.
length
-
2
));
setChatList
(
newChatList
.
slice
(
0
,
newChatList
.
length
-
2
));
}
}
...
@@ -256,6 +262,7 @@ const Chat = () => {
...
@@ -256,6 +262,7 @@ const Chat = () => {
gpt3ChatPrompt
,
gpt3ChatPrompt
,
inputVal
,
inputVal
,
isChatting
,
isChatting
,
resetInputVal
,
scrollToBottom
,
scrollToBottom
,
toast
toast
]);
]);
...
@@ -267,16 +274,10 @@ const Chat = () => {
...
@@ -267,16 +274,10 @@ const Chat = () => {
await
delLastMessage
(
windowId
);
await
delLastMessage
(
windowId
);
const
val
=
chatList
[
chatList
.
length
-
1
].
value
;
const
val
=
chatList
[
chatList
.
length
-
1
].
value
;
setInputVal
(
val
);
re
setInputVal
(
val
);
setChatList
(
chatList
.
slice
(
0
,
-
1
));
setChatList
(
chatList
.
slice
(
0
,
-
1
));
},
[
chatList
,
resetInputVal
,
windowId
]);
setTimeout
(()
=>
{
if
(
TextareaDom
.
current
)
{
TextareaDom
.
current
.
style
.
height
=
val
.
split
(
'\n'
).
length
*
22
+
'px'
;
}
},
100
);
},
[
chatList
,
windowId
]);
return
(
return
(
<
Flex
height=
{
'100%'
}
flexDirection=
{
'column'
}
>
<
Flex
height=
{
'100%'
}
flexDirection=
{
'column'
}
>
...
@@ -290,13 +291,9 @@ const Chat = () => {
...
@@ -290,13 +291,9 @@ const Chat = () => {
zIndex=
{
1
}
zIndex=
{
1
}
>
>
<
Box
flex=
{
1
}
>
{
chatSiteData
?.
name
}
</
Box
>
<
Box
flex=
{
1
}
>
{
chatSiteData
?.
name
}
</
Box
>
{
/* 重置按键 */
}
<
Box
cursor=
{
'pointer'
}
onClick=
{
()
=>
router
.
replace
(
`/chat?chatId=${chatId}`
)
}
>
<
Icon
name=
{
'icon-zhongzhi'
}
width=
{
20
}
height=
{
20
}
color=
{
'#718096'
}
></
Icon
>
</
Box
>
{
/* 滚动到底部按键 */
}
{
/* 滚动到底部按键 */
}
{
ChatBox
.
current
&&
ChatBox
.
current
.
scrollHeight
>
2
*
ChatBox
.
current
.
clientHeight
&&
(
{
ChatBox
.
current
&&
ChatBox
.
current
.
scrollHeight
>
2
*
ChatBox
.
current
.
clientHeight
&&
(
<
Box
m
l
=
{
10
}
cursor=
{
'pointer'
}
onClick=
{
scrollToBottom
}
>
<
Box
m
r
=
{
10
}
cursor=
{
'pointer'
}
onClick=
{
scrollToBottom
}
>
<
Icon
<
Icon
name=
{
'icon-xiangxiazhankai-xianxingyuankuang'
}
name=
{
'icon-xiangxiazhankai-xianxingyuankuang'
}
width=
{
25
}
width=
{
25
}
...
@@ -305,6 +302,10 @@ const Chat = () => {
...
@@ -305,6 +302,10 @@ const Chat = () => {
></
Icon
>
></
Icon
>
</
Box
>
</
Box
>
)
}
)
}
{
/* 重置按键 */
}
<
Button
size=
{
'sm'
}
colorScheme=
{
'gray'
}
onClick=
{
resetChat
}
>
新对话
</
Button
>
</
Flex
>
</
Flex
>
{
/* 聊天内容 */
}
{
/* 聊天内容 */
}
<
Box
ref=
{
ChatBox
}
flex=
{
'1 0 0'
}
h=
{
0
}
w=
{
'100%'
}
px=
{
0
}
pb=
{
10
}
overflowY=
{
'auto'
}
>
<
Box
ref=
{
ChatBox
}
flex=
{
'1 0 0'
}
h=
{
0
}
w=
{
'100%'
}
px=
{
0
}
pb=
{
10
}
overflowY=
{
'auto'
}
>
...
@@ -312,7 +313,7 @@ const Chat = () => {
...
@@ -312,7 +313,7 @@ const Chat = () => {
<
Box
<
Box
key=
{
index
}
key=
{
index
}
py=
{
media
(
9
,
6
)
}
py=
{
media
(
9
,
6
)
}
px=
{
media
(
4
,
3
)
}
px=
{
media
(
4
,
2
)
}
backgroundColor=
{
index
%
2
===
0
?
'rgba(247,247,248,1)'
:
'#fff'
}
backgroundColor=
{
index
%
2
===
0
?
'rgba(247,247,248,1)'
:
'#fff'
}
borderBottom=
{
'1px solid rgba(0,0,0,0.1)'
}
borderBottom=
{
'1px solid rgba(0,0,0,0.1)'
}
>
>
...
@@ -321,11 +322,11 @@ const Chat = () => {
...
@@ -321,11 +322,11 @@ const Chat = () => {
<
Image
<
Image
src=
{
item
.
obj
===
'Human'
?
'/icon/human.png'
:
'/icon/logo.png'
}
src=
{
item
.
obj
===
'Human'
?
'/icon/human.png'
:
'/icon/logo.png'
}
alt=
"/icon/logo.png"
alt=
"/icon/logo.png"
width=
{
30
}
width=
{
media
(
30
,
20
)
}
height=
{
30
}
height=
{
media
(
30
,
20
)
}
/>
/>
</
Box
>
</
Box
>
<
Box
flex=
{
'1 0 0'
}
w=
{
0
}
overflow
X
=
{
'hidden'
}
>
<
Box
flex=
{
'1 0 0'
}
w=
{
0
}
overflow=
{
'hidden'
}
>
{
item
.
obj
===
'AI'
?
(
{
item
.
obj
===
'AI'
?
(
<
Markdown
<
Markdown
source=
{
item
.
value
}
source=
{
item
.
value
}
...
@@ -350,11 +351,7 @@ const Chat = () => {
...
@@ -350,11 +351,7 @@ const Chat = () => {
<
Box
textAlign=
{
'center'
}
>
<
Box
textAlign=
{
'center'
}
>
<
Box
color=
{
'red'
}
>
对话出现了异常
</
Box
>
<
Box
color=
{
'red'
}
>
对话出现了异常
</
Box
>
<
Flex
py=
{
5
}
justifyContent=
{
'center'
}
>
<
Flex
py=
{
5
}
justifyContent=
{
'center'
}
>
<
Button
<
Button
mr=
{
20
}
onClick=
{
resetChat
}
colorScheme=
{
'green'
}
>
mr=
{
20
}
onClick=
{
()
=>
router
.
replace
(
`/chat?chatId=${chatId}`
)
}
colorScheme=
{
'green'
}
>
重开对话
重开对话
</
Button
>
</
Button
>
<
Button
onClick=
{
reEdit
}
>
重新编辑最后一句
</
Button
>
<
Button
onClick=
{
reEdit
}
>
重新编辑最后一句
</
Button
>
...
@@ -428,3 +425,12 @@ const Chat = () => {
...
@@ -428,3 +425,12 @@ const Chat = () => {
};
};
export
default
Chat
;
export
default
Chat
;
export
async
function
getServerSideProps
(
context
:
any
)
{
const
chatId
=
context
.
query
?.
chatId
||
''
;
const
windowId
=
context
.
query
?.
windowId
||
''
;
return
{
props
:
{
chatId
,
windowId
}
};
}
src/pages/model/components/ModelPhoneList.tsx
View file @
fd8135f5
import
React
from
'react'
;
import
React
,
{
useEffect
}
from
'react'
;
import
{
Box
,
Button
,
Flex
,
Heading
,
Tag
}
from
'@chakra-ui/react'
;
import
{
Box
,
Button
,
Flex
,
Tag
}
from
'@chakra-ui/react'
;
import
type
{
ModelType
}
from
'@/types/model'
;
import
type
{
ModelType
}
from
'@/types/model'
;
import
{
formatModelStatus
}
from
'@/constants/model'
;
import
{
formatModelStatus
}
from
'@/constants/model'
;
import
dayjs
from
'dayjs'
;
import
dayjs
from
'dayjs'
;
...
@@ -14,6 +14,10 @@ const ModelPhoneList = ({
...
@@ -14,6 +14,10 @@ const ModelPhoneList = ({
})
=>
{
})
=>
{
const
router
=
useRouter
();
const
router
=
useRouter
();
useEffect
(()
=>
{
router
.
prefetch
(
'/chat'
);
},
[
router
]);
return
(
return
(
<
Box
borderRadius=
{
'md'
}
overflow=
{
'hidden'
}
mb=
{
5
}
>
<
Box
borderRadius=
{
'md'
}
overflow=
{
'hidden'
}
mb=
{
5
}
>
{
models
.
map
((
model
)
=>
(
{
models
.
map
((
model
)
=>
(
...
...
src/pages/model/components/ModelTable.tsx
View file @
fd8135f5
import
React
from
'react'
;
import
{
useEffect
}
from
'react'
;
import
{
import
{
Button
,
Button
,
Table
,
Table
,
...
@@ -84,6 +84,10 @@ const ModelTable = ({
...
@@ -84,6 +84,10 @@ const ModelTable = ({
}
}
];
];
useEffect
(()
=>
{
router
.
prefetch
(
'/chat'
);
},
[
router
]);
return
(
return
(
<
Card
py=
{
3
}
>
<
Card
py=
{
3
}
>
<
TableContainer
>
<
TableContainer
>
...
...
src/pages/model/detail.tsx
View file @
fd8135f5
...
@@ -49,7 +49,8 @@ const ModelDetail = () => {
...
@@ -49,7 +49,8 @@ const ModelDetail = () => {
useEffect
(()
=>
{
useEffect
(()
=>
{
loadModel
();
loadModel
();
},
[
loadModel
,
modelId
]);
router
.
prefetch
(
'/chat'
);
},
[
loadModel
,
modelId
,
router
]);
/* 点击删除 */
/* 点击删除 */
const
handleDelModel
=
useCallback
(
async
()
=>
{
const
handleDelModel
=
useCallback
(
async
()
=>
{
...
...
src/service/mongo.ts
View file @
fd8135f5
...
@@ -11,6 +11,7 @@ export async function connectToDatabase(): Promise<void> {
...
@@ -11,6 +11,7 @@ export async function connectToDatabase(): Promise<void> {
global
.
mongodb
=
'connecting'
;
global
.
mongodb
=
'connecting'
;
console
.
log
(
'connect mongo'
);
console
.
log
(
'connect mongo'
);
try
{
try
{
mongoose
.
set
(
'strictQuery'
,
true
);
global
.
mongodb
=
await
mongoose
.
connect
(
process
.
env
.
MONGODB_URI
as
string
,
{
global
.
mongodb
=
await
mongoose
.
connect
(
process
.
env
.
MONGODB_URI
as
string
,
{
bufferCommands
:
true
,
bufferCommands
:
true
,
dbName
:
'doc_gpt'
,
dbName
:
'doc_gpt'
,
...
...
src/styles/reset.scss
View file @
fd8135f5
...
@@ -50,6 +50,9 @@ svg {
...
@@ -50,6 +50,9 @@ svg {
}
}
@media
(
max-width
:
900px
)
{
@media
(
max-width
:
900px
)
{
html
{
font-size
:
14px
;
}
::-webkit-scrollbar
,
::-webkit-scrollbar
,
::-webkit-scrollbar
{
::-webkit-scrollbar
{
width
:
2px
;
width
:
2px
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment