Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
a4686548
提交
a4686548
authored
11月 22, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
b6d51968
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
299 行增加
和
165 行删除
+299
-165
ReportPreivew.vue
src/modules/student/lab/components/ReportPreivew.vue
+0
-143
ReportPreview.vue
src/modules/student/lab/components/ReportPreview.vue
+207
-0
ResultScoreDialog.vue
src/modules/student/lab/components/ResultScoreDialog.vue
+70
-19
Index.vue
src/modules/student/lab/views/Index.vue
+21
-2
ReportView.vue
src/modules/student/lab/views/ReportView.vue
+1
-1
没有找到文件。
src/modules/student/lab/components/ReportPreivew.vue
deleted
100644 → 0
浏览文件 @
b6d51968
<
script
setup
>
import
{
getExperimentReport
}
from
'../api'
const
props
=
defineProps
({
id
:
String
})
let
experiment
=
$ref
()
let
report
=
$ref
()
const
teacherText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
return
experiment
.
teachers
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
})
const
classText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
return
experiment
.
student
.
classes
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
})
function
fetchInfo
()
{
getExperimentReport
({
experiment_id
:
props
.
id
}).
then
(
res
=>
{
experiment
=
res
.
data
.
experiment
report
=
res
.
data
.
report
let
detail
=
[]
try
{
detail
=
JSON
.
parse
(
report
.
detail
)
}
catch
(
error
)
{
console
.
log
(
error
)
}
report
=
Object
.
assign
(
report
,
{
detail
})
})
}
onMounted
(()
=>
{
fetchInfo
()
})
// 关闭
function
handleClose
()
{
window
.
close
()
}
</
script
>
<
template
>
<h1
class=
"report-title"
>
实验报告
</h1>
<el-form
label-suffix=
":"
hide-required-asterisk
v-if=
"experiment"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"课程名称"
>
{{
experiment
.
course
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验名称"
>
{{
experiment
.
name
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验地点"
>
{{
report
.
experiment_address
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验日期"
>
{{
report
.
experiment_date
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验类型"
>
{{
experiment
.
type_level
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"指导教师"
>
{{
teacherText
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"专业"
>
{{
experiment
.
student
.
specialty
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"班级"
>
{{
classText
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"姓名"
>
{{
experiment
.
student
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"学号"
>
{{
experiment
.
student
.
sno_number
}}
</el-form-item>
</el-col>
</el-row>
<el-divider
/>
<el-form-item
:label=
"item.name"
v-for=
"item in report.detail"
:key=
"item.id"
class=
"report-form-item"
>
<!-- 内容 -->
<template
v-if=
"item.type === 1"
>
{{
item
.
notice_message
}}
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
</
template
>
<!-- 附件 -->
<
template
v-if=
"item.type === 2"
>
<el-table
:data=
"item.files"
stripe
:header-cell-style=
"
{ background: '#ededed' }" style="margin-top: 20px">
<el-table-column
label=
"序号"
type=
"index"
width=
"80"
align=
"center"
></el-table-column>
<el-table-column
label=
"附件类型"
prop=
"type"
align=
"center"
>
<template
#
default=
"
{ row }">
{{
row
.
type
===
'1'
?
'本地上传'
:
'实验截图'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"附件名称"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"更新时间"
prop=
"updated_time"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
width=
"100"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<el-button
text
type=
"primary"
><a
:href=
"row.url"
target=
"_blank"
>
查看
</a></el-button>
</
template
>
</el-table-column>
</el-table>
</template>
<!-- 思考题 -->
<
template
v-if=
"item.type === 3"
>
{{
item
.
question_stem
}}
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
</
template
>
</el-form-item>
</el-form>
<el-row
justify=
"center"
>
<el-button
type=
"primary"
plain
auto-insert-space
@
click=
"handleClose"
>
关闭
</el-button>
</el-row>
</template>
<
style
lang=
"scss"
>
.report-title
{
padding
:
20px
;
font-size
:
20px
;
text-align
:
center
;
}
.report-form-item
{
flex-direction
:
column
;
.el-form-item__label
{
font-weight
:
bold
;
text-align
:
left
;
justify-content
:
flex-start
;
}
}
.report-form-item__content
{
clear
:
both
;
width
:
100%
;
padding
:
10px
;
background-color
:
#efefef
;
border-radius
:
6px
;
box-sizing
:
border-box
;
}
</
style
>
src/modules/student/lab/components/ReportPreview.vue
0 → 100644
浏览文件 @
a4686548
<
script
setup
>
import
{
getExperimentReport
}
from
'../api'
const
props
=
defineProps
({
id
:
String
})
let
experiment
=
$ref
()
let
report
=
$ref
()
const
isCommit
=
$computed
(()
=>
{
return
report
.
is_comment
===
'1'
})
const
teacherText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
return
experiment
.
teachers
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
})
const
classText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
return
experiment
.
student
.
classes
.
map
(
item
=>
item
.
name
).
join
(
'、'
)
})
function
fetchInfo
()
{
getExperimentReport
({
experiment_id
:
props
.
id
}).
then
(
res
=>
{
experiment
=
res
.
data
.
experiment
report
=
res
.
data
.
report
let
detail
=
[]
// 已批改
if
(
report
.
status
===
'3'
)
{
try
{
detail
=
JSON
.
parse
(
report
.
score_detail
).
map
(
item
=>
{
return
{
...
item
,
commit_score
:
parseFloat
(
item
.
commit_score
)
}
})
}
catch
(
error
)
{
console
.
log
(
error
)
}
}
else
{
try
{
detail
=
JSON
.
parse
(
report
.
detail
)
}
catch
(
error
)
{
console
.
log
(
error
)
}
}
report
=
Object
.
assign
(
report
,
{
detail
,
score
:
parseFloat
(
report
.
score
)
})
})
}
onMounted
(()
=>
{
fetchInfo
()
})
// 关闭
function
handleClose
()
{
window
.
close
()
}
</
script
>
<
template
>
<div
class=
"report-preview"
>
<h1
class=
"report-title"
>
实验报告
</h1>
<el-form
label-suffix=
":"
hide-required-asterisk
v-if=
"experiment"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"课程名称"
>
{{
experiment
.
course
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验名称"
>
{{
experiment
.
name
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验地点"
>
{{
report
.
experiment_address
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验日期"
>
{{
report
.
experiment_date
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验类型"
>
{{
experiment
.
type_level
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"指导教师"
>
{{
teacherText
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"专业"
>
{{
experiment
.
student
.
specialty
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"班级"
>
{{
classText
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"姓名"
>
{{
experiment
.
student
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"学号"
>
{{
experiment
.
student
.
sno_number
}}
</el-form-item>
</el-col>
</el-row>
<el-divider
/>
<template
v-if=
"isCommit"
>
<p
class=
"report-score"
>
实验报告得分:
{{
report
.
score
}}
</p>
<div
class=
"comment is-all"
>
<div
class=
"comment-hd"
>
实验报告整体评价
</div>
<div
class=
"comment-bd"
>
{{
report
.
comment
}}
</div>
</div>
</
template
>
<el-form-item
v-for=
"(item, index) in report.detail"
:key=
"item.id"
class=
"report-form-item"
>
<div
class=
"form-hd"
>
<h3>
{{ index + 1 }}、{{ item.name }}
</h3>
<p>
得分:{{ item.commit_score }}分
</p>
</div>
<!-- 内容 -->
<
template
v-if=
"item.type === 1"
>
<p
class=
"report-form-item__tips"
>
{{
item
.
notice_message
}}
</p>
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
</
template
>
<!-- 附件 -->
<
template
v-if=
"item.type === 2"
>
<el-table
:data=
"item.files"
stripe
:header-cell-style=
"
{ background: '#ededed' }" style="margin-top: 20px">
<el-table-column
label=
"序号"
type=
"index"
width=
"80"
align=
"center"
></el-table-column>
<el-table-column
label=
"附件类型"
prop=
"type"
align=
"center"
>
<template
#
default=
"
{ row }">
{{
row
.
type
===
'1'
?
'本地上传'
:
'实验截图'
}}
</
template
>
</el-table-column>
<el-table-column
label=
"附件名称"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"更新时间"
prop=
"updated_time"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
width=
"100"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<el-button
text
type=
"primary"
><a
:href=
"row.url"
target=
"_blank"
>
查看
</a></el-button>
</
template
>
</el-table-column>
</el-table>
</template>
<!-- 思考题 -->
<
template
v-if=
"item.type === 3"
>
<p
class=
"report-form-item__tips"
>
{{
item
.
question_stem
}}
</p>
<div
class=
"report-form-item__content"
v-html=
"item.content"
></div>
</
template
>
<div
class=
"comment"
v-if=
"isCommit"
>
<div
class=
"comment-hd"
>
教师评价:
</div>
<div
class=
"comment-bd"
>
{{ item.comment }}
</div>
</div>
</el-form-item>
</el-form>
<el-row
justify=
"center"
>
<el-button
type=
"primary"
plain
auto-insert-space
@
click=
"handleClose"
>
关闭
</el-button>
</el-row>
</div>
</template>
<
style
lang=
"scss"
scoped
>
.report-title
{
padding
:
20px
;
font-size
:
20px
;
text-align
:
center
;
}
.report-score
{
text-align
:
center
;
font-size
:
24px
;
font-weight
:
bold
;
color
:
var
(
--
main-color
);
margin
:
40px
0
;
}
.report-form-item
{
margin-bottom
:
40px
;
.form-hd
{
display
:
flex
;
width
:
100%
;
font-size
:
14px
;
font-weight
:
bold
;
justify-content
:
space-between
;
span
{
padding
:
0
40px
;
}
}
}
.report-form-item__content
{
clear
:
both
;
width
:
100%
;
padding
:
10px
;
background-color
:
#efefef
;
border-radius
:
6px
;
box-sizing
:
border-box
;
}
.comment
{
width
:
100%
;
padding
:
20px
0
;
&
.is-all
{
margin-bottom
:
60px
;
.comment-hd
{
font-size
:
16px
;
font-weight
:
bold
;
color
:
var
(
--
main-color
);
}
}
}
.comment-hd
{
line-height
:
30px
;
}
.comment-bd
{
padding
:
10px
;
border
:
1px
solid
var
(
--
main-color
);
border-radius
:
6px
;
}
</
style
>
src/modules/student/lab/components/ResultScoreDialog.vue
浏览文件 @
a4686548
...
...
@@ -6,11 +6,28 @@ interface Props {
}
const
props
=
defineProps
<
Props
>
()
let
experiment
=
$ref
<
any
>
()
let
detail
=
$ref
<
any
>
()
const
classText
=
$computed
(()
=>
{
if
(
!
experiment
)
return
''
return
experiment
.
student
.
classes
.
map
((
item
:
any
)
=>
item
.
name
).
join
(
'、'
)
})
function
fetchInfo
()
{
getExperimentScore
({
experiment_id
:
props
.
experiment_id
}).
then
(
res
=>
{
detail
=
res
.
data
experiment
=
res
.
data
.
experiment
let
scoreDetails
=
[]
try
{
scoreDetails
=
JSON
.
parse
(
res
.
data
.
achievement
.
score_details
).
map
((
item
:
any
)
=>
{
return
{
...
item
,
percent
:
parseFloat
(
item
.
percent
),
commit_score
:
parseFloat
(
item
.
commit_score
)
}
})
}
catch
(
error
)
{
console
.
log
(
error
)
}
detail
=
Object
.
assign
(
res
.
data
.
achievement
,
{
score
:
parseFloat
(
res
.
data
.
achievement
.
score
),
score_details
:
scoreDetails
})
})
}
onMounted
(()
=>
{
...
...
@@ -19,52 +36,86 @@ onMounted(() => {
</
script
>
<
template
>
<el-dialog
title=
"实验成绩详情"
width=
"600px"
:close-on-click-modal=
"false"
>
<el-dialog
title=
"实验成绩详情"
width=
"600px"
>
<el-form
label-width=
"120px"
label-suffix=
":"
v-if=
"detail"
>
<el-form-item
label=
"实验名称"
>
{{
detail
.
experiment
.
name
}}
</el-form-item>
<el-form-item
label=
"实验课程名称"
>
{{
detail
.
experiment
.
course
.
name
}}
</el-form-item>
<el-form-item
label=
"实验名称"
>
{{
experiment
.
name
}}
</el-form-item>
<el-form-item
label=
"实验课程名称"
>
{{
experiment
.
course
.
name
}}
</el-form-item>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"学生姓名"
>
{{
detail
.
experiment
.
student
.
name
}}
</el-form-item>
<el-form-item
label=
"学生姓名"
>
{{
experiment
.
student
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"学生学号"
>
{{
detail
.
experiment
.
student
.
sno_number
}}
</el-form-item>
<el-form-item
label=
"学生学号"
>
{{
experiment
.
student
.
sno_number
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属专业"
>
{{
detail
.
experiment
.
student
.
specialty
.
name
}}
</el-form-item>
<el-form-item
label=
"所属专业"
>
{{
experiment
.
student
.
specialty
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属班级"
>
{{
detail
.
experiment
.
student
.
specialty
.
name
}}
</el-form-item>
<el-form-item
label=
"所属班级"
>
{{
classText
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"评分教师"
>
{{
detail
.
achievement
.
checker_sso_user
.
real_name
||
detail
.
achievement
.
checker_sso_user
.
nickname
||
detail
.
achievement
.
checker_sso_user
.
username
detail
.
checker_sso_user
.
real_name
||
detail
.
checker_sso_user
.
nickname
||
detail
.
checker_sso_user
.
username
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"评分时间"
>
{{
detail
.
achievement
.
check_time
}}
</el-form-item>
<el-form-item
label=
"评分时间"
>
{{
detail
.
check_time
}}
</el-form-item>
</el-col>
</el-row>
<div>
<p>
实验得分
{{
detail
.
achievement
.
score
}}
</p>
<!--
<el-table
:data=
"item.files"
stripe
:header-cell-style=
"
{ background: '#ededed' }">
<el-table-column
label=
"实验成绩组成项"
align=
"center"
></el-table-column>
<el-table-column
label=
"权重"
prop=
"type"
align=
"center"
>
</el-table-column>
<div
class=
"form-result"
>
<div
class=
"form-result__score"
>
<p>
实验得分
</p>
<p
class=
"t1"
>
{{
detail
.
score
}}
</p>
</div>
<el-table
:data=
"detail.score_details"
stripe
:header-cell-style=
"
{ background: '#ededed' }"
v-if="detail.is_show === '1'">
<el-table-column
label=
"实验成绩组成项"
prop=
"name"
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=
"得分"
width=
"100"
align=
"center"
>
<
template
#
default=
"{ row }"
>
<el-button
text
type=
"primary"
><a
:href=
"row.url"
target=
"_blank"
>
查看明细
</a></el-button>
{{
row
.
commit_score
}}
<template
v-if=
"row.type === 1 && experiment.report_upload_way === 2"
>
<el-button
text
type=
"primary"
>
<a
:href=
"`/student/lab/report/view/$
{experiment.id}`" target="_blank">查看明细
</a>
</el-button>
</
template
>
</template>
</el-table-column>
</el-table>
-->
</el-table>
</div>
</el-form>
<
template
#
footer
>
<el-row
justify=
"center"
>
<el-button
round
auto-insert-space
@
click=
"$emit('update:modelValue', false)"
>
关闭
</el-button>
</el-row>
</
template
>
</el-dialog>
</template>
<
style
lang=
"scss"
scoped
>
.form-result
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
}
.form-result__score
{
padding
:
40px
;
white-space
:
nowrap
;
text-align
:
center
;
.t1
{
font-size
:
30px
;
color
:
var
(
--
main-color
);
}
}
</
style
>
src/modules/student/lab/views/Index.vue
浏览文件 @
a4686548
...
...
@@ -7,6 +7,7 @@ import { useGetCourseList } from '../composables/useGetCourseList'
import
{
upload
}
from
'@/utils/upload'
import
{
getExperiment
,
getExperimentRecord
,
uploadExperimentPicture
,
submitExperimentRecord
}
from
'../api'
import
dayjs
from
'dayjs'
import
{
saveAs
}
from
'file-saver'
const
Info
=
defineAsyncComponent
(()
=>
import
(
'../components/Info.vue'
))
const
Book
=
defineAsyncComponent
(()
=>
import
(
'../components/Book.vue'
))
...
...
@@ -17,6 +18,7 @@ const ReportDialog = defineAsyncComponent(() => import('../components/ReportDial
const
ReportFilePreview
=
defineAsyncComponent
(()
=>
import
(
'../components/ReportFilePreview.vue'
))
const
PrepareDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/PrepareDialog.vue'
))
const
ResultDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/ResultDialog.vue'
))
// const ReportPreview = defineAsyncComponent(() => import('../components/ReportPreview.vue'))
const
route
=
useRoute
()
...
...
@@ -178,7 +180,14 @@ function handleReportView() {
// 导出实验报告
function handleReportExport() {
console.log(1)
if (!detail) return
const fileName = `
$
{
detail
.
student
.
sno_number
}
_$
{
detail
.
student
.
name
}
_$
{
detail
.
experiment
.
name
}
_
实验报告
`
// 在线报告
if (experimentInfo?.report_upload_way === 2) {
console.log('在线报告导出')
} else {
saveAs(detail.file.url, fileName)
}
}
</
script
>
...
...
@@ -248,7 +257,12 @@ function handleReportExport() {
<el-button
type=
"primary"
@
click=
"handleReportView"
v-if=
"experimentInfo?.is_commit_report"
>
查看实验报告
</el-button
>
<el-button
type=
"primary"
@
click=
"handleReportExport"
v-if=
"detail?.status === 2"
>
导出实验报告
</el-button>
<el-button
type=
"primary"
@
click=
"handleReportExport"
v-if=
"detail?.status === 2 && experimentInfo?.is_commit_report"
>
导出实验报告
</el-button
>
</div>
</el-row>
</AppCard>
...
...
@@ -280,6 +294,11 @@ function handleReportExport() {
v-model=
"resultDialogVisible"
:data=
"experimentInfo"
v-if=
"resultDialogVisible && experimentInfo"
></ResultDialog>
<!-- 导出在线报告 -->
<!-- <template v-if="experimentInfo?.id">
<ReportPreview :id="experimentInfo?.id"></ReportPreview>
</template> -->
</template>
<
style
lang=
"scss"
scoped
>
...
...
src/modules/student/lab/views/ReportView.vue
浏览文件 @
a4686548
<
script
setup
>
import
ReportPreview
from
'../components/ReportPre
iv
ew.vue'
import
ReportPreview
from
'../components/ReportPre
vi
ew.vue'
</
script
>
<
template
>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论