Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
ba5b000e
提交
ba5b000e
authored
9月 01, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bug fixes
上级
9b56dabb
隐藏空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
170 行增加
和
8 行删除
+170
-8
package-lock.json
package-lock.json
+2
-2
favicon.ico
public/favicon.ico
+0
-0
video_poster.png
public/images/video_poster.png
+0
-0
DiscussDialog.vue
src/modules/admin/lab/discuss/components/DiscussDialog.vue
+1
-1
ScoreDialog.vue
src/modules/admin/lab/record/components/ScoreDialog.vue
+6
-1
ListItem.vue
src/modules/admin/lab/video/components/ListItem.vue
+5
-1
Result.vue
src/modules/student/lab/components/Result.vue
+6
-2
ResultScoreDialog.vue
src/modules/student/lab/components/ResultScoreDialog.vue
+136
-0
types.ts
src/modules/student/lab/types.ts
+2
-1
Index.vue
src/modules/student/lab/views/Index.vue
+12
-0
没有找到文件。
package-lock.json
浏览文件 @
ba5b000e
...
...
@@ -4662,7 +4662,7 @@
},
"node_modules/vue-tsc"
:
{
"version"
:
"0.40.5"
,
"resolved"
:
"https://registry.npm
mirror.com
/vue-tsc/-/vue-tsc-0.40.5.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/vue-tsc/-/vue-tsc-0.40.5.tgz"
,
"integrity"
:
"sha512-rQPyyqrQiDzc8a3YpAYUb27VQbU+NDewOJ7GJBiEIEcaSugMjDc6dtJijTHK32t8IgGPl6ybsJ9LIU9sZvixLA=="
,
"dev"
:
true
,
"dependencies"
:
{
...
...
@@ -8314,7 +8314,7 @@
},
"vue-tsc"
:
{
"version"
:
"0.40.5"
,
"resolved"
:
"https://registry.npm
mirror.com
/vue-tsc/-/vue-tsc-0.40.5.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/vue-tsc/-/vue-tsc-0.40.5.tgz"
,
"integrity"
:
"sha512-rQPyyqrQiDzc8a3YpAYUb27VQbU+NDewOJ7GJBiEIEcaSugMjDc6dtJijTHK32t8IgGPl6ybsJ9LIU9sZvixLA=="
,
"dev"
:
true
,
"requires"
:
{
...
...
public/favicon.ico
deleted
100644 → 0
浏览文件 @
9b56dabb
4.2 KB
public/images/video_poster.png
0 → 100644
浏览文件 @
ba5b000e
171.9 KB
src/modules/admin/lab/discuss/components/DiscussDialog.vue
浏览文件 @
ba5b000e
...
...
@@ -98,7 +98,7 @@ function handleSubmit() {
v-permission=
"'v1-teacher-discussion-comment'"
>
<el-form-item
prop=
"content"
>
<el-input
type=
"textarea"
v-model=
"form.content"
:autosize=
"
{ minRows: 4, maxRows: 6 }" />
<el-input
type=
"textarea"
v-model=
"form.content"
:autosize=
"
{ minRows: 4, maxRows: 6 }"
:maxlength="200"
/>
</el-form-item>
<el-row
justify=
"end"
>
<el-button
round
auto-insert-space
@
click=
"$emit('update:modelValue', false)"
>
取消
</el-button>
...
...
src/modules/admin/lab/record/components/ScoreDialog.vue
浏览文件 @
ba5b000e
...
...
@@ -76,7 +76,12 @@ function handleSubmit() {
</
script
>
<
template
>
<el-dialog
title=
"学生实验评分"
:close-on-click-modal=
"false"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-dialog
title=
"学生实验评分"
:close-on-click-modal=
"false"
width=
"700px"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-form
:rules=
"rules"
label-width=
"120px"
label-suffix=
":"
v-if=
"detail"
>
<el-row>
<el-col
:span=
"12"
>
...
...
src/modules/admin/lab/video/components/ListItem.vue
浏览文件 @
ba5b000e
...
...
@@ -10,7 +10,11 @@ defineProps<Props>()
<div
class=
"list-item"
>
<div
class=
"list-item-pic"
>
<router-link
:to=
"`/admin/lab/video/$
{data.id}`" target="_blank">
<el-image
:src=
"data.cover"
fit=
"cover"
/>
<el-image
:src=
"data.cover"
fit=
"cover"
>
<template
#
error
>
<img
src=
"/images/video_poster.png"
/>
</
template
>
</el-image>
<el-icon><VideoPlay
/></el-icon>
</router-link>
</div>
...
...
src/modules/student/lab/components/Result.vue
浏览文件 @
ba5b000e
<
script
setup
lang=
"ts"
>
import
type
{
ExperimentRecord
}
from
'../types'
import
type
{
ExperimentRecord
,
ExperimentRecordFile
}
from
'../types'
import
{
ElMessageBox
}
from
'element-plus'
import
ImageViewer
from
'@/components/ImageViewer.vue'
import
{
uploadExperimentPicture
}
from
'../api'
const
ResultScoreDialog
=
defineAsyncComponent
(()
=>
import
(
'./ResultScoreDialog.vue'
))
interface
Props
{
experiment_id
?:
string
...
...
@@ -14,6 +15,8 @@ const emit = defineEmits<{
}
>
()
const
detail
=
$ref
<
ExperimentRecord
>
(
inject
(
'detail'
))
const
dialogVisible
=
$ref
(
false
)
const
isEmpty
=
$computed
(()
=>
{
return
!
props
.
experiment_id
||
!
detail
})
...
...
@@ -45,7 +48,7 @@ function handleRemove(index: number) {
<div
class=
"result-score"
>
<h2>
我的成绩
</h2>
<template
v-if=
"detail.status === 2"
>
<p
class=
"t1"
>
{{
parseFloat
(
detail
.
score
)
}}
</p>
<p
class=
"t1"
@
click=
"dialogVisible = !dialogVisible"
>
{{
parseFloat
(
detail
.
score
)
}}
</p>
<p
class=
"t2"
>
批改讲师:
{{
detail
.
checker_user
.
real_name
}}
</p>
</
template
>
<
template
v-else
>
...
...
@@ -66,6 +69,7 @@ function handleRemove(index: number) {
</li>
</ul>
<ImageViewer
v-model=
"imageViewerVisible"
:index=
"imageViewerIndex"
:items=
"detail.pictures"
></ImageViewer>
<ResultScoreDialog
v-model=
"dialogVisible"
></ResultScoreDialog>
</template>
</template>
...
...
src/modules/student/lab/components/ResultScoreDialog.vue
0 → 100644
浏览文件 @
ba5b000e
<
script
setup
lang=
"ts"
>
import
type
{
ExperimentRecord
}
from
'../types'
import
{
Document
}
from
'@element-plus/icons-vue'
const
detail
=
$ref
<
ExperimentRecord
>
(
inject
(
'detail'
))
const
score
=
$computed
<
number
>
(()
=>
{
const
result
=
((
detail
.
score_details
.
operate
||
0
)
+
(
detail
.
score_details
.
result
||
0
)
+
(
detail
.
score_details
.
file
||
0
))
/
3
return
parseFloat
(
result
.
toFixed
(
2
))
})
</
script
>
<
template
>
<el-dialog
title=
"实验成绩详情"
:close-on-click-modal=
"false"
>
<el-form
label-width=
"120px"
label-suffix=
":"
v-if=
"detail"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验名称"
>
{{
detail
.
experiment
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"实验课程名称"
>
{{
detail
.
course
.
name
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"学生姓名"
>
{{
detail
.
student
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"学生学号"
>
{{
detail
.
student
.
sno_number
}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属专业"
>
{{
detail
.
student
.
specialty
.
name
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"所属班级"
>
{{
detail
.
student
.
specialty
.
name
}}
</el-form-item>
</el-col>
</el-row>
<el-form-item
label=
"实验成绩"
class=
"form-item-score"
>
<el-form
ref=
"formRef"
hide-required-asterisk
inline
label-position=
"top"
style=
"padding: 5px 0 20px"
>
<el-form-item
label=
"实验操作"
prop=
"operate"
>
<el-input-number
:min=
"1"
:max=
"100"
:controls=
"false"
step-strictly
disabled
v-model=
"detail.score_details.operate"
/>
</el-form-item>
<el-form-item
label=
"实验结果"
prop=
"result"
>
<el-input-number
:min=
"1"
:max=
"100"
:controls=
"false"
step-strictly
disabled
v-model=
"detail.score_details.result"
/>
</el-form-item>
<el-form-item
label=
"实验报告"
prop=
"file"
>
<el-input-number
:min=
"1"
:max=
"100"
:controls=
"false"
step-strictly
disabled
v-model=
"detail.score_details.file"
/>
</el-form-item>
<el-form-item
label=
"综合实验成绩"
>
<el-input-number
:min=
"0"
:max=
"100"
:controls=
"false"
disabled
v-model=
"score"
/>
</el-form-item>
</el-form>
</el-form-item>
<el-form-item
label=
"实验报告文件"
>
<div
v-if=
"detail.file"
>
<a
:href=
"detail.file.url"
target=
"_blank"
class=
"file-item"
>
<el-icon><Document
/></el-icon>
{{
detail
.
file
.
name
}}
</a>
</div>
</el-form-item>
<!--
<el-form-item
label=
"实验过程截图"
>
<ul
class=
"picture-list"
>
<li
v-for=
"item in pictures"
:key=
"item.url"
>
<p
class=
"t1"
>
<a
:href=
"item.url"
target=
"_blank"
>
{{
item
.
name
}}
</a>
</p>
<p
class=
"t2"
>
截图时间:
{{
item
.
upload_time
}}
</p>
</li>
</ul>
</el-form-item>
-->
</el-form>
</el-dialog>
</
template
>
<
style
lang=
"scss"
scoped
>
.file-item
{
display
:
flex
;
align-items
:
center
;
color
:
var
(
--
main-color
);
.el-icon
{
margin-right
:
5px
;
}
}
.picture-list
{
width
:
100%
;
li
{
display
:
flex
;
justify-content
:
space-between
;
}
a
{
color
:
var
(
--
main-color
);
}
.t1
{
flex
:
1
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
overflow
:
hidden
;
}
}
.form-item-score
{
padding-top
:
10px
;
background-color
:
#f8f9fb
;
border-radius
:
16px
;
:deep
(
.el-form-item__label
)
{
text-align
:
center
;
}
.el-input-number
{
width
:
100px
;
}
}
</
style
>
src/modules/student/lab/types.ts
浏览文件 @
ba5b000e
...
...
@@ -92,7 +92,7 @@ export interface ExperimentRecord {
file
:
ExperimentRecordFile
checker_id
:
string
check_time
:
string
score_details
:
string
score_details
:
{
operate
:
number
;
result
:
number
;
file
:
number
}
score
:
string
status
:
0
|
1
|
2
checker_user
:
UserType
...
...
@@ -114,6 +114,7 @@ export interface ExperimentRecordFile {
export
interface
ExperimentRecordStudent
{
id
:
string
name
:
string
sno_number
:
string
specialty
:
{
id
:
string
name
:
string
...
...
src/modules/student/lab/views/Index.vue
浏览文件 @
ba5b000e
...
...
@@ -28,6 +28,18 @@ const experimentList = $computed(() => {
const
course
=
courses
.
value
.
find
((
item
:
CourseType
)
=>
item
.
id
===
form
.
course_id
)
return
course
?.
experiments
||
[]
})
watchEffect
(()
=>
{
if
(
!
form
.
course_id
&&
courses
.
value
.
length
)
{
const
[
first
]
=
courses
.
value
form
.
course_id
=
first
.
id
}
if
(
!
form
.
experiment_id
&&
experimentList
.
length
)
{
const
[
first
]
=
experimentList
form
.
experiment_id
=
first
.
id
}
})
let
detail
=
$ref
<
ExperimentRecord
>
()
provide
(
'detail'
,
$$
(
detail
))
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论