Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xiaomai-cloud-class-web
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xiaomai-cloud-class
xiaomai-cloud-class-web
Commits
8f54e0eb
Commit
8f54e0eb
authored
May 30, 2021
by
chenshu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:初始化
parent
985b02a5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
379 additions
and
99 deletions
+379
-99
src/modules/knowledge-base/components/Classification.jsx
+6
-0
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
+6
-4
src/modules/knowledge-base/components/KnowledgeBaseOpt.jsx
+157
-9
src/modules/knowledge-base/components/KnowledgeBaseOpt.less
+29
-0
src/modules/knowledge-base/index.jsx
+16
-1
src/modules/teach-tool/paper-manage/components/PaperList.jsx
+119
-72
src/modules/teach-tool/paper-manage/components/PaperList.less
+29
-0
src/modules/teach-tool/question-manage/components/QuestionList.jsx
+4
-0
src/modules/teach-tool/question-manage/components/QuestionList.less
+13
-13
No files found.
src/modules/knowledge-base/components/Classification.jsx
View file @
8f54e0eb
...
...
@@ -12,6 +12,7 @@ import { Input, Button, Tree } from "antd";
import
"./Classification.less"
;
import
User
from
"@/common/js/user"
;
import
KnowledgeAPI
from
"@/data-source/knowledge/request-api"
;
import
Bus
from
"@/core/bus"
;
const
{
Search
}
=
Input
;
const
{
DirectoryTree
}
=
Tree
;
...
...
@@ -31,6 +32,11 @@ class Classification extends Component {
componentDidMount
()
{
this
.
queryCategoryTree
();
Bus
.
bind
(
'knowledgeCategoryTree'
,
this
.
queryCategoryTree
)
}
componentWillUnmount
()
{
Bus
.
unbind
(
'knowledgeCategoryTree'
,
this
.
queryCategoryTree
)
}
shouldComponentUpdate
=
(
nextProps
,
nextState
)
=>
{
...
...
src/modules/knowledge-base/components/KnowledgeBaseList.jsx
View file @
8f54e0eb
...
...
@@ -127,7 +127,6 @@ class KnowledgeBaseList extends React.Component {
// 预览文件
handleScanFile
=
(
folder
)
=>
{
console
.
log
(
folder
);
const
{
folderFormat
,
folderSize
,
ossUrl
}
=
folder
;
switch
(
folderFormat
)
{
case
"PDF"
:
...
...
@@ -452,7 +451,6 @@ class KnowledgeBaseList extends React.Component {
width
:
160
,
fixed
:
"right"
,
render
:
(
val
,
record
,
index
)
=>
{
console
.
log
(
this
.
props
.
categoryId
);
return
this
.
props
.
categoryId
===
"0"
?
(
<
div
className=
"operate"
>
<
div
...
...
@@ -521,7 +519,6 @@ class KnowledgeBaseList extends React.Component {
// 前往上课数据页面
handleLinkToClassData
=
(
item
)
=>
{
const
{
match
}
=
this
.
props
;
console
.
log
(
item
);
localStorage
.
setItem
(
"WatchData_CourseName"
,
item
.
name
);
window
.
RCHistory
.
push
({
// pathname: `${match.url}/course-data?type=${item.courseType}&id=${item.liveCourseId}`,
...
...
@@ -553,12 +550,17 @@ class KnowledgeBaseList extends React.Component {
};
render
()
{
const
{
dataSource
=
[],
totalCount
,
query
,
match
}
=
this
.
props
;
const
{
dataSource
=
[],
totalCount
,
query
,
match
,
selectedRowKeys
,
onSelectChange
}
=
this
.
props
;
const
{
current
,
size
}
=
query
;
const
rowSelection
=
{
selectedRowKeys
,
onChange
:
onSelectChange
,
}
return
(
<
div
className=
"knowledge-base-list"
>
<
Table
rowKey=
{
(
record
)
=>
record
.
id
}
rowSelection=
{
rowSelection
}
size=
"middle"
dataSource=
{
dataSource
}
columns=
{
this
.
parseColumns
()
}
...
...
src/modules/knowledge-base/components/KnowledgeBaseOpt.jsx
View file @
8f54e0eb
...
...
@@ -9,19 +9,27 @@
import
React
,
{
useState
,
useEffect
}
from
"react"
;
import
{
Button
,
Menu
,
Dropdown
,
message
}
from
"antd"
;
import
{
Button
,
Menu
,
Dropdown
,
message
,
Modal
}
from
"antd"
;
import
SelectPrepareFileModal
from
"@/modules/prepare-lesson/modal/SelectPrepareFileModal"
;
import
{
DownOutlined
}
from
"@ant-design/icons"
;
import
AddCourse
from
"../modal/AddCourse"
;
import
User
from
"@/common/js/user"
;
import
Service
from
"@/common/js/service"
;
import
KnowledgeAPI
from
"@/data-source/knowledge/request-api"
;
import
MoveModal
from
'../../teach-tool/modal/MoveModal'
;
import
Bus
from
"@/core/bus"
;
import
'./KnowledgeBaseOpt.less'
;
export
default
function
KnowledgeBaseOpt
({
categoryId
,
selectedRowKeys
,
updateCategoryTree
,
onChange
,
onChangeKeys
,
})
{
const
[
modal
,
setModal
]
=
useState
(
null
);
const
[
openMoveModal
,
setOpenMoveModal
]
=
useState
(
false
);
const
[
data
,
setData
]
=
useState
([]);
const
menu
=
(
<
Menu
>
...
...
@@ -34,6 +42,36 @@ export default function KnowledgeBaseOpt({
</
Menu
>
);
useEffect
(()
=>
{
queryCategoryTree
();
},
[]);
// 查询分类树
function
queryCategoryTree
()
{
let
query
=
{
storeId
:
User
.
getStoreId
(),
withCount
:
true
,
};
KnowledgeAPI
.
getCategoryTree
(
query
).
then
((
res
)
=>
{
const
{
categoryList
=
[]
}
=
res
.
result
;
let
list
=
renderTreeNodes
(
categoryList
);
setData
(
list
);
});
}
function
renderTreeNodes
(
data
)
{
let
newTreeData
=
data
.
map
((
item
)
=>
{
item
.
title
=
item
.
categoryName
;
item
.
value
=
item
.
id
;
item
.
key
=
item
.
id
;
if
(
item
.
sonCategoryList
)
{
item
.
children
=
renderTreeNodes
(
item
.
sonCategoryList
);
}
return
item
;
});
return
newTreeData
;
};
function
handAddCourse
()
{
let
modal
=
(
<
AddCourse
...
...
@@ -86,16 +124,126 @@ export default function KnowledgeBaseOpt({
setModal
(
modal
);
}
return
(
<
div
className=
"video-course-opt"
>
<
Dropdown
overlay=
{
menu
}
>
<
Button
type=
"primary"
className=
"mr12"
>
添加知识
<
DownOutlined
/>
</
Button
>
</
Dropdown
>
function
batchMove
()
{
if
(
_
.
isEmpty
(
selectedRowKeys
))
{
message
.
warning
(
'请先选择要移动的知识'
);
return
null
;
}
setOpenMoveModal
(
true
);
}
function
batchMoveRemote
(
categoryId
)
{
const
data
=
{
categoryId
,
ids
:
selectedRowKeys
,
storeId
:
User
.
getStoreId
(),
};
Service
.
Hades
(
'public/hades/batchMoveKnowledgeCategory'
,
data
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
'移动成功'
);
onChange
();
Bus
.
trigger
(
'knowledgeCategoryTree'
);
clearSelect
();
}
else
{
message
.
error
(
'移动失败'
);
}
}).
catch
(()
=>
{
message
.
error
(
'移动失败'
);
})
}
function
batchDelete
()
{
if
(
_
.
isEmpty
(
selectedRowKeys
))
{
message
.
warning
(
'请先选择要删除的知识'
);
return
null
;
}
Modal
.
confirm
({
title
:
"确定要删除知识吗?"
,
content
:
"删除后,不可恢复。"
,
icon
:
(
<
span
className=
"icon iconfont default-confirm-icon"
>

</
span
>
),
okText
:
"删除"
,
cancelText
:
"取消"
,
onOk
:
()
=>
{
const
data
=
{
ids
:
selectedRowKeys
,
storeId
:
User
.
getStoreId
(),
};
Service
.
Hades
(
'public/hades/batchDelKnowledge'
,
data
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
'删除成功'
);
onChange
();
Bus
.
trigger
(
'knowledgeCategoryTree'
);
clearSelect
();
}
else
{
message
.
error
(
'删除失败'
);
}
}).
catch
(()
=>
{
message
.
error
(
'删除失败'
);
})
},
})
}
function
onSelectPaper
(
keys
)
{
if
(
keys
.
length
>
50
)
{
message
.
warning
(
'最多只能选择50个知识'
);
return
null
;
}
onChangeKeys
(
keys
);
};
function
clearSelect
()
{
onChangeKeys
([]);
}
return
(
<
div
className=
"knowledge-course-opt"
>
{
_
.
isEmpty
(
selectedRowKeys
)
?
<
Dropdown
overlay=
{
menu
}
>
<
Button
type=
"primary"
className=
"mr8"
>
添加知识
<
DownOutlined
/>
</
Button
>
</
Dropdown
>
:
<
div
className=
"select-container"
>
<
span
className=
"con"
>
<
div
>
<
span
className=
"icon iconfont tip"
>

</
span
>
<
span
className=
"text"
>
已选择
{
selectedRowKeys
.
length
}
项
</
span
>
</
div
>
<
div
>
<
span
className=
"clear"
onClick=
{
clearSelect
}
>
清空
</
span
>
</
div
>
</
span
>
</
div
>
}
<
Button
className=
"mr8"
onClick=
{
()
=>
{
batchMove
();
}
}
>
批量移动
</
Button
>
<
Button
onClick=
{
()
=>
{
batchDelete
();
}
}
>
批量删除
</
Button
>
{
modal
}
{
openMoveModal
&&
<
MoveModal
visible=
{
openMoveModal
}
title=
"知识"
data=
{
data
}
length=
{
selectedRowKeys
.
length
}
onCancel=
{
()
=>
setOpenMoveModal
(
false
)
}
onOk=
{
(
categoryId
)
=>
{
batchMoveRemote
(
categoryId
);
setOpenMoveModal
(
false
);
}
}
/>
}
</
div
>
);
}
src/modules/knowledge-base/components/KnowledgeBaseOpt.less
0 → 100644
View file @
8f54e0eb
.knowledge-course-opt {
display: flex;
.select-container{
margin-right: 24px;
.con{
background: #FFF4DD;
border-radius: 4px;
padding: 3px 16px;
display: inline-flex;
align-items: center;
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
margin-right:8px;
}
.text{
font-size:14px;
color:#666;
margin-right:30px;
}
.clear{
color:#5289FA;
font-size:14px;
}
}
}
}
\ No newline at end of file
src/modules/knowledge-base/index.jsx
View file @
8f54e0eb
...
...
@@ -7,7 +7,7 @@
* @Copyright: © 2020 杭州杰竞科技有限公司 版权所有
*/
import
React
from
"react"
;
import
{
message
}
from
'antd'
import
KnowledgeBaseFilter
from
"./components/KnowledgeBaseFilter"
;
import
KnowledgeBaseOpt
from
"./components/KnowledgeBaseOpt"
;
import
KnowledgeBaseList
from
"./components/KnowledgeBaseList"
;
...
...
@@ -30,6 +30,7 @@ export default class KnowledgeBase extends React.Component {
totalCount
:
0
,
// 知识库数据总条数
categoryId
:
'0'
,
updateCategoryFlag
:
false
,
selectedRowKeys
:
[],
};
}
...
...
@@ -72,6 +73,15 @@ export default class KnowledgeBase extends React.Component {
});
};
onSelectChange
=
(
selectedRowKeys
)
=>
{
if
(
selectedRowKeys
.
length
>
50
)
{
message
.
warning
(
'最多只能选择50个题目'
);
return
null
;
}
console
.
log
(
selectedRowKeys
,
888888
)
this
.
setState
({
selectedRowKeys
});
};
render
()
{
const
{
dataSource
,
...
...
@@ -79,6 +89,7 @@ export default class KnowledgeBase extends React.Component {
query
,
categoryId
,
updateCategoryFlag
,
selectedRowKeys
,
}
=
this
.
state
;
return
(
<
div
className=
"page"
>
...
...
@@ -105,11 +116,15 @@ export default class KnowledgeBase extends React.Component {
onChange=
{
this
.
handleFetchScheduleList
}
updateCategoryTree=
{
this
.
updateCategoryTree
}
categoryId=
{
categoryId
}
selectedRowKeys=
{
selectedRowKeys
}
onChangeKeys=
{
(
keys
)
=>
this
.
setState
({
selectedRowKeys
:
keys
})
}
/>
}
{
/* 知识库列表模块 */
}
<
KnowledgeBaseList
query=
{
query
}
selectedRowKeys=
{
selectedRowKeys
}
onSelectChange=
{
this
.
onSelectChange
}
categoryId=
{
categoryId
}
dataSource=
{
dataSource
}
totalCount=
{
totalCount
}
...
...
src/modules/teach-tool/paper-manage/components/PaperList.jsx
View file @
8f54e0eb
This diff is collapsed.
Click to expand it.
src/modules/teach-tool/paper-manage/components/PaperList.less
View file @
8f54e0eb
.paper-list {
.select-box {
display: flex;
align-items: center;
.select-container{
margin-right: 24px;
.con{
background: #FFF4DD;
border-radius: 4px;
padding: 3px 16px;
display: inline-flex;
align-items: center;
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
margin-right:8px;
}
.text{
font-size:14px;
color:#666;
margin-right:30px;
}
.clear{
color:#5289FA;
font-size:14px;
}
}
}
}
.ant-radio-wrapper{
left: -10px;
}
...
...
src/modules/teach-tool/question-manage/components/QuestionList.jsx
View file @
8f54e0eb
...
...
@@ -524,7 +524,9 @@ class QuestionList extends Component {
Service
.
Hades
(
'public/hades/batchMoveQuestion'
,
data
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
'移动成功'
);
Bus
.
trigger
(
'queryCategoryTree'
,
'init'
);
this
.
queryQuestionPageList
();
this
.
clearSelect
();
}
else
{
message
.
error
(
'移动失败'
);
}
...
...
@@ -557,7 +559,9 @@ class QuestionList extends Component {
Service
.
Hades
(
'public/hades/batchDeleteQuestion'
,
data
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
message
.
success
(
'删除成功'
);
Bus
.
trigger
(
'queryCategoryTree'
,
'init'
);
this
.
queryQuestionPageList
();
this
.
clearSelect
();
}
else
{
message
.
error
(
'删除失败'
);
}
...
...
src/modules/teach-tool/question-manage/components/QuestionList.less
View file @
8f54e0eb
...
...
@@ -39,26 +39,26 @@
}
.select-container{
.con{
.con
{
background: #FFF4DD;
border-radius: 4px;
padding:
6
px 16px;
padding:
3
px 16px;
display: inline-flex;
align-items: center;
justify-content: space-between;
.tip{
font-size:14px;
color:#FF9D14;
margin-right:8px;
.tip
{
font-size:
14px;
color:
#FF9D14;
margin-right:
8px;
}
.text{
font-size:14px;
color:#666;
margin-right:30px;
.text
{
font-size:
14px;
color:
#666;
margin-right:
30px;
}
.clear{
color:#5289FA;
font-size:14px;
.clear
{
color:
#5289FA;
font-size:
14px;
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment