Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
b6d51968
提交
b6d51968
authored
11月 22, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
72a9cb18
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
127 行增加
和
28 行删除
+127
-28
types.ts
src/modules/admin/lab/experiment/types.ts
+1
-0
Index.vue
src/modules/admin/lab/experiment/views/Index.vue
+9
-7
api.ts
src/modules/admin/lab/score/api.ts
+6
-1
ScoreDialog.vue
src/modules/admin/lab/score/components/ScoreDialog.vue
+3
-1
Report.vue
src/modules/admin/lab/score/views/Report.vue
+108
-19
没有找到文件。
src/modules/admin/lab/experiment/types.ts
浏览文件 @
b6d51968
...
@@ -30,6 +30,7 @@ export interface ExperimentItem {
...
@@ -30,6 +30,7 @@ export interface ExperimentItem {
requirements
:
string
requirements
:
string
content
:
string
content
:
string
procedure
:
string
procedure
:
string
stu_commit_count
:
number
}
}
export
interface
ExperimentCreateItem
{
export
interface
ExperimentCreateItem
{
...
...
src/modules/admin/lab/experiment/views/Index.vue
浏览文件 @
b6d51968
...
@@ -132,13 +132,15 @@ function handleUpdateGradeRules(row: ExperimentItem) {
...
@@ -132,13 +132,15 @@ function handleUpdateGradeRules(row: ExperimentItem) {
</
template
>
</
template
>
<
template
#
table-x=
"{ row }: { row: ExperimentItem }"
>
<
template
#
table-x=
"{ row }: { row: ExperimentItem }"
>
<el-button
type=
"info"
round
style=
"width: 132px; margin-bottom: 12px"
@
click=
"handleUpdateGradeRules(row)"
<template
v-if=
"!row.stu_commit_count"
>
>
编辑成绩规则
</el-button
<el-button
type=
"info"
round
style=
"width: 132px; margin-bottom: 12px"
@
click=
"handleUpdateGradeRules(row)"
><br
/>
>
编辑成绩规则
</el-button
<el-button
type=
"info"
round
style=
"width: 132px; margin-bottom: 12px"
>
><br
/>
<router-link
:to=
"`/admin/lab/experiment/report/$
{row.id}`" target="_blank">编辑报告规则
</router-link>
<el-button
type=
"info"
round
style=
"width: 132px; margin-bottom: 12px"
>
</el-button>
<router-link
:to=
"`/admin/lab/experiment/report/$
{row.id}`" target="_blank">编辑报告规则
</router-link>
<br
/>
</el-button>
<br
/>
</
template
>
<el-button
type=
"primary"
round
v-permission=
"'v1-backend-experiment-view'"
>
<el-button
type=
"primary"
round
v-permission=
"'v1-backend-experiment-view'"
>
<router-link
:to=
"`/admin/lab/experiment/${row.id}`"
target=
"_blank"
>
查看
</router-link>
<router-link
:to=
"`/admin/lab/experiment/${row.id}`"
target=
"_blank"
>
查看
</router-link>
</el-button>
</el-button>
...
...
src/modules/admin/lab/score/api.ts
浏览文件 @
b6d51968
...
@@ -56,7 +56,12 @@ export function getExperimentReport(params: { experiment_id: string; student_id:
...
@@ -56,7 +56,12 @@ export function getExperimentReport(params: { experiment_id: string; student_id:
return
httpRequest
.
get
(
'/api/lab/v1/teacher/experiment/report-achievement'
,
{
params
})
return
httpRequest
.
get
(
'/api/lab/v1/teacher/experiment/report-achievement'
,
{
params
})
}
}
// 批改学员实验报告成绩
// 批改学员实验报告成绩
export
function
updateExperimentReport
(
data
:
{
experiment_id
:
string
;
student_id
:
string
;
score_detail
:
string
})
{
export
function
updateExperimentReport
(
data
:
{
experiment_id
:
string
student_id
:
string
score_detail
:
string
comment
:
string
})
{
return
httpRequest
.
post
(
'/api/lab/v1/teacher/experiment/report-check'
,
data
)
return
httpRequest
.
post
(
'/api/lab/v1/teacher/experiment/report-check'
,
data
)
}
}
...
...
src/modules/admin/lab/score/components/ScoreDialog.vue
浏览文件 @
b6d51968
...
@@ -147,7 +147,9 @@ const resultVisible = $ref(false)
...
@@ -147,7 +147,9 @@ const resultVisible = $ref(false)
:header-cell-style=
"
{ background: '#ededed' }"
:header-cell-style=
"
{ background: '#ededed' }"
style="margin-top: 20px">
style="margin-top: 20px">
<el-table-column
label=
"实验成绩组成项"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"实验成绩组成项"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"权重"
prop=
"percent"
align=
"center"
>
</el-table-column>
<el-table-column
label=
"权重"
prop=
"percent"
align=
"center"
>
<template
#
default=
"
{ row }">
{{
row
.
percent
}}
%
</
template
>
</el-table-column>
<el-table-column
label=
"得分"
prop=
"commit_score"
align=
"center"
></el-table-column>
<el-table-column
label=
"得分"
prop=
"commit_score"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
prop=
"commit_score"
align=
"center"
>
<el-table-column
label=
"操作"
prop=
"commit_score"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
...
...
src/modules/admin/lab/score/views/Report.vue
浏览文件 @
b6d51968
<
script
setup
>
<
script
setup
>
import
{
ElMessage
}
from
'element-plus'
import
{
getExperimentScore
,
getExperimentReport
,
updateExperimentReport
}
from
'../api'
import
{
getExperimentScore
,
getExperimentReport
,
updateExperimentReport
}
from
'../api'
import
{
reportScoreRule
}
from
'@/utils/dictionary'
import
{
reportScoreRule
}
from
'@/utils/dictionary'
...
@@ -7,12 +8,16 @@ const route = useRoute()
...
@@ -7,12 +8,16 @@ const route = useRoute()
let
experiment
=
$ref
()
let
experiment
=
$ref
()
let
report
=
$ref
()
let
report
=
$ref
()
const
formRef
=
$ref
()
const
form
=
reactive
({
const
form
=
reactive
({
experiment_id
:
route
.
query
.
experiment_id
,
experiment_id
:
route
.
query
.
experiment_id
,
student_id
:
route
.
query
.
student_id
,
student_id
:
route
.
query
.
student_id
,
score_detail
:
[]
score_detail
:
[],
comment
:
''
})
const
rules
=
reactive
({
// comment: [{ required: true, message: '请输入评语', trigger: 'blur' }]
})
})
const
teacherText
=
$computed
(()
=>
{
const
teacherText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
if
(
!
experiment
)
return
''
return
experiment
.
teachers
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
return
experiment
.
teachers
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
...
@@ -36,6 +41,7 @@ function fetchReport() {
...
@@ -36,6 +41,7 @@ function fetchReport() {
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
error
)
console
.
log
(
error
)
}
}
form
.
comment
=
report
.
comment
||
''
form
.
score_detail
=
detail
.
map
(
item
=>
{
form
.
score_detail
=
detail
.
map
(
item
=>
{
item
.
min_score
=
parseFloat
(
item
.
min_score
)
item
.
min_score
=
parseFloat
(
item
.
min_score
)
item
.
commit_score
=
item
.
commit_score
?
parseFloat
(
item
.
commit_score
)
:
0
item
.
commit_score
=
item
.
commit_score
?
parseFloat
(
item
.
commit_score
)
:
0
...
@@ -57,21 +63,39 @@ const score = $computed(() => {
...
@@ -57,21 +63,39 @@ const score = $computed(() => {
})
})
function
handleSubmit
()
{
function
handleSubmit
()
{
const
params
=
{
...
form
,
score_detail
:
JSON
.
stringify
(
form
.
score_detail
)
}
formRef
?.
validate
().
then
(()
=>
{
updateExperimentReport
(
params
).
then
(
res
=>
{
const
params
=
{
...
form
,
score_detail
:
JSON
.
stringify
(
form
.
score_detail
)
}
console
.
log
(
res
)
updateExperimentReport
(
params
).
then
(
res
=>
{
console
.
log
(
res
)
ElMessage
.
success
(
'批改成功'
)
})
})
})
}
}
// 关闭
// 关闭
function
handleClose
()
{
function
handleClose
()
{
window
.
close
()
window
.
close
()
}
}
function
scoreValue
(
value
)
{
if
(
typeof
value
!==
'number'
&&
!
value
)
{
return
'--'
}
else
{
return
value
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"批改实验报告"
>
<AppCard
title=
"批改实验报告"
>
<h1
class=
"report-title"
>
实验报告
</h1>
<h1
class=
"report-title"
>
实验报告
</h1>
<el-form
label-suffix=
":"
hide-required-asterisk
v-if=
"experiment && report"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-suffix=
":"
hide-required-asterisk
scroll-to-error
v-if=
"experiment && report"
>
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"课程名称"
>
{{
experiment
.
course
.
name
}}
</el-form-item>
<el-form-item
label=
"课程名称"
>
{{
experiment
.
course
.
name
}}
</el-form-item>
...
@@ -113,16 +137,21 @@ function handleClose() {
...
@@ -113,16 +137,21 @@ function handleClose() {
</el-col>
</el-col>
</el-row>
</el-row>
<el-divider
/>
<el-divider
/>
<p
class=
"report-score"
>
总分:
{{
score
||
'--'
}}
</p>
<p
class=
"report-score"
>
总分:
{{
scoreValue
(
score
)
}}
</p>
<el-form-item
v-for=
"(item, index) in form.score_detail"
:key=
"item.id"
class=
"report-form-item"
>
<el-form-item
v-for=
"(item, index) in form.score_detail"
:key=
"item.id"
:prop=
"'score_detail.' + index + '.commit_score'"
:rules=
"
{ required: true, message: '请输入该项得分', trigger: 'blur' }"
class="report-form-item">
<div
class=
"form-hd"
>
<div
class=
"form-hd"
>
<h3>
{{
index
+
1
}}
、
{{
item
.
name
}}
</h3>
<h3>
{{
index
+
1
}}
、
{{
item
.
name
}}
</h3>
<div>
<div>
<span
class=
"score"
>
{{
item
.
score
}}
分
</span>
<span>
{{
item
.
score
}}
分
</span>
<span
class=
"rule-mode"
>
{{
reportScoreRule
[
item
.
rule_mode
]
}}
</span>
<span>
{{
reportScoreRule
[
item
.
rule_mode
]
}}
</span>
</div>
</div>
<div>
<div>
<
p
class=
"score"
>
得分:
{{
item
.
commit_score
}}
分
</p
>
<
span>
得分:
{{
scoreValue
(
item
.
commit_score
)
}}
分
</span
>
<el-input-number
<el-input-number
v-model=
"item.commit_score"
v-model=
"item.commit_score"
:min=
"item.min_score"
:min=
"item.min_score"
...
@@ -162,13 +191,52 @@ function handleClose() {
...
@@ -162,13 +191,52 @@ function handleClose() {
{{
item
.
question_stem
}}
{{
item
.
question_stem
}}
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
</
template
>
</
template
>
<p>
评语:
</p>
<div
class=
"report-form-item-comment"
>
<el-input
type=
"textarea"
maxlength=
"200"
v-model=
"item.comment"
placeholder=
"请填写评语"
:autosize=
"{ minRows: 4 }"
></el-input>
<div
class=
"report-form-item-comment_hd"
>
<p>
评语:
</p>
<div>
<span>
快速评语:
</span>
<el-button
type=
"primary"
size=
"small"
@
click=
"item.comment = '此部分内容填写完善,内容充实,符合本实验相应要求。'"
>
很好
</el-button
>
<el-button
type=
"primary"
size=
"small"
@
click=
"
item.comment = '此部分内容填写较为完善,内容较为充实,比较符合本实验相应要求,但仍然有提升空间。'
"
>
一般
</el-button
>
<el-button
type=
"primary"
size=
"small"
@
click=
"item.comment = '此部分内容仍然有提升空间,建议继续针对该实验进行相应训练,加油!'"
>
鼓励
</el-button
>
</div>
</div>
<el-input
type=
"textarea"
maxlength=
"200"
v-model=
"item.comment"
placeholder=
"请填写评语"
:autosize=
"{ minRows: 3 }"
></el-input>
</div>
</el-form-item>
<el-form-item
prop=
"comment"
>
<p
class=
"t2"
>
实验整体评语
</p>
<el-input
type=
"textarea"
maxlength=
"500"
v-model=
"form.comment"
placeholder=
"请填写评语"
:autosize=
"{ minRows: 8 }"
></el-input>
</el-form-item>
</el-form-item>
<p>
实验整体评语:
</p>
<el-input
type=
"textarea"
maxlength=
"500"
placeholder=
"请填写评语"
:autosize=
"{ minRows: 6 }"
></el-input>
</el-form>
</el-form>
<el-row
justify=
"center"
>
<el-row
justify=
"center"
style=
"margin: 40px 0"
>
<el-button
type=
"primary"
round
auto-insert-space
@
click=
"handleSubmit"
>
保存
</el-button>
<el-button
type=
"primary"
round
auto-insert-space
@
click=
"handleSubmit"
>
保存
</el-button>
<el-button
round
auto-insert-space
@
click=
"handleClose"
>
关闭
</el-button>
<el-button
round
auto-insert-space
@
click=
"handleClose"
>
关闭
</el-button>
</el-row>
</el-row>
...
@@ -186,17 +254,18 @@ function handleClose() {
...
@@ -186,17 +254,18 @@ function handleClose() {
font-size
:
24px
;
font-size
:
24px
;
font-weight
:
bold
;
font-weight
:
bold
;
color
:
var
(
--
main-color
);
color
:
var
(
--
main-color
);
margin
:
40px
0
;
}
}
.report-form-item
{
.report-form-item
{
margin-bottom
:
40px
;
.form-hd
{
.form-hd
{
display
:
flex
;
display
:
flex
;
width
:
100%
;
width
:
100%
;
font-size
:
14px
;
font-size
:
14px
;
font-weight
:
bold
;
font-weight
:
bold
;
justify-content
:
space-between
;
justify-content
:
space-between
;
.rule-mode
{
span
{
width
:
100px
;
padding
:
0
40px
;
text-align
:
right
;
}
}
}
}
}
}
...
@@ -208,4 +277,24 @@ function handleClose() {
...
@@ -208,4 +277,24 @@ function handleClose() {
border-radius
:
6px
;
border-radius
:
6px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.report-form-item-comment
{
width
:
100%
;
padding
:
20px
0
;
}
.report-form-item-comment_hd
{
margin-bottom
:
10px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
line-height
:
32px
;
}
.t2
{
margin
:
40px
0
20px
;
width
:
100%
;
color
:
#fff
;
background-color
:
var
(
--
main-color
);
text-align
:
center
;
line-height
:
40px
;
}
</
style
>
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论