Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-book
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-book
Commits
95ea0e5a
提交
95ea0e5a
authored
10月 30, 2026
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 更新 useAIEdit 函数,使用 axios 发送请求并处理 AI 返回数据;调整章节管理菜单项
上级
0daa50b1
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
25 行增加
和
15 行删除
+25
-15
useBaiduAI.js
apps/admin/src/components/editor/hooks/useBaiduAI.js
+21
-4
index.jsx
apps/admin/src/modules/books/management/chapters/index.jsx
+1
-1
axios.ts
apps/admin/src/utils/axios.ts
+3
-10
没有找到文件。
apps/admin/src/components/editor/hooks/useBaiduAI.js
浏览文件 @
95ea0e5a
import
{
useState
,
useCallback
}
from
'react'
import
{
useState
,
useCallback
}
from
'react'
import
{
baiduAIChat
}
from
'@/components/editor/api/ai'
import
{
useUserStore
}
from
'@/stores/userStore'
import
axios
from
'axios'
export
function
useAIEdit
()
{
export
function
useAIEdit
()
{
const
[
messages
,
setMessages
]
=
useState
([])
const
[
messages
,
setMessages
]
=
useState
([])
...
@@ -10,9 +11,25 @@ export function useAIEdit() {
...
@@ -10,9 +11,25 @@ export function useAIEdit() {
const
fetch
=
useCallback
(
async
(
params
)
=>
{
const
fetch
=
useCallback
(
async
(
params
)
=>
{
setIsLoading
(
true
)
setIsLoading
(
true
)
try
{
try
{
const
defaultParams
=
{
ernie_name
:
'ERNIE-4.0-8K-Preview'
,
stream
:
false
}
const
defaultParams
=
{
model
:
'deepseek-v4-1-flash'
,
stream
:
false
}
const
res
=
await
baiduAIChat
({
...
defaultParams
,
params
})
const
{
userInfo
}
=
useUserStore
.
getState
()
const
message
=
{
role
:
'assistant'
,
content
:
res
.
data
.
result
}
const
res
=
await
axios
.
post
(
'https://node-server.ezijing.com/ai/chat/completions'
,
{
...
defaultParams
,
...
params
},
{
headers
:
{
Authorization
:
'Bearer sk-ezj-HbVJBbbzGoCZUVaMXWH-Hyt2rHhdn9K4'
,
'X-User-Id'
:
String
(
userInfo
.
id
??
''
),
'X-User-Name'
:
encodeURIComponent
(
String
(
userInfo
.
real_name
??
''
)),
},
},
)
const
data
=
res
.
data
const
content
=
data
?.
choices
?.[
0
]?.
message
?.
content
??
data
?.
result
if
(
typeof
content
!==
'string'
)
{
throw
new
Error
(
'AI 返回数据中缺少文本内容'
)
}
const
message
=
{
role
:
'assistant'
,
content
}
setMessages
((
prevMessages
)
=>
[...
prevMessages
,
message
])
setMessages
((
prevMessages
)
=>
[...
prevMessages
,
message
])
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
'Error fetching data:'
,
error
)
console
.
error
(
'Error fetching data:'
,
error
)
...
...
apps/admin/src/modules/books/management/chapters/index.jsx
浏览文件 @
95ea0e5a
...
@@ -343,7 +343,7 @@ const Examine = () => {
...
@@ -343,7 +343,7 @@ const Examine = () => {
let
chapterMenuItems
=
[
let
chapterMenuItems
=
[
{
key
:
'1'
,
label
:
'展开全部'
},
{
key
:
'1'
,
label
:
'展开全部'
},
{
key
:
'2'
,
label
:
'添加子节'
},
{
key
:
'2'
,
label
:
'添加子节'
},
{
key
:
'7'
,
label
:
'关联知识图谱'
},
//
{ key: '7', label: '关联知识图谱' },
{
key
:
'5'
,
label
:
'设置编者'
},
{
key
:
'5'
,
label
:
'设置编者'
},
// {
// {
// key: "6",
// key: "6",
...
...
apps/admin/src/utils/axios.ts
浏览文件 @
95ea0e5a
import
axios
,
{
import
axios
,
{
type
AxiosRequestConfig
,
type
AxiosResponse
,
type
InternalAxiosRequestConfig
}
from
'axios'
type
AxiosRequestConfig
,
type
AxiosResponse
,
type
InternalAxiosRequestConfig
,
}
from
'axios'
import
md5
from
'js-md5'
import
md5
from
'js-md5'
import
{
message
,
Modal
,
notification
}
from
'antd'
import
{
message
,
Modal
,
notification
}
from
'antd'
...
@@ -66,10 +62,7 @@ function getSignData(data: unknown): Record<string, unknown> {
...
@@ -66,10 +62,7 @@ function getSignData(data: unknown): Record<string, unknown> {
data
.
forEach
((
value
,
key
)
=>
{
data
.
forEach
((
value
,
key
)
=>
{
if
(
value
instanceof
File
)
return
if
(
value
instanceof
File
)
return
const
previous
=
values
[
key
]
const
previous
=
values
[
key
]
values
[
key
]
=
values
[
key
]
=
previous
===
undefined
?
value
:
[...(
Array
.
isArray
(
previous
)
?
previous
:
[
previous
]),
value
]
previous
===
undefined
?
value
:
[...(
Array
.
isArray
(
previous
)
?
previous
:
[
previous
]),
value
]
})
})
return
values
return
values
}
}
...
@@ -125,7 +118,7 @@ httpRequest.interceptors.response.use(
...
@@ -125,7 +118,7 @@ httpRequest.interceptors.response.use(
if
(
location
.
pathname
!==
ADMIN_LOGIN_PATH
)
showLoginModal
()
if
(
location
.
pathname
!==
ADMIN_LOGIN_PATH
)
showLoginModal
()
return
Promise
.
reject
(
data
)
return
Promise
.
reject
(
data
)
}
}
if
(
data
.
code
!==
200
)
{
if
(
data
.
code
!==
200
&&
data
.
code
!==
0
)
{
if
(
response
.
config
.
resolveBusinessError
)
return
data
if
(
response
.
config
.
resolveBusinessError
)
return
data
if
(
response
.
config
.
silentBusinessError
)
return
Promise
.
reject
(
data
)
if
(
response
.
config
.
silentBusinessError
)
return
Promise
.
reject
(
data
)
notification
.
error
({
message
:
data
.
message
||
'请求错误'
})
notification
.
error
({
message
:
data
.
message
||
'请求错误'
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论