Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-qa
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-qa
Commits
ef96bacc
提交
ef96bacc
authored
2月 25, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
updates
上级
47c73abe
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
270 行增加
和
286 行删除
+270
-286
base.js
src/api/base.js
+7
-0
AppList.vue
src/components/base/AppList.vue
+1
-1
QuestionTypeCascader.vue
src/components/base/QuestionTypeCascader.vue
+48
-0
Aside.vue
src/components/layout/Aside.vue
+1
-1
api.js
src/modules/paper/api.js
+19
-3
QuestionList.vue
src/modules/paper/components/QuestionList.vue
+2
-2
QuestionSelect.vue
src/modules/paper/components/QuestionSelect.vue
+14
-0
index.js
src/modules/paper/index.js
+11
-12
Detail.vue
src/modules/paper/views/Detail.vue
+34
-38
List.vue
src/modules/paper/views/List.vue
+33
-113
NewPaper.vue
src/modules/paper/views/NewPaper.vue
+100
-116
没有找到文件。
src/api/base.js
浏览文件 @
ef96bacc
...
...
@@ -32,3 +32,10 @@ export function uploadFile(data) {
export
function
getAllProjects
()
{
return
httpRequest
.
get
(
'/api/qbs/admin/v1/projects'
)
}
/**
* 获取试卷分类
*/
export
function
getQuestionCategory
(
params
)
{
return
httpRequest
.
get
(
`/api/qbs/admin/v1/question-category/tree/
${
params
.
project_prefix
}
`
,
{
params
})
}
src/components/base/AppList.vue
浏览文件 @
ef96bacc
...
...
@@ -163,7 +163,7 @@ export default {
.
then
(
res
=>
{
const
{
data
=
{}
}
=
res
||
{}
this
.
page
.
total
=
parseInt
(
data
.
total
||
0
)
this
.
dataList
=
callback
?
callback
(
data
)
:
data
.
list
this
.
dataList
=
callback
?
callback
(
data
)
:
data
.
list
||
data
.
data
})
.
catch
(()
=>
{
this
.
page
.
total
=
0
...
...
src/components/base/QuestionTypeCascader.vue
0 → 100644
浏览文件 @
ef96bacc
<
template
>
<el-cascader
clearable
:options=
"options"
:props=
"defaultProps"
v-on=
"$listeners"
@
change=
"handleChange"
></el-cascader>
</
template
>
<
script
>
import
{
getQuestionCategory
}
from
'@/api/base.js'
export
default
{
data
()
{
return
{
options
:
[],
defaultProps
:
{
label
:
'category_name'
,
value
:
'id'
,
checkStrictly
:
true
}
}
},
computed
:
{
activeProject
()
{
return
this
.
$store
.
state
.
activeProject
||
{}
}
},
beforeMount
()
{
this
.
getQuestionCategory
()
},
methods
:
{
getQuestionCategory
()
{
getQuestionCategory
({
project_prefix
:
this
.
activeProject
.
tag
}).
then
(
res
=>
{
// 移除空数组
const
options
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
).
replaceAll
(
',"children":[]'
,
''
))
this
.
options
=
options
})
},
handleChange
(
value
=
[])
{
const
lastValue
=
value
[
value
.
length
-
1
]
this
.
$emit
(
'input'
,
lastValue
)
}
}
}
</
script
>
<
style
></
style
>
src/components/layout/Aside.vue
浏览文件 @
ef96bacc
...
...
@@ -38,7 +38,7 @@ export default {
name
:
'试卷中心'
,
path
:
'/paper'
,
icon
:
'el-icon-toilet-paper'
,
children
:
[{
name
:
'我的试卷库'
,
path
:
'/paper
/list
'
}]
children
:
[{
name
:
'我的试卷库'
,
path
:
'/paper'
}]
},
{
name
:
'考试中心'
,
...
...
src/modules/paper/api.js
浏览文件 @
ef96bacc
...
...
@@ -10,17 +10,33 @@ export function getKnowledge(params) {
* 获取试卷列表
*/
export
function
getPaperList
(
params
)
{
return
httpRequest
.
get
(
'/api/qbs/admin/v1/question-papers/x1'
,
{
params
})
return
httpRequest
.
get
(
`/api/qbs/admin/v1/question-papers/
${
params
.
project_prefix
}
`
,
{
params
})
}
/**
* 新建试卷
*/
export
function
create
New
Paper
(
data
)
{
export
function
createPaper
(
data
)
{
return
httpRequest
.
post
(
'/api/qbs/admin/v1/question-paper'
,
data
)
}
/**
* 更新试卷
*/
export
function
updatePaper
(
data
)
{
return
httpRequest
.
put
(
`/api/qbs/admin/v1/question-paper/
${
data
.
id
}
`
,
data
)
}
/**
* 获取试卷详情
*/
export
function
getPaper
(
params
)
{
return
httpRequest
.
get
(
`/api/qbs/admin/v1/question-paper/
${
params
.
id
}
`
,
{
params
})
}
/**
* 获取试卷分类
*/
export
function
getPaperCategory
(
params
)
{
return
httpRequest
.
get
(
`/api/qbs/admin/v1/question-category/tree/
${
params
}
`
,
{
params
})
return
httpRequest
.
get
(
`/api/qbs/admin/v1/question-category/tree/
${
params
.
project_prefix
}
`
,
{
params
})
}
src/modules/paper/components/QuestionList.vue
浏览文件 @
ef96bacc
...
...
@@ -3,8 +3,8 @@
<el-row
:gutter=
"20"
>
<!-- 试题列表 -->
<el-col
:span=
"18"
>
<el-card
id=
"questionMain"
>
<div
slot=
"header"
class=
"clearfix"
>
<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
...
...
src/modules/paper/components/QuestionSelect.vue
0 → 100644
浏览文件 @
ef96bacc
<
template
>
<el-dialog
title=
"添加试卷试题"
v-bind=
"$attrs"
v-on=
"$listeners"
></el-dialog>
</
template
>
<
script
>
export
default
{
props
:
{
data
:
{
type
:
Object
,
default
:
()
=>
({})
}
},
data
()
{
return
{}
}
}
</
script
>
<
style
></
style
>
src/modules/paper/index.js
浏览文件 @
ef96bacc
...
...
@@ -5,33 +5,32 @@ const routes = [
path
:
'/paper'
,
component
:
AppLayout
,
meta
:
{
title
:
'试卷中心'
},
redirect
:
'/paper/list'
,
children
:
[
{
path
:
''
,
redirect
:
'/paper/list'
},
{
path
:
'list'
,
component
:
()
=>
import
(
'./views/List.vue'
),
meta
:
{
title
:
'我的试卷库'
}
},
{
path
:
'new
Paper'
,
name
:
'newPaper
'
,
name
:
'create
Paper'
,
path
:
'create
'
,
component
:
()
=>
import
(
'./views/NewPaper.vue'
),
meta
:
{
title
:
'新建试卷'
}
},
{
path
:
'newPapers
'
,
name
:
'newPaper
'
,
name
:
'editPaper
'
,
path
:
'update/:id
'
,
component
:
()
=>
import
(
'./views/NewPaper.vue'
),
meta
:
{
title
:
'编辑试卷'
}
meta
:
{
title
:
'编辑试卷'
},
props
:
true
},
{
path
:
'detail
'
,
name
:
'detail
'
,
name
:
'viewPaper
'
,
path
:
'detail/:id
'
,
component
:
()
=>
import
(
'./views/Detail.vue'
),
meta
:
{
title
:
'试卷详情'
}
meta
:
{
title
:
'试卷详情'
},
props
:
true
}
]
}
...
...
src/modules/paper/views/Detail.vue
浏览文件 @
ef96bacc
<
template
>
<div>
<!-- 试卷描述 -->
<el-card>
<el-descriptions
:column=
"2"
class=
"descriptionsCon"
>
<template
slot=
"extra"
>
<el-button
type=
"primary"
@
click=
"editPaper"
>
编辑试卷
</el-button>
<app-card
title=
"试卷信息"
>
<template
#
header-aside
>
<el-button
type=
"primary"
size=
"mini"
@
click=
"handleUpdate"
>
编辑试卷
</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
:column=
"2"
class=
"descriptionsCon"
>
<el-descriptions-item
label=
"试卷名称"
>
{{ detail.paper_title }}
</el-descriptions-item>
<el-descriptions-item
label=
"标签"
>
{{ detail.paper_labels }}
</el-descriptions-item>
<el-descriptions-item
label=
"试卷分类"
>
{{ detail.paper_category }}
</el-descriptions-item>
<el-descriptions-item
label=
"组卷模式"
>
{{ detail.paper_type }}
</el-descriptions-item>
<el-descriptions-item
label=
"试卷总分"
>
{{ detail.paper_total_score }}
</el-descriptions-item>
<el-descriptions-item
label=
"及格分数"
>
{{ detail.pass_score }}
</el-descriptions-item>
<el-descriptions-item
label=
"考试时长"
>
{{ detail.paper_times }}分钟
</el-descriptions-item>
<el-descriptions-item
label=
"最短交卷时长"
>
{{ detail.minimum_paper_handing_time }}分钟
</el-descriptions-item>
<el-descriptions-item
label=
"试题顺序"
>
{{ detail.paper_question_order }}
</el-descriptions-item>
<el-descriptions-item
label=
"多次考试"
>
{{ detail.is_multiple_exams }}
</el-descriptions-item>
<el-descriptions-item
label=
"多次考试成绩计算规则"
>
{{ detail.multiple_test_score_rule }}
</el-descriptions-item>
</el-descriptions>
</
el
-card>
</
app
-card>
<!-- 试卷列表 -->
<QuestionList
:paperMode=
"
paperDetail.paperMode"
:paperTotalScore=
"paperD
etail.paperTotalScore"
/>
<QuestionList
:paperMode=
"
detail.paperMode"
:paperTotalScore=
"d
etail.paperTotalScore"
/>
</div>
</template>
<
script
>
import
QuestionList
from
'../components/QuestionList.vue'
import
{
getPaper
}
from
'../api.js'
export
default
{
props
:
{
id
:
{
type
:
String
}
},
components
:
{
QuestionList
},
computed
:
{
paperDetail
()
{
return
JSON
.
parse
(
this
.
$route
.
query
.
paperDetail
)
data
()
{
return
{
detail
:
{}
}
},
// watch: {
// paperDetail: {
// paperDetail: {
// immediate: true,
// handler(data) {
// this.form = Object.assign({}, this.form, data)
// }
// }
// }
// },
computed
:
{},
beforeMount
()
{
this
.
getDetail
()
},
methods
:
{
// 编辑试卷
editPaper
()
{
this
.
$router
.
push
({
path
:
'newPaper'
,
query
:
{
paperDetail
:
this
.
paperDetail
,
isEdit
:
true
}
// 获取试卷详情
getDetail
()
{
getPaper
({
id
:
this
.
id
}).
then
(
res
=>
{
this
.
detail
=
Object
.
assign
({},
this
.
detail
,
res
.
data
)
})
},
// 编辑试卷
handleUpdate
()
{
this
.
$router
.
push
({
name
:
'editPaper'
,
params
:
{
id
:
this
.
detail
.
id
}
})
}
}
}
...
...
src/modules/paper/views/List.vue
浏览文件 @
ef96bacc
...
...
@@ -2,65 +2,49 @@
<app-card>
<app-list
v-bind=
"tableOptions"
ref=
"list"
@
selection-change=
"handleSelectionChange"
>
<div
class=
"btn_operate"
>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"handleCreatePaper"
>
新建试卷
</el-button>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"batchDelete"
>
批量删除
</el-button>
</div>
<template
v-slot:input-filter
>
<div
class=
"filter-input"
>
<el-select
v-model=
"filterInput"
placeholder=
"请选择试题分类"
>
<el-option
:label=
"treeValue.name"
:value=
"treeValue.id"
></el-option>
</el-select>
<div
class=
"pop"
@
click=
"dialogVisible = true"
></div>
<el-button
type=
"primary"
icon=
"el-icon-plus"
@
click=
"handleCreate"
>
新建试卷
</el-button>
<el-button
type=
"primary"
icon=
"el-icon-delete"
@
click=
"batchDelete"
>
批量删除
</el-button>
</div>
<template
v-slot:filter-category=
"
{ params }">
<question-type-cascader
v-model=
"params.paper_category"
></question-type-cascader>
</
template
>
<
template
v-slot:table-x=
"{ row }"
>
<el-button
type=
"text"
@
click=
"handle
Ddit
(row)"
>
编辑
</el-button>
<el-button
type=
"text"
@
click=
"handle
Detail
(row)"
>
查看详情
</el-button>
<el-button
type=
"text"
@
click=
"handle
Update
(row)"
>
编辑
</el-button>
<el-button
type=
"text"
@
click=
"handle
View
(row)"
>
查看详情
</el-button>
<el-button
type=
"text"
@
click=
"handleDelete(row)"
>
删除
</el-button>
</
template
>
<el-dialog
title=
"提示"
:visible
.
sync=
"dialogVisible"
width=
"30%"
:before-close=
"handleClose"
>
<el-tree
:data=
"treeList"
:props=
"defaultProps"
@
node-click=
"handleNodeClick"
:expand-on-click-node=
"false"
></el-tree>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"handleClose"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"dialogConfirm"
>
确 定
</el-button>
</span>
</el-dialog>
</app-list>
</app-card>
</template>
<
script
>
import
{
getPaperList
,
getPaperCategory
}
from
'../api'
import
{
getPaperList
}
from
'../api'
import
QuestionTypeCascader
from
'@/components/base/QuestionTypeCascader.vue'
const
paperType
=
[
{
label
:
'选题组卷'
,
value
:
0
},
{
label
:
'自动组卷'
,
value
:
1
}
{
label
:
'选题组卷'
,
value
:
1
},
{
label
:
'自动组卷'
,
value
:
2
}
]
export
default
{
components
:
{
QuestionTypeCascader
},
data
()
{
return
{
visible
:
false
,
multipleSelection
:
[],
// 选择项
treeList
:
[],
dialogVisible
:
false
,
defaultProps
:
''
,
filterInput
:
''
,
treeValue
:
{
name
:
''
,
id
:
''
}
paperCategoryList
:
[]
}
},
computed
:
{
activeProject
()
{
return
this
.
$store
.
state
.
activeProject
||
{}
},
tableOptions
()
{
return
{
remote
:
{
httpRequest
:
getPaperList
,
params
:
{
project_prefix
:
this
.
activeProject
.
tag
,
id
:
''
,
paper_title
:
''
,
paper_type
:
''
,
...
...
@@ -92,111 +76,47 @@ export default {
},
{
slots
:
'input-filter
'
,
prop
:
'
question_category
'
,
type
:
'input
'
,
label
:
'试卷分类:
'
type
:
'select
'
,
prop
:
'
paperType
'
,
label
:
'试卷分类:
'
,
slots
:
'filter-category
'
}
],
columns
:
[
{
type
:
'selection'
,
minW
idth
:
'50px'
,
fixed
:
'left'
},
{
type
:
'selection'
,
w
idth
:
'50px'
,
fixed
:
'left'
},
{
type
:
'index'
,
label
:
'序号'
,
minWidth
:
'50px'
,
fixed
:
'left'
},
{
label
:
'组卷模式'
,
prop
:
'paper_type'
},
{
label
:
'试卷分类'
,
prop
:
'paper_category'
},
{
label
:
'试卷名称'
,
prop
:
'paper_title'
},
{
label
:
'总分'
,
prop
:
'paper_total_score'
},
{
label
:
'及格分数'
,
prop
:
'pa
perPassS
core'
},
{
label
:
'更新人'
,
prop
:
'operator.
user
name'
},
{
label
:
'及格分数'
,
prop
:
'pa
ss_s
core'
},
{
label
:
'更新人'
,
prop
:
'operator.
real
name'
},
{
label
:
'更新时间'
,
prop
:
'updated_at'
},
{
label
:
'操作'
,
slots
:
'table-x'
,
align
:
'right'
,
width
:
150
}
]
}
}
},
mounted
()
{
// 获取试卷分类
this
.
getTreeList
()
},
methods
:
{
getTreeList
()
{
getPaperCategory
(
'x1'
).
then
(
res
=>
{
if
(
Array
.
isArray
(
res
.
data
))
{
this
.
initTree
(
res
.
data
)
}
})
},
// 过滤数据 变成tree组件需要的数据
initTree
(
data
)
{
this
.
treeList
=
data
.
reduce
((
a
,
b
)
=>
{
b
.
label
=
b
.
category_name
if
(
b
.
children
.
length
)
{
setData
(
b
.
children
)
}
a
.
push
(
b
)
return
a
},
[])
function
setData
(
item
)
{
return
item
.
map
(
element
=>
{
if
(
element
.
children
.
length
)
{
setData
(
element
.
children
)
element
.
label
=
element
.
category_name
}
else
{
element
.
label
=
element
.
category_name
}
return
element
})
}
},
handleNodeClick
(
data
)
{
this
.
treeValue
.
name
=
data
.
label
this
.
treeValue
.
id
=
data
.
id
},
handleClose
()
{
this
.
treeValue
.
name
=
''
this
.
treeValue
.
id
=
''
this
.
dialogVisible
=
false
},
dialogConfirm
()
{
this
.
dialogVisible
=
false
this
.
filterInput
=
this
.
treeValue
.
name
this
.
$refs
.
list
.
refetch
()
},
// 新建试卷
handleCreatePaper
()
{
this
.
$router
.
push
({
path
:
'newPaper'
,
query
:
{
isEdit
:
false
}
})
handleCreate
()
{
this
.
$router
.
push
({
name
:
'createPaper'
})
},
// 编辑试卷
handleDdit
(
row
)
{
console
.
log
(
row
)
this
.
$router
.
push
({
path
:
'newPapers'
,
query
:
{
rowDetail
:
row
,
isEdit
:
true
}
})
handleUpdate
(
row
)
{
this
.
$router
.
push
({
name
:
'editPaper'
,
params
:
{
id
:
row
.
id
}
})
},
// 查看详情
handleView
(
row
)
{
this
.
$router
.
push
({
name
:
'viewPaper'
,
params
:
{
id
:
row
.
id
}
})
},
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
console
.
log
(
val
)
},
// 批量删除
batchDelete
()
{
console
.
log
(
'111'
)
},
// 查看详情
handleDetail
(
row
)
{
this
.
$router
.
push
({
path
:
'detail'
,
query
:
{
paperDetail
:
JSON
.
stringify
(
row
)
}
})
},
// 单个删除
handleDelete
(
row
)
{
// this.$refs.list.refetch()
...
...
src/modules/paper/views/NewPaper.vue
浏览文件 @
ef96bacc
<
template
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"160px"
:label-position=
"labelPosition"
>
<app-card>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"160px"
label-position=
"right"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"试卷名称"
prop=
"paper_title"
:rules=
"[
{ message: '请输入试卷名称', required: true, trigger: 'blur' }]"
>
<el-form-item
label=
"试卷名称"
prop=
"paper_title"
>
<el-input
v-model=
"form.paper_title"
placeholder=
"请输入试卷名称"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"18"
>
<el-form-item
label=
"试卷用途"
prop=
"paper_uses"
>
<el-radio-group
v-model=
"form.paper_uses"
>
<el-radio
:label=
"1"
>
考试
</el-radio>
...
...
@@ -20,7 +16,6 @@
<el-radio
:label=
"3"
>
课程测试
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
...
...
@@ -32,9 +27,7 @@
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"试卷分类"
prop=
"paper_category"
>
<el-select
v-model=
"form.paper_category"
placeholder=
"请选择试卷分类"
style=
"width: 100%"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
<question-type-cascader
v-model=
"form.paper_category"
></question-type-cascader>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -42,18 +35,13 @@
<el-col
:span=
"12"
>
<el-form-item
label=
"组卷模式"
prop=
"paper_type"
>
<el-select
v-model=
"form.paper_type"
placeholder=
"请选择组卷模式"
style=
"width: 100%"
>
<el-option
label=
"自动组卷"
:value=
"0"
>
</el-option>
<el-option
label=
"选题组卷"
:value=
"1"
>
</el-option>
<el-option
label=
"选题组卷"
:value=
"1"
>
</el-option>
<el-option
label=
"自动组卷"
:value=
"2"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"10"
>
<el-form-item
label=
"试题顺序"
:rules=
"[
{ message: '请选择试题顺序', required: true, trigger: 'change' }]"
style="padding-left: 20px"
v-if="form.paper_type === 1"
>
<el-form-item
label=
"试题顺序"
prop=
"paper_question_order"
v-if=
"form.paper_type === 1"
>
<el-radio-group
v-model=
"form.paper_question_order"
>
<el-radio
:label=
"1"
>
固定
</el-radio>
<el-radio
:label=
"2"
>
随机
</el-radio>
...
...
@@ -63,11 +51,7 @@
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"试卷总分"
prop=
"paper_total_score"
:rules=
"[
{ message: '请输入试卷总分', required: true, trigger: 'blur' }]"
>
<el-form-item
label=
"试卷总分"
prop=
"paper_total_score"
>
<el-input-number
:controls=
"false"
:step=
"1"
...
...
@@ -81,12 +65,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"10"
>
<el-form-item
label=
"及格分数"
prop=
"pass_score"
:rules=
"[
{ message: '请输入及格分数', required: true, trigger: 'blur' }]"
style="padding-left: 20px"
>
<el-form-item
label=
"及格分数"
prop=
"pass_score"
>
<el-input-number
:controls=
"false"
:step=
"1"
...
...
@@ -102,37 +81,26 @@
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"考试时长"
prop=
"paper_times"
:rules=
"[
{ message: '请输入考试时长', required: true, trigger: 'blur' }]"
>
<el-form-item
label=
"考试时长"
prop=
"paper_times"
>
<el-input-number
v-model=
"form.paper_times"
:controls=
"false"
:min=
"1"
:max=
"150"
placeholder=
"请输入考试时长"
style=
"width: 90%"
:precision=
"0"
></el-input-number
>
分钟
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"最短交卷时长"
prop=
"minimum_paper_handing_time"
:rules=
"[
{ message: '请输入考试时长', required: true, trigger: 'blur' }]"
style="padding-left: 20px"
>
<el-form-item
label=
"最短交卷时长"
prop=
"minimum_paper_handing_time"
>
<el-input-number
v-model=
"form.minimum_paper_handing_time"
:controls=
"false"
:min=
"1"
:max=
"150"
placeholder=
"请输入考试时长"
style=
"width: 90%"
:precision=
"0"
></el-input-number
>
分钟
...
...
@@ -141,7 +109,7 @@
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"多次考试"
:rules=
"[
{ required: true, trigger: 'blur' }]
">
<el-form-item
label=
"多次考试"
prop=
"is_multiple_exams
"
>
<el-radio-group
v-model=
"form.is_multiple_exams"
>
<el-radio
:label=
"0"
>
否
</el-radio>
<el-radio
:label=
"1"
>
是
</el-radio>
...
...
@@ -149,7 +117,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"多次考试成绩计算规则"
style=
"padding-left: 20px"
v-if=
"form.moreExam === '1'
"
>
<el-form-item
label=
"多次考试成绩计算规则"
v-if=
"form.is_multiple_exams === 1
"
>
<el-radio-group
v-model=
"form.multiple_test_score_rule"
>
<el-radio
:label=
"1"
>
平均计算法
</el-radio>
<el-radio
:label=
"2"
>
最高得分法
</el-radio>
...
...
@@ -157,120 +125,136 @@
</el-form-item>
</el-col>
</el-row>
<el-form-item>
<el-row
style=
"margin-top: 30px"
>
<div
style=
"padding: 30px; text-align: center"
>
<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-button
type=
"primary"
@
click=
"handleSubmit"
>
保存
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmitSelect"
v-if=
"hasSelectQuestionButton"
>
保存并选择试题
</el-button>
</div>
</el-form>
<question-select
:visible
.
sync=
"questionSelectVisible"
></question-select>
</app-card>
</
template
>
<
script
>
import
{
createNewPaper
}
from
'../api'
import
{
getPaper
,
createPaper
,
updatePaper
}
from
'../api'
import
QuestionTypeCascader
from
'@/components/base/QuestionTypeCascader.vue'
export
default
{
props
:
{
id
:
{
type
:
String
}
},
components
:
{
QuestionTypeCascader
,
QuestionSelect
:
()
=>
import
(
'../components/QuestionSelect.vue'
)
},
data
()
{
return
{
labelPosition
:
'left'
,
btnDisabled
:
false
,
paper_category
:
[
{
label
:
'测试'
,
value
:
1
},
{
label
:
'考试'
,
value
:
2
},
{
label
:
'模拟'
,
value
:
3
}
],
form
:
{
paper_title
:
''
,
// 试卷名称
paper_uses
:
1
,
// 试卷用途
paper_labels
:
''
,
// 标签
paper_category
:
1
,
// 试卷分类
paper_type
:
1
,
// 组卷模式
paper_question_order
:
0
,
// 试题顺序
paper_total_score
:
undefined
,
// 试卷总分
pa
perPassScore
:
undefined
,
// 及格分数
paper_times
:
undefined
,
// 考试时长
minimum_paper_handing_time
:
undefined
,
// 最短交卷时长
is_multiple_exams
:
1
,
// 多次考试
paper_category
:
undefined
,
// 试卷分类
paper_type
:
undefined
,
// 组卷模式
paper_question_order
:
1
,
// 试题顺序
paper_total_score
:
100
,
// 试卷总分
pa
ss_score
:
60
,
// 及格分数
paper_times
:
90
,
// 考试时长
minimum_paper_handing_time
:
15
,
// 最短交卷时长
is_multiple_exams
:
0
,
// 多次考试
multiple_test_score_rule
:
1
// 多次考试成绩计算规则
}
}
},
computed
:
{
paperDetail
()
{
return
this
.
$route
.
query
.
paperDetail
rules
:
{
paper_title
:
[{
message
:
'请输入试卷名称'
,
required
:
true
,
trigger
:
'blur'
}],
paper_uses
:
[{
message
:
'请选择试卷用途'
,
required
:
true
,
trigger
:
'change'
}],
paper_category
:
[{
message
:
'请选择试卷分类'
,
required
:
true
,
trigger
:
'change'
}],
paper_type
:
[{
message
:
'请选择组卷模式'
,
required
:
true
,
trigger
:
'change'
}],
paper_total_score
:
[{
message
:
'请输入试卷总分'
,
required
:
true
,
trigger
:
'blur'
}],
paper_question_order
:
[{
message
:
'请选择试题顺序'
,
required
:
true
,
trigger
:
'change'
}],
pass_score
:
[{
message
:
'请输入及格分数'
,
required
:
true
,
trigger
:
'blur'
}],
paper_times
:
[{
message
:
'请输入考试时长'
,
required
:
true
,
trigger
:
'blur'
}],
minimum_paper_handing_time
:
[{
message
:
'请输入考试时长'
,
required
:
true
,
trigger
:
'blur'
}],
is_multiple_exams
:
[{
message
:
'请选择是否多次考试'
,
required
:
true
,
trigger
:
'change'
}]
},
isEdit
()
{
return
this
.
$route
.
query
.
isEdit
questionSelectVisible
:
false
}
},
watch
:
{
rowDetail
:
{
'$route.query.select'
:
{
immediate
:
true
,
handler
(
data
)
{
this
.
form
=
Object
.
assign
({},
this
.
form
,
data
)
handler
(
value
)
{
value
&&
this
.
showSelectQuestion
(
)
}
},
paperDetail
:
{
immediate
:
true
,
handler
(
data
)
{
this
.
form
=
Object
.
assign
({},
this
.
form
,
data
)
}
},
computed
:
{
isEdit
()
{
return
!!
this
.
id
},
hasSelectQuestionButton
()
{
return
!
this
.
isEdit
||
this
.
$route
.
query
.
select
}
},
beforeMount
()
{
this
.
isEdit
&&
this
.
getDetail
()
},
methods
:
{
// 取消
handleCancel
()
{
history
.
go
(
-
1
)
this
.
$router
.
replace
(
'/paper/list'
)
},
// 保存
handleSubmit
()
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
$confirm
(
'保存成功!'
,
{
confirmButtonText
:
'确定'
}).
then
(()
=>
{
history
.
go
(
-
1
)
createNewPaper
(
Object
.
assign
(
this
.
form
,
{
project_prefix
:
'x1'
})).
then
(
res
=>
{
this
.
$message
.
sucess
(
'新建试卷成功'
)
})
this
.
$refs
.
form
.
validate
().
then
(()
=>
{
// 保存成功回到列表
this
.
createPaper
().
then
(
res
=>
{
this
.
$router
.
replace
(
'/paper/list'
)
})
}
else
{
setTimeout
(()
=>
{
// 表单校验不通过聚焦至第一个不通过的输入框
const
isError
=
document
.
getElementsByClassName
(
'is-error'
)
isError
[
0
].
querySelector
(
'input'
).
focus
()
},
100
)
return
false
}
})
},
// 保存并选择试题
handleSubmitSelect
()
{
this
.
$refs
.
form
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
$confirm
(
'保存成功!'
,
{
confirmButtonText
:
'确定'
}).
then
(()
=>
{
// 调用接口
this
.
$router
.
push
({
path
:
'detail'
,
form
:
this
.
form
this
.
$refs
.
form
.
validate
().
then
(
async
()
=>
{
if
(
this
.
isEdit
)
{
this
.
updatePaper
(()
=>
{
this
.
showSelectQuestion
()
})
}
else
{
this
.
createPaper
(
res
=>
{
this
.
$router
.
replace
({
path
:
'/paper/update/'
+
res
.
data
.
id
,
query
:
{
select
:
true
}
})
})
}
})
},
// 显示选题
showSelectQuestion
()
{
if
(
this
.
isEdit
)
{
this
.
visible
=
true
}
else
{
setTimeout
(()
=>
{
// 表单校验不通过聚焦至第一个不通过的输入框
const
isError
=
document
.
getElementsByClassName
(
'is-error'
)
isError
[
0
].
querySelector
(
'input'
).
focus
()
},
100
)
return
false
this
.
$router
.
replace
(
'/paper/update'
)
}
this
.
questionSelectVisible
=
true
},
// 创建试卷
createPaper
(
callback
)
{
return
createPaper
(
this
.
form
).
then
(
res
=>
{
this
.
$message
.
success
(
'保存成功'
)
callback
&&
callback
(
res
)
return
res
})
},
// 更新试卷
updatePaper
(
callback
)
{
return
updatePaper
(
this
.
form
).
then
(
res
=>
{
this
.
$message
.
success
(
'保存成功'
)
callback
&&
callback
(
res
)
return
res
})
},
// 获取试卷详情
getDetail
()
{
getPaper
({
id
:
this
.
id
}).
then
(
res
=>
{
this
.
form
=
Object
.
assign
({},
this
.
form
,
res
.
data
)
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
:v-deep
.el-input-number
.el-input-number__decrease
{
display
:
none
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论