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
b42c48d7
Commit
b42c48d7
authored
Jun 07, 2021
by
yuananting
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:新增快捷排序
parent
604913f8
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
173 additions
and
57 deletions
+173
-57
src/modules/teach-tool/paper-manage/OperatePaper.jsx
+170
-55
src/modules/teach-tool/paper-manage/modal/SelectQuestionModal.jsx
+3
-2
No files found.
src/modules/teach-tool/paper-manage/OperatePaper.jsx
View file @
b42c48d7
/*
* @Author: yuananting
* @Date: 2021-03-27 16:15:13
* @LastEditors:
wufan
* @LastEditTime: 2021-0
5-30 16:56:15
* @LastEditors:
yuananting
* @LastEditTime: 2021-0
6-07 16:53:03
* @Description: 助学工具-新建/复制/编辑试卷
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -19,6 +19,8 @@ import {
message
,
Modal
,
Spin
,
Space
,
Radio
,
}
from
"antd"
;
import
{
PlusOutlined
}
from
"@ant-design/icons"
;
import
ShowTips
from
"@/components/ShowTips"
;
...
...
@@ -29,6 +31,7 @@ import PaperPreviewModal from "./modal/PreviewPaperModal";
import
User
from
"@/common/js/user"
;
import
AidToolService
from
"@/domains/aid-tool-domain/AidToolService"
;
import
Bus
from
"@/core/bus"
;
import
_
from
"underscore"
;
const
questionTypeEnum
=
{
SINGLE_CHOICE
:
"单选题"
,
...
...
@@ -66,12 +69,38 @@ class OperatePaper extends Component {
},
selectQuestionModal
:
null
,
paperPreviewModal
:
null
,
quickSortModalVisible
:
false
,
selectQuestionList
:
[],
currentOperate
:
""
,
currentNav
:
""
,
currentCategoryPapers
:
[],
loading
:
false
,
check
:
false
,
sorterMethod
:
"default"
,
sorterBy
:
[
"SINGLE_CHOICE"
,
"MULTI_CHOICE"
,
"JUDGE"
,
"GAP_FILLING"
,
"INDEFINITE_CHOICE"
,
],
sorterTypeList
:
[
{
typeKey
:
"SINGLE_CHOICE"
,
},
{
typeKey
:
"MULTI_CHOICE"
,
},
{
typeKey
:
"JUDGE"
,
},
{
typeKey
:
"GAP_FILLING"
,
},
{
typeKey
:
"INDEFINITE_CHOICE"
,
},
],
};
}
...
...
@@ -124,12 +153,10 @@ class OperatePaper extends Component {
};
const
res
=
await
AidToolService
.
queryPaperDetail
(
query
);
const
{
result
}
=
res
;
const
{
paperName
,
passRate
}
=
result
;
const
{
paperName
,
passRate
,
questionList
}
=
result
;
this
.
setState
(
{
selectQuestionList
:
result
.
questionList
.
sort
(
(
a
,
b
)
=>
b
.
updateTime
-
a
.
updateTime
),
selectQuestionList
:
questionList
,
formData
:
{
...
result
,
paperName
:
...
...
@@ -142,7 +169,11 @@ class OperatePaper extends Component {
paperName
:
this
.
state
.
formData
.
paperName
,
passRate
,
});
this
.
setFormData
(
result
.
questionList
);
questionList
.
map
((
item
,
index
)
=>
{
item
.
sorterIndex
=
index
;
return
item
;
});
this
.
setFormData
(
questionList
);
}
);
};
...
...
@@ -206,35 +237,8 @@ class OperatePaper extends Component {
return
prev
+
Number
(
cur
.
score
)
||
0
;
},
0
);
const
sortedTableData
=
[
...
singleQuestion
,
...
multiQuestion
,
...
indefiniteQuestion
,
...
judgeQuestion
,
...
gapQuestion
,
];
let
currentQuestionList
=
[];
switch
(
sorter
)
{
case
"ascend"
:
currentQuestionList
=
sortedTableData
;
break
;
case
"descend"
:
currentQuestionList
=
sortedTableData
.
reverse
();
break
;
case
"default"
:
currentQuestionList
=
_selectQuestionList
.
sort
(
(
a
,
b
)
=>
b
.
updateTime
-
a
.
updateTime
);
break
;
default
:
currentQuestionList
=
_selectQuestionList
;
break
;
}
const
passScore
=
Math
.
round
(
totalScore
*
formData
.
passRate
*
0.01
);
this
.
setState
({
selectQuestionList
:
currentQuestionList
,
formData
:
{
...
formData
,
singleChoiceCnt
:
singleQuestion
.
length
,
...
...
@@ -256,12 +260,14 @@ class OperatePaper extends Component {
// 选择题目
chooseQuestion
=
()
=>
{
const
{
selectQuestionList
,
sorterMethod
,
sorterBy
}
=
this
.
state
;
const
m
=
(
<
SelectQuestionModal
getSelectedQuestion=
{
this
.
state
.
selectQuestionList
}
getSelectedQuestion=
{
selectQuestionList
}
setSelectedQuestion=
{
(
list
)
=>
{
this
.
setState
({
selectQuestionModal
:
null
},
()
=>
{
this
.
setFormData
(
list
.
sort
((
a
,
b
)
=>
b
.
updateTime
-
a
.
updateTime
));
this
.
setFormData
(
list
);
this
.
quickSorter
(
list
,
sorterMethod
,
sorterBy
);
});
}
}
close=
{
()
=>
{
...
...
@@ -276,7 +282,7 @@ class OperatePaper extends Component {
// 移动已选题目
handleMoveItem
=
(
index
,
moveLength
)
=>
{
const
{
selectQuestionList
}
=
this
.
state
;
const
selectQuestionList
=
[...
this
.
state
.
selectQuestionList
]
;
const
item
=
selectQuestionList
.
splice
(
index
+
moveLength
,
1
);
selectQuestionList
.
splice
(
index
,
0
,
item
[
0
]);
this
.
setState
({
selectQuestionList
},
()
=>
...
...
@@ -465,14 +471,6 @@ class OperatePaper extends Component {
});
};
// 题型排序
sortByQuestionType
=
(
pagination
,
filters
,
sorter
)
=>
{
const
{
columnKey
,
order
}
=
sorter
;
if
(
columnKey
===
"questionType"
)
{
this
.
setFormData
(
this
.
state
.
selectQuestionList
,
order
||
"default"
);
}
};
// 表头设置
parseColumns
=
()
=>
{
const
{
selectQuestionList
}
=
this
.
state
;
...
...
@@ -491,8 +489,6 @@ class OperatePaper extends Component {
dataIndex
:
"questionType"
,
key
:
"questionType"
,
width
:
"12%"
,
sorter
:
true
,
showSorterTooltip
:
false
,
filters
:
[
{
text
:
"单选题"
,
...
...
@@ -552,8 +548,7 @@ class OperatePaper extends Component {
<
Tooltip
title=
"多选题和填空题的漏选/半对得分不能高于题目本身分值"
>
<
span
className=
"icon iconfont"
style=
{
{
color
:
"#BFBFBF"
,
fontSize
:
14
,
fontWeight
:
"400"
}
}
style=
{
{
color
:
"#BFBFBF"
,
fontSize
:
14
,
fontWeight
:
"400"
}
}
>

</
span
>
...
...
@@ -672,11 +667,37 @@ class OperatePaper extends Component {
return
columns
;
};
// 上下移题型
handleMoveTypeSorter
=
(
index
,
moveLength
)
=>
{
const
sorterTypeList
=
[...
this
.
state
.
sorterTypeList
];
const
item
=
sorterTypeList
.
splice
(
index
+
moveLength
,
1
);
sorterTypeList
.
splice
(
index
,
0
,
item
[
0
]);
const
sorterBy
=
_
.
pluck
(
sorterTypeList
,
"typeKey"
);
this
.
setState
({
sorterTypeList
,
sorterBy
});
};
// 快捷排序
quickSorter
=
(
list
,
sorterMethod
,
sorterBy
)
=>
{
this
.
setState
({
selectQuestionList
:
sorterMethod
===
"default"
?
list
.
sort
((
a
,
b
)
=>
a
.
sorterIndex
-
b
.
sorterIndex
)
:
list
.
sort
(
(
a
,
b
)
=>
sorterBy
.
indexOf
(
a
.
questionTypeEnum
||
a
.
questionType
)
-
sorterBy
.
indexOf
(
b
.
questionTypeEnum
||
b
.
questionType
)
),
});
};
render
()
{
const
{
selectQuestionModal
,
paperPreviewModal
,
selectQuestionList
,
quickSortModalVisible
,
sorterMethod
,
sorterTypeList
,
sorterBy
,
currentNav
,
formData
,
loading
,
...
...
@@ -700,6 +721,47 @@ class OperatePaper extends Component {
totalScore
,
}
=
formData
;
const
selectQuestionList
=
[...
this
.
state
.
selectQuestionList
];
const
questionTypeEnum
=
{
SINGLE_CHOICE
:
"单选题"
,
MULTI_CHOICE
:
"多选题"
,
JUDGE
:
"判断题"
,
GAP_FILLING
:
"填空题"
,
INDEFINITE_CHOICE
:
"不定项选择题"
,
};
const
columns
=
[
{
title
:
"题型"
,
dataIndex
:
"typeKey"
,
key
:
"typeKey"
,
render
:
(
text
,
record
,
index
)
=>
questionTypeEnum
[
text
],
},
{
title
:
"操作"
,
key
:
"action"
,
render
:
(
text
,
record
,
index
)
=>
(
<
Space
size=
"middle"
>
<
span
onClick=
{
()
=>
{
index
>
0
&&
this
.
handleMoveTypeSorter
(
index
,
-
1
);
}
}
>
上移
</
span
>
<
span
onClick=
{
()
=>
{
index
<
4
&&
this
.
handleMoveTypeSorter
(
index
,
1
);
}
}
>
下移
</
span
>
</
Space
>
),
},
];
return
(
<
div
className=
"page operate-paper-page"
>
<
Breadcrumbs
navList=
{
currentNav
}
goBack=
{
()
=>
this
.
handleGoBack
()
}
/>
...
...
@@ -708,12 +770,17 @@ class OperatePaper extends Component {
<
div
className=
"show-tips"
>
<
ShowTips
message=
"请遵守国家相关规定,切勿上传低俗色情、暴力恐怖、谣言诈骗、侵权盗版等相关内容,小麦企学院保有依据国家规定及平台规则进行处理的权利"
/>
</
div
>
<
Form
ref=
{
this
.
formRef
}
style=
{
{
marginTop
:
24
,
marginBottom
:
'85px'
}
}
>
<
Form
ref=
{
this
.
formRef
}
style=
{
{
marginTop
:
24
,
marginBottom
:
"85px"
}
}
>
<
Form
.
Item
name=
"paperName"
label=
"试卷名称:"
required
validateStatus=
{
this
.
validatePaperName
(
paperName
)
?
"error"
:
""
}
validateStatus=
{
this
.
validatePaperName
(
paperName
)
?
"error"
:
""
}
help=
{
this
.
validatePaperName
(
paperName
)
}
>
<
Input
...
...
@@ -766,7 +833,7 @@ class OperatePaper extends Component {
</
span
>
</
div
>
</
Form
.
Item
>
<
Space
size=
{
16
}
>
<
Button
className=
"choose-btn"
type=
"primary"
...
...
@@ -775,8 +842,22 @@ class OperatePaper extends Component {
>
自选题目
</
Button
>
<
Button
className=
"choose-btn"
onClick=
{
()
=>
{
this
.
setState
({
quickSortModalVisible
:
true
,
});
}
}
>
快捷排序
</
Button
>
</
Space
>
{
questionCnt
>
0
&&
(
<
div
className=
"paper-info-tip"
style=
{
{
margin
:
"0 auto 12px"
}
}
>
<
div
className=
"paper-info-tip"
style=
{
{
margin
:
"0 auto 12px"
}
}
>
总计
<
span
>
{
totalScore
}
</
span
>
分,共
<
span
>
{
questionCnt
}
</
span
>
题。
{
" "
}
{
singleChoiceCnt
>
0
&&
...
...
@@ -798,7 +879,6 @@ class OperatePaper extends Component {
columns=
{
this
.
parseColumns
()
}
dataSource=
{
selectQuestionList
}
pagination=
{
false
}
onChange=
{
this
.
sortByQuestionType
}
selections=
{
false
}
/>
</
ConfigProvider
>
...
...
@@ -814,6 +894,41 @@ class OperatePaper extends Component {
</
Spin
>
{
selectQuestionModal
}
{
paperPreviewModal
}
<
Modal
maskClosable=
{
false
}
title=
"快捷排序"
visible=
{
quickSortModalVisible
}
onOk=
{
()
=>
{
this
.
setState
(
{
quickSortModalVisible
:
false
,
},
()
=>
this
.
quickSorter
(
selectQuestionList
,
sorterMethod
,
sorterBy
)
);
}
}
onCancel=
{
()
=>
{
this
.
setState
({
quickSortModalVisible
:
false
});
}
}
>
<
Radio
.
Group
onChange=
{
(
e
)
=>
this
.
setState
({
sorterMethod
:
e
.
target
.
value
,
})
}
value=
{
sorterMethod
}
>
<
Radio
value=
{
"default"
}
>
默认排序
</
Radio
>
<
Radio
value=
{
"questionType"
}
>
按题型排序
</
Radio
>
</
Radio
.
Group
>
{
sorterMethod
===
"questionType"
&&
(
<
Table
columns=
{
columns
}
dataSource=
{
sorterTypeList
}
pagination=
{
false
}
/>
)
}
</
Modal
>
</
div
>
);
}
...
...
src/modules/teach-tool/paper-manage/modal/SelectQuestionModal.jsx
View file @
b42c48d7
...
...
@@ -2,7 +2,7 @@
* @Author: yuananting
* @Date: 2021-03-29 10:52:26
* @LastEditors: yuananting
* @LastEditTime: 2021-0
5-08 16:11:27
* @LastEditTime: 2021-0
6-07 14:45:02
* @Description: 助学工具-试卷-新建选择题目弹窗
* @Copyrigh: © 2020 杭州杰竞科技有限公司 版权所有
*/
...
...
@@ -42,7 +42,8 @@ class SelectQuestionModal extends Component {
width=
{
1080
}
onOk=
{
()
=>
{
this
.
props
.
setSelectedQuestion
(
this
.
listRef
.
current
.
state
.
selectQuestionKeys
.
map
((
item
)
=>
{
this
.
listRef
.
current
.
state
.
selectQuestionKeys
.
map
((
item
,
index
)
=>
{
item
.
sorterIndex
=
index
;
item
.
questionId
=
item
.
id
||
item
.
questionId
;
item
.
questionType
=
item
.
questionTypeEnum
||
item
.
questionType
;
item
.
score
=
item
.
score
||
2
;
...
...
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