Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-qa
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-qa
Commits
d0d86881
提交
d0d86881
authored
2月 21, 2022
作者:
matian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:试卷中心代码提交
上级
ba8d7473
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
1115 行增加
和
19 行删除
+1115
-19
AddPaper.vue
src/modules/paper/components/AddPaper.vue
+198
-0
AutomaticPaper.vue
src/modules/paper/components/AutomaticPaper.vue
+0
-0
BatchSetting.vue
src/modules/paper/components/BatchSetting.vue
+24
-0
QuestionList.vue
src/modules/paper/components/QuestionList.vue
+267
-0
QuestionListItem.vue
src/modules/paper/components/QuestionListItem.vue
+112
-0
QuestionNum.vue
src/modules/paper/components/QuestionNum.vue
+65
-0
index.js
src/modules/paper/index.js
+18
-0
Detail.vue
src/modules/paper/views/Detail.vue
+61
-0
List.vue
src/modules/paper/views/List.vue
+103
-19
NewPaper.vue
src/modules/paper/views/NewPaper.vue
+267
-0
没有找到文件。
src/modules/paper/components/AddPaper.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<el-drawer
size=
"50%"
v-bind=
"$attrs"
v-on=
"$listeners"
>
<!-- 选题组卷添加试卷第一步 -->
<div
v-show=
"isShowFirstStep"
>
<app-list
v-bind=
"tableOptions"
ref=
"list"
style=
"padding-left: 30px"
>
</app-list>
<el-button
type=
"primary"
class=
"nextStep"
@
click=
"nextStep"
>
下一步
</el-button>
</div>
<!-- 选题组卷添加试卷第二步 -->
<div
class=
"isShowNextStep"
style=
"padding-left: 30px"
v-show=
"isShowNextStep"
>
<el-form>
<el-form-item
label=
"试题分值设置方式:"
>
<el-radio-group>
<el-radio
label=
"批量设置"
></el-radio>
<el-radio
label=
"逐题设置"
></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"您此次选择的试题总数:"
>
25
</el-form-item>
<el-form-item
label=
"此次试卷总分:"
>
100
</el-form-item>
<el-form-item
label=
"已设置试题总分:"
>
0
</el-form-item>
<el-divider></el-divider>
<el-form-item
label=
"单选题:"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<el-button
type=
"primary"
class=
"settingScore"
@
click=
"batchSetting"
>
批量设置分数
</el-button>
</el-form-item>
<el-form-item
label=
"多选题:"
class=
"titleSetting"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<el-button
type=
"primary"
class=
"settingScore"
>
批量设置分数
</el-button>
</el-form-item>
<el-form-item
label=
"判断题:"
class=
"titleSetting"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<el-button
type=
"primary"
class=
"settingScore"
>
批量设置分数
</el-button>
</el-form-item>
<el-form-item
label=
"问答题:"
class=
"titleSetting"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<span
class=
"settingScore"
>
此题型只能在试卷详情页面逐一设置
</span>
</el-form-item>
<el-form-item
label=
"情景题:"
class=
"titleSetting"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<span
class=
"settingScore"
>
此题型只能在试卷详情页面逐一设置
</span>
</el-form-item>
<el-form-item
label=
"案例题:"
class=
"titleSetting"
>
<span>
数量:8
</span>
<span>
分值:0
</span>
<span
class=
"settingScore"
>
此题型只能在试卷详情页面逐一设置
</span>
</el-form-item>
<el-form-item
class=
"nextStep"
>
<el-button
type=
"primary"
@
click=
"lastStep"
>
上一步
</el-button>
<el-button
type=
"primary"
style=
"margin-left: 20px"
@
click=
"saveSetting"
>
保存
</el-button>
</el-form-item>
</el-form>
</div>
<BatchSetting
:visible
.
sync=
"visible"
/>
</el-drawer>
</
template
>
<
script
>
import
BatchSetting
from
'./BatchSetting.vue'
export
default
{
components
:
{
BatchSetting
},
data
()
{
return
{
visible
:
false
,
isShowFirstStep
:
true
,
isShowNextStep
:
false
}
},
computed
:
{
tableOptions
()
{
return
{
// remote: { httpRequest: getAppList },
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
placeholder
:
'请选择题目类型'
,
options
:
this
.
staffList
,
size
:
'small'
,
label
:
'题目类型'
},
{
type
:
'select'
,
prop
:
'name1'
,
placeholder
:
'请选择题目难度等级'
,
options
:
this
.
staffList
,
labelKey
:
'name'
,
valueKey
:
'id'
,
size
:
'small'
,
label
:
'难度等级'
},
{
type
:
'input'
,
prop
:
'name2'
,
placeholder
:
'请选择试题分类'
,
options
:
this
.
staffList
,
size
:
'small'
,
label
:
'试题分类'
},
{
type
:
'select'
,
prop
:
'name3'
,
placeholder
:
'请输入题目标题内容'
,
options
:
this
.
natureList
,
labelKey
:
'name'
,
valueKey
:
'id'
,
size
:
'small'
,
label
:
'题目标题'
},
{
type
:
'select'
,
prop
:
'name4'
,
placeholder
:
'请输入题干内容'
,
options
:
this
.
natureList
,
labelKey
:
'name'
,
valueKey
:
'id'
,
size
:
'small'
,
label
:
'题干内容'
},
{
type
:
'select'
,
prop
:
'name5'
,
placeholder
:
'请输入知识点'
,
options
:
this
.
natureList
,
labelKey
:
'name'
,
valueKey
:
'id'
,
size
:
'small'
,
label
:
'知识点'
}
],
columns
:
[
{
type
:
'selection'
,
minWidth
:
'50px'
,
fixed
:
'left'
},
{
type
:
'index'
,
label
:
'序号'
,
minWidth
:
'50px'
,
fixed
:
'left'
},
{
label
:
'题目类型'
,
prop
:
'name'
},
{
label
:
'试卷分类'
,
prop
:
'alias_name'
},
{
label
:
'题目标题'
,
prop
:
'desc'
},
{
label
:
'知识点'
,
prop
:
'desc2'
},
{
label
:
'难度等级'
,
prop
:
'desc3'
},
{
label
:
'更新人'
,
prop
:
'desc4'
}
],
data
:
[
{
index
:
1
,
name
:
'dfshfh'
},
{
index
:
1
,
name
:
'dfshfh'
},
{
index
:
1
,
name
:
'dfshfh'
}
]
}
}
},
methods
:
{
// 下一步
nextStep
()
{
this
.
isShowFirstStep
=
false
this
.
isShowNextStep
=
true
},
// 上一步
lastStep
()
{
this
.
isShowFirstStep
=
true
this
.
isShowNextStep
=
false
},
// 保存
saveSetting
()
{
this
.
$emit
(
'update:visible'
,
false
)
},
batchSetting
()
{
console
.
log
(
'bsdhfsjhfb'
)
this
.
visible
=
true
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.nextStep
{
position
:
absolute
;
left
:
50%
;
bottom
:
10px
;
transform
:
translateX
(
-50%
);
}
.settingScore
{
margin-left
:
120px
;
}
</
style
>
src/modules/paper/components/AutomaticPaper.vue
0 → 100644
浏览文件 @
d0d86881
差异被折叠。
点击展开。
src/modules/paper/components/BatchSetting.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<el-dialog
v-bind=
"$attrs"
v-on=
"$listeners"
:modal=
"false"
width=
"20%"
>
<el-form>
<el-form-item>
单选题
</el-form-item>
<el-form-item>
数量:8
</el-form-item>
<el-form-item
label=
"每道试题分值"
>
<el-input></el-input></el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"saveSetting"
>
保存
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</
template
>
<
script
>
export
default
{
methods
:
{
saveSetting
()
{
this
.
$emit
(
'update:visible'
,
false
)
}
}
}
</
script
>
<
style
></
style
>
src/modules/paper/components/QuestionList.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<div
style=
"margin-top: 32px"
>
<el-row
:gutter=
"20"
>
<!-- 试题列表 -->
<el-col
:span=
"18"
>
<el-card
id=
"questionMain"
><div
slot=
"header"
class=
"clearfix"
>
<span
class=
"clearfix_tit"
>
试题列表
</span>
<el-button
class=
"clearfix_del"
type=
"primary"
@
click=
"delCheckedQuestion"
v-if=
"questionList.length > 0"
>
删除所选试题
</el-button
>
<el-button
class=
"clearfix_add"
type=
"primary"
@
click=
"addPaper"
>
添加试题
</el-button>
</div>
<!-- 题目列表 -->
<!--
<el-card
v-for=
"(item, index) in questionList"
>
-->
<QuestionListItem
:questionList=
"questionList"
:key=
"index"
ref=
"listItemRef"
@
handlePosition=
"handlePosition"
@
selectSubjectsChange=
"selectSubjectsChange"
:disabled=
"selectQuestion.length === 0"
/>
<!--
</el-card>
-->
<!-- 选题组卷无数据情况下显示 -->
<div
class=
"nonePaper"
v-show=
"questionList.length === 0"
>
<el-result
icon=
"info"
subTitle=
"该试卷无试题,去添加试题吧"
></el-result>
</div>
</el-card>
</el-col>
<!-- 题目序号列表 -->
<el-col
:span=
"4"
v-if=
"questionList.length > 0"
>
<el-card
style=
"position: fixed"
>
<div
class=
"titleIndex"
>
<ul>
<li
v-for=
"(item, index) in questionList"
:key=
"index"
@
click=
"titleClick(index)"
>
<div
:class=
"currentIndex === index + 1 ? `titleItem` : ''"
>
{{
index
+
1
}}
</div>
</li>
</ul>
<div
style=
"margin-top: 10px; display: flex; justify-content: center; align-items: center"
>
<el-button
type=
"primary"
@
click=
"savePaper"
>
保存试卷
</el-button>
</div>
</div>
</el-card>
</el-col>
</el-row>
<AutomaticPaper
:visible
.
sync=
"visible"
v-if=
"paperMode === '自动组卷'"
/>
<addPaper
:visible
.
sync=
"visible"
v-else
/>
</div>
</
template
>
<
script
>
import
QuestionListItem
from
'./QuestionListItem.vue'
import
AutomaticPaper
from
'./AutomaticPaper.vue'
import
addPaper
from
'./AddPaper.vue'
export
default
{
components
:
{
QuestionListItem
,
addPaper
,
AutomaticPaper
},
props
:
{
paperMode
:
{
type
:
String
,
default
:
''
}
},
data
()
{
return
{
visible
:
false
,
// 控制增加试题弹框显示还是隐藏
// questionList: [],
questionList
:
[
{
id
:
'1'
,
tag
:
'1'
,
type
:
'单择题'
,
title
:
'hqduuhdqj'
,
answer
:
'11111'
,
radioList
:
[
{
desc
:
'fgweyfg'
,
id
:
'0'
},
{
desc
:
'1223'
,
id
:
'1'
}
],
score
:
5
},
{
id
:
'2'
,
tag
:
'2'
,
type
:
'多选题'
,
title
:
'hqduuhdqj'
,
answer
:
'hfgwhrfgiuwhfiu'
,
checkList
:
[
{
desc
:
'jdks'
,
id
:
'1'
},
{
desc
:
'fsf'
,
id
:
'2'
}
],
score
:
2
},
{
id
:
'3'
,
tag
:
'3'
,
type
:
'简答题'
,
title
:
'hqduuhdqj'
,
answer
:
'hfgwhrfgiuwhfiu'
,
score
:
1
},
{
id
:
'5'
,
tag
:
'1'
,
type
:
'判断题'
,
title
:
'hqduuhdqj'
,
answer
:
'hfgwhrfgiuwhfiu'
,
radioList
:
[
{
desc
:
'fgweyfg'
,
id
:
'0'
},
{
desc
:
'1223'
,
id
:
'1'
}
],
score
:
1
},
{
id
:
'8'
,
tag
:
'7'
,
type
:
'情景题'
,
title
:
'hqduuhdqj'
,
answer
:
'hfgwhrfgiuwhfiu'
,
questionTtem
:
[
{
id
:
'6'
,
tag
:
'1'
,
type
:
'判断题'
,
title
:
'123234444'
,
answer
:
'hfgwhrfgiuwhfiu'
,
radioList
:
[
{
desc
:
'fgweyfg'
,
id
:
'0'
},
{
desc
:
'1223'
,
id
:
'1'
}
],
score
:
3
},
{
id
:
'7'
,
tag
:
'1'
,
type
:
'判断题'
,
title
:
'5657567'
,
answer
:
'hfgwhrfgiuwhfiu'
,
radioList
:
[
{
desc
:
'fgweyfg'
,
id
:
'0'
},
{
desc
:
'1223'
,
id
:
'1'
}
],
score
:
4
}
],
score
:
2
}
],
currentIndex
:
1
,
selectQuestion
:
[]
}
},
methods
:
{
// 增加试题
addPaper
()
{
console
.
log
(
'dfjsf'
)
this
.
visible
=
true
},
// 切换题目编号
titleClick
(
index
)
{
this
.
currentIndex
=
index
+
1
this
.
$refs
.
listItemRef
.
handleScroll
(
index
)
},
// 试题列表滑动指定位置
handlePosition
(
offsetTop
)
{
// document.getElementById('questionMain').scrollTo(0, offsetTop)
window
.
scrollTo
(
0
,
offsetTop
)
},
// 保存试卷
savePaper
()
{
// 校验小题分数和总分数是否相等
const
arr
=
this
.
questionList
.
map
(
item
=>
item
.
score
)
const
r2
=
arr
.
reduce
((
pre
,
item
)
=>
(
pre
+=
item
),
0
)
console
.
log
(
r2
)
console
.
log
(
arr
)
console
.
log
(
this
.
questionList
)
},
// 删除所选试题
delCheckedQuestion
()
{
console
.
log
(
'删除的题目序号'
,
this
.
selectQuestion
)
},
selectSubjectsChange
(
val
)
{
this
.
selectQuestion
=
val
}
}
}
</
script
>
<
style
lang=
"scss"
>
.el-row
{
margin-bottom
:
20px
;
&
:last-child
{
margin-bottom
:
0
;
}
}
.bg-purple
{
background
:
#d3dce6
;
}
.grid-content
{
border-radius
:
4px
;
min-height
:
36px
;
}
.nonePaper
{
height
:
300px
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
}
#questionMain
{
// height: calc(100vh - 450px);
overflow
:
auto
;
.clearfix
{
.clearfix_tit
{
color
:
#c01c40
;
font-size
:
20px
;
font-weight
:
bold
;
}
.clearfix_del
{
float
:
right
;
padding
:
10px
5px
;
margin-right
:
20px
;
}
.clearfix_add
{
float
:
right
;
padding
:
10px
5px
;
margin-right
:
20px
;
}
}
}
.titleIndex
{
ul
{
display
:
flex
;
justify-content
:
flex-start
;
align-items
:
center
;
flex-wrap
:
wrap
;
li
{
flex
:
1
;
width
:
20%
;
min-width
:
20%
;
max-width
:
20%
;
margin-top
:
10px
;
div
{
border-radius
:
50px
;
width
:
24px
;
height
:
24px
;
font-size
:
14px
;
text-align
:
center
;
border
:
2px
solid
#ccc
;
color
:
#666
;
cursor
:
pointer
;
}
}
.titleItem
{
background-color
:
rgb
(
194
,
43
,
43
);
}
}
}
</
style
>
src/modules/paper/components/QuestionListItem.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<div>
<el-card
style=
"margin-top: 32px"
v-for=
"(item, index) in questionList"
:key=
"index"
:id=
"`page$
{index}`">
<div
class=
"question_hd"
>
<div
class=
"question_hd_left"
>
<div
class=
"question_hd_left_type"
>
<!--
<span>
-->
<input
type=
"checkbox"
v-model=
"checkboxValue"
:value=
"item"
@
change=
"slectSubItem(item)"
/>
{{
index
+
1
}}
、
{{
item
.
type
}}
<!--
</span
>
-->
<span
class=
"question_hd_left_title"
>
{{
item
.
title
}}
</span>
</div>
</div>
<div
class=
"question_hd_right"
>
<el-form
ref=
"form"
label-width=
"100px"
:model=
"item.form"
>
<el-form-item
label=
"分数"
>
<el-input
v-model=
"item.score"
></el-input>
</el-form-item>
</el-form>
</div>
</div>
<div
class=
"question_bd"
>
<!-- 单选判断 -->
<template
v-if=
"item.tag === '1'"
>
<div
v-for=
"(item, index) in item.radioList"
:key=
"index"
class=
"options"
>
<el-radio-group>
<el-radio
label=
"item.id"
class=
"question_bd_desc"
>
<span
class=
"question_bd_desc_item"
>
{{
item
.
desc
}}
</span>
</el-radio>
</el-radio-group>
</div>
</
template
>
<!-- 多选 -->
<
template
v-if=
"item.tag === '2'"
>
<div
class=
"question-option-item"
v-for=
"item in item.checkList"
:key=
"item.id"
>
<el-checkbox
label=
"item.id"
class=
"question_bd_desc"
><span
class=
"question_bd_desc_item"
>
{{
item
.
desc
}}
</span>
</el-checkbox>
</div>
</
template
>
<!-- 简答题 -->
<
template
v-if=
"item.tag === '3'"
>
<el-input
type=
"textarea"
class=
"question_bd_desc"
></el-input>
</
template
>
</div>
<div
style=
"margin-top: 10px"
class=
"question_ft"
>
正确答案:{{ item.answer }}
</div>
</el-card>
</div>
</template>
<
script
>
export
default
{
props
:
{
questionList
:
{
type
:
Array
}
},
data
()
{
return
{
checkboxValue
:
[],
selectSubjects
:
[],
isChecked
:
false
}
},
mounted
()
{},
methods
:
{
handleScroll
(
key
)
{
const
PageId
=
document
.
querySelector
(
'#page'
+
key
)
this
.
$emit
(
'handlePosition'
,
PageId
.
offsetTop
)
},
slectSubItem
(
item
)
{
console
.
log
(
item
)
this
.
$emit
(
'selectSubjectsChange'
,
this
.
checkboxValue
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.question_hd
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
flex-start
;
.question_hd_left
{
.question_hd_left_type
{
color
:
#c01c40
;
}
.question_hd_left_title
{
margin-left
:
20px
;
font-size
:
18px
;
}
}
}
.question_bd
{
// background: rgb(247, 244, 244);
padding-left
:
35px
;
.question_bd_desc
{
.question_bd_desc_item
{
font-size
:
18px
;
font-weight
:
400
;
color
:
#303133
;
}
}
}
::v-deep
.el-checkbox__label
{
color
:
#c01c40
;
}
input
{
-webkit-appearance
:
checkbox
;
}
</
style
>
src/modules/paper/components/QuestionNum.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<el-card>
<div
class=
"titleIndex"
>
<ul>
<li
:class=
"currentIndex === index ? `dotItem` : ''"
v-for=
"(item, index) in list"
:key=
"index"
@
click=
"TitleClick(index)"
>
{{
index
+
1
}}
</li>
</ul>
<div
style=
"margin-top: 10px; display: flex; justify-content: center; align-items: center"
>
<el-button
type=
"primary"
>
保存试卷
</el-button>
</div>
</div>
</el-card>
</
template
>
<
script
>
export
default
{
props
:
{
list
:
{
type
:
Array
}
},
data
()
{
return
{
indexList
:
[],
currentIndex
:
0
// 当前点击题号
}
},
methods
:
{
TitleClick
(
index
)
{
this
.
currentIndex
=
index
this
.
$emit
(
'indexClick'
,
`
${
index
+
1
}
`
)
}
}
}
</
script
>
<
style
lang=
"scss"
>
.titleIndex
{
ul
{
display
:
flex
;
justify-content
:
space-around
;
align-items
:
center
;
li
{
border-radius
:
50px
;
width
:
24px
;
height
:
24px
;
font-size
:
14px
;
line-height
:
150%
;
text-align
:
center
;
border
:
2px
solid
#ccc
;
color
:
#666
;
cursor
:
pointer
;
}
.dotItem
{
background-color
:
rgb
(
243
,
190
,
190
);
}
}
}
</
style
>
src/modules/paper/index.js
浏览文件 @
d0d86881
...
@@ -14,6 +14,24 @@ const routes = [
...
@@ -14,6 +14,24 @@ const routes = [
path
:
'list'
,
path
:
'list'
,
component
:
()
=>
import
(
'./views/List.vue'
),
component
:
()
=>
import
(
'./views/List.vue'
),
meta
:
{
title
:
'我的试卷库'
}
meta
:
{
title
:
'我的试卷库'
}
},
{
path
:
'newPaper'
,
name
:
'newPaper'
,
component
:
()
=>
import
(
'./views/NewPaper.vue'
),
meta
:
{
title
:
'新建试卷'
}
},
{
path
:
'newPapers'
,
name
:
'newPaper'
,
component
:
()
=>
import
(
'./views/NewPaper.vue'
),
meta
:
{
title
:
'编辑试卷'
}
},
{
path
:
'detail'
,
name
:
'detail'
,
component
:
()
=>
import
(
'./views/Detail.vue'
),
meta
:
{
title
:
'试卷详情'
}
}
}
]
]
}
}
...
...
src/modules/paper/views/Detail.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<div>
<!-- 试卷描述 -->
<el-card>
<el-descriptions
:column=
"2"
class=
"descriptionsCon"
>
<template
slot=
"extra"
>
<el-button
type=
"primary"
@
click=
"editPaper"
>
编辑试卷
</el-button>
</
template
>
<el-descriptions-item
label=
"试卷名称"
>
{{ paperDetail.paperName }}
</el-descriptions-item>
<el-descriptions-item
label=
"标签"
>
1111
</el-descriptions-item>
<el-descriptions-item
label=
"试卷分类"
>
{{ paperDetail.paperType }}
</el-descriptions-item>
<el-descriptions-item
label=
"组卷模式"
>
{{ paperDetail.paperMode }}
</el-descriptions-item>
<el-descriptions-item
label=
"试卷总分"
>
{{ paperDetail.paperTotalScore }}
</el-descriptions-item>
<el-descriptions-item
label=
"及格分数"
>
{{ paperDetail.paperPassScore }}
</el-descriptions-item>
<el-descriptions-item
label=
"考试时长"
>
40分钟
</el-descriptions-item>
<el-descriptions-item
label=
"最短交卷时长"
>
20分钟
</el-descriptions-item>
<el-descriptions-item
label=
"试题顺序"
>
固定
</el-descriptions-item>
<el-descriptions-item
label=
"多次考试"
>
是
</el-descriptions-item>
<el-descriptions-item
label=
"多次考试成绩计算规则"
>
平均计算法
</el-descriptions-item>
</el-descriptions>
</el-card>
<!-- 试卷列表 -->
<QuestionList
:paperMode=
"paperDetail.paperMode"
/>
</div>
</template>
<
script
>
import
QuestionList
from
'../components/QuestionList.vue'
export
default
{
components
:
{
QuestionList
},
computed
:
{
paperDetail
()
{
return
JSON
.
parse
(
this
.
$route
.
query
.
paperDetail
)
}
},
watch
:
{
paperDetail
:
{
paperDetail
:
{
immediate
:
true
,
handler
(
data
)
{
this
.
form
=
Object
.
assign
({},
this
.
form
,
data
)
}
}
}
},
methods
:
{
// 编辑试卷
editPaper
()
{
this
.
$router
.
push
({
path
:
'newPaper'
,
query
:
{
paperDetail
:
this
.
paperDetail
,
isEdit
:
true
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/modules/paper/views/List.vue
浏览文件 @
d0d86881
<
template
>
<
template
>
<app-card>
<app-card>
<app-list
v-bind=
"tableOptions"
ref=
"list"
>
<app-list
v-bind=
"tableOptions"
ref=
"list"
@
selection-change=
"handleSelectionChange"
>
<template
#
header-aside
>
<template
#
header-aside
>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"visible = true"
>
新建试题
</el-button>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"handleCreatePaper"
>
新建试卷
</el-button>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"batchDelete"
>
批量删除
</el-button>
</
template
>
</
template
>
<
template
v-slot:table-x=
"{ row }"
>
<
template
v-slot:table-x=
"{ row }"
>
<el-button
type=
"text"
@
click=
"handleView(row)"
>
查看
</el-button>
<el-button
type=
"text"
@
click=
"handleDdit(row)"
>
编辑
</el-button>
<el-button
type=
"text"
@
click=
"handleSettings(row)"
>
设置
</el-button>
<el-button
type=
"text"
@
click=
"handleDetail(row)"
>
查看详情
</el-button>
<el-button
type=
"text"
@
click=
"handleDelete(row)"
>
删除
</el-button>
</
template
>
</
template
>
</app-list>
</app-list>
</app-card>
</app-card>
</template>
</template>
<
script
>
<
script
>
import
{
getAppList
}
from
'../api'
// import { getAppList } from '../api'
const
paperMode
=
[
{
label
:
'选题组卷'
,
value
:
0
},
{
label
:
'自动组卷'
,
value
:
1
}
]
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
visible
:
false
visible
:
false
,
multipleSelection
:
[]
// 选择项
}
}
},
},
computed
:
{
computed
:
{
tableOptions
()
{
tableOptions
()
{
return
{
return
{
remote
:
{
httpRequest
:
getAppList
},
// remote: { httpRequest: getAppList },
filters
:
[
{
type
:
'input'
,
prop
:
'paperName'
,
placeholder
:
'请输入试卷名称'
,
label
:
'试卷名称:'
},
{
type
:
'select'
,
prop
:
'paperMode'
,
placeholder
:
'请选择组卷模式'
,
options
:
paperMode
,
labelKey
:
'label'
,
valueKey
:
'value'
,
label
:
'组卷模式:'
},
{
type
:
'input'
,
prop
:
'paperLabel'
,
placeholder
:
'请输入试卷标签'
,
label
:
'标签:'
},
{
type
:
'select'
,
prop
:
'paperType'
,
placeholder
:
'请选择试卷分类'
,
options
:
this
.
natureList
,
labelKey
:
'name'
,
valueKey
:
'id'
,
label
:
'试卷分类:'
}
],
columns
:
[
columns
:
[
{
label
:
'应用名称'
,
prop
:
'name'
},
{
type
:
'selection'
,
minWidth
:
'50px'
,
fixed
:
'left'
},
{
label
:
'应用别名'
,
prop
:
'alias_name'
},
{
type
:
'index'
,
label
:
'序号'
,
minWidth
:
'50px'
,
fixed
:
'left'
},
{
label
:
'应用描述'
,
prop
:
'desc'
},
{
label
:
'组卷模式'
,
prop
:
'paperMode'
},
{
label
:
'试卷分类'
,
prop
:
'paperType'
},
{
label
:
'试卷名称'
,
prop
:
'paperName'
},
{
label
:
'总分'
,
prop
:
'paperTotalScore'
},
{
label
:
'及格分数'
,
prop
:
'paperPassScore'
},
{
label
:
'更新人'
,
prop
:
'update_name'
},
{
label
:
'更新时间'
,
prop
:
'update_time'
},
{
label
:
'操作'
,
slots
:
'table-x'
,
align
:
'right'
,
width
:
150
}
{
label
:
'操作'
,
slots
:
'table-x'
,
align
:
'right'
,
width
:
150
}
],
data
:
[
{
paperMode
:
'选题组卷'
,
paperType
:
'测试'
,
paperName
:
'期中考试'
,
paperTotalScore
:
100
,
paperPassScore
:
60
,
update_name
:
'张三'
,
update_time
:
'2022-02-18'
}
]
]
}
}
}
}
},
},
methods
:
{
methods
:
{
// 创建成功刷新列表
// 新建试卷
handleCreateSuccess
()
{
handleCreatePaper
()
{
this
.
$refs
.
list
.
refetch
()
this
.
$router
.
push
({
path
:
'newPaper'
,
query
:
{
isEdit
:
false
}
})
},
// 编辑试卷
handleDdit
(
row
)
{
console
.
log
(
row
)
this
.
$router
.
push
({
path
:
'newPapers'
,
query
:
{
paperDetail
:
row
,
isEdit
:
true
}
})
},
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
console
.
log
(
val
)
},
// 批量删除
batchDelete
()
{
console
.
log
(
'111'
)
},
},
// 查看
// 查看详情
handleView
(
row
)
{
handleDetail
(
row
)
{
this
.
$router
.
push
({
name
:
'appView'
,
params
:
{
id
:
row
.
id
},
query
:
{
appid
:
row
.
id
}
})
this
.
$router
.
push
({
path
:
'detail'
,
query
:
{
paperDetail
:
JSON
.
stringify
(
row
)
}
})
},
},
handleSettings
(
row
)
{
// 单个删除
this
.
$router
.
push
({
path
:
'/settings/users'
,
query
:
{
appid
:
row
.
id
}
})
handleDelete
(
row
)
{
// this.$refs.list.refetch()
}
}
}
}
}
}
...
...
src/modules/paper/views/NewPaper.vue
0 → 100644
浏览文件 @
d0d86881
<
template
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"160px"
:label-position=
"labelPosition"
>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"试卷名称"
prop=
"paperName"
:rules=
"[
{ message: '请输入试卷名称', required: true, trigger: 'blur' }]"
>
<el-input
v-model=
"form.paperName"
placeholder=
"请输入试卷名称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"试卷用途"
prop=
"paperUse"
>
<el-radio-group
v-model=
"form.paperUse"
>
<el-radio
label=
"0"
>
考试
</el-radio>
<el-radio
label=
"1"
>
作业
</el-radio>
<el-radio
label=
"2"
v-if=
"form.paperUse !== '0'"
>
课后作业
</el-radio>
<el-radio
label=
"3"
v-if=
"form.paperUse !== '0'"
>
课程测试
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"标签"
prop=
"label"
>
<el-input
v-model=
"form.label"
placeholder=
"请输入试卷标签"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"试卷分类"
prop=
"classification"
>
<el-select
v-model=
"form.classification"
placeholder=
"请选择试卷分类"
style=
"width: 100%"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"组卷模式"
prop=
"paperMode"
>
<el-select
v-model=
"form.paperMode"
placeholder=
"请选择组卷模式"
style=
"width: 100%"
>
<el-option
label=
"自动组卷"
:value=
"0"
>
</el-option>
<el-option
label=
"选题组卷"
:value=
"1"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"试题顺序"
:rules=
"[
{ message: '请选择试题顺序', required: true, trigger: 'change' }]"
style="padding-left: 20px"
v-if="form.paperMode === 1"
>
<el-radio-group
v-model=
"form.order"
>
<el-radio
label=
"0"
>
固定
</el-radio>
<el-radio
label=
"1"
>
随机
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"试卷总分"
prop=
"paperTotalScore"
:rules=
"[
{ message: '请输入试卷总分', required: true, trigger: 'blur' }]"
>
<el-input-number
:controls=
"false"
:step=
"1"
v-model=
"form.paperTotalScore"
:min=
"0"
:max=
"200"
placeholder=
"请输入试卷总分"
style=
"width: 100%"
:precision=
"0"
></el-input-number>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"及格分数"
prop=
"paperPassScore"
:rules=
"[
{ message: '请输入及格分数', required: true, trigger: 'blur' }]"
style="padding-left: 20px"
>
<el-input-number
:controls=
"false"
:step=
"1"
v-model=
"form.paperPassScore"
:min=
"0"
:max=
"200"
placeholder=
"请输入及格分数"
style=
"width: 100%"
:precision=
"0"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"考试时长"
prop=
"examDuration"
:rules=
"[
{ message: '请输入考试时长', required: true, trigger: 'blur' }]"
>
<el-input-number
v-model=
"form.examDuration"
:controls=
"false"
:min=
"1"
:max=
"150"
placeholder=
"请输入考试时长"
style=
"width: 90%"
:precision=
"0"
></el-input-number
>
分钟
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"最短交卷时长"
prop=
"minSubtime"
:rules=
"[
{ message: '请输入考试时长', required: true, trigger: 'blur' }]"
style="padding-left: 20px"
>
<el-input-number
v-model=
"form.minSubtime"
:controls=
"false"
:min=
"1"
:max=
"150"
placeholder=
"请输入考试时长"
style=
"width: 90%"
:precision=
"0"
></el-input-number
>
分钟
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"多次考试"
:rules=
"[
{ required: true, trigger: 'blur' }]">
<el-radio-group
v-model=
"form.moreExam"
>
<el-radio
label=
"0"
>
否
</el-radio>
<el-radio
label=
"1"
>
是
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-form-item
label=
"多次考试成绩计算规则"
style=
"padding-left: 20px"
v-if=
"form.moreExam === '1'"
>
<el-radio-group
v-model=
"form.rule"
>
<el-radio
label=
"0"
>
平均计算法
</el-radio>
<el-radio
label=
"1"
>
最高得分法
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-row
style=
"margin-top: 30px"
>
<el-button
@
click=
"handleCancel"
style=
"margin-left: 100px"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmit"
>
提交
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmitSelect"
>
保存并选择试题
</el-button>
</el-row>
</el-form-item>
</el-form>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
labelPosition
:
'left'
,
btnDisabled
:
false
,
options
:
[
{
label
:
'测试'
,
value
:
1
},
{
label
:
'考试'
,
value
:
2
},
{
label
:
'模拟'
,
value
:
3
}
],
form
:
{
paperName
:
''
,
// 试卷名称
paperUse
:
'0'
,
// 试卷用途
label
:
''
,
// 标签
classification
:
1
,
// 试卷分类
paperMode
:
0
,
// 组卷模式
order
:
'0'
,
// 试题顺序
paperTotalScore
:
undefined
,
// 试卷总分
paperPassScore
:
undefined
,
// 及格分数
examDuration
:
undefined
,
// 考试时长
minSubtime
:
undefined
,
// 最短交卷时长
moreExam
:
'1'
,
// 多次考试
rule
:
'0'
// 多次考试成绩计算规则
}
}
},
computed
:
{
paperDetail
()
{
return
this
.
$route
.
query
.
paperDetail
},
isEdit
()
{
return
this
.
$route
.
query
.
isEdit
}
},
watch
:
{
paperDetail
:
{
immediate
:
true
,
handler
(
data
)
{
this
.
form
=
Object
.
assign
({},
this
.
form
,
data
)
}
}
},
methods
:
{
// 取消
handleCancel
()
{
history
.
go
(
-
1
)
},
// 保存
handleSubmit
()
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
$confirm
(
'保存成功!'
,
{
confirmButtonText
:
'确定'
}).
then
(()
=>
{
history
.
go
(
-
1
)
})
}
else
{
// 表单校验不通过聚焦至第一个不通过的输入框
// const isError = document.getElementsByClassName('is-error')
// isError[0].querySelector('input').focus()
// return false
}
})
},
// 保存并选择试题
handleSubmitSelect
()
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
$confirm
(
'保存成功!'
,
{
confirmButtonText
:
'确定'
}).
then
(()
=>
{
// 待确认
})
}
else
{
// // 表单校验不通过聚焦至第一个不通过的输入框
// const isErrors = document.getElementsByClassName('is-error')
// isErrors[0].querySelector('el-input').focus()
// return false
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
:v-deep
.el-input-number
.el-input-number__decrease
{
display
:
none
;
}
:v-deep
.el-input-number
.el-input-number__increase
{
display
:
none
;
}
::v-deep
.el-input-number
.el-input__inner
{
padding-left
:
15px
;
text-align
:
left
;
}
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论