Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-book
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-book
Commits
d180e973
提交
d180e973
authored
7月 21, 2026
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore(admin): update
上级
6d1921de
隐藏空白字符变更
内嵌
并排
正在显示
76 个修改的文件
包含
593 行增加
和
3270 行删除
+593
-3270
index.html
apps/admin/index.html
+2
-2
base.js
apps/admin/src/api/base.js
+11
-2
index.jsx
apps/admin/src/common/Pagination/index.jsx
+0
-157
index.less
apps/admin/src/common/Pagination/index.less
+0
-6
request.js
apps/admin/src/common/request.js
+0
-23
preview.jsx
...min/src/common/wangeditor-customer/components/preview.jsx
+2
-2
index.jsx
apps/admin/src/common/wangeditor-customer/index.jsx
+10
-31
expandRead.js
apps/admin/src/common/wangeditor-customer/node/expandRead.js
+0
-1
expandReadItem.js
...min/src/common/wangeditor-customer/node/expandReadItem.js
+0
-1
image.jsx
apps/admin/src/common/wangeditor-customer/node/image.jsx
+2
-4
practice.js
apps/admin/src/common/wangeditor-customer/node/practice.js
+0
-1
request.js
.../admin/src/common/wangeditor-customer/practice/request.js
+11
-71
request.js
apps/admin/src/common/wangeditor-customer/utils/request.js
+18
-272
index.jsx
apps/admin/src/layout/index.jsx
+1
-1
request.js
apps/admin/src/layout/request.js
+0
-201
api.ts
apps/admin/src/modules/access/admin/api.ts
+8
-37
useAdminList.ts
apps/admin/src/modules/access/admin/useAdminList.ts
+1
-5
AdminListView.tsx
apps/admin/src/modules/access/admin/views/AdminListView.tsx
+1
-2
api.ts
apps/admin/src/modules/access/role/api.ts
+8
-34
useRoleList.ts
apps/admin/src/modules/access/role/useRoleList.ts
+1
-5
RoleListView.tsx
apps/admin/src/modules/access/role/views/RoleListView.tsx
+2
-3
api.ts
apps/admin/src/modules/account/api.ts
+11
-1
AccountView.jsx
apps/admin/src/modules/account/views/AccountView.jsx
+3
-5
api.ts
apps/admin/src/modules/advertisements/adsense/api.ts
+8
-38
api.ts
apps/admin/src/modules/advertisements/advert/api.ts
+9
-35
useAdvertList.ts
.../admin/src/modules/advertisements/advert/useAdvertList.ts
+1
-5
AdvertListView.tsx
...rc/modules/advertisements/advert/views/AdvertListView.tsx
+1
-2
api.ts
apps/admin/src/modules/auth/api.ts
+18
-1
login-api.js
apps/admin/src/modules/auth/request/login-api.js
+0
-5
login.js
apps/admin/src/modules/auth/request/login.js
+0
-38
sso-api.js
apps/admin/src/modules/auth/request/sso-api.js
+0
-9
sso.js
apps/admin/src/modules/auth/request/sso.js
+0
-121
LoginView.jsx
apps/admin/src/modules/auth/views/LoginView.jsx
+2
-2
api.ts
apps/admin/src/modules/books/audit/api.ts
+5
-10
PreviewModal.jsx
...admin/src/modules/books/audit/components/PreviewModal.jsx
+1
-1
api.ts
apps/admin/src/modules/books/classify/api.ts
+4
-14
api.ts
apps/admin/src/modules/books/discussion/api.ts
+4
-14
api.ts
apps/admin/src/modules/books/label/api.ts
+4
-14
api.ts
apps/admin/src/modules/books/management/api.ts
+16
-51
api.js
apps/admin/src/modules/books/management/chapters/api.js
+31
-1
form-chapter-title.jsx
...oks/management/chapters/components/form-chapter-title.jsx
+1
-1
index.jsx
apps/admin/src/modules/books/management/chapters/index.jsx
+9
-9
request.js
apps/admin/src/modules/books/management/chapters/request.js
+0
-360
useManagementList.ts
apps/admin/src/modules/books/management/useManagementList.ts
+1
-5
ManagementListView.tsx
...src/modules/books/management/views/ManagementListView.tsx
+1
-1
api.ts
apps/admin/src/modules/books/orders/api.ts
+8
-32
useOrdersList.ts
apps/admin/src/modules/books/orders/useOrdersList.ts
+1
-5
SalesStatisticsView.tsx
...in/src/modules/books/orders/views/SalesStatisticsView.tsx
+1
-2
api.ts
apps/admin/src/modules/books/question-bank/api.ts
+10
-24
api.ts
apps/admin/src/modules/books/sale/api.ts
+8
-8
api.ts
apps/admin/src/modules/members/level/api.ts
+8
-34
useMemberLevelList.ts
apps/admin/src/modules/members/level/useMemberLevelList.ts
+1
-5
MemberLevelListView.tsx
...n/src/modules/members/level/views/MemberLevelListView.tsx
+1
-2
api.ts
apps/admin/src/modules/members/list/api.ts
+17
-23
MemberDetailView.tsx
.../src/modules/members/list/components/MemberDetailView.tsx
+46
-31
api.ts
apps/admin/src/modules/settings/app-version/api.ts
+14
-1
request.js
apps/admin/src/modules/settings/app-version/request.js
+0
-93
api.ts
apps/admin/src/modules/settings/applied/api.ts
+16
-1
request.js
apps/admin/src/modules/settings/applied/request.js
+0
-110
api.ts
apps/admin/src/modules/settings/coupon/api.ts
+3
-24
api.ts
apps/admin/src/modules/settings/help/api.ts
+22
-98
api.ts
apps/admin/src/modules/settings/personalized/api.ts
+7
-35
PersonalizedSettingsView.tsx
.../settings/personalized/views/PersonalizedSettingsView.tsx
+1
-1
api.ts
apps/admin/src/modules/settings/point-management/api.ts
+22
-68
PointManagementView.tsx
...s/settings/point-management/views/PointManagementView.tsx
+2
-4
api.ts
apps/admin/src/modules/settings/sensitive/api.ts
+18
-1
request.js
apps/admin/src/modules/settings/sensitive/request.js
+0
-116
api.ts
apps/admin/src/modules/student-book/api.ts
+0
-1
request.js
apps/admin/src/modules/student-book/request.js
+0
-360
StudentBookView.jsx
.../admin/src/modules/student-book/views/StudentBookView.jsx
+7
-1
api.ts
apps/admin/src/modules/teachers/list/api.ts
+4
-21
axios.ts
apps/admin/src/utils/axios.ts
+70
-49
captcha.js
apps/admin/src/utils/captcha.js
+11
-11
common.js
apps/admin/src/utils/common.js
+86
-286
exportWordHtmlDocx.js
apps/admin/src/utils/exportWordHtmlDocx.js
+1
-2
request.js
apps/admin/src/utils/request.js
+0
-217
没有找到文件。
apps/admin/index.html
浏览文件 @
d180e973
<!doctype html>
<!doctype html>
<html
lang=
"zh-CN"
>
<html
lang=
"zh-CN"
>
<head>
<head>
<meta
charset=
"UTF-8"
/>
<meta
charset=
"UTF-8"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"https://zws-imgs-pub.ezijing.com/pc/base/favicon.ico"
/>
<link
rel=
"icon"
type=
"image/svg+xml"
href=
"https://zws-imgs-pub.ezijing.com/pc/base/favicon.ico"
/>
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
</head>
</head>
<body>
<body>
<div
id=
"root"
></div>
<div
id=
"root"
></div>
<script
src=
"
%BASE_URL%
formula-editor/dist/formula-editor.min.js"
></script>
<script
src=
"
/
formula-editor/dist/formula-editor.min.js"
></script>
<script
type=
"module"
src=
"/src/main.jsx"
></script>
<script
type=
"module"
src=
"/src/main.jsx"
></script>
</body>
</body>
</html>
</html>
apps/admin/src/api/base.js
浏览文件 @
d180e973
...
@@ -6,8 +6,17 @@ export function getUser() {
...
@@ -6,8 +6,17 @@ export function getUser() {
}
}
// 获取菜单
// 获取菜单
export
function
getMenu
()
{
export
async
function
getMenuList
(
params
)
{
return
axios
.
post
(
"/api/system/power/getMenuList"
);
const
response
=
await
axios
.
post
(
"/api/system/power/getMenuList"
,
params
);
return
{
data
:
response
.
data
,
operation_permissions_list
:
response
.
operation_permissions_list
??
[],
};
}
// 检查当前是否存在可用的 SSO 登录态;未登录时后端返回 { run: "login" }。
export
async
function
checkSSOLogin
()
{
return
(
await
axios
.
post
(
"/api/user/checkSsoLogin"
)).
data
;
}
}
// 获取STSToken
// 获取STSToken
...
...
apps/admin/src/common/Pagination/index.jsx
deleted
100644 → 0
浏览文件 @
6d1921de
import
React
,
{
useState
,
useEffect
,
useRef
}
from
"react"
;
import
{
Pagination
,
Space
,
InputNumber
,
Button
,
Select
}
from
"antd"
;
import
{
LeftOutlined
,
RightOutlined
}
from
"@ant-design/icons"
;
import
"./index.less"
;
const
PaginationCom
=
(
props
)
=>
{
const
{
total
,
page
=
1
,
page_size
=
10
,
setpage_size
=
()
=>
{},
filterObj
=
{},
setPage
=
()
=>
{},
init
=
()
=>
{},
}
=
props
;
const
isFirstRender
=
useRef
(
true
);
// 使用 useRef 创建一个标志位
const
pageItemRender
=
(
page
,
type
,
originalElement
)
=>
{
if
(
type
===
"prev"
)
{
return
(
<
Button
disabled=
{
page
===
1
}
type=
"default"
icon=
{
<
LeftOutlined
style=
{
{
width
:
10
}
}
/>
}
></
Button
>
);
}
if
(
type
===
"next"
)
{
return
(
<
Button
disabled=
{
total
/
page_size
>=
page
}
type=
"default"
icon=
{
<
RightOutlined
style=
{
{
width
:
10
}
}
/>
}
></
Button
>
);
}
return
originalElement
;
};
const
[
jumpSize
,
setJumpSize
]
=
useState
(
1
);
const
[
maxSize
,
setMaxSize
]
=
useState
(
1
);
useEffect
(()
=>
{
if
(
total
)
{
setMaxSize
(
Math
.
ceil
(
total
/
page_size
));
}
if
(
page
)
{
setJumpSize
(
page
);
}
},
[
total
,
page
]);
useEffect
(()
=>
{
// console.log('page', page, filterObj)
// 在第一次渲染时不执行 init 函数
// if (!isFirstRender.current) {
let
obj
=
{
...
filterObj
};
for
(
const
key
in
obj
)
{
if
(
!
obj
[
key
])
{
delete
obj
[
key
];
}
}
init
(
obj
);
// } else {
// isFirstRender.current = false;
// }
},
[
page
,
page_size
]);
return
(
<
div
className=
"pagination"
style=
{
{
display
:
"flex"
,
justifyContent
:
"space-between"
,
alignItems
:
"center"
,
paddingBottom
:
10
,
}
}
>
<
Space
>
<
span
>
共
{
total
}
条数据
</
span
>
<
Select
defaultValue=
{
page_size
}
options=
{
[
{
label
:
"10条/页"
,
value
:
10
,
},
{
label
:
"20条/页"
,
value
:
20
,
},
{
label
:
"30条/页"
,
value
:
30
,
},
{
label
:
"40条/页"
,
value
:
40
,
},
]
}
onChange=
{
(
val
)
=>
{
setPage
(
1
);
setpage_size
(
val
);
}
}
/>
</
Space
>
<
div
style=
{
{
display
:
"flex"
,
justifyContent
:
"flex-end"
,
alignItems
:
"center"
}
}
>
<
Space
>
<
Pagination
current=
{
page
}
total=
{
total
}
showSizeChanger=
{
false
}
// 隐藏每页条数选择框
pageSize=
{
page_size
}
showQuickJumper=
{
false
}
onChange=
{
(
val
)
=>
{
setPage
(
val
);
if
(
document
.
querySelector
(
".ant-table-body"
))
{
document
.
querySelector
(
".ant-table-body"
).
scrollTo
({
top
:
0
,
behavior
:
"smooth"
,
});
}
}
}
itemRender=
{
pageItemRender
}
></
Pagination
>
<
Space
>
<
span
>
前往
</
span
>
<
InputNumber
className=
"aa"
autoComplete=
"off"
value=
{
jumpSize
}
controls=
{
false
}
onPressEnter=
{
(
ev
)
=>
{
let
val
=
ev
.
target
.
value
;
let
reg
=
/^
\d
+$/
;
if
(
!
reg
.
test
(
val
))
{
return
;
}
if
(
!
val
||
val
<
1
)
{
setPage
(
1
);
setJumpSize
(
1
);
return
;
}
if
(
val
>=
maxSize
)
{
setPage
(
maxSize
);
setJumpSize
(
maxSize
);
return
;
}
setPage
(
val
);
setJumpSize
(
val
);
}
}
style=
{
{
width
:
50
}
}
/>
<
span
>
页
</
span
>
</
Space
>
</
Space
>
</
div
>
</
div
>
);
};
export
default
PaginationCom
;
apps/admin/src/common/Pagination/index.less
deleted
100644 → 0
浏览文件 @
6d1921de
.pagination .ant-pagination .ant-pagination-item-active {
background-color: #aa1941;
a {
color: #ffffffb2 !important;
}
}
apps/admin/src/common/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 菜单列表
const
getMenuList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/power/getMenuList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getMenuList
};
apps/admin/src/common/wangeditor-customer/components/preview.jsx
浏览文件 @
d180e973
import
React
,
{
useEffect
,
useState
,
useRef
,
useImperativeHandle
,
forwardRef
}
from
"react"
;
import
React
,
{
useEffect
,
useState
,
useRef
,
useImperativeHandle
,
forwardRef
}
from
"react"
;
import
{
Modal
,
Drawer
,
Tree
,
Button
,
Spin
,
Space
,
Input
,
Image
}
from
"antd"
;
import
{
Modal
,
Drawer
,
Tree
,
Button
,
Spin
,
Space
,
Input
,
Image
}
from
"antd"
;
import
{
LeftOutlined
,
RightOutlined
}
from
"@ant-design/icons"
;
import
{
LeftOutlined
,
RightOutlined
}
from
"@ant-design/icons"
;
import
{
getInfoByChapterId
}
from
"@/modules/books/management/chapters/
request
"
;
import
{
getInfoByChapterId
}
from
"@/modules/books/management/chapters/
api
"
;
import
{
get
}
from
"lodash-es"
;
import
{
get
}
from
"lodash-es"
;
import
$
,
{
event
}
from
"jquery"
;
import
$
from
"jquery"
;
import
baike
from
"@/assets/images/editor/icon-baike.png"
;
import
baike
from
"@/assets/images/editor/icon-baike.png"
;
import
{
getChapterTopic
,
expandReadInfo
}
from
"../utils/request"
;
import
{
getChapterTopic
,
expandReadInfo
}
from
"../utils/request"
;
import
TopicItem
from
"../practice/components/topicItem"
;
import
TopicItem
from
"../practice/components/topicItem"
;
...
...
apps/admin/src/common/wangeditor-customer/index.jsx
浏览文件 @
d180e973
...
@@ -91,7 +91,6 @@ import PracticeSettingModal from "./practice/index";
...
@@ -91,7 +91,6 @@ import PracticeSettingModal from "./practice/index";
import
PreviewModal
from
"./components/preview"
;
import
PreviewModal
from
"./components/preview"
;
import
HistoryModal
from
"./history/"
;
import
HistoryModal
from
"./history/"
;
import
$
from
"jquery"
;
import
"./index.less"
;
import
"./index.less"
;
...
@@ -285,35 +284,24 @@ const WangEditorCustomer = (props, ref) => {
...
@@ -285,35 +284,24 @@ const WangEditorCustomer = (props, ref) => {
const
listenNodeStyle
=
(
path
)
=>
{
const
listenNodeStyle
=
(
path
)
=>
{
const
children
=
editor
.
children
;
const
children
=
editor
.
children
;
const
getNodeFontSize
=
(
targetNode
)
=>
{
const
element
=
editor
.
toDOMNode
(
targetNode
);
const
textElement
=
element
.
querySelector
(
"[data-slate-string='true']"
);
const
parentNode
=
editor
.
getParentNode
(
targetNode
);
const
fallbackElement
=
parentNode
?
editor
.
toDOMNode
(
parentNode
)
:
element
;
return
window
.
getComputedStyle
(
textElement
||
fallbackElement
).
fontSize
;
};
let
node
=
null
;
let
node
=
null
;
if
(
path
[
1
]
===
0
)
{
if
(
path
[
1
]
===
0
)
{
node
=
children
[
path
[
0
]];
node
=
children
[
path
[
0
]];
if
(
node
.
children
.
length
>
0
)
{
if
(
node
.
children
.
length
>
0
)
{
const
elem
=
editor
.
toDOMNode
(
node
);
// 返回 HTMLElement
setSelectionSize
(
parseInt
(
getNodeFontSize
(
node
)));
let
fontSize
=
18
;
if
(
$
(
elem
).
find
(
"[data-slate-string='true']"
))
{
fontSize
=
$
(
elem
).
find
(
"[data-slate-string='true']"
).
css
(
"fontSize"
);
}
else
{
const
parentNode
=
editor
.
getParentNode
(
node
);
// 返回 node 或者 null
const
elemParent
=
editor
.
toDOMNode
(
parentNode
);
// 返回 HTMLElement
fontSize
=
$
(
elemParent
).
css
(
"fontSize"
);
}
setSelectionSize
(
parseInt
(
fontSize
));
}
else
{
}
else
{
node
=
children
[
path
[
0
]].
children
[
0
];
node
=
children
[
path
[
0
]].
children
[
0
];
if
(
node
.
fontSize
)
{
if
(
node
.
fontSize
)
{
setSelectionSize
(
parseInt
(
node
.
fontSize
));
setSelectionSize
(
parseInt
(
node
.
fontSize
));
}
else
{
}
else
{
const
elem
=
editor
.
toDOMNode
(
node
);
// 返回 HTMLElement
setSelectionSize
(
parseInt
(
getNodeFontSize
(
node
)));
let
fontSize
=
18
;
if
(
$
(
elem
).
find
(
"[data-slate-string='true']"
))
{
fontSize
=
$
(
elem
).
find
(
"[data-slate-string='true']"
).
css
(
"fontSize"
);
}
else
{
const
parentNode
=
editor
.
getParentNode
(
node
);
// 返回 node 或者 null
const
elemParent
=
editor
.
toDOMNode
(
parentNode
);
// 返回 HTMLElement
fontSize
=
$
(
elemParent
).
css
(
"fontSize"
);
}
setSelectionSize
(
parseInt
(
fontSize
));
}
}
}
}
}
else
{
}
else
{
...
@@ -321,16 +309,7 @@ const WangEditorCustomer = (props, ref) => {
...
@@ -321,16 +309,7 @@ const WangEditorCustomer = (props, ref) => {
if
(
node
.
fontSize
)
{
if
(
node
.
fontSize
)
{
setSelectionSize
(
parseInt
(
node
.
fontSize
));
setSelectionSize
(
parseInt
(
node
.
fontSize
));
}
else
{
}
else
{
const
elem
=
editor
.
toDOMNode
(
node
);
// 返回 HTMLElement
setSelectionSize
(
parseInt
(
getNodeFontSize
(
node
)));
let
fontSize
=
18
;
if
(
$
(
elem
).
find
(
"[data-slate-string='true']"
))
{
fontSize
=
$
(
elem
).
find
(
"[data-slate-string='true']"
).
css
(
"fontSize"
);
}
else
{
const
parentNode
=
editor
.
getParentNode
(
node
);
// 返回 node 或者 null
const
elemParent
=
editor
.
toDOMNode
(
parentNode
);
// 返回 HTMLElement
fontSize
=
$
(
elemParent
).
css
(
"fontSize"
);
}
setSelectionSize
(
parseInt
(
fontSize
));
}
}
}
}
};
};
...
...
apps/admin/src/common/wangeditor-customer/node/expandRead.js
浏览文件 @
d180e973
...
@@ -6,7 +6,6 @@ import {
...
@@ -6,7 +6,6 @@ import {
SlateNode
,
SlateNode
,
}
from
"@wangeditor/editor"
;
}
from
"@wangeditor/editor"
;
import
{
h
}
from
"snabbdom"
;
import
{
h
}
from
"snabbdom"
;
import
$
from
"jquery"
;
import
iconExpand
from
"@/assets/images/editor/icon_expand_read.png"
;
import
iconExpand
from
"@/assets/images/editor/icon_expand_read.png"
;
import
iconClose
from
"@/assets/images/icon_chapter_close.png"
;
import
iconClose
from
"@/assets/images/icon_chapter_close.png"
;
import
{
findNodeWithParent
}
from
"../utils/setting"
;
import
{
findNodeWithParent
}
from
"../utils/setting"
;
...
...
apps/admin/src/common/wangeditor-customer/node/expandReadItem.js
浏览文件 @
d180e973
...
@@ -6,7 +6,6 @@ import {
...
@@ -6,7 +6,6 @@ import {
SlateNode
,
SlateNode
,
}
from
"@wangeditor/editor"
;
}
from
"@wangeditor/editor"
;
import
{
h
}
from
"snabbdom"
;
import
{
h
}
from
"snabbdom"
;
import
$
from
"jquery"
;
import
iconExpand
from
"@/assets/images/editor/icon_expand_tips.png"
;
import
iconExpand
from
"@/assets/images/editor/icon_expand_tips.png"
;
import
iconExpandT
from
"@/assets/images/editor/icon_expand_editor.png"
;
import
iconExpandT
from
"@/assets/images/editor/icon_expand_editor.png"
;
...
...
apps/admin/src/common/wangeditor-customer/node/image.jsx
浏览文件 @
d180e973
...
@@ -429,8 +429,6 @@ const parseImageHtml = (domElem, children, editor) => {
...
@@ -429,8 +429,6 @@ const parseImageHtml = (domElem, children, editor) => {
const
imgUrl
=
domElem
.
getAttribute
(
"data-imgUrl"
)
||
""
;
const
imgUrl
=
domElem
.
getAttribute
(
"data-imgUrl"
)
||
""
;
const
imgDescript
=
domElem
.
getAttribute
(
"data-imgDescript"
)
||
""
;
const
imgDescript
=
domElem
.
getAttribute
(
"data-imgDescript"
)
||
""
;
const
title
=
domElem
.
getAttribute
(
"data-title"
)
||
""
;
const
title
=
domElem
.
getAttribute
(
"data-title"
)
||
""
;
const
$elem
=
$
(
domElem
);
// 生成“附件”元素(按照此前约定的数据结构)
// 生成“附件”元素(按照此前约定的数据结构)
const
myResume
=
{
const
myResume
=
{
type
:
"chapterImage"
,
type
:
"chapterImage"
,
...
@@ -438,8 +436,8 @@ const parseImageHtml = (domElem, children, editor) => {
...
@@ -438,8 +436,8 @@ const parseImageHtml = (domElem, children, editor) => {
imgUrl
,
imgUrl
,
imgDescript
,
imgDescript
,
style
:
{
style
:
{
width
:
getStyleValue
(
$e
lem
,
"width"
),
width
:
getStyleValue
(
domE
lem
,
"width"
),
height
:
getStyleValue
(
$e
lem
,
"height"
),
height
:
getStyleValue
(
domE
lem
,
"height"
),
},
},
children
:
[{
text
:
""
}],
// void node 必须有 children ,其中有一个空字符串,重要!!!
children
:
[{
text
:
""
}],
// void node 必须有 children ,其中有一个空字符串,重要!!!
};
};
...
...
apps/admin/src/common/wangeditor-customer/node/practice.js
浏览文件 @
d180e973
...
@@ -2,7 +2,6 @@ import { DomEditor, SlateTransforms, SlateEditor } from "@wangeditor/editor";
...
@@ -2,7 +2,6 @@ import { DomEditor, SlateTransforms, SlateEditor } from "@wangeditor/editor";
import
{
h
}
from
"snabbdom"
;
import
{
h
}
from
"snabbdom"
;
import
iconClose
from
"@/assets/images/icon_chapter_close.png"
;
import
iconClose
from
"@/assets/images/icon_chapter_close.png"
;
import
{
delChapterTopic
}
from
"../utils/request"
;
import
{
delChapterTopic
}
from
"../utils/request"
;
import
$
from
"jquery"
;
import
"../utils/iconfont"
;
import
"../utils/iconfont"
;
import
{
hexToRgb
}
from
"@/utils/common"
;
import
{
hexToRgb
}
from
"@/utils/common"
;
import
{
findNodeWithParent
}
from
"../utils/setting"
;
import
{
findNodeWithParent
}
from
"../utils/setting"
;
...
...
apps/admin/src/common/wangeditor-customer/practice/request.js
浏览文件 @
d180e973
import
axios
from
"@/utils/request.js"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 题目列表
const
getList
=
async
(
obj
)
=>
{
const
res
=
await
axios
.
post
(
"/question/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
};
// add
const
questionAdd
=
async
(
obj
)
=>
{
const
res
=
await
axios
.
post
(
"/question/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
};
// 添加题目分类
const
questionAddType
=
async
(
obj
)
=>
{
const
res
=
await
axios
.
post
(
"/type/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
};
// 题目分类列表
const
typeAllList
=
async
(
obj
)
=>
{
const
res
=
await
axios
.
post
(
"/type/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
};
// 书籍名称下拉列表
const
post
=
async
(
path
,
params
,
notify
=
false
)
=>
{
const
bookNameList
=
async
(
obj
)
=>
{
const
response
=
await
axios
.
post
(
path
,
params
);
const
res
=
await
axios
.
post
(
"book/teacher/getListAll"
,
qs
.
stringify
(
obj
));
if
(
notify
)
notifySuccess
(
response
.
message
);
const
code
=
get
(
res
,
"data.code"
,
0
);
return
response
.
data
;
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
};
};
export
{
getList
,
questionAdd
,
questionAddType
,
typeAllList
,
bookNameList
};
export
const
getList
=
(
params
)
=>
post
(
"/question/getList"
,
params
);
export
const
questionAdd
=
(
params
)
=>
post
(
"/question/add"
,
params
,
true
);
export
const
questionAddType
=
(
params
)
=>
post
(
"/type/add"
,
params
);
export
const
typeAllList
=
(
params
)
=>
post
(
"/type/getList"
,
params
);
export
const
bookNameList
=
(
params
)
=>
post
(
"/book/teacher/getListAll"
,
params
);
apps/admin/src/common/wangeditor-customer/utils/request.js
浏览文件 @
d180e973
import
axios
from
"@/utils/request.js"
;
import
axios
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
const
post
=
async
(
path
,
params
)
=>
(
await
axios
.
post
(
path
,
params
)).
data
;
import
{
message
}
from
"antd"
;
export
const
getTopicList
=
(
params
)
=>
post
(
"/book/question/getList"
,
params
);
// 获取题目列表
export
const
getTopicTypeList
=
(
params
)
=>
post
(
"/book/question/type/getList"
,
params
);
const
getTopicList
=
async
(
obj
)
=>
{
export
const
addChapterTopic
=
(
params
)
=>
post
(
"/book/chapter/question/add"
,
params
);
try
{
export
const
getChapterTopic
=
(
params
)
=>
post
(
"/book/chapter/question/getQuestionList"
,
params
);
const
res
=
await
axios
.
post
(
"/book/question/getList"
,
qs
.
stringify
(
obj
));
export
const
delChapterTopic
=
(
params
)
=>
post
(
"/book/chapter/question/removeQuestion"
,
params
);
const
code
=
get
(
res
,
"data.code"
,
0
);
export
const
addChapterTooltip
=
(
params
)
=>
post
(
"/book/bubble/add"
,
params
);
const
data
=
get
(
res
,
"data.data"
,
[]);
export
const
delChapterTooltip
=
(
params
)
=>
post
(
"/book/bubble/removeBubble"
,
params
);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
export
const
addExpandRead
=
(
params
)
=>
post
(
"/book/extend/add"
,
params
);
if
(
code
===
200
)
{
export
const
delExpandRead
=
(
params
)
=>
post
(
"/book/extend/removeExtend"
,
params
);
return
data
;
export
const
expandReadInfo
=
(
params
)
=>
post
(
"/book/extend/info"
,
params
);
}
else
{
export
const
addGallery
=
(
params
)
=>
post
(
"/book/gallery/add"
,
params
);
message
.
error
(
msg
);
export
const
delGallery
=
(
params
)
=>
post
(
"/book/gallery/removeGallery"
,
params
);
return
false
;
export
const
getRecordInfo
=
(
params
)
=>
post
(
"/book/teacher/section/getRecordInfo"
,
params
);
}
export
const
getRecordList
=
(
params
)
=>
post
(
"/book/teacher/section/getRecordList"
,
params
);
}
catch
(
error
)
{
return
false
;
}
};
// 获取题目分类列表
const
getTopicTypeList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/question/type/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加练习
const
addChapterTopic
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加练习
const
getChapterTopic
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/getQuestionList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除练习
const
delChapterTopic
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/removeQuestion"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加气泡
const
addChapterTooltip
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/bubble/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除气泡
const
delChapterTooltip
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/bubble/removeBubble"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加扩展
const
addExpandRead
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/extend/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除扩展
const
delExpandRead
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/extend/removeExtend"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 扩展详情
const
expandReadInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/extend/info"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除扩展
const
addGallery
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/gallery/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除画廊
const
delGallery
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/gallery/removeGallery"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"获取OSS令牌失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 保存历史详情
const
getRecordInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getRecordInfo"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 保存历史记录
const
getRecordList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getRecordList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getTopicList
,
getTopicTypeList
,
addChapterTopic
,
delChapterTopic
,
getChapterTopic
,
addChapterTooltip
,
delChapterTooltip
,
addExpandRead
,
delExpandRead
,
expandReadInfo
,
addGallery
,
delGallery
,
getRecordInfo
,
getRecordList
,
};
apps/admin/src/layout/index.jsx
浏览文件 @
d180e973
...
@@ -49,7 +49,7 @@ import Breadcrumb from './components/breadcrumb'
...
@@ -49,7 +49,7 @@ import Breadcrumb from './components/breadcrumb'
import
'./index.less'
import
'./index.less'
import
logo
from
'@/assets/images/logo.png'
import
logo
from
'@/assets/images/logo.png'
import
{
getMenuList
,
checkSSOLogin
}
from
'
./request
'
import
{
getMenuList
,
checkSSOLogin
}
from
'
@/api/base
'
const
{
Header
,
Content
,
Sider
}
=
Layout
const
{
Header
,
Content
,
Sider
}
=
Layout
...
...
apps/admin/src/layout/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 用户信息
const
getUserInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/user/getUserInfo"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 退出
const
loginout
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/login/out"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 菜单列表
const
getMenuList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/power/getMenuList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
operation_permissions_list
=
get
(
res
,
"data.operation_permissions_list"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
{
data
,
operation_permissions_list
};
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改密码
const
changePass
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/user/changePass"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改信息
const
changeInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/user/editUserInfo"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 消息列表
const
getMessageList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/message/message/getMessageList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取未读消息条数
const
getMessageCount
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/message/message/getMessageCount"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 设置部分已读
const
setRead
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/message/message/setOneRead"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 设置全部已读
const
setAllRead
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/message/message/setRead"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
const
checkSSOLogin
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/checkSsoLogin"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
msg
===
"Undefined index: verify"
)
{
message
.
error
(
"请先点击按钮进行验证"
);
return
false
;
}
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
export
{
getUserInfo
,
getMenuList
,
changePass
,
changeInfo
,
getMessageList
,
getMessageCount
,
setRead
,
setAllRead
,
loginout
,
checkSSOLogin
,
};
apps/admin/src/modules/access/admin/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
type
{
AdminQuery
}
from
"./query"
;
import
type
{
AdminQuery
}
from
"./query"
;
...
@@ -30,46 +26,21 @@ export interface AdminListResult {
...
@@ -30,46 +26,21 @@ export interface AdminListResult {
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
|
false
>
{
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
>
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
return
response
.
data
as
T
;
const
body
=
response
.
data
as
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
const
code
=
body
?.
code
??
0
;
const
data
=
(
body
?.
data
??
[])
as
T
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
return
data
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
async
function
mutate
(
url
:
string
,
params
:
ApiParams
):
Promise
<
boolean
>
{
async
function
mutate
(
url
:
string
,
params
:
ApiParams
):
Promise
<
boolean
>
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
{
code
?:
number
;
message
?:
string
};
return
true
;
const
code
=
body
?.
code
??
0
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getAdminList
(
params
:
AdminQuery
):
Promise
<
AdminListResult
|
false
>
{
export
async
function
getAdminList
(
params
:
AdminQuery
):
Promise
<
AdminListResult
>
{
const
data
=
await
getPayload
<
{
list
?:
AdminRow
[];
total
?:
number
}
>
(
"/user/user/getList"
,
{
const
data
=
await
getPayload
<
{
list
?:
AdminRow
[];
total
?:
number
}
>
(
"/user/user/getList"
,
{
...
params
,
...
params
,
});
});
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
...
apps/admin/src/modules/access/admin/useAdminList.ts
浏览文件 @
d180e973
...
@@ -32,12 +32,8 @@ export function useAdminList() {
...
@@ -32,12 +32,8 @@ export function useAdminList() {
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
AdminListResult
|
false
=
await
getAdminList
(
query
);
const
result
:
AdminListResult
=
await
getAdminList
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/access/admin/views/AdminListView.tsx
浏览文件 @
d180e973
...
@@ -45,7 +45,7 @@ export default function AdminListView() {
...
@@ -45,7 +45,7 @@ export default function AdminListView() {
useEffect
(()
=>
{
useEffect
(()
=>
{
let
active
=
true
;
let
active
=
true
;
void
getRoleOptions
().
then
((
result
)
=>
{
void
getRoleOptions
().
then
((
result
)
=>
{
if
(
active
&&
result
!==
false
)
setRoles
(
result
);
if
(
active
)
setRoles
(
result
);
});
});
return
()
=>
{
return
()
=>
{
active
=
false
;
active
=
false
;
...
@@ -54,7 +54,6 @@ export default function AdminListView() {
...
@@ -54,7 +54,6 @@ export default function AdminListView() {
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
admin
=
await
getAdminInfo
(
id
);
const
admin
=
await
getAdminInfo
(
id
);
if
(
admin
===
false
)
return
;
setSelectedId
(
id
);
setSelectedId
(
id
);
setIsAdd
(
false
);
setIsAdd
(
false
);
setInitialAdmin
({
setInitialAdmin
({
...
...
apps/admin/src/modules/access/role/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
type
{
RoleQuery
}
from
"./query"
;
import
type
{
RoleQuery
}
from
"./query"
;
...
@@ -29,43 +25,21 @@ export interface RoleListResult {
...
@@ -29,43 +25,21 @@ export interface RoleListResult {
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
|
false
>
{
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
>
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
return
response
.
data
as
T
;
const
body
=
response
.
data
as
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
const
code
=
body
?.
code
??
0
;
const
data
=
(
body
?.
data
??
[])
as
T
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
return
data
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
{
code
?:
number
;
message
?:
string
};
return
true
;
const
code
=
body
?.
code
??
0
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getRoleList
(
params
:
RoleQuery
):
Promise
<
RoleListResult
|
false
>
{
export
async
function
getRoleList
(
params
:
RoleQuery
):
Promise
<
RoleListResult
>
{
const
data
=
await
getPayload
<
{
list
?:
RoleRow
[];
total
?:
number
}
>
(
"/user/role/getList"
,
{
const
data
=
await
getPayload
<
{
list
?:
RoleRow
[];
total
?:
number
}
>
(
"/user/role/getList"
,
{
...
params
,
...
params
,
});
});
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
...
apps/admin/src/modules/access/role/useRoleList.ts
浏览文件 @
d180e973
...
@@ -31,12 +31,8 @@ export function useRoleList() {
...
@@ -31,12 +31,8 @@ export function useRoleList() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
RoleListResult
|
false
=
await
getRoleList
(
query
);
const
result
:
RoleListResult
=
await
getRoleList
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/access/role/views/RoleListView.tsx
浏览文件 @
d180e973
...
@@ -47,7 +47,7 @@ export default function RoleListView() {
...
@@ -47,7 +47,7 @@ export default function RoleListView() {
useEffect
(()
=>
{
useEffect
(()
=>
{
let
active
=
true
;
let
active
=
true
;
void
getAllPermissions
().
then
((
result
)
=>
{
void
getAllPermissions
().
then
((
result
)
=>
{
if
(
active
&&
result
!==
false
)
{
if
(
active
)
{
setPermissionTree
(
convertToAntdTreeData
(
result
)
as
PermissionTreeNode
[]);
setPermissionTree
(
convertToAntdTreeData
(
result
)
as
PermissionTreeNode
[]);
}
}
});
});
...
@@ -58,7 +58,6 @@ export default function RoleListView() {
...
@@ -58,7 +58,6 @@ export default function RoleListView() {
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
role
=
await
getRoleInfo
(
id
);
const
role
=
await
getRoleInfo
(
id
);
if
(
role
===
false
)
return
;
setSelectedId
(
id
);
setSelectedId
(
id
);
setIsAdd
(
false
);
setIsAdd
(
false
);
setInitialRole
({
setInitialRole
({
...
@@ -94,7 +93,7 @@ export default function RoleListView() {
...
@@ -94,7 +93,7 @@ export default function RoleListView() {
setSelectedId
(
id
);
setSelectedId
(
id
);
setPermissionOpen
(
true
);
setPermissionOpen
(
true
);
const
result
=
await
getRolePermissionIds
(
id
);
const
result
=
await
getRolePermissionIds
(
id
);
setCheckedKeys
(
result
===
false
?
[]
:
result
);
setCheckedKeys
(
result
);
};
};
const
submitPermissions
=
async
()
=>
{
const
submitPermissions
=
async
()
=>
{
...
...
apps/admin/src/modules/account/api.ts
浏览文件 @
d180e973
export
{
changePass
,
changeInfo
,
getUserInfo
}
from
"@/layout/request"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
export
const
getUserInfo
=
async
(
params
)
=>
(
await
axios
.
post
(
"/user/user/getUserInfo"
,
params
)).
data
;
export
const
changePass
=
async
(
params
)
=>
(
await
axios
.
post
(
"/user/user/changePass"
,
params
)).
data
;
export
const
changeInfo
=
async
(
params
)
=>
{
const
response
=
await
axios
.
post
(
"/user/user/editUserInfo"
,
params
);
notifySuccess
(
response
.
message
);
return
response
.
data
;
};
apps/admin/src/modules/account/views/AccountView.jsx
浏览文件 @
d180e973
import
{
useState
,
useEffect
}
from
"react"
;
import
{
useState
,
useEffect
}
from
"react"
;
import
{
Form
,
Input
,
Button
,
Space
,
Row
,
Col
,
Drawer
}
from
"antd"
;
import
{
Form
,
Input
,
Button
,
Space
,
Row
,
Col
,
Drawer
}
from
"antd"
;
import
users
from
"@/assets/images/icon/userinfo.png"
;
import
users
from
"@/assets/images/icon/userinfo.png"
;
import
{
changePass
,
changeInfo
,
getUserInfo
}
from
"
@/layout/request
"
;
import
{
changePass
,
changeInfo
,
getUserInfo
}
from
"
../api
"
;
import
{
useNavigate
}
from
"react-router"
;
import
{
useNavigate
}
from
"react-router"
;
import
UploadImage
from
"@/components/uploadImage"
;
import
UploadImage
from
"@/components/uploadImage"
;
...
@@ -39,10 +39,8 @@ const UserInfo = () => {
...
@@ -39,10 +39,8 @@ const UserInfo = () => {
};
};
const
submitForm
=
async
(
obj
)
=>
{
const
submitForm
=
async
(
obj
)
=>
{
const
updatedData
=
await
changeInfo
({
...
obj
});
await
changeInfo
({
...
obj
});
if
(
updatedData
)
{
await
fetchData
();
await
fetchData
();
}
};
};
return
(
return
(
...
...
apps/admin/src/modules/advertisements/adsense/api.ts
浏览文件 @
d180e973
import
{
message
}
from
'antd'
import
axios
,
{
notifySuccess
}
from
'@/utils/axios'
import
qs
from
'qs'
import
axios
from
'@/utils/request'
export
type
AdsenseRow
=
{
export
type
AdsenseRow
=
{
id
:
number
id
:
number
...
@@ -15,29 +12,13 @@ export type AdsenseListResult = {
...
@@ -15,29 +12,13 @@ export type AdsenseListResult = {
total
:
number
total
:
number
}
}
type
ApiEnvelope
<
T
>
=
{
code
?:
number
data
?:
T
message
?:
string
}
function
getMessage
(
envelope
:
ApiEnvelope
<
unknown
>
)
{
return
envelope
.
message
||
'数据获取失败!'
}
export
async
function
getPositionList
(
query
:
Record
<
string
,
unknown
>
):
Promise
<
AdsenseListResult
>
{
export
async
function
getPositionList
(
query
:
Record
<
string
,
unknown
>
):
Promise
<
AdsenseListResult
>
{
const
response
=
await
axios
.
post
(
'/ad/position/getList'
,
qs
.
stringify
(
query
))
const
response
=
await
axios
.
post
(
'/ad/position/getList'
,
query
)
const
envelope
=
response
.
data
as
ApiEnvelope
<
{
list
?:
AdsenseRow
[];
total
?:
number
}
>
const
data
=
response
.
data
as
{
list
?:
AdsenseRow
[];
total
?:
number
}
if
(
envelope
.
code
!==
200
)
{
const
error
=
new
Error
(
getMessage
(
envelope
))
message
.
error
(
error
.
message
)
throw
error
}
return
{
return
{
rows
:
envelope
.
data
?
.
list
??
[],
rows
:
data
.
list
??
[],
total
:
envelope
.
data
?
.
total
??
0
,
total
:
data
.
total
??
0
,
}
}
}
}
...
@@ -48,18 +29,7 @@ export async function changePositionStatus({
...
@@ -48,18 +29,7 @@ export async function changePositionStatus({
id
:
number
id
:
number
status
:
'0'
|
'1'
status
:
'0'
|
'1'
}):
Promise
<
boolean
>
{
}):
Promise
<
boolean
>
{
try
{
const
response
=
await
axios
.
post
(
'/ad/position/changeStatus'
,
{
id
,
status
})
const
response
=
await
axios
.
post
(
'/ad/position/changeStatus'
,
qs
.
stringify
({
id
,
status
}))
notifySuccess
(
response
.
message
)
const
envelope
=
response
.
data
as
ApiEnvelope
<
unknown
>
return
true
if
(
envelope
.
code
!==
200
)
{
message
.
error
(
getMessage
(
envelope
))
return
false
}
message
.
success
(
getMessage
(
envelope
))
return
true
}
catch
{
return
false
}
}
}
apps/admin/src/modules/advertisements/advert/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
type
{
AdvertQuery
}
from
"./query"
;
import
type
{
AdvertQuery
}
from
"./query"
;
...
@@ -29,42 +25,21 @@ export interface AdvertListResult {
...
@@ -29,42 +25,21 @@ export interface AdvertListResult {
}
}
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiBody
<
T
>
=
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
>
{
const
response
=
await
axios
.
post
(
url
,
params
);
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
|
false
>
{
return
response
.
data
as
T
;
try
{
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
const
body
=
response
.
data
as
ApiBody
<
T
>
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
return
(
body
.
data
??
[])
as
T
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getAdvertList
(
query
:
AdvertQuery
):
Promise
<
AdvertListResult
|
false
>
{
export
async
function
getAdvertList
(
query
:
AdvertQuery
):
Promise
<
AdvertListResult
>
{
const
data
=
await
getPayload
<
{
list
?:
AdvertRow
[];
total
?:
number
}
>
(
"/ad/ad/getList"
,
{
const
data
=
await
getPayload
<
{
list
?:
AdvertRow
[];
total
?:
number
}
>
(
"/ad/ad/getList"
,
{
...
query
,
...
query
,
});
});
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
@@ -88,8 +63,7 @@ export function changeAdvertStatus(id: number, status: "0" | "1") {
...
@@ -88,8 +63,7 @@ export function changeAdvertStatus(id: number, status: "0" | "1") {
return
mutate
(
"/ad/ad/changeStatus"
,
{
id
,
status
});
return
mutate
(
"/ad/ad/changeStatus"
,
{
id
,
status
});
}
}
export
async
function
getAdvertPositions
():
Promise
<
AdvertPosition
[]
|
false
>
{
export
async
function
getAdvertPositions
():
Promise
<
AdvertPosition
[]
>
{
const
result
=
await
getPayload
<
{
list
?:
AdvertPosition
[]
}
>
(
"/ad/position/getList"
,
{});
const
result
=
await
getPayload
<
{
list
?:
AdvertPosition
[]
}
>
(
"/ad/position/getList"
,
{});
if
(
!
result
)
return
false
;
return
(
result
.
list
??
[])
as
AdvertPosition
[];
return
(
result
.
list
??
[])
as
AdvertPosition
[];
}
}
apps/admin/src/modules/advertisements/advert/useAdvertList.ts
浏览文件 @
d180e973
...
@@ -32,12 +32,8 @@ export function useAdvertList() {
...
@@ -32,12 +32,8 @@ export function useAdvertList() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
AdvertListResult
|
false
=
await
getAdvertList
(
query
);
const
result
:
AdvertListResult
=
await
getAdvertList
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/advertisements/advert/views/AdvertListView.tsx
浏览文件 @
d180e973
...
@@ -43,7 +43,7 @@ export default function AdvertListView() {
...
@@ -43,7 +43,7 @@ export default function AdvertListView() {
useEffect
(()
=>
{
useEffect
(()
=>
{
let
active
=
true
;
let
active
=
true
;
void
getAdvertPositions
().
then
((
result
)
=>
{
void
getAdvertPositions
().
then
((
result
)
=>
{
if
(
active
&&
result
!==
false
)
setPositions
(
result
);
if
(
active
)
setPositions
(
result
);
});
});
return
()
=>
{
return
()
=>
{
active
=
false
;
active
=
false
;
...
@@ -57,7 +57,6 @@ export default function AdvertListView() {
...
@@ -57,7 +57,6 @@ export default function AdvertListView() {
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
advert
=
await
getAdvertInfo
(
id
);
const
advert
=
await
getAdvertInfo
(
id
);
if
(
advert
===
false
)
return
;
setSelectedId
(
advert
.
id
);
setSelectedId
(
advert
.
id
);
setIsAdd
(
false
);
setIsAdd
(
false
);
setFormValues
({
setFormValues
({
...
...
apps/admin/src/modules/auth/api.ts
浏览文件 @
d180e973
export
*
from
"./request/login"
;
import
axios
from
"@/utils/axios"
;
const
LOGIN_SUCCESS_MESSAGE
=
"OK"
;
export
const
login
=
async
(
params
)
=>
{
try
{
const
response
=
await
axios
.
post
(
"/user/login"
,
params
,
{
resolveBusinessError
:
true
});
const
data
=
response
.
data
??
{};
if
(
response
.
code
===
200
&&
response
.
message
===
LOGIN_SUCCESS_MESSAGE
&&
data
.
token
)
{
return
{
code
:
response
.
code
,
...
data
};
}
return
{
code
:
response
.
code
,
msg
:
response
.
message
||
"登录失败"
};
}
catch
(
error
)
{
return
{
code
:
0
,
msg
:
error
?.
message
||
"登录失败"
};
}
};
apps/admin/src/modules/auth/request/login-api.js
deleted
100644 → 0
浏览文件 @
6d1921de
const
api
=
{
login
:
"/user/login"
,
getCode
:
"/user/login/verify"
,
};
export
default
api
;
apps/admin/src/modules/auth/request/login.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
api
from
"./login-api.js"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
const
login
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
login
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
msg
===
"Undefined index: verify"
)
{
message
.
error
(
"请先点击按钮进行验证"
);
return
false
;
}
if
(
code
===
200
)
{
return
{
code
,
...
data
,
};
}
else
{
message
.
error
(
msg
);
return
{
msg
,
};
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
export
{
login
};
apps/admin/src/modules/auth/request/sso-api.js
deleted
100644 → 0
浏览文件 @
6d1921de
const
api
=
{
getCaptcha
:
"/users/generate_image_code"
,
// 获取验证码 GET
sendSMS
:
"/docapi/users/send_sms"
,
// 发送手机验证码
loginByPhone
:
"/docapi/users/phone_login"
,
// 手机号码形式登录
loginByUsername
:
"/docapi/users/login"
,
// 用户名密码登录
checkSSOLogin
:
"/user/checkSsoLogin"
,
// sso 登录
};
export
default
api
;
apps/admin/src/modules/auth/request/sso.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request"
;
import
{
message
}
from
"antd"
;
import
api
from
"./sso-api"
;
import
{
get
}
from
"lodash-es"
;
import
qs
from
"qs"
;
// 获取图形验证码
const
getCaptcha
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
get
(
api
.
getCaptcha
,
obj
);
const
status
=
get
(
res
,
"status"
,
0
);
const
data
=
get
(
res
,
"data"
,
""
);
if
(
status
===
200
)
{
return
data
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
// 发送短信验证码
const
sendSMS
=
async
(
data
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
sendSMS
,
data
);
const
code
=
get
(
res
,
"data.code"
,
0
);
const
msg
=
get
(
res
,
"data.message"
,
"发送失败"
);
if
(
code
===
200
)
{
message
.
success
(
"验证码发送成功!"
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
// 用户名登录
const
userNameLogin
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
loginByUsername
,
obj
);
const
code
=
get
(
res
,
"data.code"
,
0
);
const
msg
=
get
(
res
,
"data.message"
,
"登录失败"
);
const
data
=
get
(
res
,
"data.data"
,
""
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
// 手机号登录
const
phoneLogin
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
loginByPhone
,
obj
);
const
code
=
get
(
res
,
"data.code"
,
0
);
const
msg
=
get
(
res
,
"data.message"
,
"登录失败"
);
const
data
=
get
(
res
,
"data.data"
,
""
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
const
checkSSOLogin
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
checkSSOLogin
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
msg
===
"Undefined index: verify"
)
{
message
.
error
(
"请先点击按钮进行验证"
);
return
false
;
}
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
console
.
error
(
error
);
let
msg
=
get
(
error
.
response
,
"data.msg"
,
""
);
if
(
msg
)
{
message
.
error
(
msg
);
}
return
false
;
}
};
export
{
getCaptcha
,
sendSMS
,
userNameLogin
,
phoneLogin
,
checkSSOLogin
};
apps/admin/src/modules/auth/views/LoginView.jsx
浏览文件 @
d180e973
...
@@ -4,7 +4,8 @@ import { CloseOutlined, UserOutlined, LockOutlined } from "@ant-design/icons";
...
@@ -4,7 +4,8 @@ import { CloseOutlined, UserOutlined, LockOutlined } from "@ant-design/icons";
import
{
useNavigate
}
from
"react-router"
;
import
{
useNavigate
}
from
"react-router"
;
import
{
checkSSOLogin
}
from
"../request/sso"
;
import
{
checkSSOLogin
}
from
"@/api/base"
;
import
{
login
}
from
"../api"
;
import
"./LoginView.less"
;
import
"./LoginView.less"
;
import
loginBtn
from
"@/assets/images/loginBtn.png"
;
import
loginBtn
from
"@/assets/images/loginBtn.png"
;
...
@@ -33,7 +34,6 @@ import Icon20 from "@/assets/login/20.png";
...
@@ -33,7 +34,6 @@ import Icon20 from "@/assets/login/20.png";
import
Icon21
from
"@/assets/login/21.png"
;
import
Icon21
from
"@/assets/login/21.png"
;
import
Icon22
from
"@/assets/login/22.png"
;
import
Icon22
from
"@/assets/login/22.png"
;
import
Icon23
from
"@/assets/login/23.png"
;
import
Icon23
from
"@/assets/login/23.png"
;
import
{
login
}
from
"../request/login"
;
import
logo
from
"@/assets/images/icon_logo_login.png"
;
import
logo
from
"@/assets/images/icon_logo_login.png"
;
import
{
RotateVerify
}
from
"../../../utils/captcha"
;
import
{
RotateVerify
}
from
"../../../utils/captcha"
;
...
...
apps/admin/src/modules/books/audit/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
AuditQuery
}
from
"./query"
;
import
type
{
AuditQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
request
.
post
(
path
,
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
()))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
return
{
data
:
response
.
data
,
msg
:
response
.
message
||
""
};
if
(
response
.
data
?.
code
===
200
)
return
{
data
:
response
.
data
.
data
,
msg
:
response
.
data
.
message
||
""
};
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
export
const
getAuditList
=
async
(
query
:
AuditQuery
)
=>
(
await
post
(
"/book/teacher/getList/examine"
,
query
))
?.
data
||
false
;
export
const
getAuditList
=
async
(
query
:
AuditQuery
)
=>
(
await
post
(
"/book/teacher/getList/examine"
,
query
))
.
data
;
export
const
getExamineList
=
async
(
id
:
string
|
number
)
=>
(
await
post
(
"/book/teacher/getExamineList"
,
{
id
}))
?.
data
||
false
;
export
const
getExamineList
=
async
(
id
:
string
|
number
)
=>
(
await
post
(
"/book/teacher/getExamineList"
,
{
id
}))
.
data
;
export
const
addExamine
=
(
data
:
Record
<
string
,
unknown
>
)
=>
post
(
"/book/examine/add"
,
data
);
export
const
addExamine
=
(
data
:
Record
<
string
,
unknown
>
)
=>
post
(
"/book/examine/add"
,
data
);
apps/admin/src/modules/books/audit/components/PreviewModal.jsx
浏览文件 @
d180e973
import
React
,
{
useEffect
,
useState
,
useRef
,
useImperativeHandle
,
forwardRef
}
from
"react"
;
import
React
,
{
useEffect
,
useState
,
useRef
,
useImperativeHandle
,
forwardRef
}
from
"react"
;
import
{
Modal
,
Drawer
,
Tree
,
Spin
,
Space
,
Button
,
Input
,
Image
}
from
"antd"
;
import
{
Modal
,
Drawer
,
Tree
,
Spin
,
Space
,
Button
,
Input
,
Image
}
from
"antd"
;
import
{
CloseOutlined
,
LeftOutlined
,
BarsOutlined
}
from
"@ant-design/icons"
;
import
{
CloseOutlined
,
LeftOutlined
,
BarsOutlined
}
from
"@ant-design/icons"
;
import
{
getInfoByChapterId
,
getAllList
}
from
"@/modules/books/management/chapters/
request
"
;
import
{
getInfoByChapterId
,
getAllList
}
from
"@/modules/books/management/chapters/
api
"
;
import
{
getChapterTopic
,
expandReadInfo
}
from
"@/common/wangeditor-customer/utils/request"
;
import
{
getChapterTopic
,
expandReadInfo
}
from
"@/common/wangeditor-customer/utils/request"
;
import
"@/common/wangeditor-customer/utils/iconfont"
;
import
"@/common/wangeditor-customer/utils/iconfont"
;
import
{
import
{
...
...
apps/admin/src/modules/books/classify/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
ClassifyQuery
}
from
"./query"
;
import
type
{
ClassifyQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
request
.
post
(
if
(
notify
)
notifySuccess
(
response
.
message
);
path
,
return
response
.
data
;
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
(),
))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
if
(
response
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
response
.
data
.
message
);
return
response
.
data
.
data
;
}
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
export
const
getClassifyList
=
(
query
:
ClassifyQuery
)
=>
post
(
"/book/category/getList"
,
query
);
export
const
getClassifyList
=
(
query
:
ClassifyQuery
)
=>
post
(
"/book/category/getList"
,
query
);
export
const
addCategory
=
(
data
:
Record
<
string
,
unknown
>
)
=>
export
const
addCategory
=
(
data
:
Record
<
string
,
unknown
>
)
=>
...
...
apps/admin/src/modules/books/discussion/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
DiscussionQuery
}
from
"./query"
;
import
type
{
DiscussionQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
r
=
(
await
request
.
post
(
if
(
notify
)
notifySuccess
(
response
.
message
);
path
,
return
response
.
data
;
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
(),
))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
if
(
r
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
r
.
data
.
message
);
return
r
.
data
.
data
;
}
message
.
error
(
r
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
export
const
getDiscussionList
=
(
q
:
DiscussionQuery
)
=>
export
const
getDiscussionList
=
(
q
:
DiscussionQuery
)
=>
post
(
"/comment/comment/getAllCommentList"
,
q
);
post
(
"/comment/comment/getAllCommentList"
,
q
);
...
...
apps/admin/src/modules/books/label/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
request
from
"@/utils/request"
;
import
type
{
LabelQuery
}
from
"./query"
;
import
type
{
LabelQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
request
.
post
(
path
,
qs
.
stringify
(
data
)))
as
{
if
(
notify
)
notifySuccess
(
response
.
message
);
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
};
return
response
.
data
;
};
if
(
response
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
response
.
data
.
message
);
return
response
.
data
.
data
;
}
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
export
const
getLabelList
=
(
query
:
LabelQuery
)
=>
post
(
"/book/label/getList"
,
query
);
export
const
getLabelList
=
(
query
:
LabelQuery
)
=>
post
(
"/book/label/getList"
,
query
);
export
const
getAllBooks
=
()
=>
post
(
"/book/label/getAllBooks"
,
{});
export
const
getAllBooks
=
()
=>
post
(
"/book/label/getAllBooks"
,
{});
...
...
apps/admin/src/modules/books/management/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
axios
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
legacyAxios
from
"@/utils/axios"
;
import
type
{
ManagementQuery
}
from
"./query"
;
import
type
{
ManagementQuery
}
from
"./query"
;
...
@@ -35,35 +31,15 @@ export interface ImportBookValues {
...
@@ -35,35 +31,15 @@ export interface ImportBookValues {
}
}
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiBody
<
T
>
=
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
>
{
const
response
=
await
axios
.
post
(
url
,
params
);
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
|
false
>
{
return
response
.
data
as
T
;
try
{
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
const
body
=
response
.
data
as
ApiBody
<
T
>
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
return
(
body
.
data
??
[])
as
T
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getManagementList
(
export
async
function
getManagementList
(
...
@@ -73,7 +49,6 @@ export async function getManagementList(
...
@@ -73,7 +49,6 @@ export async function getManagementList(
"/book/teacher/getList"
,
"/book/teacher/getList"
,
{
...
query
},
{
...
query
},
);
);
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
@@ -83,15 +58,15 @@ export function deleteManagementBook(id: number) {
...
@@ -83,15 +58,15 @@ export function deleteManagementBook(id: number) {
// 编辑页仍沿用旧接口封装的返回值形状;保留在管理模块中,避免页面反向依赖旧目录。
// 编辑页仍沿用旧接口封装的返回值形状;保留在管理模块中,避免页面反向依赖旧目录。
export
function
getBook
(
params
:
ApiParams
)
{
export
function
getBook
(
params
:
ApiParams
)
{
return
legacyA
xios
.
post
(
"/api/book/teacher/getInfoById"
,
params
);
return
a
xios
.
post
(
"/api/book/teacher/getInfoById"
,
params
);
}
}
export
function
addBook
(
params
:
ApiParams
)
{
export
function
addBook
(
params
:
ApiParams
)
{
return
legacyA
xios
.
post
(
"/api/book/teacher/add"
,
params
);
return
a
xios
.
post
(
"/api/book/teacher/add"
,
params
);
}
}
export
function
updateBook
(
params
:
ApiParams
)
{
export
function
updateBook
(
params
:
ApiParams
)
{
return
legacyA
xios
.
post
(
"/api/book/teacher/edit"
,
params
);
return
a
xios
.
post
(
"/api/book/teacher/edit"
,
params
);
}
}
export
function
exportManagementBook
(
id
:
number
)
{
export
function
exportManagementBook
(
id
:
number
)
{
...
@@ -103,19 +78,9 @@ export function releaseManagementBook(id: number, releaseMess?: string) {
...
@@ -103,19 +78,9 @@ export function releaseManagementBook(id: number, releaseMess?: string) {
}
}
export
async
function
importManagementBook
(
values
:
ImportBookValues
)
{
export
async
function
importManagementBook
(
values
:
ImportBookValues
)
{
try
{
const
response
=
await
axios
.
post
(
"/book/teacher/import"
,
values
,
{
const
response
=
await
request
.
post
(
"/book/teacher/import"
,
values
,
{
headers
:
{
"Content-Type"
:
"multipart/form-data"
},
headers
:
{
"Content-Type"
:
"multipart/form-data"
},
});
});
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
apps/admin/src/modules/books/management/chapters/api.js
浏览文件 @
d180e973
import
axios
from
"@/utils/axios"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
const
getData
=
async
(
path
,
params
)
=>
(
await
axios
.
post
(
path
,
params
)).
data
;
const
mutate
=
async
(
path
,
params
,
notify
=
false
)
=>
{
const
response
=
await
axios
.
post
(
path
,
params
);
if
(
notify
)
notifySuccess
(
response
.
message
);
return
true
;
};
// 获取书籍详情
// 获取书籍详情
export
function
getBook
(
data
)
{
export
function
getBook
(
data
)
{
...
@@ -54,3 +61,26 @@ export function getTagList(params) {
...
@@ -54,3 +61,26 @@ export function getTagList(params) {
export
function
bindTag
(
data
)
{
export
function
bindTag
(
data
)
{
return
axios
.
post
(
"/api/resource/v1/course/course/tag-add-book"
,
data
);
return
axios
.
post
(
"/api/resource/v1/course/course/tag-add-book"
,
data
);
}
}
export
const
getUserInfo
=
(
params
)
=>
getData
(
"/user/user/getUserInfo"
,
params
);
export
const
getPowerByRoleId
=
(
params
)
=>
getData
(
"/user/role/getPowerByRoleId"
,
params
);
export
const
getAllList
=
async
(
params
)
=>
{
const
response
=
await
axios
.
post
(
"/book/teacher/chapter/getAllList"
,
params
);
return
{
code
:
response
.
code
,
data
:
response
.
data
};
};
export
const
chapterAdd
=
(
params
)
=>
getData
(
"/book/teacher/chapter/add"
,
params
);
export
const
getInfoById
=
(
params
)
=>
getData
(
"/book/teacher/chapter/getInfoById"
,
params
);
export
const
chapterEdit
=
(
params
)
=>
mutate
(
"/book/teacher/chapter/edit"
,
params
,
true
);
export
const
chapterDel
=
(
params
)
=>
mutate
(
"/book/teacher/chapter/del"
,
params
,
true
);
export
const
dragOrder
=
(
params
)
=>
mutate
(
"/book/teacher/chapter/dragOrder"
,
params
,
true
);
export
const
getInfoByChapterId
=
(
params
)
=>
getData
(
"/book/teacher/section/getInfoByChapterId"
,
params
);
export
const
sectionAdd
=
(
params
)
=>
mutate
(
"/book/teacher/section/add"
,
params
,
true
);
export
const
sectionEdit
=
(
params
)
=>
mutate
(
"/book/teacher/section/edit"
,
params
);
export
const
getQuestionList
=
(
params
)
=>
getData
(
"/book/chapter/question/getQuestionList"
,
params
);
export
const
questionDel
=
(
params
)
=>
getData
(
"/book/chapter/question/del"
,
params
);
export
const
questionAdd
=
(
params
)
=>
getData
(
"/book/chapter/question/add"
,
params
);
export
const
release
=
(
params
)
=>
mutate
(
"/book/teacher/release"
,
params
);
export
const
templateGetList
=
(
params
)
=>
mutate
(
"/book/template/getList"
,
params
);
export
const
templateImport
=
(
params
)
=>
mutate
(
"/book/template/import"
,
params
);
export
const
teacherImport
=
(
params
)
=>
mutate
(
"/book/teacher/import"
,
params
);
export
const
getRecordList
=
(
params
)
=>
getData
(
"/book/teacher/section/getRecordList"
,
params
);
apps/admin/src/modules/books/management/chapters/components/form-chapter-title.jsx
浏览文件 @
d180e973
...
@@ -2,7 +2,7 @@ import { useState, useEffect, useRef } from "react";
...
@@ -2,7 +2,7 @@ import { useState, useEffect, useRef } from "react";
import
{
Form
,
Button
,
Space
,
Input
}
from
"antd"
;
import
{
Form
,
Button
,
Space
,
Input
}
from
"antd"
;
import
{
setTreeChapter
}
from
"@/store/modules/user"
;
import
{
setTreeChapter
}
from
"@/store/modules/user"
;
import
{
useDispatch
}
from
"react-redux"
;
import
{
useDispatch
}
from
"react-redux"
;
import
{
chapterEdit
,
chapterAdd
,
sectionAdd
}
from
"../
request
"
;
import
{
chapterEdit
,
chapterAdd
,
sectionAdd
}
from
"../
api
"
;
const
EditChapterTitle
=
(
props
)
=>
{
const
EditChapterTitle
=
(
props
)
=>
{
const
{
const
{
...
...
apps/admin/src/modules/books/management/chapters/index.jsx
浏览文件 @
d180e973
...
@@ -25,7 +25,7 @@ import {
...
@@ -25,7 +25,7 @@ import {
findTreeToIndex
,
findTreeToIndex
,
findNodeById
,
findNodeById
,
}
from
"@/utils/common"
;
}
from
"@/utils/common"
;
import
{
getAllList
,
getInfoByChapterId
,
sectionEdit
,
chapterDel
,
dragOrder
}
from
"./
request
"
;
import
{
getAllList
,
getInfoByChapterId
,
sectionEdit
,
chapterDel
,
dragOrder
}
from
"./
api
"
;
import
"./index.less"
;
import
"./index.less"
;
const
Examine
=
()
=>
{
const
Examine
=
()
=>
{
...
@@ -333,14 +333,14 @@ const Examine = () => {
...
@@ -333,14 +333,14 @@ const Examine = () => {
{
key
:
"2"
,
label
:
"添加子节"
},
{
key
:
"2"
,
label
:
"添加子节"
},
{
key
:
"7"
,
label
:
"关联知识图谱"
},
{
key
:
"7"
,
label
:
"关联知识图谱"
},
{
key
:
"5"
,
label
:
"设置编者"
},
{
key
:
"5"
,
label
:
"设置编者"
},
{
//
{
key
:
"6"
,
//
key: "6",
label
:
"一键AI"
,
//
label: "一键AI",
children
:
[
//
children: [
{
key
:
"61"
,
label
:
"一键AI创作课件"
,
disabled
:
true
},
//
{ key: "61", label: "一键AI创作课件", disabled: true },
{
key
:
"62"
,
label
:
"一键AI创作教案"
,
disabled
:
true
},
//
{ key: "62", label: "一键AI创作教案", disabled: true },
],
//
],
},
//
},
{
key
:
"3"
,
label
:
"编辑"
},
{
key
:
"3"
,
label
:
"编辑"
},
{
key
:
"4"
,
label
:
"删除"
},
{
key
:
"4"
,
label
:
"删除"
},
];
];
...
...
apps/admin/src/modules/books/management/chapters/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 用户信息
const
getUserInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/user/getUserInfo"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取角色已选权限
const
getPowerByRoleId
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/role/getPowerByRoleId"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 章节列表
const
getAllList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/getAllList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
{
code
,
data
,
};
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加章节
const
chapterAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
// message.success('添加成功');
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 章节详情
const
getInfoById
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/getInfoById"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改章节
const
chapterEdit
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除章节
const
chapterDel
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 拖拽章节排序
const
dragOrder
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/dragOrder"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取章节内容
const
getInfoByChapterId
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getInfoByChapterId"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加章节内容
const
sectionAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改章节内容
const
sectionEdit
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
// message.success(msg);
return
true
;
}
else
{
message
.
error
(
msg
);
return
{
code
,
msg
,
data
};
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取章节的题库列表
const
getQuestionList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/getQuestionList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 移除课后题
const
questionDel
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加课后题
const
questionAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 发布审核
const
release
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/release"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 模板列表
const
templateGetList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/template/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 模板导入
const
templateImport
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/template/import"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 书籍导入
const
teacherImport
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/import"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 保存历史记录
const
getRecordList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getRecordList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getAllList
,
chapterAdd
,
getInfoById
,
chapterEdit
,
chapterDel
,
dragOrder
,
getInfoByChapterId
,
sectionAdd
,
sectionEdit
,
getQuestionList
,
questionDel
,
questionAdd
,
release
,
templateGetList
,
templateImport
,
teacherImport
,
getRecordList
,
getPowerByRoleId
,
getUserInfo
,
};
apps/admin/src/modules/books/management/useManagementList.ts
浏览文件 @
d180e973
...
@@ -32,12 +32,8 @@ export function useManagementList() {
...
@@ -32,12 +32,8 @@ export function useManagementList() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
ManagementListResult
|
false
=
await
getManagementList
(
query
);
const
result
:
ManagementListResult
=
await
getManagementList
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/books/management/views/ManagementListView.tsx
浏览文件 @
d180e973
...
@@ -68,7 +68,7 @@ export default function ManagementListView() {
...
@@ -68,7 +68,7 @@ export default function ManagementListView() {
setExporting
(
true
);
setExporting
(
true
);
try
{
try
{
const
result
=
await
exportManagementBook
(
selectedId
);
const
result
=
await
exportManagementBook
(
selectedId
);
if
(
result
===
false
||
!
result
.
name
)
return
;
if
(
!
result
.
name
)
return
;
await
exportHtmlToWord
(
result
.
name
,
result
.
content
??
""
,
EXPORT_REMOVE_SELECTORS
);
await
exportHtmlToWord
(
result
.
name
,
result
.
content
??
""
,
EXPORT_REMOVE_SELECTORS
);
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
"导出Word失败"
,
error
);
console
.
error
(
"导出Word失败"
,
error
);
...
...
apps/admin/src/modules/books/orders/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
type
{
OrdersQuery
}
from
"./query"
;
import
type
{
OrdersQuery
}
from
"./query"
;
...
@@ -56,27 +52,17 @@ export interface SalesStatisticsResult {
...
@@ -56,27 +52,17 @@ export interface SalesStatisticsResult {
income
:
number
|
string
;
income
:
number
|
string
;
}
}
type
ApiBody
<
T
>
=
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
async
function
getPayload
<
T
>
(
url
:
string
,
params
?:
ApiParams
):
Promise
<
T
|
false
>
{
async
function
getPayload
<
T
>
(
url
:
string
,
params
?:
ApiParams
):
Promise
<
T
>
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
return
response
.
data
as
T
;
const
body
=
response
.
data
as
ApiBody
<
T
>
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
return
(
body
.
data
??
[])
as
T
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getOrders
(
query
:
OrdersQuery
):
Promise
<
OrdersListResult
|
false
>
{
export
async
function
getOrders
(
query
:
OrdersQuery
):
Promise
<
OrdersListResult
>
{
const
data
=
await
getPayload
<
{
list
?:
OrderRow
[];
total
?:
number
}
>
(
"/order/getOrderList"
,
{
const
data
=
await
getPayload
<
{
list
?:
OrderRow
[];
total
?:
number
}
>
(
"/order/getOrderList"
,
{
...
query
,
...
query
,
});
});
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
@@ -85,17 +71,7 @@ export function getSalesStatistics() {
...
@@ -85,17 +71,7 @@ export function getSalesStatistics() {
}
}
export
async
function
refundOrder
(
id
:
number
,
refund_reason
?:
string
)
{
export
async
function
refundOrder
(
id
:
number
,
refund_reason
?:
string
)
{
try
{
const
response
=
await
axios
.
post
(
"/order/refund"
,
{
id
,
refund_reason
});
const
response
=
await
request
.
post
(
"/order/refund"
,
qs
.
stringify
({
id
,
refund_reason
}));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
apps/admin/src/modules/books/orders/useOrdersList.ts
浏览文件 @
d180e973
...
@@ -32,12 +32,8 @@ export function useOrdersList() {
...
@@ -32,12 +32,8 @@ export function useOrdersList() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
OrdersListResult
|
false
=
await
getOrders
(
query
);
const
result
:
OrdersListResult
=
await
getOrders
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/books/orders/views/SalesStatisticsView.tsx
浏览文件 @
d180e973
...
@@ -13,8 +13,7 @@ export default function SalesStatisticsView() {
...
@@ -13,8 +13,7 @@ export default function SalesStatisticsView() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
const
result
=
await
getSalesStatistics
();
const
result
=
await
getSalesStatistics
();
if
(
result
===
false
)
setError
(
new
Error
(
"数据获取失败!"
));
setData
(
result
);
else
setData
(
result
);
setLoading
(
false
);
setLoading
(
false
);
},
[]);
},
[]);
...
...
apps/admin/src/modules/books/question-bank/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
QuestionBankQuery
}
from
"./query"
;
import
type
{
QuestionBankQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
=
{},
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
=
{},
notify
=
false
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
request
.
post
(
if
(
notify
)
notifySuccess
(
response
.
message
);
path
,
return
response
.
data
;
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
(),
))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
if
(
response
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
response
.
data
.
message
);
return
response
.
data
.
data
;
}
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
export
const
getQuestionList
=
(
query
:
QuestionBankQuery
)
=>
post
(
"/book/question/getList"
,
query
);
export
const
getQuestionList
=
(
query
:
QuestionBankQuery
)
=>
post
(
"/book/question/getList"
,
query
);
...
@@ -27,14 +17,10 @@ export const getQuestionTypes = () => post("/book/question/type/getList", { page
...
@@ -27,14 +17,10 @@ export const getQuestionTypes = () => post("/book/question/type/getList", { page
export
const
getBookNames
=
()
=>
post
(
"book/teacher/getListAll"
);
export
const
getBookNames
=
()
=>
post
(
"book/teacher/getListAll"
);
export
const
getAliOssToken
=
()
=>
post
(
"/common/OssUpload/getUploadToken"
);
export
const
getAliOssToken
=
()
=>
post
(
"/common/OssUpload/getUploadToken"
);
export
async
function
importQuestions
(
file
:
File
)
{
export
async
function
importQuestions
(
file
:
File
)
{
try
{
const
form
=
new
FormData
();
const
form
=
new
FormData
();
form
.
append
(
"file"
,
file
);
form
.
append
(
"file"
,
file
);
const
response
=
await
axios
.
post
(
"/book/question/import"
,
form
,
{
const
response
=
(
await
request
.
post
(
"/book/question/import"
,
form
,
{
headers
:
{
"Content-Type"
:
"multipart/form-data"
},
headers
:
{
"Content-Type"
:
"multipart/form-data"
},
});
}))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
return
{
msg
:
response
.
message
,
data
:
response
.
data
};
if
(
response
.
data
?.
code
===
200
)
return
{
msg
:
response
.
data
.
message
,
data
:
response
.
data
.
data
};
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
return
false
;
}
}
apps/admin/src/modules/books/sale/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
SaleDiscussionQuery
,
SaleQuery
}
from
"./query"
;
import
type
{
SaleDiscussionQuery
,
SaleQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
try
{
const
response
=
(
await
request
.
post
(
path
,
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
()))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
}
};
if
(
response
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
response
.
data
.
message
);
return
response
.
data
.
data
;
}
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{}
const
response
=
await
axios
.
post
(
path
,
data
);
return
false
;
if
(
notify
)
notifySuccess
(
response
.
message
);
return
response
.
data
;
}
}
export
const
getSaleList
=
(
query
:
SaleQuery
)
=>
post
(
"/book/book/getList"
,
query
);
export
const
getSaleList
=
(
query
:
SaleQuery
)
=>
post
(
"/book/book/getList"
,
query
);
export
const
changeSaleStatus
=
(
id
:
string
|
number
,
status
:
string
)
=>
post
(
"/book/book/changeStatus"
,
{
id
,
status
},
true
);
export
const
changeSaleStatus
=
(
id
:
string
|
number
,
status
:
string
)
=>
post
(
"/book/book/changeStatus"
,
{
id
,
status
},
true
);
...
@@ -22,10 +22,10 @@ export const editBook = (data: Record<string, unknown>) =>
...
@@ -22,10 +22,10 @@ export const editBook = (data: Record<string, unknown>) =>
export
const
getCommentInfo
=
(
data
:
Record
<
string
,
unknown
>
)
=>
export
const
getCommentInfo
=
(
data
:
Record
<
string
,
unknown
>
)
=>
post
(
"/comment/comment/getCommentInfo"
,
data
);
post
(
"/comment/comment/getCommentInfo"
,
data
);
export
const
commentDel
=
async
(
data
:
Record
<
string
,
unknown
>
)
=>
{
export
const
commentDel
=
async
(
data
:
Record
<
string
,
unknown
>
)
=>
{
const
result
=
await
post
(
"/comment/comment/del"
,
data
,
true
);
await
post
(
"/comment/comment/del"
,
data
,
true
);
return
result
!==
fals
e
;
return
tru
e
;
};
};
export
const
commentReply
=
async
(
data
:
Record
<
string
,
unknown
>
)
=>
{
export
const
commentReply
=
async
(
data
:
Record
<
string
,
unknown
>
)
=>
{
const
result
=
await
post
(
"/comment/comment/reply"
,
data
,
true
);
await
post
(
"/comment/comment/reply"
,
data
,
true
);
return
result
!==
fals
e
;
return
tru
e
;
};
};
apps/admin/src/modules/members/level/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
import
type
{
MemberLevelQuery
}
from
"./query"
;
import
type
{
MemberLevelQuery
}
from
"./query"
;
...
@@ -30,46 +26,24 @@ export interface MemberLevelSystemConfig {
...
@@ -30,46 +26,24 @@ export interface MemberLevelSystemConfig {
type
ApiParams
=
Record
<
string
,
unknown
>
;
type
ApiParams
=
Record
<
string
,
unknown
>
;
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
|
false
>
{
async
function
getPayload
<
T
>
(
url
:
string
,
params
:
ApiParams
):
Promise
<
T
>
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
return
response
.
data
as
T
;
const
body
=
response
.
data
as
{
code
?:
number
;
data
?:
T
;
message
?:
string
};
const
code
=
body
?.
code
??
0
;
const
data
=
(
body
?.
data
??
[])
as
T
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
return
data
;
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
async
function
mutate
(
url
:
string
,
params
:
ApiParams
)
{
try
{
const
response
=
await
axios
.
post
(
url
,
params
);
const
response
=
await
request
.
post
(
url
,
qs
.
stringify
(
params
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
{
code
?:
number
;
message
?:
string
};
return
true
;
const
code
=
body
?.
code
??
0
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getMemberLevelList
(
export
async
function
getMemberLevelList
(
params
:
MemberLevelQuery
,
params
:
MemberLevelQuery
,
):
Promise
<
MemberLevelListResult
|
false
>
{
):
Promise
<
MemberLevelListResult
>
{
const
data
=
await
getPayload
<
{
list
?:
MemberLevelRow
[];
total
?:
number
}
>
(
const
data
=
await
getPayload
<
{
list
?:
MemberLevelRow
[];
total
?:
number
}
>
(
"/members/grade/getList"
,
"/members/grade/getList"
,
{
...
params
},
{
...
params
},
);
);
if
(
data
===
false
)
return
false
;
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
return
{
rows
:
data
.
list
??
[],
total
:
data
.
total
??
0
};
}
}
...
...
apps/admin/src/modules/members/level/useMemberLevelList.ts
浏览文件 @
d180e973
...
@@ -33,12 +33,8 @@ export function useMemberLevelList() {
...
@@ -33,12 +33,8 @@ export function useMemberLevelList() {
setLoading
(
true
);
setLoading
(
true
);
setError
(
null
);
setError
(
null
);
try
{
try
{
const
result
:
MemberLevelListResult
|
false
=
await
getMemberLevelList
(
query
);
const
result
:
MemberLevelListResult
=
await
getMemberLevelList
(
query
);
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
currentRequest
!==
requestId
.
current
)
return
;
if
(
result
===
false
)
{
setError
(
new
Error
(
"数据获取失败!"
));
return
;
}
setRows
(
result
.
rows
);
setRows
(
result
.
rows
);
setTotal
(
result
.
total
);
setTotal
(
result
.
total
);
}
catch
(
reason
)
{
}
catch
(
reason
)
{
...
...
apps/admin/src/modules/members/level/views/MemberLevelListView.tsx
浏览文件 @
d180e973
...
@@ -42,7 +42,7 @@ export default function MemberLevelListView() {
...
@@ -42,7 +42,7 @@ export default function MemberLevelListView() {
const
loadValidity
=
useCallback
(
async
()
=>
{
const
loadValidity
=
useCallback
(
async
()
=>
{
const
config
=
await
getMemberLevelSystem
();
const
config
=
await
getMemberLevelSystem
();
if
(
config
!==
false
)
setValidityValue
(
config
.
set_value
);
setValidityValue
(
config
.
set_value
);
},
[]);
},
[]);
useEffect
(()
=>
{
useEffect
(()
=>
{
...
@@ -51,7 +51,6 @@ export default function MemberLevelListView() {
...
@@ -51,7 +51,6 @@ export default function MemberLevelListView() {
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
handleEdit
=
async
(
id
:
number
)
=>
{
const
level
=
await
getMemberLevelInfo
(
id
);
const
level
=
await
getMemberLevelInfo
(
id
);
if
(
level
===
false
)
return
;
setSelectedId
(
level
.
id
);
setSelectedId
(
level
.
id
);
setIsAdd
(
false
);
setIsAdd
(
false
);
setInitialValues
({
setInitialValues
({
...
...
apps/admin/src/modules/members/list/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
request
from
"@/utils/request"
;
import
type
{
MemberQuery
}
from
"./query"
;
import
type
{
MemberQuery
}
from
"./query"
;
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
async
function
post
(
path
:
string
,
data
:
Record
<
string
,
unknown
>
,
notify
=
false
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
request
.
post
(
if
(
notify
)
notifySuccess
(
response
.
message
);
path
,
return
response
.
data
;
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
(),
))
as
{
data
?:
{
code
?:
number
;
data
?:
any
;
message
?:
string
};
};
if
(
response
.
data
?.
code
===
200
)
{
if
(
notify
)
message
.
success
(
response
.
data
.
message
);
return
response
.
data
.
data
;
}
message
.
error
(
response
.
data
?.
message
||
"数据获取失败!"
);
}
catch
{
return
false
;
}
return
false
;
}
}
export
const
getMemberList
=
(
query
:
MemberQuery
)
=>
post
(
"/members/members/getList"
,
query
);
export
const
getMemberList
=
(
query
:
MemberQuery
)
=>
post
(
"/members/members/getList"
,
query
);
...
@@ -28,8 +14,16 @@ export const addMember = (data: Record<string, unknown>) =>
...
@@ -28,8 +14,16 @@ export const addMember = (data: Record<string, unknown>) =>
export
const
editMember
=
(
data
:
Record
<
string
,
unknown
>
)
=>
export
const
editMember
=
(
data
:
Record
<
string
,
unknown
>
)
=>
post
(
"/members/members/edit"
,
data
,
true
);
post
(
"/members/members/edit"
,
data
,
true
);
export
const
deleteMember
=
(
id
:
string
|
number
)
=>
post
(
"/members/members/del"
,
{
id
},
true
);
export
const
deleteMember
=
(
id
:
string
|
number
)
=>
post
(
"/members/members/del"
,
{
id
},
true
);
export
const
getOrders
=
(
id
:
string
|
number
)
=>
post
(
"/members/members/getOrdersList"
,
{
id
});
export
const
getIntegralRecords
=
(
id
:
string
|
number
)
=>
export
type
MemberRecordQuery
=
{
post
(
"/members/members/getIntegralRecordList"
,
{
id
});
id
:
string
|
number
;
export
const
getCouponRecords
=
(
id
:
string
|
number
)
=>
page
:
number
;
post
(
"/members/members/getCouponList"
,
{
id
});
page_size
:
number
;
};
export
const
getOrders
=
(
query
:
MemberRecordQuery
)
=>
post
(
"/members/members/getOrdersList"
,
query
);
export
const
getIntegralRecords
=
(
query
:
MemberRecordQuery
)
=>
post
(
"/members/members/getIntegralRecordList"
,
query
);
export
const
getCouponRecords
=
(
query
:
MemberRecordQuery
)
=>
post
(
"/members/members/getCouponList"
,
query
);
apps/admin/src/modules/members/list/components/MemberDetailView.tsx
浏览文件 @
d180e973
import
{
Segmented
,
Table
}
from
"antd"
;
import
{
Segmented
}
from
"antd"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useEffect
,
useState
}
from
"react"
;
import
{
useLocation
}
from
"react-router"
;
import
{
useLocation
}
from
"react-router"
;
import
PaginationCom
from
"@/common/Pagination"
;
import
type
{
ColumnsType
}
from
"antd/es/table"
;
import
{
getCouponRecords
,
getIntegralRecords
,
getOrders
}
from
"../api"
;
import
{
AppList
}
from
"@/components/AppList"
;
import
{
getCouponRecords
,
getIntegralRecords
,
getOrders
,
type
MemberRecordQuery
,
}
from
"../api"
;
type
RecordRow
=
Record
<
string
,
any
>
;
const
records
=
{
const
records
=
{
1
:
{
1
:
{
...
@@ -54,45 +62,52 @@ const records = {
...
@@ -54,45 +62,52 @@ const records = {
{
title
:
"使用状态"
,
dataIndex
:
"use_status_name"
},
{
title
:
"使用状态"
,
dataIndex
:
"use_status_name"
},
],
],
},
},
}
as
const
;
}
as
const
satisfies
Record
<
1
|
2
|
3
,
{
load
:
(
query
:
MemberRecordQuery
)
=>
Promise
<
any
>
;
columns
:
ColumnsType
<
RecordRow
>
}
>
;
function
RecordTable
({
type
,
id
}:
{
type
:
1
|
2
|
3
;
id
:
string
|
number
})
{
function
RecordTable
({
type
,
id
}:
{
type
:
1
|
2
|
3
;
id
:
string
|
number
})
{
const
[
rows
,
setRows
]
=
useState
<
any
[]
>
([]);
const
[
rows
,
setRows
]
=
useState
<
RecordRow
[]
>
([]);
const
[
total
,
setTotal
]
=
useState
(
type
===
2
?
4
:
0
);
const
[
total
,
setTotal
]
=
useState
(
0
);
const
[
page
,
setPage
]
=
useState
(
1
);
const
[
page
,
setPage
]
=
useState
(
1
);
const
[
pageSize
,
setPageSize
]
=
useState
(
type
===
2
?
2
:
10
);
const
[
pageSize
,
setPageSize
]
=
useState
(
10
);
const
[
loading
,
setLoading
]
=
useState
(
true
);
const
[
loading
,
setLoading
]
=
useState
(
true
);
const
[
error
,
setError
]
=
useState
<
Error
|
null
>
(
null
);
const
init
=
async
()
=>
{
const
init
=
async
()
=>
{
setLoading
(
true
);
setLoading
(
true
);
const
result
:
any
=
await
records
[
type
].
load
(
id
);
setError
(
null
);
if
(
result
)
{
try
{
const
result
=
await
records
[
type
].
load
({
id
,
page
,
page_size
:
pageSize
});
setRows
(
result
.
list
||
[]);
setRows
(
result
.
list
||
[]);
setTotal
(
result
.
total
||
0
);
setTotal
(
result
.
total
||
0
);
}
catch
(
reason
)
{
setError
(
reason
instanceof
Error
?
reason
:
new
Error
(
"记录加载失败"
));
}
finally
{
setLoading
(
false
);
}
}
setLoading
(
false
);
};
};
useEffect
(()
=>
{
useEffect
(()
=>
{
void
init
();
void
init
();
},
[
id
,
type
]);
},
[
id
,
type
,
page
,
pageSize
]);
return
(
return
(
<
div
>
<
AppList
<
RecordRow
>
<
Table
rowKey=
{
(
row
)
=>
row
.
ID
||
row
.
id
||
`${row.coupon_id}-${row.create_time}`
}
columns=
{
records
[
type
].
columns
as
any
}
columns=
{
records
[
type
].
columns
}
rowKey=
{
(
row
:
any
)
=>
row
.
ID
||
row
.
id
}
data=
{
{
rows
,
total
,
loading
,
error
}
}
dataSource=
{
rows
}
pagination=
{
{
loading=
{
loading
}
page
,
pagination=
{
false
}
pageSize
,
scroll=
{
type
===
3
?
{
y
:
600
,
x
:
true
}
:
undefined
}
pageSizeOptions
:
[
10
,
20
,
30
,
40
],
/>
onChange
:
setPage
,
<
br
/>
onPageSizeChange
:
(
nextPageSize
)
=>
{
<
PaginationCom
setPage
(
1
);
total=
{
total
}
setPageSize
(
nextPageSize
);
page_size=
{
pageSize
}
},
setpage_size=
{
setPageSize
}
}
}
page=
{
page
}
onRetry=
{
init
}
setPage=
{
setPage
}
tableProps=
{
{
scroll
:
type
===
3
?
{
y
:
600
,
x
:
true
}
:
undefined
}
}
init=
{
init
}
/
>
/>
</
div
>
);
);
}
}
export default function MemberDetailView()
{
export default function MemberDetailView()
{
...
@@ -111,7 +126,7 @@ export default function MemberDetailView() {
...
@@ -111,7 +126,7 @@ export default function MemberDetailView() {
onChange=
{
(
value
)
=>
setCurrent
(
value
as
1
|
2
|
3
)
}
onChange=
{
(
value
)
=>
setCurrent
(
value
as
1
|
2
|
3
)
}
style=
{
{
marginBottom
:
20
}
}
style=
{
{
marginBottom
:
20
}
}
/>
/>
{
id
?
<
RecordTable
type=
{
current
}
id=
{
id
}
/>
:
null
}
{
id
?
<
RecordTable
key=
{
current
}
type=
{
current
}
id=
{
id
}
/>
:
null
}
</
div
>
</
div
>
);
);
}
}
apps/admin/src/modules/settings/app-version/api.ts
浏览文件 @
d180e973
export
*
from
'./request.js'
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
const
getData
=
async
(
path
,
params
)
=>
(
await
axios
.
post
(
path
,
params
)).
data
;
const
saveData
=
async
(
path
,
params
)
=>
{
const
response
=
await
axios
.
post
(
path
,
params
);
notifySuccess
(
response
.
message
);
return
response
.
data
;
};
export
const
getList
=
(
params
)
=>
getData
(
"/system/version/getList"
,
params
);
export
const
addVersion
=
(
params
)
=>
saveData
(
"/system/version/add"
,
params
);
export
const
infoVersion
=
(
params
)
=>
getData
(
"/system/version/getInfoById"
,
params
);
export
const
editVersion
=
(
params
)
=>
saveData
(
"/system/version/edit"
,
params
);
export
const
delVersion
=
(
params
)
=>
saveData
(
"/system/version/del"
,
params
);
apps/admin/src/modules/settings/app-version/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
'@/utils/request.js'
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 版本列表
const
getList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/version/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加
const
addVersion
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/version/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 详情
const
infoVersion
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/version/getInfoById"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改
const
editVersion
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/version/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除
const
delVersion
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/version/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getList
,
addVersion
,
infoVersion
,
editVersion
,
delVersion
};
apps/admin/src/modules/settings/applied/api.ts
浏览文件 @
d180e973
export
*
from
'./request.js'
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
endpoints
from
"./endpoints.js"
;
const
getData
=
async
(
path
,
params
)
=>
(
await
axios
.
post
(
path
,
params
)).
data
;
const
mutate
=
async
(
path
,
params
,
notify
=
false
)
=>
{
const
response
=
await
axios
.
post
(
path
,
params
);
if
(
notify
)
notifySuccess
(
response
.
message
);
return
true
;
};
export
const
getAppList
=
(
params
)
=>
getData
(
endpoints
.
getAppList
,
params
);
export
const
addApp
=
(
params
)
=>
mutate
(
endpoints
.
addApp
,
params
,
true
);
export
const
getAppInfo
=
(
params
)
=>
getData
(
endpoints
.
getAppInfo
,
params
);
export
const
editApp
=
(
params
)
=>
getData
(
endpoints
.
editApp
,
params
);
export
const
changeStatus
=
(
params
)
=>
mutate
(
endpoints
.
changeStatus
,
params
);
export
const
delApp
=
(
params
)
=>
mutate
(
endpoints
.
delApp
,
params
,
true
);
apps/admin/src/modules/settings/applied/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
api
from
"./endpoints.js"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 应用管理列表
const
getAppList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
getAppList
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加应用
const
addApp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
addApp
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取应用详情
const
getAppInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
getAppInfo
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 应用编辑
const
editApp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
editApp
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 启用/停用
const
changeStatus
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
changeStatus
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除应用
const
delApp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
api
.
delApp
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getAppList
,
addApp
,
getAppInfo
,
editApp
,
changeStatus
,
delApp
};
apps/admin/src/modules/settings/coupon/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
{
message
}
from
"antd"
;
import
axios
from
"@/utils/axios"
;
import
axios
from
"@/utils/axios"
;
import
legacyRequest
from
"@/utils/request"
;
import
type
{
CouponQuery
}
from
"./query"
;
import
type
{
CouponQuery
}
from
"./query"
;
...
@@ -61,37 +60,17 @@ export function addCouponRecord(data: object) {
...
@@ -61,37 +60,17 @@ export function addCouponRecord(data: object) {
}
}
async
function
legacyPost
(
path
:
string
,
data
:
object
)
{
async
function
legacyPost
(
path
:
string
,
data
:
object
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
data
);
const
response
=
(
await
legacyRequest
.
post
(
return
{
payload
:
response
.
data
,
message
:
response
.
message
};
path
,
new
URLSearchParams
(
data
as
Record
<
string
,
string
>
).
toString
(),
))
as
{
data
?:
{
code
?:
number
;
data
?:
unknown
;
message
?:
string
}
};
const
code
=
response
.
data
?.
code
??
0
;
const
payload
=
response
.
data
?.
data
??
[];
const
responseMessage
=
response
.
data
?.
message
??
"数据获取失败!"
;
if
(
code
===
200
)
{
return
{
payload
,
message
:
responseMessage
};
}
message
.
error
(
responseMessage
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
getCouponConfig
()
{
export
async
function
getCouponConfig
()
{
const
result
=
await
legacyPost
(
"/system/config/getCoupon"
,
{});
const
result
=
await
legacyPost
(
"/system/config/getCoupon"
,
{});
return
result
?
(
result
.
payload
as
{
coupon_switch
?:
string
})
:
false
;
return
result
.
payload
as
{
coupon_switch
?:
string
}
;
}
}
export
async
function
setCouponConfig
(
data
:
{
coupon_switch
:
"0"
|
"1"
})
{
export
async
function
setCouponConfig
(
data
:
{
coupon_switch
:
"0"
|
"1"
})
{
const
result
=
await
legacyPost
(
"/system/config/couponEdit"
,
data
);
const
result
=
await
legacyPost
(
"/system/config/couponEdit"
,
data
);
if
(
!
result
)
{
return
false
;
}
message
.
success
(
result
.
message
);
message
.
success
(
result
.
message
);
return
true
;
return
true
;
}
}
apps/admin/src/modules/settings/help/api.ts
浏览文件 @
d180e973
import
axios
from
'@/utils/request.js'
;
import
axios
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
{
message
}
from
"antd"
;
import
{
message
}
from
"antd"
;
import
{
get
}
from
"lodash-es"
;
// 获取列表
// 获取列表
const
getList
=
async
(
obj
)
=>
{
export
const
getList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/getList"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/getList"
,
qs
.
stringify
(
obj
));
return
res
.
data
;
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
// 添加帮助
// 添加帮助
const
addHelp
=
async
(
obj
)
=>
{
export
const
addHelp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/add"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/add"
,
qs
.
stringify
(
obj
));
message
.
success
(
res
.
message
);
const
code
=
get
(
res
,
"data.code"
,
0
);
return
true
;
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
// 获取帮助详情
// 获取帮助详情
const
HelpInfo
=
async
(
obj
)
=>
{
export
const
HelpInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/getInfoById"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/getInfoById"
,
qs
.
stringify
(
obj
));
return
res
.
data
;
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
// 修改
// 修改
const
editHelp
=
async
(
obj
)
=>
{
export
const
editHelp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/edit"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/edit"
,
qs
.
stringify
(
obj
));
message
.
success
(
res
.
message
);
const
code
=
get
(
res
,
"data.code"
,
0
);
return
res
.
data
;
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
// 修改
// 修改
const
editPreview
=
async
(
obj
)
=>
{
export
const
editPreview
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/edit"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/edit"
,
qs
.
stringify
(
obj
));
return
res
.
data
;
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
// 删除
// 删除
const
delHelp
=
async
(
obj
)
=>
{
export
const
delHelp
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/app/help/del"
,
obj
);
const
res
=
await
axios
.
post
(
"/system/app/help/del"
,
qs
.
stringify
(
obj
));
message
.
success
(
res
.
message
);
const
code
=
get
(
res
,
"data.code"
,
0
);
return
true
;
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
};
export
{
getList
,
addHelp
,
HelpInfo
,
editHelp
,
delHelp
,
editPreview
};
apps/admin/src/modules/settings/personalized/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
export
interface
PersonalizedSettings
{
export
interface
PersonalizedSettings
{
teacher_divide
?:
string
|
number
;
teacher_divide
?:
string
|
number
;
...
@@ -10,37 +6,13 @@ export interface PersonalizedSettings {
...
@@ -10,37 +6,13 @@ export interface PersonalizedSettings {
comments_need_approval
?:
""
|
"0"
|
"1"
;
comments_need_approval
?:
""
|
"0"
|
"1"
;
}
}
type
ApiBody
<
T
>
=
{
export
async
function
getPersonalizedSettings
():
Promise
<
PersonalizedSettings
>
{
code
?:
number
;
const
response
=
await
axios
.
post
(
"/system/config/getSystem"
);
data
?:
T
;
return
response
.
data
??
{};
message
?:
string
;
};
export
async
function
getPersonalizedSettings
():
Promise
<
PersonalizedSettings
|
false
>
{
try
{
const
response
=
await
request
.
post
(
"/system/config/getSystem"
,
qs
.
stringify
(
undefined
));
const
body
=
response
.
data
as
ApiBody
<
PersonalizedSettings
>
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
return
body
.
data
??
{};
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
savePersonalizedSettings
(
values
:
PersonalizedSettings
)
{
export
async
function
savePersonalizedSettings
(
values
:
PersonalizedSettings
)
{
try
{
const
response
=
await
axios
.
post
(
"/system/config/systemEdit"
,
values
);
const
response
=
await
request
.
post
(
"/system/config/systemEdit"
,
qs
.
stringify
(
values
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
apps/admin/src/modules/settings/personalized/views/PersonalizedSettingsView.tsx
浏览文件 @
d180e973
...
@@ -14,7 +14,7 @@ export default function PersonalizedSettingsView() {
...
@@ -14,7 +14,7 @@ export default function PersonalizedSettingsView() {
const
load
=
useCallback
(
async
()
=>
{
const
load
=
useCallback
(
async
()
=>
{
setLoading
(
true
);
setLoading
(
true
);
const
result
=
await
getPersonalizedSettings
();
const
result
=
await
getPersonalizedSettings
();
if
(
result
!==
false
)
setValues
(
result
);
setValues
(
result
);
setLoading
(
false
);
setLoading
(
false
);
},
[]);
},
[]);
...
...
apps/admin/src/modules/settings/point-management/api.ts
浏览文件 @
d180e973
import
{
message
}
from
"antd"
;
import
{
message
}
from
"antd"
;
// @ts-expect-error The legacy workspace does not install the qs declaration package.
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
request
from
"@/utils/request.js"
;
export
interface
PointSettings
{
export
interface
PointSettings
{
integral_switch
?:
string
|
number
;
integral_switch
?:
string
|
number
;
...
@@ -32,79 +29,36 @@ interface RechargeResult {
...
@@ -32,79 +29,36 @@ interface RechargeResult {
err
?:
RechargeMessageGroup
;
err
?:
RechargeMessageGroup
;
}
}
type
ApiBody
<
T
>
=
{
export
async
function
getPointSettings
():
Promise
<
PointSettings
>
{
code
?:
number
;
const
response
=
await
axios
.
post
(
"/system/config/getIntegral"
);
data
?:
T
;
return
response
.
data
??
{};
message
?:
string
;
};
export
async
function
getPointSettings
():
Promise
<
PointSettings
|
false
>
{
try
{
const
response
=
await
request
.
post
(
"/system/config/getIntegral"
,
qs
.
stringify
(
undefined
));
const
body
=
response
.
data
as
ApiBody
<
PointSettings
>
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
return
body
.
data
??
{};
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
setPointSwitch
(
integralSwitch
:
"0"
|
"1"
)
{
export
async
function
setPointSwitch
(
integralSwitch
:
"0"
|
"1"
)
{
try
{
await
axios
.
post
(
"/system/config/integralSet"
,
{
integral_switch
:
integralSwitch
});
const
response
=
await
request
.
post
(
return
true
;
"/system/config/integralSet"
,
qs
.
stringify
({
integral_switch
:
integralSwitch
}),
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
if
(
body
?.
code
===
200
)
return
true
;
message
.
error
(
body
?.
message
??
"数据获取失败!"
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
savePointSettings
(
values
:
PointSettingsFormValues
)
{
export
async
function
savePointSettings
(
values
:
PointSettingsFormValues
)
{
try
{
const
response
=
await
axios
.
post
(
"/system/config/integralEdit"
,
values
);
const
response
=
await
request
.
post
(
"/system/config/integralEdit"
,
qs
.
stringify
(
values
));
notifySuccess
(
response
.
message
);
const
body
=
response
.
data
as
ApiBody
<
unknown
>
;
return
true
;
const
text
=
body
?.
message
??
"数据获取失败!"
;
if
(
body
?.
code
===
200
)
{
message
.
success
(
text
);
return
true
;
}
message
.
error
(
text
);
return
false
;
}
catch
{
return
false
;
}
}
}
export
async
function
rechargePoints
(
values
:
RechargeFormValues
)
{
export
async
function
rechargePoints
(
values
:
RechargeFormValues
)
{
try
{
const
response
=
await
axios
.
post
(
"/members/integral/add"
,
values
);
const
response
=
await
request
.
post
(
"/members/integral/add"
,
qs
.
stringify
(
values
));
const
data
=
response
.
data
as
RechargeResult
;
const
body
=
response
.
data
as
ApiBody
<
RechargeResult
>
;
const
success
=
data
?.
suc
??
{};
if
(
body
?.
code
===
3000
)
{
const
failure
=
data
?.
err
??
{};
message
.
warning
(
"优惠券已过期"
);
if
(
failure
.
msg
===
" 手机号:"
&&
success
.
title
&&
!
success
.
title
.
includes
(
"充值成功(0)"
))
{
return
true
;
if
(
success
.
msg
!==
""
)
message
.
success
(
`
${
success
.
msg
}
充值成功`
,
10
);
}
const
success
=
body
?.
data
?.
suc
??
{};
const
failure
=
body
?.
data
?.
err
??
{};
if
(
failure
.
msg
===
" 手机号:"
&&
success
.
title
&&
!
success
.
title
.
includes
(
"充值成功(0)"
))
{
if
(
success
.
msg
!==
""
)
message
.
success
(
`
${
success
.
msg
}
充值成功`
,
10
);
return
true
;
}
if
(
success
.
title
&&
!
success
.
title
.
includes
(
"充值成功(0)"
)
&&
success
.
msg
!==
""
)
{
message
.
success
(
`
${
success
.
msg
}
充值成功`
,
10
);
}
if
(
failure
.
title
&&
!
failure
.
title
.
includes
(
"充值失败(0)"
)
&&
failure
.
msg
!==
""
)
{
message
.
error
(
`
${
failure
.
msg
}
充值失败`
,
10
);
}
return
true
;
return
true
;
}
catch
{
return
false
;
}
}
if
(
success
.
title
&&
!
success
.
title
.
includes
(
"充值成功(0)"
)
&&
success
.
msg
!==
""
)
{
message
.
success
(
`
${
success
.
msg
}
充值成功`
,
10
);
}
if
(
failure
.
title
&&
!
failure
.
title
.
includes
(
"充值失败(0)"
)
&&
failure
.
msg
!==
""
)
{
message
.
error
(
`
${
failure
.
msg
}
充值失败`
,
10
);
}
return
true
;
}
}
apps/admin/src/modules/settings/point-management/views/PointManagementView.tsx
浏览文件 @
d180e973
...
@@ -29,10 +29,8 @@ export default function PointManagementView() {
...
@@ -29,10 +29,8 @@ export default function PointManagementView() {
const
load
=
useCallback
(
async
()
=>
{
const
load
=
useCallback
(
async
()
=>
{
setLoading
(
true
);
setLoading
(
true
);
const
result
=
await
getPointSettings
();
const
result
=
await
getPointSettings
();
if
(
result
!==
false
)
{
setSettings
(
result
);
setSettings
(
result
);
setIntegralEnabled
(
String
(
result
.
integral_switch
)
!==
"0"
);
setIntegralEnabled
(
String
(
result
.
integral_switch
)
!==
"0"
);
}
setLoading
(
false
);
setLoading
(
false
);
},
[]);
},
[]);
...
...
apps/admin/src/modules/settings/sensitive/api.ts
浏览文件 @
d180e973
export
*
from
'./request.js'
import
axios
,
{
notifySuccess
}
from
"@/utils/axios"
;
const
getData
=
async
(
path
,
params
)
=>
(
await
axios
.
post
(
path
,
params
)).
data
;
const
mutate
=
async
(
path
,
params
,
notify
=
false
)
=>
{
const
response
=
await
axios
.
post
(
path
,
params
);
if
(
notify
)
notifySuccess
(
response
.
message
);
return
true
;
};
export
const
getList
=
(
params
)
=>
getData
(
"/system/sensitive/words/getList"
,
params
);
export
const
addWords
=
(
params
)
=>
mutate
(
"/system/sensitive/words/add"
,
params
,
true
);
export
const
editWords
=
(
params
)
=>
mutate
(
"/system/sensitive/words/edit"
,
params
,
true
);
export
const
delWords
=
(
params
)
=>
mutate
(
"/system/sensitive/words/del"
,
params
);
export
const
infoWords
=
(
params
)
=>
getData
(
"/system/sensitive/words/getInfoById"
,
params
);
export
const
importWords
=
async
(
params
)
=>
{
const
response
=
await
axios
.
post
(
"/system/sensitive/words/import"
,
params
);
return
{
msg
:
response
.
message
,
err
:
response
.
data
?.
err
};
};
apps/admin/src/modules/settings/sensitive/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
'@/utils/request.js'
;
import
qs
from
"qs"
;
import
{
message
}
from
"antd"
;
import
{
get
}
from
"lodash-es"
;
// 敏感词
// 获取列表
const
getList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
// 添加
const
addWords
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
// 修改
const
editWords
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
// 删除
const
delWords
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
// message.success(msg)
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
// 详情
const
infoWords
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/getInfoById"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
// 导入
const
importWords
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/system/sensitive/words/import"
,
obj
,
{
headers
:
{
"Content-Type"
:
" multipart/form-data"
,
},
});
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
{
msg
,
err
:
data
.
err
};
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
error
;
}
};
export
{
getList
,
addWords
,
importWords
,
editWords
,
delWords
,
infoWords
};
apps/admin/src/modules/student-book/api.ts
deleted
100644 → 0
浏览文件 @
6d1921de
export
*
from
"./request"
;
apps/admin/src/modules/student-book/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
import
axios
from
"@/utils/request.js"
;
import
qs
from
"qs"
;
import
{
get
}
from
"lodash-es"
;
import
{
message
}
from
"antd"
;
// 用户信息
const
getUserInfo
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/user/getUserInfo"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取角色已选权限
const
getPowerByRoleId
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/user/role/getPowerByRoleId"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 章节列表
const
getAllList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/getAllList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
{
code
,
data
,
};
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加章节
const
chapterAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
// message.success('添加成功');
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 章节详情
const
getInfoById
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/getInfoById"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改章节
const
chapterEdit
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 删除章节
const
chapterDel
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 拖拽章节排序
const
dragOrder
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/chapter/dragOrder"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取章节内容
const
getInfoByChapterId
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getInfoByChapterId"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加章节内容
const
sectionAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
message
.
success
(
msg
);
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 修改章节内容
const
sectionEdit
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/edit"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
// message.success(msg);
return
true
;
}
else
{
message
.
error
(
msg
);
return
{
code
,
msg
,
data
};
}
}
catch
(
error
)
{
return
false
;
}
};
// 获取章节的题库列表
const
getQuestionList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/getQuestionList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 移除课后题
const
questionDel
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/del"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 添加课后题
const
questionAdd
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/chapter/question/add"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 发布审核
const
release
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/release"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 模板列表
const
templateGetList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/template/getList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 模板导入
const
templateImport
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/template/import"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 书籍导入
const
teacherImport
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/import"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
true
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
// 保存历史记录
const
getRecordList
=
async
(
obj
)
=>
{
try
{
const
res
=
await
axios
.
post
(
"/book/teacher/section/getRecordList"
,
qs
.
stringify
(
obj
));
const
code
=
get
(
res
,
"data.code"
,
0
);
const
data
=
get
(
res
,
"data.data"
,
[]);
const
msg
=
get
(
res
,
"data.message"
,
"数据获取失败!"
);
if
(
code
===
200
)
{
return
data
;
}
else
{
message
.
error
(
msg
);
return
false
;
}
}
catch
(
error
)
{
return
false
;
}
};
export
{
getAllList
,
chapterAdd
,
getInfoById
,
chapterEdit
,
chapterDel
,
dragOrder
,
getInfoByChapterId
,
sectionAdd
,
sectionEdit
,
getQuestionList
,
questionDel
,
questionAdd
,
release
,
templateGetList
,
templateImport
,
teacherImport
,
getRecordList
,
getPowerByRoleId
,
getUserInfo
,
};
apps/admin/src/modules/student-book/views/StudentBookView.jsx
浏览文件 @
d180e973
...
@@ -22,7 +22,13 @@ import {
...
@@ -22,7 +22,13 @@ import {
findTreeToIndex
,
findTreeToIndex
,
findNodeById
,
findNodeById
,
}
from
"@/utils/common"
;
}
from
"@/utils/common"
;
import
{
getAllList
,
getInfoByChapterId
,
sectionEdit
,
chapterDel
,
dragOrder
}
from
"../request"
;
import
{
getAllList
,
getInfoByChapterId
,
sectionEdit
,
chapterDel
,
dragOrder
,
}
from
"@/modules/books/management/chapters/api.js"
;
import
"./StudentBookView.less"
;
import
"./StudentBookView.less"
;
const
Examine
=
()
=>
{
const
Examine
=
()
=>
{
...
...
apps/admin/src/modules/teachers/list/api.ts
浏览文件 @
d180e973
import
{
message
}
from
'antd'
import
axios
,
{
notifySuccess
}
from
'@/utils/axios'
import
{
get
}
from
'lodash-es'
import
qs
from
'qs'
import
axios
from
'@/utils/request.js'
async
function
request
(
async
function
request
(
path
:
string
,
path
:
string
,
payload
:
Record
<
string
,
unknown
>
,
payload
:
Record
<
string
,
unknown
>
,
{
success
=
false
,
returnData
=
false
}:
{
success
?:
boolean
;
returnData
?:
boolean
}
=
{},
{
success
=
false
,
returnData
=
false
}:
{
success
?:
boolean
;
returnData
?:
boolean
}
=
{},
)
{
)
{
try
{
const
response
=
await
axios
.
post
(
path
,
payload
)
const
response
=
await
axios
.
post
(
path
,
qs
.
stringify
(
payload
))
if
(
success
)
notifySuccess
(
response
.
message
)
const
code
=
get
(
response
,
'data.code'
,
0
)
return
returnData
?
response
.
data
:
true
const
data
=
get
(
response
,
'data.data'
,
[])
const
text
=
get
(
response
,
'data.message'
,
'数据获取失败!'
)
if
(
code
!==
200
)
{
message
.
error
(
text
)
return
false
}
if
(
success
)
message
.
success
(
text
)
return
returnData
?
data
:
true
}
catch
{
return
false
}
}
}
export
const
getTeacherList
=
(
payload
:
Record
<
string
,
unknown
>
)
=>
export
const
getTeacherList
=
(
payload
:
Record
<
string
,
unknown
>
)
=>
...
...
apps/admin/src/utils/axios.
j
s
→
apps/admin/src/utils/axios.
t
s
浏览文件 @
d180e973
import
axios
from
"axios"
;
import
axios
,
{
type
AxiosRequestConfig
,
type
AxiosResponse
,
type
InternalAxiosRequestConfig
}
from
"axios"
;
import
md5
from
"js-md5"
;
import
md5
from
"js-md5"
;
import
qs
from
"qs
"
;
import
{
message
,
Modal
,
notification
}
from
"antd
"
;
import
{
Modal
,
notification
}
from
"antd"
;
import
{
ADMIN_LOGIN_PATH
,
normalizeAdminApiPath
}
from
"@/utils/adminPaths.js"
;
import
{
ADMIN_LOGIN_PATH
,
normalizeAdminApiPath
}
from
"@/utils/adminPaths.js"
;
// import { sm4 as Sm4js } from 'evit-gm-crypt'
// const sm4 = new Sm4js({
export
interface
ApiResponse
<
T
=
unknown
>
{
// key: 'XDXDXU_ZIJING_01',
code
:
number
;
// mode: 'cbc',
message
?:
string
;
// iv: 'IVIVIV_ZHIXUE_01',
data
:
T
;
// cipherType: 'base64'
}
// })
export
interface
ApiRequestConfig
extends
AxiosRequestConfig
{
silentBusinessError
?:
boolean
;
resolveBusinessError
?:
boolean
;
}
export
function
notifySuccess
(
text
?:
string
):
void
{
if
(
text
&&
text
!==
"OK"
)
message
.
success
(
text
);
}
interface
ApiClient
{
get
<
T
=
any
>
(
url
:
string
,
config
?:
ApiRequestConfig
):
Promise
<
ApiResponse
<
T
>>
;
post
<
T
=
any
>
(
url
:
string
,
data
?:
unknown
,
config
?:
ApiRequestConfig
):
Promise
<
ApiResponse
<
T
>>
;
}
function
getToken
()
{
function
getToken
()
:
string
{
return
window
.
localStorage
.
getItem
(
"kiwi.token"
)
?
window
.
localStorage
.
getItem
(
"kiwi.token"
)
:
""
;
return
window
.
localStorage
.
getItem
(
"kiwi.token"
)
?
?
""
;
}
}
function
showLoginModal
()
{
function
showLoginModal
()
:
void
{
Modal
.
warning
({
Modal
.
warning
({
title
:
"登录状态已过期,请重新登录"
,
title
:
"登录状态已过期,请重新登录"
,
onOk
()
{
onOk
()
{
...
@@ -26,86 +38,95 @@ function showLoginModal() {
...
@@ -26,86 +38,95 @@ function showLoginModal() {
});
});
}
}
// 排序
function
alphabeticalSort
(
a
:
string
,
b
:
string
):
number
{
function
alphabeticalSort
(
a
,
b
)
{
return
a
.
localeCompare
(
b
);
return
a
.
localeCompare
(
b
);
}
}
const
httpRequest
=
axios
.
create
({
function
serializeSignValue
(
value
:
unknown
):
string
{
baseURL
:
import
.
meta
.
env
.
VITE_API_PREFIX
,
if
(
value
!==
null
&&
typeof
value
===
"object"
)
{
return
JSON
.
stringify
(
value
);
}
return
String
(
value
??
""
);
}
function
getSignData
(
data
:
unknown
):
Record
<
string
,
unknown
>
{
if
(
data
instanceof
FormData
)
{
const
values
:
Record
<
string
,
unknown
>
=
{};
data
.
forEach
((
value
,
key
)
=>
{
if
(
value
instanceof
File
)
return
;
const
previous
=
values
[
key
];
values
[
key
]
=
previous
===
undefined
?
value
:
[...(
Array
.
isArray
(
previous
)
?
previous
:
[
previous
]),
value
];
});
return
values
;
}
return
data
&&
typeof
data
===
"object"
?
(
data
as
Record
<
string
,
unknown
>
)
:
{};
}
const
httpRequest
:
any
=
axios
.
create
({
baseURL
:
(
import
.
meta
as
ImportMeta
&
{
env
:
{
VITE_API_PREFIX
?:
string
}
}).
env
.
VITE_API_PREFIX
,
withCredentials
:
true
,
withCredentials
:
true
,
});
});
// 请求拦截器
httpRequest
.
interceptors
.
request
.
use
(
httpRequest
.
interceptors
.
request
.
use
(
(
config
)
=>
{
(
config
:
InternalAxiosRequestConfig
)
=>
{
config
.
url
=
normalizeAdminApiPath
(
config
.
url
);
config
.
url
=
normalizeAdminApiPath
(
config
.
url
);
const
token
=
getToken
();
const
token
=
getToken
();
// 应用设置
const
appId
=
"TzEU5jPk2tu80266"
;
const
appId
=
"TzEU5jPk2tu80266"
;
const
appSecret
=
"0a006048a4480481b18fef1405120b83"
;
const
appSecret
=
"0a006048a4480481b18fef1405120b83"
;
const
timestamp
=
Math
.
floor
(
Date
.
now
()
/
1000
);
const
timestamp
=
Math
.
floor
(
Date
.
now
()
/
1000
);
const
requestData
=
getSignData
(
config
.
data
);
const
signData
=
{
const
signData
=
{
...
config
.
d
ata
,
...
requestD
ata
,
appId
,
appId
,
appSecret
,
appSecret
,
timestamp
,
timestamp
,
token
,
token
,
url
:
config
.
url
,
url
:
config
.
url
,
};
};
const
signStr
=
Object
.
entries
(
signData
)
.
sort
(([
keyA
],
[
keyB
])
=>
alphabeticalSort
(
keyA
,
keyB
))
.
map
(([
key
,
value
])
=>
`
${
key
}
=
${
serializeSignValue
(
value
)}
`
)
.
join
(
"&"
);
const
hash
=
md5
as
unknown
as
(
value
:
string
)
=>
string
;
const
sign
=
hash
(
hash
(
`
${
signStr
}
&4F6g4Y6b5L4R9`
));
const
signStr
=
qs
.
stringify
(
signData
,
{
sort
:
alphabeticalSort
});
config
.
headers
.
set
({
const
salt
=
"&4F6g4Y6b5L4R9"
;
const
sign
=
md5
(
md5
(
signStr
+
salt
));
const
defaultHeaders
=
{
Authorization
:
token
,
Authorization
:
token
,
AppId
:
appId
,
AppId
:
appId
,
AppSecret
:
appSecret
,
AppSecret
:
appSecret
,
Timestamp
:
timestamp
,
Timestamp
:
timestamp
,
Sign
:
sign
,
Sign
:
sign
,
};
});
config
.
headers
=
{
...
config
.
headers
,
...
defaultHeaders
};
// if (config.data && config.headers['Content-Type'] !== 'multipart/form-data' && import.meta.env.PROD) {
// // console.log({ ...config.data, expire: timestamp + 60 })
// config.data = { data: sm4.encrypt(JSON.stringify({ ...config.data, expire: timestamp + 60 })) }
// }
return
config
;
return
config
;
},
},
(
error
)
=>
{
(
error
:
unknown
)
=>
Promise
.
reject
(
error
),
return
Promise
.
reject
(
error
);
},
);
);
// 响应拦截器
httpRequest
.
interceptors
.
response
.
use
(
httpRequest
.
interceptors
.
response
.
use
(
(
response
)
=>
{
(
response
:
AxiosResponse
<
ApiResponse
>
)
=>
{
const
{
data
}
=
response
;
const
{
data
}
=
response
;
if
(
data
.
code
===
401
||
data
.
code
===
403
)
{
if
(
data
.
code
===
401
||
data
.
code
===
403
)
{
if
(
location
.
pathname
!==
ADMIN_LOGIN_PATH
)
{
if
(
location
.
pathname
!==
ADMIN_LOGIN_PATH
)
showLoginModal
();
showLoginModal
();
}
return
Promise
.
reject
(
data
);
return
Promise
.
reject
(
data
);
}
}
if
(
data
.
code
!==
200
&&
data
.
code
!==
0
)
{
if
(
data
.
code
!==
200
)
{
if
(
response
.
config
.
resolveBusinessError
)
return
data
;
if
(
response
.
config
.
silentBusinessError
)
return
Promise
.
reject
(
data
);
notification
.
error
({
message
:
data
.
message
||
"请求错误"
});
notification
.
error
({
message
:
data
.
message
||
"请求错误"
});
return
Promise
.
reject
(
data
);
return
Promise
.
reject
(
data
);
}
}
return
data
;
return
data
;
},
},
(
error
)
=>
{
(
error
:
{
response
?:
AxiosResponse
<
ApiResponse
>
}
)
=>
{
if
(
error
.
response
)
{
if
(
error
.
response
)
{
const
{
status
,
data
=
{}
}
=
error
.
response
;
const
{
status
,
data
}
=
error
.
response
;
if
(
status
===
401
||
status
===
403
)
{
if
(
status
===
401
||
status
===
403
)
{
showLoginModal
();
showLoginModal
();
}
else
{
}
else
{
notification
.
error
({
message
:
data
.
message
||
"请求错误"
});
notification
.
error
({
message
:
data
?
.
message
||
"请求错误"
});
console
.
error
(
`
${
status
}
:
${
data
.
message
}
`
);
console
.
error
(
`
${
status
}
:
${
data
?
.
message
}
`);
}
}
} else {
} else {
console.log(error);
console.log(error);
...
@@ -114,4 +135,4 @@ httpRequest.interceptors.response.use(
...
@@ -114,4 +135,4 @@ httpRequest.interceptors.response.use(
},
},
);
);
export
default
httpRequest
;
export default httpRequest
as ApiClient
;
apps/admin/src/utils/captcha.js
浏览文件 @
d180e973
import
$
from
"jquery"
;
import
$
from
"jquery"
;
import
axios
from
"@/utils/request.js"
;
import
axios
from
"@/utils/axios"
;
import
qs
from
"qs"
;
import
{
message
}
from
"antd"
;
import
{
message
}
from
"antd"
;
let
RotateVerify
;
// 声明 RotateVerify 变量
let
RotateVerify
;
// 声明 RotateVerify 变量
...
@@ -79,15 +78,16 @@ let RotateVerify; // 声明 RotateVerify 变量
...
@@ -79,15 +78,16 @@ let RotateVerify; // 声明 RotateVerify 变量
axios
axios
.
post
(
.
post
(
this
.
settings
.
initUrl
,
this
.
settings
.
initUrl
,
qs
.
stringify
(
{
{
drag_wrap
:
this
.
$slideDragWrap
.
width
(),
drag_wrap
:
this
.
$slideDragWrap
.
width
(),
drag_btn
:
this
.
$slideDragBtn
.
width
(),
drag_btn
:
this
.
$slideDragBtn
.
width
(),
}),
},
{
resolveBusinessError
:
true
},
)
)
.
then
((
res
)
=>
{
.
then
((
res
)
=>
{
const
code
=
res
.
data
.
code
;
const
code
=
res
.
code
;
const
data
=
res
.
data
.
data
;
const
data
=
res
.
data
;
const
msg
=
res
.
data
.
message
;
const
msg
=
res
.
message
;
if
(
code
===
200
)
{
if
(
code
===
200
)
{
this
.
randRot
=
data
.
rand_rot
;
this
.
randRot
=
data
.
rand_rot
;
this
.
code
=
data
.
code
;
this
.
code
=
data
.
code
;
...
@@ -193,9 +193,9 @@ let RotateVerify; // 声明 RotateVerify 变量
...
@@ -193,9 +193,9 @@ let RotateVerify; // 声明 RotateVerify 变量
_this
.
settings
.
verifyParam
.
disLf
=
_this
.
disLf
;
_this
.
settings
.
verifyParam
.
disLf
=
_this
.
disLf
;
axios
axios
.
post
(
_this
.
settings
.
verifyUrl
,
_this
.
settings
.
verifyParam
)
.
post
(
_this
.
settings
.
verifyUrl
,
_this
.
settings
.
verifyParam
,
{
resolveBusinessError
:
true
}
)
.
then
(
function
(
res
)
{
.
then
(
function
(
res
)
{
if
(
res
.
data
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
_this
.
$slideDragBtn
.
addClass
(
"control-btn-suc"
);
_this
.
$slideDragBtn
.
addClass
(
"control-btn-suc"
);
_this
.
controlBorWrap
.
addClass
(
"control-bor-suc"
);
_this
.
controlBorWrap
.
addClass
(
"control-bor-suc"
);
_this
.
statusBg
.
fadeIn
();
_this
.
statusBg
.
fadeIn
();
...
@@ -307,9 +307,9 @@ let RotateVerify; // 声明 RotateVerify 变量
...
@@ -307,9 +307,9 @@ let RotateVerify; // 声明 RotateVerify 变量
_this
.
settings
.
verifyParam
.
disLf
=
_this
.
disLf
;
_this
.
settings
.
verifyParam
.
disLf
=
_this
.
disLf
;
axios
axios
.
post
(
_this
.
settings
.
verifyUrl
,
_this
.
settings
.
verifyParam
)
.
post
(
_this
.
settings
.
verifyUrl
,
_this
.
settings
.
verifyParam
,
{
resolveBusinessError
:
true
}
)
.
then
(
function
(
res
)
{
.
then
(
function
(
res
)
{
if
(
res
.
data
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
_this
.
verifyState
=
true
;
_this
.
verifyState
=
true
;
_this
.
$slideDragBtn
.
addClass
(
"control-btn-suc"
);
_this
.
$slideDragBtn
.
addClass
(
"control-btn-suc"
);
_this
.
controlBorWrap
.
addClass
(
"control-bor-suc"
);
_this
.
controlBorWrap
.
addClass
(
"control-bor-suc"
);
...
...
apps/admin/src/utils/common.js
浏览文件 @
d180e973
/**
/**
* 项目的公共方法
* 项目的公共方法
*/
*/
import
$
from
"jquery"
;
/**
* 对象重新排序
* @param {*} obj
* @returns
*/
export
function
sortObjASCII
(
obj
)
{
let
arr
=
Object
.
keys
(
obj
).
sort
();
if
(
arr
.
length
===
0
)
{
return
{};
}
let
sortObj
=
{};
for
(
let
ii
in
arr
)
{
sortObj
[
arr
[
ii
]]
=
obj
[
arr
[
ii
]];
}
return
sortObj
;
}
/**
* @desc 格式化日期字符串
* @param { Nubmer} - 时间戳
* @returns { String } 格式化后的日期字符串
*/
export
function
formatDate
(
timestamp
)
{
// 补全为13位
let
arrTimestamp
=
(
timestamp
+
""
).
split
(
""
);
for
(
let
start
=
0
;
start
<
13
;
start
++
)
{
if
(
!
arrTimestamp
[
start
])
{
arrTimestamp
[
start
]
=
"0"
;
}
}
timestamp
=
arrTimestamp
.
join
(
""
)
*
1
;
let
minute
=
1000
*
60
;
let
hour
=
minute
*
60
;
let
day
=
hour
*
24
;
let
month
=
day
*
30
;
let
now
=
new
Date
().
getTime
();
let
diffValue
=
now
-
timestamp
;
// 如果本地时间反而小于变量时间
if
(
diffValue
<
0
)
{
return
"不久前"
;
}
// 计算差异时间的量级
let
monthC
=
diffValue
/
month
;
let
weekC
=
diffValue
/
(
7
*
day
);
let
dayC
=
diffValue
/
day
;
let
hourC
=
diffValue
/
hour
;
let
minC
=
diffValue
/
minute
;
// 数值补0方法
let
zero
=
function
(
value
)
{
if
(
value
<
10
)
{
return
"0"
+
value
;
}
return
value
;
};
// 使用
if
(
monthC
>
4
)
{
// 超过1年,直接显示年月日
return
(
function
()
{
let
date
=
new
Date
(
timestamp
);
return
(
date
.
getFullYear
()
+
"年"
+
zero
(
date
.
getMonth
()
+
1
)
+
"月"
+
zero
(
date
.
getDate
()
+
1
)
+
"日"
);
})();
}
else
if
(
monthC
>=
1
)
{
return
parseInt
(
monthC
)
+
"月前"
;
}
else
if
(
weekC
>=
1
)
{
return
parseInt
(
weekC
)
+
"周前"
;
}
else
if
(
dayC
>=
1
)
{
return
parseInt
(
dayC
)
+
"天前"
;
}
else
if
(
hourC
>=
1
)
{
return
parseInt
(
hourC
)
+
"小时前"
;
}
else
if
(
minC
>=
1
)
{
return
parseInt
(
minC
)
+
"分钟前"
;
}
return
"刚刚"
;
}
/**
* 获取日期字符串
* @returns
*/
export
function
getDateStr
()
{
const
date
=
new
Date
(),
year
=
date
.
getFullYear
(),
month
=
date
.
getMonth
()
>
9
?
date
.
getMonth
()
+
1
:
`0
${
date
.
getMonth
()
+
1
}
`
,
day
=
date
.
getDate
()
+
1
>
9
?
date
.
getDate
()
+
1
:
`0
${
date
.
getDate
()
+
1
}
`
,
hh
=
date
.
getHours
()
>
9
?
date
.
getHours
()
:
`0
${
date
.
getHours
()}
`
,
mm
=
date
.
getMinutes
()
>
9
?
date
.
getMinutes
()
:
`0
${
date
.
getMinutes
()}
`
;
return
`
${
year
}${
month
}${
day
}${
hh
}${
mm
}
`
;
}
/**
* 随机生成字符串
* @param {*} len
* @returns
*/
export
function
randomString
(
len
)
{
const
length
=
len
||
32
;
let
chars
=
"ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz12345678"
,
maxPos
=
chars
.
length
,
pwd
=
""
;
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
pwd
+=
chars
.
charAt
(
Math
.
floor
(
Math
.
random
()
*
maxPos
));
}
return
pwd
;
}
// 根据id 查找树中的节点内容
// 根据id 查找树中的节点内容
export
const
findTreeElementByKey
=
(
tree
,
key
,
value
)
=>
{
export
const
findTreeElementByKey
=
(
tree
,
key
,
value
)
=>
{
for
(
let
i
=
0
;
i
<
tree
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
tree
.
length
;
i
++
)
{
const
bool
=
!
isNaN
(
value
)
const
bool
=
!
isNaN
(
value
)
?
parseFloat
(
tree
[
i
][
key
])
===
parseFloat
(
value
)
:
tree
[
i
][
key
]
===
value
?
parseFloat
(
tree
[
i
][
key
])
===
parseFloat
(
value
)
:
tree
[
i
][
key
]
===
value
;
if
(
bool
)
{
if
(
bool
)
{
// 找到元素
// 找到元素
return
tree
[
i
]
;
return
tree
[
i
]
}
else
if
(
Array
.
isArray
(
tree
[
i
].
children
))
{
}
else
if
(
Array
.
isArray
(
tree
[
i
].
children
))
{
// 递归遍历子节点
// 递归遍历子节点
const
found
=
findTreeElementByKey
(
tree
[
i
].
children
,
key
,
value
)
;
const
found
=
findTreeElementByKey
(
tree
[
i
].
children
,
key
,
value
)
if
(
found
)
{
if
(
found
)
{
return
found
;
return
found
}
}
}
}
}
}
return
null
;
// 没有找到元素
return
null
// 没有找到元素
};
}
// 设置所有有children 的展开项
export
const
findParentsExpanded
=
(
treeData
,
targetKey
=
"id"
)
=>
{
const
keys
=
[];
function
traverse
(
nodes
)
{
if
(
!
nodes
)
return
;
for
(
const
node
of
nodes
)
{
if
(
node
.
children
)
{
keys
.
push
(
node
[
targetKey
]);
traverse
(
node
.
children
);
}
}
}
traverse
(
treeData
);
return
keys
;
};
// 将路由菜单转为树形菜单
export
const
treeRouterData
=
(
source
,
id
=
"menuId"
,
parentId
=
"pid"
,
children
=
"children"
)
=>
{
const
cloneData
=
JSON
.
parse
(
JSON
.
stringify
(
source
));
if
(
source
.
length
===
0
)
return
source
;
return
cloneData
.
filter
((
father
)
=>
{
const
branchArr
=
cloneData
.
filter
(
(
child
)
=>
parseFloat
(
father
[
id
])
===
parseFloat
(
child
[
parentId
]),
);
father
[
children
]
=
branchArr
.
length
>
0
?
branchArr
:
null
;
return
father
[
parentId
]
===
0
;
});
};
// 将数组转换成Tree所需要的数组
// 将数组转换成Tree所需要的数组
export
function
convertToAntdTreeData
(
data
,
target
=
"label"
)
{
export
function
convertToAntdTreeData
(
data
,
target
=
'label'
)
{
const
antdTreeData
=
[]
;
const
antdTreeData
=
[]
const
convertNode
=
(
node
)
=>
{
const
convertNode
=
(
node
)
=>
{
const
antdTreeNode
=
{
const
antdTreeNode
=
{
...
@@ -180,192 +31,142 @@ export function convertToAntdTreeData(data, target = "label") {
...
@@ -180,192 +31,142 @@ export function convertToAntdTreeData(data, target = "label") {
key
:
node
.
id
,
key
:
node
.
id
,
select
:
false
,
select
:
false
,
edit
:
false
,
edit
:
false
,
}
;
}
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
antdTreeNode
.
children
=
node
.
children
.
map
(
convertNode
)
;
antdTreeNode
.
children
=
node
.
children
.
map
(
convertNode
)
}
}
return
antdTreeNode
;
return
antdTreeNode
}
;
}
antdTreeData
.
push
(...
data
.
map
(
convertNode
))
;
antdTreeData
.
push
(...
data
.
map
(
convertNode
))
return
antdTreeData
;
return
antdTreeData
}
}
// 查找树里面的所有父级节点
// 查找树里面的所有父级节点
export
const
findParents
=
(
treeData
,
targetKey
=
"id"
,
value
)
=>
{
export
const
findParents
=
(
treeData
,
targetKey
=
'id'
,
value
)
=>
{
for
(
const
node
of
treeData
)
{
for
(
const
node
of
treeData
)
{
if
(
parseFloat
(
node
[
targetKey
])
===
parseFloat
(
value
))
{
if
(
parseFloat
(
node
[
targetKey
])
===
parseFloat
(
value
))
{
return
[]
;
return
[]
}
}
if
(
node
.
children
)
{
if
(
node
.
children
)
{
const
parents
=
findParents
(
node
.
children
,
targetKey
,
value
)
;
const
parents
=
findParents
(
node
.
children
,
targetKey
,
value
)
if
(
parents
)
{
if
(
parents
)
{
return
[
node
[
targetKey
],
...
parents
]
;
return
[
node
[
targetKey
],
...
parents
]
}
}
}
}
}
}
return
null
;
return
null
}
;
}
export
const
findNodeById
=
(
tree
,
targetKey
=
"id"
,
targetId
)
=>
{
export
const
findNodeById
=
(
tree
,
targetKey
=
'id'
,
targetId
)
=>
{
// 递归处理树节点
// 递归处理树节点
for
(
const
node
of
tree
)
{
for
(
const
node
of
tree
)
{
// 如果当前节点的 id 等于目标 id,返回当前节点的所有子节点的 id
// 如果当前节点的 id 等于目标 id,返回当前节点的所有子节点的 id
if
(
node
[
targetKey
]
===
targetId
)
{
if
(
node
[
targetKey
]
===
targetId
)
{
if
(
node
.
children
&&
node
.
children
.
length
)
{
if
(
node
.
children
&&
node
.
children
.
length
)
{
return
collectChildrenIds
(
node
.
children
,
targetKey
)
;
return
collectChildrenIds
(
node
.
children
,
targetKey
)
}
}
}
}
// 递归处理子节点
// 递归处理子节点
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
const
result
=
findNodeById
(
node
.
children
,
targetKey
,
targetId
)
;
const
result
=
findNodeById
(
node
.
children
,
targetKey
,
targetId
)
if
(
result
)
{
if
(
result
)
{
return
result
;
return
result
}
}
}
}
}
}
// 如果未找到目标节点,返回空数组
// 如果未找到目标节点,返回空数组
return
[]
;
return
[]
}
;
}
function
collectChildrenIds
(
children
,
targetKey
)
{
function
collectChildrenIds
(
children
,
targetKey
)
{
// 收集子节点的 id
// 收集子节点的 id
const
ids
=
[]
;
const
ids
=
[]
for
(
const
child
of
children
)
{
for
(
const
child
of
children
)
{
ids
.
push
(
child
[
targetKey
])
;
ids
.
push
(
child
[
targetKey
])
// 递归处理孙子节点
// 递归处理孙子节点
if
(
child
.
children
&&
child
.
children
.
length
>
0
)
{
if
(
child
.
children
&&
child
.
children
.
length
>
0
)
{
ids
.
push
(...
collectChildrenIds
(
child
.
children
,
targetKey
))
;
ids
.
push
(...
collectChildrenIds
(
child
.
children
,
targetKey
))
}
}
}
}
return
ids
;
return
ids
}
}
// 查找树里面的所有父级节点
export
const
findAllParents
=
(
tree
,
key
,
value
,
parents
=
[])
=>
{
for
(
const
node
of
tree
)
{
const
currentKey
=
node
[
key
];
const
children
=
node
.
children
||
[];
if
(
currentKey
===
value
)
{
return
parents
.
concat
(
currentKey
);
}
if
(
children
.
length
>
0
)
{
const
result
=
findAllParents
(
children
,
key
,
value
,
parents
.
concat
(
currentKey
));
if
(
result
.
length
>
0
)
{
return
result
;
}
}
}
return
[];
};
// 查找树里面的所有子级节点
export
const
findAllChildren
=
(
tree
,
key
,
value
)
=>
{
for
(
const
node
of
tree
)
{
const
currentKey
=
node
[
key
];
const
currentChildren
=
(
node
.
children
||
[]).
map
((
child
)
=>
child
[
key
]);
if
(
currentKey
===
value
)
{
return
currentChildren
;
}
if
(
currentChildren
.
length
>
0
)
{
const
result
=
findAllChildren
(
node
.
children
,
key
,
value
,
currentChildren
);
return
result
;
}
}
};
// 将树形结构转为一维数组
export
const
treeDataToArray
=
(
source
)
=>
{
const
res
=
[];
// 第二种方式
source
.
length
&&
source
.
forEach
((
item
)
=>
{
res
.
push
(
item
);
item
.
children
&&
res
.
push
(...
treeDataToArray
(
item
.
children
));
});
return
res
;
};
export
const
getStyleValue
=
(
elem
,
styleKey
)
=>
{
export
const
getStyleValue
=
(
elem
,
styleKey
)
=>
{
let
res
=
""
;
let
res
=
''
const
styleStr
=
$
(
elem
).
attr
(
"style"
)
||
""
;
// 如 'line-height: 2.5; color: red;'
const
styleStr
=
elem
?.
getAttribute
?.(
'style'
)
||
elem
?.
attr
?.(
'style'
)
||
''
// 如 'line-height: 2.5; color: red;'
const
styleArr
=
styleStr
.
split
(
";"
);
// 如 ['line-height: 2.5', ' color: red', '']
const
styleArr
=
styleStr
.
split
(
';'
)
// 如 ['line-height: 2.5', ' color: red', '']
const
length
=
styleArr
.
length
;
const
length
=
styleArr
.
length
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
length
;
i
++
)
{
const
styleItemStr
=
styleArr
[
i
]
;
// 如 'line-height: 2.5'
const
styleItemStr
=
styleArr
[
i
]
// 如 'line-height: 2.5'
if
(
styleItemStr
)
{
if
(
styleItemStr
)
{
const
arr
=
styleItemStr
.
split
(
":"
);
// ['line-height', ' 2.5']
const
arr
=
styleItemStr
.
split
(
':'
)
// ['line-height', ' 2.5']
if
(
arr
[
0
].
trim
()
===
styleKey
)
{
if
(
arr
[
0
].
trim
()
===
styleKey
)
{
res
=
arr
[
1
].
trim
()
;
res
=
arr
[
1
].
trim
()
}
}
}
}
}
}
return
res
;
return
res
}
;
}
// 根据id 查找树中的节点内容
// 根据id 查找树中的节点内容
export
const
findFirstNotHasChildren
=
(
tree
)
=>
{
export
const
findFirstNotHasChildren
=
(
tree
)
=>
{
if
(
tree
.
length
>
0
)
{
if
(
tree
.
length
>
0
)
{
if
(
tree
[
0
].
children
&&
tree
[
0
].
children
.
length
>
0
)
{
if
(
tree
[
0
].
children
&&
tree
[
0
].
children
.
length
>
0
)
{
return
findFirstNotHasChildren
(
tree
[
0
].
children
)
;
return
findFirstNotHasChildren
(
tree
[
0
].
children
)
}
}
return
tree
[
0
]
;
return
tree
[
0
]
}
}
return
null
;
// 没有找到元素
return
null
// 没有找到元素
}
;
}
// 只返回父级, 只找上面第一层的父级
// 只返回父级, 只找上面第一层的父级
export
const
findParentLevelOne
=
(
data
,
key
=
"id"
,
value
)
=>
{
export
const
findParentLevelOne
=
(
data
,
key
=
'id'
,
value
)
=>
{
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
const
item
=
data
[
i
]
;
const
item
=
data
[
i
]
if
(
item
.
children
)
{
if
(
item
.
children
)
{
const
child
=
item
.
children
.
find
((
c
)
=>
c
[
key
]
===
value
)
;
const
child
=
item
.
children
.
find
((
c
)
=>
c
[
key
]
===
value
)
if
(
child
)
{
if
(
child
)
{
// 找到目标子元素,返回其父元素
// 找到目标子元素,返回其父元素
return
item
;
return
item
}
else
{
}
else
{
// 递归查找子元素的子元素
// 递归查找子元素的子元素
const
result
=
findParentLevelOne
(
item
.
children
,
key
,
value
)
;
const
result
=
findParentLevelOne
(
item
.
children
,
key
,
value
)
if
(
result
)
{
if
(
result
)
{
return
result
;
return
result
}
}
}
}
}
}
}
}
// 没有找到目标子元素,返回null
// 没有找到目标子元素,返回null
return
null
;
return
null
}
;
}
// 找所在位置
// 找所在位置
export
const
findTreeToIndex
=
(
data
,
key
,
value
)
=>
{
export
const
findTreeToIndex
=
(
data
,
key
,
value
)
=>
{
let
index
=
data
.
findIndex
((
item
)
=>
item
[
key
]
===
value
)
;
let
index
=
data
.
findIndex
((
item
)
=>
item
[
key
]
===
value
)
return
index
>
-
1
?
index
:
-
1
;
return
index
>
-
1
?
index
:
-
1
}
;
}
export
const
hexToRgb
=
(
hex
)
=>
{
export
const
hexToRgb
=
(
hex
)
=>
{
// 移除前缀#符号
// 移除前缀#符号
let
hexTemp
=
hex
.
replace
(
/^
\s
*#|
\s
*$/g
,
""
);
let
hexTemp
=
hex
.
replace
(
/^
\s
*#|
\s
*$/g
,
''
)
// 将三位十六进制转为六位
// 将三位十六进制转为六位
if
(
hexTemp
.
length
===
3
)
{
if
(
hexTemp
.
length
===
3
)
{
hexTemp
=
hexTemp
.
replace
(
/
(
.
)
/g
,
"$1$1"
);
hexTemp
=
hexTemp
.
replace
(
/
(
.
)
/g
,
'$1$1'
)
}
}
// 提取R、G、B各自的十六进制表示方式
// 提取R、G、B各自的十六进制表示方式
const
rgb
=
/^
(\w{2})(\w{2})(\w{2})
$/
.
exec
(
hexTemp
)
;
const
rgb
=
/^
(\w{2})(\w{2})(\w{2})
$/
.
exec
(
hexTemp
)
// 转为10进制并返回
// 转为10进制并返回
return
rgb
return
rgb
...
@@ -374,65 +175,64 @@ export const hexToRgb = (hex) => {
...
@@ -374,65 +175,64 @@ export const hexToRgb = (hex) => {
g
:
parseInt
(
rgb
[
2
],
16
),
g
:
parseInt
(
rgb
[
2
],
16
),
b
:
parseInt
(
rgb
[
3
],
16
),
b
:
parseInt
(
rgb
[
3
],
16
),
}
}
:
null
;
:
null
}
;
}
export
const
clacTopicText
=
(
type
,
radio
,
checkbox
,
judge
,
fill
,
textarea
)
=>
{
export
const
clacTopicText
=
(
type
,
radio
,
checkbox
,
judge
,
fill
,
textarea
)
=>
{
let
i
=
0
;
let
i
=
0
let
arr
=
[
"一"
,
"二"
,
"三"
,
"四"
,
"五"
];
let
arr
=
[
'一'
,
'二'
,
'三'
,
'四'
,
'五'
]
if
(
type
===
"radio"
)
{
if
(
type
===
'radio'
)
{
return
"一"
;
return
'一'
}
}
if
(
type
===
"checkbox"
)
{
if
(
type
===
'checkbox'
)
{
if
(
radio
.
length
>
0
)
{
if
(
radio
.
length
>
0
)
{
return
"二"
;
return
'二'
}
else
{
}
else
{
return
"一"
;
return
'一'
}
}
}
}
if
(
type
===
"judge"
)
{
if
(
type
===
'judge'
)
{
if
(
radio
.
length
>
0
&&
checkbox
.
length
>
0
)
{
if
(
radio
.
length
>
0
&&
checkbox
.
length
>
0
)
{
return
"三"
;
return
'三'
}
else
{
}
else
{
if
(
radio
.
length
>
0
||
checkbox
.
length
>
0
)
{
if
(
radio
.
length
>
0
||
checkbox
.
length
>
0
)
{
return
"二"
;
return
'二'
}
else
{
}
else
{
return
"一"
;
return
'一'
}
}
}
}
}
}
if
(
type
===
"fill"
)
{
if
(
type
===
'fill'
)
{
if
(
radio
.
length
>
0
)
{
if
(
radio
.
length
>
0
)
{
i
++
;
i
++
}
}
if
(
checkbox
.
length
>
0
)
{
if
(
checkbox
.
length
>
0
)
{
i
++
;
i
++
}
}
if
(
judge
.
length
>
0
)
{
if
(
judge
.
length
>
0
)
{
i
++
;
i
++
}
}
return
arr
[
i
]
;
return
arr
[
i
]
}
}
if
(
type
===
"textarea"
)
{
if
(
type
===
'textarea'
)
{
if
(
radio
.
length
>
0
)
{
if
(
radio
.
length
>
0
)
{
i
++
;
i
++
}
}
if
(
checkbox
.
length
>
0
)
{
if
(
checkbox
.
length
>
0
)
{
i
++
;
i
++
}
}
if
(
judge
.
length
>
0
)
{
if
(
judge
.
length
>
0
)
{
i
++
;
i
++
}
}
if
(
fill
.
length
>
0
)
{
if
(
fill
.
length
>
0
)
{
i
++
;
i
++
}
}
return
arr
[
i
]
;
return
arr
[
i
]
}
}
};
}
export
const
downloadFile
=
(
res
=
""
)
=>
{
window
.
open
(
import
.
meta
.
env
.
VITE_API_URL
+
"/"
+
res
);
};
export
const
downloadFile
=
(
res
=
''
)
=>
{
window
.
open
(
import
.
meta
.
env
.
VITE_API_URL
+
'/'
+
res
)
}
// 延时函数
// 延时函数
export
const
sleep
=
(
time
)
=>
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
time
))
;
export
const
sleep
=
(
time
)
=>
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
time
))
apps/admin/src/utils/exportWordHtmlDocx.js
浏览文件 @
d180e973
import
{
asBlob
}
from
"html-docx-js-typescript"
;
import
{
asBlob
}
from
"html-docx-js-typescript"
;
import
{
saveAs
}
from
"file-saver"
;
import
{
saveAs
}
from
"file-saver"
;
import
$
from
"jquery"
;
/**
/**
* 将图片 URL 转为 base64 Data URI
* 将图片 URL 转为 base64 Data URI
...
@@ -100,7 +99,7 @@ export async function exportHtmlToWord(name, htmlString, removeSelectors = []) {
...
@@ -100,7 +99,7 @@ export async function exportHtmlToWord(name, htmlString, removeSelectors = []) {
const
doc
=
parser
.
parseFromString
(
htmlString
,
"text/html"
);
const
doc
=
parser
.
parseFromString
(
htmlString
,
"text/html"
);
if
(
removeSelectors
.
length
)
{
if
(
removeSelectors
.
length
)
{
$
(
doc
.
body
).
find
(
removeSelectors
.
join
(
", "
)).
remove
(
);
doc
.
body
.
querySelectorAll
(
removeSelectors
.
join
(
", "
)).
forEach
((
element
)
=>
element
.
remove
()
);
}
}
// 将所有图片转为 base64 内嵌
// 将所有图片转为 base64 内嵌
...
...
apps/admin/src/utils/request.js
deleted
100644 → 0
浏览文件 @
6d1921de
/* eslint-disable */
import
Axios
from
"axios"
;
import
{
message
,
Modal
,
notification
}
from
"antd"
;
import
md5
from
"js-md5"
;
import
{
get
}
from
"lodash-es"
;
import
{
sortObjASCII
}
from
"@/utils/common.js"
;
import
{
ADMIN_LOGIN_PATH
,
normalizeAdminApiPath
,
stripAdminGatewayPrefix
,
}
from
"@/utils/adminPaths.js"
;
import
qs
from
"qs"
;
// import { sm4 as Sm4js } from 'evit-gm-crypt'
// const sm4 = new Sm4js({
// key: 'XDXDXU_ZIJING_01',
// mode: 'cbc',
// iv: 'IVIVIV_ZHIXUE_01',
// cipherType: 'base64'
// })
let
pending
=
[];
// 存储每个ajax请求的取消函数和ajax标识
let
CancelToken
=
Axios
.
CancelToken
;
// 取消请求 方法
// 取消请求 方法
let
cancelPending
=
(
config
)
=>
{
pending
.
forEach
((
item
)
=>
{
item
.
cancel
();
// 取消请求
});
pending
=
[];
// 清空数组
};
// Axios.defaults.withCredentials = true; // 默认为false 表示跨域请求时是否需要使用凭证
const
axios
=
Axios
.
create
({
baseURL
:
import
.
meta
.
env
.
VITE_API_PREFIX
,
timeout
:
999999
,
});
function
getToken
()
{
return
window
.
localStorage
.
getItem
(
"kiwi.token"
)
?
window
.
localStorage
.
getItem
(
"kiwi.token"
)
:
""
;
}
// 请求拦截器
axios
.
interceptors
.
request
.
use
(
(
config
)
=>
{
config
.
url
=
normalizeAdminApiPath
(
config
.
url
);
// 登录流程控制中,根据本地是否存在token判断用户的登录情况
// 但是即使token存在,也有可能token是过期的,所以在每次的请求头中携带token
// 后台根据携带的token判断用户的登录情况,并返回给我们对应的状态码
// 而后我们可以在响应拦截器中,根据状态码进行一些统一的操作。
if
(
axios
.
errorNotified
)
{
return
new
Error
(
""
);
}
const
token
=
getToken
();
token
&&
(
config
.
headers
.
Authorization
=
token
);
// 请求头带上token
// 用户编码
config
.
headers
.
UserNo
=
window
.
localStorage
.
getItem
(
"user_no"
);
// 应用设置
const
appId
=
"TzEU5jPk2tu80266"
;
const
appSecret
=
"0a006048a4480481b18fef1405120b83"
;
config
.
headers
.
AppId
=
appId
;
config
.
headers
.
AppSecret
=
appSecret
;
// 签名
var
signData
=
qs
.
parse
(
config
.
data
);
var
timeStr
=
Date
.
parse
(
new
Date
())
/
1000
;
signData
.
appId
=
appId
;
signData
.
appSecret
=
appSecret
;
signData
.
timestamp
=
timeStr
;
let
s
=
""
;
if
(
config
.
url
.
indexOf
(
".tiangong.cn"
)
>
-
1
)
{
s
=
config
.
url
;
}
else
{
s
=
stripAdminGatewayPrefix
(
import
.
meta
.
env
.
VITE_API_URL
+
config
.
url
);
}
signData
.
url
=
decodeURIComponent
(
s
);
// signData.url = 'http: //zijing.com/index.php/user/user/getList'
signData
.
token
=
token
;
// 按照ASCII码进行排序'
var
dataSign
=
sortObjASCII
(
signData
);
// 转换为字符串
var
signStr
=
""
;
for
(
var
key
in
dataSign
)
{
var
str
=
""
;
if
(
typeof
signData
[
key
]
!==
"string"
&&
signData
[
key
].
constructor
!==
String
)
{
str
=
JSON
.
stringify
(
signData
[
key
]);
}
else
{
str
=
signData
[
key
];
}
if
(
signStr
===
""
)
{
signStr
=
key
+
"="
+
str
;
}
else
{
signStr
+=
"&"
+
key
+
"="
+
str
;
}
}
const
salt
=
"&4F6g4Y6b5L4R9"
;
const
sign
=
signStr
+
salt
;
config
.
headers
.
Sign
=
md5
(
md5
(
sign
));
// 加密盐
config
.
headers
.
Timestamp
=
timeStr
;
// 请求时间
// 设置后端的语言
config
.
headers
[
"Accept-Language"
]
=
window
.
sessionStorage
.
getItem
(
"lang"
);
// config.headers['Cookie'] = 'SESSION-ID=9ec8565699e1b961561362f710674549'
// 判断当前请求是否设置了不显示Loading
/* if (config.headers.showLoading !== false) {
showLoading(config.headers.loadingTarget)
} */
// 在请求拦截器中,为每个请求创建一个取消令牌,并将其添加到pending数组
config
.
cancelToken
=
new
CancelToken
((
cancel
)
=>
{
pending
.
push
({
url
:
config
.
url
,
cancel
});
});
// if (config.data && config.headers['Content-Type'] !== 'multipart/form-data' && import.meta.env.PROD) {
// // console.log({ ...qs.parse(config.data), expire: timeStr + 60 })
// config.data = { data: sm4.encrypt(JSON.stringify({ ...qs.parse(config.data), expire: timeStr + 60 })) }
// }
return
config
;
},
(
error
)
=>
{
Promise
.
reject
(
error
);
},
);
// 响应拦截器
axios
.
interceptors
.
response
.
use
(
(
response
=
{})
=>
{
let
code
=
get
(
response
,
"data.code"
,
""
);
let
msg
=
get
(
response
,
"data.message"
,
""
)
||
get
(
response
,
"data.msg"
,
""
);
// 代表request header中没有带token
let
pathname
=
window
.
location
.
pathname
;
if
(
code
===
401
||
code
===
403
)
{
if
(
!
axios
.
errorNotified
)
{
axios
.
errorNotified
=
true
;
// 添加标志,表示通知已经弹出
if
(
pathname
===
ADMIN_LOGIN_PATH
)
{
return
;
}
Modal
.
warning
({
title
:
"登录状态已过期,请重新登录"
,
// content: '请重新登录',
onOk
()
{
localStorage
.
removeItem
(
"kiwi.gpt.token"
);
window
.
location
.
pathname
=
ADMIN_LOGIN_PATH
;
},
});
cancelPending
(
response
.
config
);
// 取消后续请求
return
Promise
.
reject
(
response
);
}
}
return
response
;
},
(
error
)
=>
{
const
{
response
=
{},
config
=
{}
}
=
error
;
console
.
error
(
"我要的response"
,
response
,
error
);
const
status
=
get
(
response
,
"status"
,
0
);
const
urlPath
=
get
(
config
,
"url"
,
0
);
switch
(
status
)
{
case
401
:
cancelPending
(
response
.
config
);
// 取消后续请求
if
(
!
axios
.
errorNotified
)
{
axios
.
errorNotified
=
true
;
// 添加标志,表示通知已经弹出
Modal
.
warning
({
title
:
"token过期"
,
content
:
"请重新登录"
,
onOk
()
{
localStorage
.
removeItem
(
"kiwi.gpt.token"
);
window
.
location
.
href
=
ADMIN_LOGIN_PATH
;
},
});
}
break
;
case
403
:
cancelPending
(
response
.
config
);
// 取消后续请求
if
(
!
axios
.
errorNotified
)
{
axios
.
errorNotified
=
true
;
// 添加标志,表示通知已经弹出
Modal
.
warning
({
title
:
"身份校验已过期"
,
content
:
"请重新登录"
,
onOk
()
{
localStorage
.
removeItem
(
"kiwi.gpt.token"
);
window
.
location
.
href
=
ADMIN_LOGIN_PATH
;
},
});
}
break
;
case
404
:
notification
.
error
({
message
:
"Error: 404 Not Found"
,
description
:
`url:
${
urlPath
}
, The requested URL was not found on the server.`
,
});
break
;
case
500
:
notification
.
error
({
message
:
"Error: 500"
,
description
:
`url:
${
urlPath
}
`
,
});
break
;
default
:
if
(
status
)
{
notification
.
error
({
message
:
`Error:
${
status
}
`
,
description
:
`url:
${
urlPath
}
`
,
});
}
}
// return error;
return
Promise
.
reject
(
error
);
},
);
export
default
axios
;
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论