Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
center-resource
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
center-resource
Commits
e9311674
提交
e9311674
authored
7月 22, 2022
作者:
matian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:接口对接以及页面优化
上级
1238949e
显示空白字符变更
内嵌
并排
正在显示
25 个修改的文件
包含
421 行增加
和
133 行删除
+421
-133
menus.ts
src/assets/menus.ts
+2
-2
AppList.vue
src/components/base/AppList.vue
+1
-0
AddClass.vue
src/modules/admin/class/components/AddClass.vue
+2
-2
AddStudentDialog.vue
src/modules/admin/class/components/AddStudentDialog.vue
+2
-0
ClassStudents.vue
src/modules/admin/class/components/ClassStudents.vue
+2
-0
RelatedTerm.vue
src/modules/admin/class/components/RelatedTerm.vue
+3
-2
List.vue
src/modules/admin/class/views/List.vue
+1
-1
AddPro.vue
src/modules/admin/pro/components/AddPro.vue
+2
-3
SemesterCourse.vue
src/modules/admin/semester/components/SemesterCourse.vue
+10
-1
List.vue
src/modules/admin/semester/views/List.vue
+1
-1
AddStaff.vue
src/modules/admin/staff/components/AddStaff.vue
+5
-4
List.vue
src/modules/admin/staff/views/List.vue
+1
-1
AddStudent.vue
src/modules/admin/student/components/AddStudent.vue
+5
-3
ImportStudent.vue
src/modules/admin/student/components/ImportStudent.vue
+2
-2
List.vue
src/modules/admin/student/views/List.vue
+2
-2
ViewCourseChapter.vue
src/modules/course/my/components/ViewCourseChapter.vue
+10
-2
ViewCourseInfoTop.vue
src/modules/course/my/components/ViewCourseInfoTop.vue
+16
-3
ViewDetailsVideo.vue
src/modules/course/my/components/ViewDetailsVideo.vue
+14
-6
ViewDetails.vue
src/modules/course/my/views/ViewDetails.vue
+28
-8
api.ts
src/modules/teach/exam/api.ts
+19
-4
List.vue
src/modules/teach/exam/views/List.vue
+45
-18
StudentList.vue
src/modules/teach/exam/views/StudentList.vue
+76
-20
api.ts
src/modules/teach/work/api.ts
+15
-3
CheckWork.vue
src/modules/teach/work/components/CheckWork.vue
+77
-25
List.vue
src/modules/teach/work/views/List.vue
+80
-20
没有找到文件。
src/assets/menus.ts
浏览文件 @
e9311674
...
@@ -174,13 +174,13 @@ export const menus: IMenuItem[] = [
...
@@ -174,13 +174,13 @@ export const menus: IMenuItem[] = [
path
:
'/teach/qa'
path
:
'/teach/qa'
},
},
{
{
tag
:
'v1-
backend-lectur
er-list'
,
tag
:
'v1-
teaching-paper-pap
er-list'
,
icon
:
EditPen
,
icon
:
EditPen
,
name
:
'批改试卷'
,
name
:
'批改试卷'
,
path
:
'/teach/exam'
path
:
'/teach/exam'
},
},
{
{
tag
:
'v1-
backend-lecturer
-list'
,
tag
:
'v1-
teaching-job
-list'
,
icon
:
EditPen
,
icon
:
EditPen
,
name
:
'批改大作业'
,
name
:
'批改大作业'
,
path
:
'/teach/work'
path
:
'/teach/work'
...
...
src/components/base/AppList.vue
浏览文件 @
e9311674
...
@@ -156,6 +156,7 @@ defineExpose({ refetch, tableRef, params })
...
@@ -156,6 +156,7 @@ defineExpose({ refetch, tableRef, params })
clearable
clearable
@
change=
"search"
@
change=
"search"
v-if=
"item.type === 'select'"
v-if=
"item.type === 'select'"
style=
"width: 200px"
>
>
<el-option
<el-option
:label=
"option[item.labelKey] || option.label"
:label=
"option[item.labelKey] || option.label"
...
...
src/modules/admin/class/components/AddClass.vue
浏览文件 @
e9311674
...
@@ -138,10 +138,10 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
...
@@ -138,10 +138,10 @@ getProList({ name: '', 'per-page': '100' }).then((res: any) => {
<el-dialog
:model-value=
"isShowClassDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-dialog
:model-value=
"isShowClassDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form-item
label=
"班级代码:"
prop=
"code"
>
<el-form-item
label=
"班级代码:"
prop=
"code"
>
<el-input
v-model=
"form.code"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.code"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"班级名称:"
prop=
"name"
>
<el-form-item
label=
"班级名称:"
prop=
"name"
>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"所属部门/学校:"
prop=
"organ_id"
>
<el-form-item
label=
"所属部门/学校:"
prop=
"organ_id"
>
<el-select
<el-select
...
...
src/modules/admin/class/components/AddStudentDialog.vue
浏览文件 @
e9311674
...
@@ -87,8 +87,10 @@ const handleCancel = () => {
...
@@ -87,8 +87,10 @@ const handleCancel = () => {
style=
"margin-top: 30px"
style=
"margin-top: 30px"
@
selection-change=
"handleSelectChange"
@
selection-change=
"handleSelectChange"
>
>
<template
#
header-aside
>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
v-permission=
"'v1-learning-class-add-students'"
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
v-permission=
"'v1-learning-class-add-students'"
>
关联选择学生
</el-button
>
关联选择学生
</el-button
></
template
>
>
</AppList>
</AppList>
</div>
</div>
...
...
src/modules/admin/class/components/ClassStudents.vue
浏览文件 @
e9311674
...
@@ -86,9 +86,11 @@ const handleRefresh = () => {
...
@@ -86,9 +86,11 @@ const handleRefresh = () => {
<el-descriptions-item
label=
"入学年份:"
>
{{
classInfo
?.
start_year_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"入学年份:"
>
{{
classInfo
?.
start_year_name
}}
</el-descriptions-item>
</el-descriptions>
</el-descriptions>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
style=
"margin-top: 30px"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
style=
"margin-top: 30px"
>
<template
#
header-aside
>
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
v-permission=
"'v1-learning-class-add-students'"
<el-button
type=
"primary"
round
@
click=
"handleAddStu"
v-permission=
"'v1-learning-class-add-students'"
>
添加学生
</el-button
>
添加学生
</el-button
>
>
</
template
>
<
template
#
table-operate=
"{ row }"
>
<
template
#
table-operate=
"{ row }"
>
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
...
...
src/modules/admin/class/components/RelatedTerm.vue
浏览文件 @
e9311674
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
AddTermDialog
from
'./AddTermDialog.vue'
import
AddTermDialog
from
'./AddTermDialog.vue'
import
AddSemester
from
'../../semester/components/AddSemester.vue'
import
AddSemester
from
'../../semester/components/AddSemester.vue'
...
@@ -34,7 +34,6 @@ const listOptions = $computed(() => {
...
@@ -34,7 +34,6 @@ const listOptions = $computed(() => {
return
{
list
:
data
.
list
,
total
:
data
.
total
}
return
{
list
:
data
.
list
,
total
:
data
.
total
}
}
}
},
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学期名称'
,
prop
:
'name'
,
align
:
'center'
},
...
@@ -89,7 +88,9 @@ const handleFresh = () => {
...
@@ -89,7 +88,9 @@ const handleFresh = () => {
<el-descriptions-item
label=
"入学年份:"
>
{{
classInfo
?.
start_year_name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"入学年份:"
>
{{
classInfo
?.
start_year_name
}}
</el-descriptions-item>
</el-descriptions>
</el-descriptions>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
style=
"margin-top: 30px"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
style=
"margin-top: 30px"
>
<template
#
header-aside
>
<el-button
type=
"primary"
round
@
click=
"handleAddTerm"
>
添加学期
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleAddTerm"
>
添加学期
</el-button>
</
template
>
<
template
#
table-operate=
"{ row }"
>
<
template
#
table-operate=
"{ row }"
>
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleDetail(row)"
>
查看
</el-link>
...
...
src/modules/admin/class/views/List.vue
浏览文件 @
e9311674
...
@@ -24,7 +24,7 @@ const listOptions = $computed(() => {
...
@@ -24,7 +24,7 @@ const listOptions = $computed(() => {
remote
:
{
httpRequest
:
getClassList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
remote
:
{
httpRequest
:
getClassList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'班级名称:'
,
placeholder
:
'班级名称'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'班级名称:'
,
placeholder
:
'班级名称'
},
{
type
:
'select'
,
slots
:
'filter-department'
}
{
type
:
'select'
,
prop
:
'organ_id'
,
slots
:
'filter-department'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
...
...
src/modules/admin/pro/components/AddPro.vue
浏览文件 @
e9311674
...
@@ -87,7 +87,6 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
...
@@ -87,7 +87,6 @@ const handleConfirm = async (formEl: FormInstance | undefined) => {
if
(
props
.
isEdit
===
'2'
||
props
.
isEdit
===
'1'
)
{
if
(
props
.
isEdit
===
'2'
||
props
.
isEdit
===
'1'
)
{
const
params
:
any
=
{
id
:
props
.
id
}
const
params
:
any
=
{
id
:
props
.
id
}
getProDetail
(
params
).
then
((
res
:
any
)
=>
{
getProDetail
(
params
).
then
((
res
:
any
)
=>
{
console
.
log
(
res
)
Object
.
keys
(
form
).
forEach
(
key
=>
{
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
form
[
key
]
=
res
.
data
[
key
]
})
})
...
@@ -98,10 +97,10 @@ if (props.isEdit === '2' || props.isEdit === '1') {
...
@@ -98,10 +97,10 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-dialog
:model-value=
"isShowProDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-dialog
:model-value=
"isShowProDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form
:model=
"form"
label-position=
"right"
label-width=
"auto"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form-item
label=
"专业代码:"
prop=
"code"
>
<el-form-item
label=
"专业代码:"
prop=
"code"
>
<el-input
v-model=
"form.code"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.code"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"专业名称:"
prop=
"name"
>
<el-form-item
label=
"专业名称:"
prop=
"name"
>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"专业类别:"
prop=
"category"
>
<el-form-item
label=
"专业类别:"
prop=
"category"
>
<el-select
v-model=
"form.category"
placeholder=
"请选择专业类别"
:disabled=
"props.isEdit === '2'"
>
<el-select
v-model=
"form.category"
placeholder=
"请选择专业类别"
:disabled=
"props.isEdit === '2'"
>
...
...
src/modules/admin/semester/components/SemesterCourse.vue
浏览文件 @
e9311674
...
@@ -36,7 +36,16 @@ const listOptions = $computed(() => {
...
@@ -36,7 +36,16 @@ const listOptions = $computed(() => {
{
label
:
'选课类型'
,
prop
:
'elective_type_name'
,
align
:
'center'
},
{
label
:
'选课类型'
,
prop
:
'elective_type_name'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'classification_name'
,
align
:
'center'
},
{
label
:
'课程分类'
,
prop
:
'classification_name'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'credit'
,
align
:
'center'
},
{
label
:
'课程学分'
,
prop
:
'credit'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'enter_month'
,
align
:
'center'
},
{
label
:
'讲师'
,
prop
:
'lecturers_name'
,
align
:
'center'
,
computed
(
row
:
any
)
{
if
(
row
.
row
.
lecturers_name
.
length
)
{
return
row
.
row
.
lecturers_name
.
toString
()
}
}
},
{
label
:
'更新时间'
,
prop
:
'updated_time'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'updated_time'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
,
minWidth
:
'200'
,
fixed
:
'right'
}
]
]
...
...
src/modules/admin/semester/views/List.vue
浏览文件 @
e9311674
...
@@ -20,7 +20,7 @@ const listOptions = $computed(() => {
...
@@ -20,7 +20,7 @@ const listOptions = $computed(() => {
remote
:
{
httpRequest
:
getSemList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
remote
:
{
httpRequest
:
getSemList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学期名称:'
,
placeholder
:
'学期名称'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学期名称:'
,
placeholder
:
'学期名称'
},
{
type
:
'select'
,
slots
:
'filter-department'
}
{
type
:
'select'
,
prop
:
'organ_id'
,
slots
:
'filter-department'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
...
...
src/modules/admin/staff/components/AddStaff.vue
浏览文件 @
e9311674
...
@@ -56,7 +56,9 @@ const rules = reactive<FormRules>({
...
@@ -56,7 +56,9 @@ const rules = reactive<FormRules>({
email
:
[{
required
:
true
,
message
:
'请输入邮箱'
,
trigger
:
'blur'
}],
email
:
[{
required
:
true
,
message
:
'请输入邮箱'
,
trigger
:
'blur'
}],
status
:
[{
required
:
true
,
message
:
'请选择生效状态'
,
trigger
:
'change'
}]
status
:
[{
required
:
true
,
message
:
'请选择生效状态'
,
trigger
:
'change'
}]
})
})
if
(
userStore
.
roles
[
0
].
name
!==
'超级管理员'
)
{
form
.
organ_id
=
userStore
.
organization
?.
id
}
// 取消
// 取消
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowStaffDialog'
,
false
)
emit
(
'update:isShowStaffDialog'
,
false
)
...
@@ -120,16 +122,15 @@ if (props.isEdit === '2' || props.isEdit === '1') {
...
@@ -120,16 +122,15 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-input
:placeholder=
"userStore.organization?.name"
v-model=
"form.organ_id_name"
v-else
disabled
>
</el-input>
<el-input
:placeholder=
"userStore.organization?.name"
v-model=
"form.organ_id_name"
v-else
disabled
>
</el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"姓名:"
prop=
"name"
>
<el-form-item
label=
"姓名:"
prop=
"name"
>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"性别:"
prop=
"gender"
>
<el-form-item
label=
"性别:"
prop=
"gender"
>
<el-radio-group
v-model=
"form.gender"
:disabled=
"props.isEdit === '2'"
>
<el-radio-group
v-model=
"form.gender"
:disabled=
"props.isEdit === '2'"
>
<el-radio
v-for=
"(item, index) in sexList"
:key=
"index"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
v-for=
"(item, index) in sexList"
:key=
"index"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
label=
"手机号:"
prop=
"mobile"
>
<el-form-item
label=
"手机号:"
prop=
"mobile"
>
<el-input
v-model=
"form.mobile"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.mobile"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色类型:"
prop=
"role"
>
<el-form-item
label=
"角色类型:"
prop=
"role"
>
<el-radio-group
v-model=
"form.role"
:disabled=
"props.isEdit === '2'"
>
<el-radio-group
v-model=
"form.role"
:disabled=
"props.isEdit === '2'"
>
...
...
src/modules/admin/staff/views/List.vue
浏览文件 @
e9311674
...
@@ -28,7 +28,7 @@ const listOptions = $computed(() => {
...
@@ -28,7 +28,7 @@ const listOptions = $computed(() => {
},
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'姓名:'
,
placeholder
:
'姓名'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'姓名:'
,
placeholder
:
'姓名'
},
{
type
:
'select'
,
slots
:
'filter-department'
}
{
type
:
'select'
,
prop
:
'organ_id'
,
slots
:
'filter-department'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
...
...
src/modules/admin/student/components/AddStudent.vue
浏览文件 @
e9311674
...
@@ -131,7 +131,6 @@ const handleClassList = () => {
...
@@ -131,7 +131,6 @@ const handleClassList = () => {
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
if
(
!
formEl
)
return
if
(
!
formEl
)
return
await
formEl
.
validate
(
valid
=>
{
await
formEl
.
validate
(
valid
=>
{
console
.
log
(
valid
)
if
(
valid
)
{
if
(
valid
)
{
if
(
props
.
isEdit
===
'0'
)
{
if
(
props
.
isEdit
===
'0'
)
{
form
.
organ_id
=
form
.
organ_id
||
userStore
.
organization
?.
id
form
.
organ_id
=
form
.
organ_id
||
userStore
.
organization
?.
id
...
@@ -166,6 +165,9 @@ if (props.isEdit === '2' || props.isEdit === '1') {
...
@@ -166,6 +165,9 @@ if (props.isEdit === '2' || props.isEdit === '1') {
Object
.
keys
(
form
).
forEach
(
key
=>
{
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
form
[
key
]
=
res
.
data
[
key
]
})
})
if
(
res
.
data
.
specialty_id
===
'0'
)
{
form
.
specialty_id
=
''
}
})
})
}
}
</
script
>
</
script
>
...
@@ -173,10 +175,10 @@ if (props.isEdit === '2' || props.isEdit === '1') {
...
@@ -173,10 +175,10 @@ if (props.isEdit === '2' || props.isEdit === '1') {
<el-dialog
:model-value=
"isShowAddDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-dialog
:model-value=
"isShowAddDialog"
draggable
:before-close=
"handleCancel"
:title=
"props.title"
width=
"30%"
>
<el-form
:model=
"form"
label-width=
"120px"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form
:model=
"form"
label-width=
"120px"
:rules=
"rules"
ref=
"ruleFormRef"
>
<el-form-item
label=
"学号:"
prop=
"sno_number"
>
<el-form-item
label=
"学号:"
prop=
"sno_number"
>
<el-input
v-model=
"form.sno_number"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.sno_number"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"姓名:"
prop=
"name"
>
<el-form-item
label=
"姓名:"
prop=
"name"
>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'"
></el-input>
<el-input
v-model=
"form.name"
:disabled=
"props.isEdit === '2'
|| props.isEdit === '1'
"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
"性别:"
prop=
"gender"
>
<el-form-item
label=
"性别:"
prop=
"gender"
>
...
...
src/modules/admin/student/components/ImportStudent.vue
浏览文件 @
e9311674
...
@@ -68,8 +68,8 @@ const handleSubmitUpload = () => {
...
@@ -68,8 +68,8 @@ const handleSubmitUpload = () => {
<div
style=
"margin-bottom: 10px; text-align: center"
>
<div
style=
"margin-bottom: 10px; text-align: center"
>
导入模板下载:
<a
导入模板下载:
<a
href=
"https://webapp-pub.ezijing.com/center_resource/%E5%AD%A6%E7%94%9F%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx"
href=
"https://webapp-pub.ezijing.com/center_resource/%E5%AD%A6%E7%94%9F%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx"
download=
"
教师
模板"
download=
"
学生
模板"
><el-link
type=
"primary"
>
teacher_import
.xlsx
</el-link></a
><el-link
type=
"primary"
>
学生模板
.xlsx
</el-link></a
>
>
</div>
</div>
...
...
src/modules/admin/student/views/List.vue
浏览文件 @
e9311674
...
@@ -20,14 +20,14 @@ const listOptions = {
...
@@ -20,14 +20,14 @@ const listOptions = {
remote
:
{
httpRequest
:
getStudentList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
remote
:
{
httpRequest
:
getStudentList
,
params
:
{
name
:
''
,
organ_id
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
},
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名:'
,
placeholder
:
'学生姓名'
},
{
type
:
'select'
,
slots
:
'filter-department'
}
{
type
:
'select'
,
prop
:
'organ_id'
,
slots
:
'filter-department'
}
],
],
columns
:
[
columns
:
[
{
type
:
'selection'
},
{
type
:
'selection'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'性别'
,
prop
:
'gender'
,
align
:
'center'
},
{
label
:
'性别'
,
prop
:
'gender
_name
'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birthday'
,
align
:
'center'
},
{
label
:
'出生年月'
,
prop
:
'birthday'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province_name'
,
align
:
'center'
},
{
label
:
'省'
,
prop
:
'province_name'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city_name'
,
align
:
'center'
},
{
label
:
'市'
,
prop
:
'city_name'
,
align
:
'center'
},
...
...
src/modules/course/my/components/ViewCourseChapter.vue
浏览文件 @
e9311674
...
@@ -31,11 +31,15 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
...
@@ -31,11 +31,15 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
margin-left
:
20px
;
margin-left
:
20px
;
height
:
fit-content
;
height
:
fit-content
;
border-radius
:
10px
;
border-radius
:
10px
;
height
:
800px
;
overflow-y
:
auto
;
&
.active-black
{
&
.active-black
{
background
:
#1f1e24
;
background
:
#1f1e24
;
border-radius
:
0px
;
border-radius
:
0px
;
margin-left
:
0px
;
margin-left
:
0px
;
overflow-y
:
auto
;
height
:
506px
;
.chapter-list
{
.chapter-list
{
.item
{
.item
{
...
@@ -44,13 +48,14 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
...
@@ -44,13 +48,14 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
}
}
}
}
.title
{
.title
{
width
:
271px
;
margin
:
0
auto
;
margin
:
0
auto
;
font-size
:
24px
;
font-size
:
24px
;
font-weight
:
500
;
font-weight
:
500
;
line-height
:
52px
;
line-height
:
52px
;
color
:
#ffffff
;
color
:
#ffffff
;
text-align
:
center
;
text-align
:
center
;
word-break
:
normal
;
word-wrap
:
break-all
;
}
}
.line
{
.line
{
width
:
85%
;
width
:
85%
;
...
@@ -59,7 +64,7 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
...
@@ -59,7 +64,7 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
}
}
.chapter-list
{
.chapter-list
{
margin
:
0
auto
;
margin
:
0
auto
;
padding
:
0
23px
70
px
;
padding
:
0
23px
11
px
;
.item
:last-child
{
.item
:last-child
{
border-bottom
:
none
;
border-bottom
:
none
;
}
}
...
@@ -86,8 +91,11 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
...
@@ -86,8 +91,11 @@ const id = route.query.id ? route.query.id : (route.params.courseId as string)
margin-bottom
:
20px
;
margin-bottom
:
20px
;
margin-top
:
6px
;
margin-top
:
6px
;
cursor
:
pointer
;
cursor
:
pointer
;
word-break
:
break-all
;
}
}
.sections
{
.sections
{
width
:
100px
;
font-size
:
14px
;
font-size
:
14px
;
line-height
:
100%
;
line-height
:
100%
;
color
:
#ffffff
;
color
:
#ffffff
;
...
...
src/modules/course/my/components/ViewCourseInfoTop.vue
浏览文件 @
e9311674
...
@@ -159,13 +159,26 @@ const basicInfo = computed((): IBasicInfo[] => {
...
@@ -159,13 +159,26 @@ const basicInfo = computed((): IBasicInfo[] => {
display
:
flex
;
display
:
flex
;
justify-content
:
space-around
;
justify-content
:
space-around
;
flex-wrap
:
wrap
;
flex-wrap
:
wrap
;
.item
:nth-child
(
5
)
{
width
:
20%
;
}
.item
:nth-child
(
10
)
{
width
:
20%
;
}
.item
:nth-child
(
1
)
{
width
:
20%
;
}
.item
:nth-child
(
6
)
{
width
:
20%
;
}
.item
{
.item
{
width
:
15%
;
width
:
15%
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
height
:
fit-content
;
height
:
fit-content
;
flex-wrap
:
nowrap
;
margin-left
:
2%
;
margin-left
:
2%
;
margin-bottom
:
10
px
;
margin-bottom
:
32
px
;
.item-right
{
.item-right
{
margin-left
:
15px
;
margin-left
:
15px
;
.label
{
.label
{
...
@@ -175,10 +188,10 @@ const basicInfo = computed((): IBasicInfo[] => {
...
@@ -175,10 +188,10 @@ const basicInfo = computed((): IBasicInfo[] => {
margin-bottom
:
8px
;
margin-bottom
:
8px
;
}
}
.value
{
.value
{
font-size
:
16px
;
font-size
:
14px
;
font-weight
:
500
;
line-height
:
100%
;
line-height
:
100%
;
color
:
#333333
;
color
:
#333333
;
font-family
:
Source
Han
Sans
CN
;
}
}
}
}
}
}
...
...
src/modules/course/my/components/ViewDetailsVideo.vue
浏览文件 @
e9311674
...
@@ -53,7 +53,8 @@ const changeVideo = (index: number) => {
...
@@ -53,7 +53,8 @@ const changeVideo = (index: number) => {
<AppVideoPlayer
:options=
"videoOptions"
></AppVideoPlayer>
<AppVideoPlayer
:options=
"videoOptions"
></AppVideoPlayer>
</div>
</div>
</div>
</div>
<div
style=
"margin-top: 10px"
>
本小节视频资源:
</div>
<div
style=
"margin-top: 20px"
>
本小节视频资源:
</div>
<div
class=
"cover-list"
>
<div
class=
"cover-box"
>
<div
class=
"cover-box"
>
<div
<div
class=
"cover-img"
class=
"cover-img"
...
@@ -67,19 +68,26 @@ const changeVideo = (index: number) => {
...
@@ -67,19 +68,26 @@ const changeVideo = (index: number) => {
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.cover-list
{
max-width
:
1200px
;
overflow-x
:
auto
;
}
.cover-box
{
.cover-box
{
display
:
flex
;
display
:
flex
;
justify-content
:
flex-start
;
margin-bottom
:
30px
;
margin-bottom
:
30px
;
}
}
.cover-img
{
.cover-img
{
width
:
200px
;
min-
width
:
200px
;
height
:
100px
;
min-
height
:
100px
;
background-size
:
cover
;
background-size
:
cover
;
margin-right
:
20px
;
margin
-top
:
20px
;
margin
:
20px
10px
0
;
cursor
:
pointer
;
cursor
:
pointer
;
box-sizing
:
border-box
;
.border
{
.border
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
...
@@ -93,7 +101,7 @@ const changeVideo = (index: number) => {
...
@@ -93,7 +101,7 @@ const changeVideo = (index: number) => {
}
}
.cover-name
{
.cover-name
{
width
:
100%
;
width
:
100%
;
height
:
30px
;
//
height: 30px;
background
:
#aa1941
;
background
:
#aa1941
;
text-align
:
center
;
text-align
:
center
;
line-height
:
30px
;
line-height
:
30px
;
...
...
src/modules/course/my/views/ViewDetails.vue
浏览文件 @
e9311674
...
@@ -124,7 +124,8 @@ const listOptions = computed(() => {
...
@@ -124,7 +124,8 @@ const listOptions = computed(() => {
{
label
:
'试卷名称'
,
prop
:
'paper_title'
},
{
label
:
'试卷名称'
,
prop
:
'paper_title'
},
{
label
:
'总分'
,
prop
:
'paper_total_score'
},
{
label
:
'总分'
,
prop
:
'paper_total_score'
},
{
label
:
'及格分数'
,
prop
:
'pass_score'
},
{
label
:
'及格分数'
,
prop
:
'pass_score'
},
{
label
:
'更新时间'
,
prop
:
'updated_at'
}
{
label
:
'更新时间'
,
prop
:
'updated_at'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
],
data
:
resourceData
.
exam
data
:
resourceData
.
exam
}
}
...
@@ -211,18 +212,28 @@ watch(
...
@@ -211,18 +212,28 @@ watch(
router
.
go
(
0
)
router
.
go
(
0
)
}
}
)
)
const
handleExamDetail
=
(
row
:
any
)
=>
{
window
.
open
(
`https://qa-center.ezijing.com/paper/detail/
${
row
.
id
}
`
)
}
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"查阅课程"
>
<AppCard
title=
"查阅课程"
>
<div
class=
"chapter-box"
>
<div
class=
"chapter-box"
>
<div
class=
"title"
>
{{
chapterDetails
?.
name
}}
</div>
<div
class=
"title"
>
{{
chapterDetails
?.
name
}}
</div>
<div
class=
"chapter-content"
>
<div
class=
"chapter-content"
>
<div
class=
"content-
left
"
>
<div
class=
"content-
top
"
>
<ViewDetailsVideo
<ViewDetailsVideo
v-if=
"Object.keys(resourceData.videoData).length"
v-if=
"Object.keys(resourceData.videoData).length"
:data=
"resourceData.videoData"
:data=
"resourceData.videoData"
></ViewDetailsVideo>
></ViewDetailsVideo>
<el-empty
description=
"暂无数据"
v-else
/>
<el-empty
style=
"max-width: 900px; min-width: 900px"
description=
"暂无数据"
v-else
/>
<ViewCourseChapter
:isBlack=
"true"
:data=
"chapterTree"
:style=
"Object.keys(resourceData.videoData).length ? 'margin-left: -300px' : ''"
></ViewCourseChapter>
</div>
<div
class=
"content-bottom"
>
<el-tabs
:lazy=
"true"
v-model=
"activeName"
class=
"demo-tabs"
>
<el-tabs
:lazy=
"true"
v-model=
"activeName"
class=
"demo-tabs"
>
<el-tab-pane
label=
"课件"
name=
"1"
>
<el-tab-pane
label=
"课件"
name=
"1"
>
<PreviewFiles
v-for=
"item in resourceData.courseware"
:key=
"item.id"
:url=
"item.url"
></PreviewFiles>
<PreviewFiles
v-for=
"item in resourceData.courseware"
:key=
"item.id"
:url=
"item.url"
></PreviewFiles>
...
@@ -237,10 +248,18 @@ watch(
...
@@ -237,10 +248,18 @@ watch(
<el-empty
description=
"暂无数据"
v-if=
"!resourceData.data.length"
/>
<el-empty
description=
"暂无数据"
v-if=
"!resourceData.data.length"
/>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"作业"
name=
"4"
>
<el-tab-pane
label=
"作业"
name=
"4"
>
<AppList
v-bind=
"homeworkOptions"
></AppList>
<AppList
v-bind=
"homeworkOptions"
>
<template
#
table-operate=
"
{ row }">
<el-link
type=
"primary"
@
click=
"handleExamDetail(row)"
>
进入
</el-link>
</
template
>
</AppList>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"考试 / 测验"
name=
"5"
>
<el-tab-pane
label=
"考试 / 测验"
name=
"5"
>
<AppList
v-bind=
"listOptions"
></AppList>
<AppList
v-bind=
"listOptions"
>
<
template
#
table-operate=
"{ row }"
>
<el-link
type=
"primary"
@
click=
"handleExamDetail(row)"
>
进入
</el-link>
</
template
>
</AppList>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"直播"
name=
"6"
>
<el-tab-pane
label=
"直播"
name=
"6"
>
<AppList
v-bind=
"liveOptions"
>
<AppList
v-bind=
"liveOptions"
>
...
@@ -251,7 +270,6 @@ watch(
...
@@ -251,7 +270,6 @@ watch(
</el-tab-pane>
</el-tab-pane>
</el-tabs>
</el-tabs>
</div>
</div>
<ViewCourseChapter
:isBlack=
"true"
:data=
"chapterTree"
></ViewCourseChapter>
</div>
</div>
</div>
</div>
</AppCard>
</AppCard>
...
@@ -264,9 +282,11 @@ watch(
...
@@ -264,9 +282,11 @@ watch(
color
:
#333333
;
color
:
#333333
;
}
}
.chapter-content
{
.chapter-content
{
.content-top
{
display
:
flex
;
display
:
flex
;
.content-left
{
}
width
:
900px
;
.content-bottom
{
max-width
:
1200px
;
}
}
}
}
}
}
...
...
src/modules/teach/exam/api.ts
浏览文件 @
e9311674
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
// 获取试卷列表
export
function
getProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getPaperList
(
params
?:
{
course_id
?:
string
;
paper_name
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/psp/backend/video/index'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/teaching/paper/paper-list'
,
{
params
})
}
// 搜索条件
export
function
getSearchList
(
params
?:
{
type
:
string
;
search_id
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/teaching/paper/search-list'
,
{
params
})
}
// 学员试卷列表
export
function
getPaperStuList
(
params
?:
{
course_id
?:
string
paper_id
?:
string
paper_use
?:
string
class_id
?:
string
student_id
?:
string
page
?:
number
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/resource/v1/teaching/paper/list'
,
{
params
})
}
}
// /**
// /**
// * 获取试卷详情
// * 获取试卷详情
// */
// */
...
...
src/modules/teach/exam/views/List.vue
浏览文件 @
e9311674
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getPro
List } from '../api'
import
{
getPaperList
,
getSearch
List
}
from
'../api'
// import { useMapStore } from '@/stores/map'
// import { useMapStore } from '@/stores/map'
// const store = useMapStore()
// const store = useMapStore()
const
router
=
useRouter
()
const
router
=
useRouter
()
const
appList
=
ref
()
const
appList
=
ref
()
const
courseListCategory
:
any
=
ref
([])
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: {
name: '' } },
remote
:
{
httpRequest
:
getPaperList
,
params
:
{
course_id
:
''
,
paper_
name
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'select'
,
prop
:
'course'
,
label
:
'所属课程:'
,
placeholder
:
'所属课程'
},
{
type
:
'select'
,
prop
:
'course_id'
,
label
:
'所属课程:'
,
placeholder
:
'所属课程'
,
options
:
courseListCategory
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
,
filterable
:
true
,
remote
:
true
},
{
type
:
'input'
,
prop
:
'paper_name'
,
label
:
'试卷名称:'
,
placeholder
:
'试卷名称'
}
{
type
:
'input'
,
prop
:
'paper_name'
,
label
:
'试卷名称:'
,
placeholder
:
'试卷名称'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course_name'
,
align
:
'center'
},
{
label
:
'试卷用途'
,
prop
:
'use'
,
align
:
'center'
},
{
label
:
'试卷用途'
,
prop
:
'paper_use_name'
,
align
:
'center'
},
{
label
:
'组卷模式'
,
prop
:
'class'
,
align
:
'center'
},
{
label
:
'试卷名称'
,
prop
:
'paper_name'
,
align
:
'center'
},
{
label
:
'总分'
,
prop
:
'score'
,
align
:
'center'
},
{
label
:
'及格分数'
,
prop
:
'correct'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
{
course
:
111
,
label
:
'组卷模式'
,
exam_id
:
'6952903190949920768'
,
prop
:
'paper_type'
,
student_id
:
'6953256575158976512'
align
:
'center'
,
computed
(
row
:
any
)
{
if
(
row
.
row
.
paper_type
===
'1'
)
{
return
'选题组卷'
}
else
{
return
'自动组卷'
}
}
}
},
{
label
:
'试卷名称'
,
prop
:
'paper_name'
,
align
:
'center'
},
{
label
:
'总分'
,
prop
:
'paper_total_score'
,
align
:
'center'
},
{
label
:
'及格分数'
,
prop
:
'pass_score'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
]
]
}
}
})
})
const
handleCheckPaper
=
(
row
:
any
)
=>
{
const
handleCheckPaper
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
// router.push({ path: '/teach/stuList', query: { eid: row.exam_id } })
router
.
push
({
path
:
'/teach/stuList'
,
query
:
{
eid
:
row
.
exam_id
}
})
router
.
push
({
path
:
'/teach/stuList'
,
query
:
{
course_id
:
row
.
course_id
,
paper_id
:
row
.
paper_id
,
paper_use
:
row
.
paper_use
}
})
}
}
getSearchList
({
type
:
'course'
,
search_id
:
''
}).
then
((
res
:
any
)
=>
{
courseListCategory
.
value
=
res
.
data
})
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -41,7 +66,9 @@ const handleCheckPaper = (row: any) => {
...
@@ -41,7 +66,9 @@ const handleCheckPaper = (row: any) => {
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
#
table-operate=
"
{ row }">
<template
#
table-operate=
"
{ row }">
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
>
批改试卷
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
v-permission=
"'v1-teaching-paper-list'"
>
批改试卷
</el-link
>
</el-space>
</el-space>
</
template
>
</
template
>
</AppList>
</AppList>
...
...
src/modules/teach/exam/views/StudentList.vue
浏览文件 @
e9311674
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getProList } from '../api
'
import
{
checkPermission
}
from
'@/utils/permission
'
// import { useMapStore } from '@/stores/map
'
import
{
getPaperStuList
,
getSearchList
}
from
'../api
'
// const store = useMapStore()
const
router
=
useRouter
()
const
router
=
useRouter
()
const
route
=
useRoute
()
const
appList
=
ref
()
const
appList
=
ref
()
const
classId
=
ref
(
''
)
const
classList
:
any
=
ref
([])
const
stuList
:
any
=
ref
([])
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { name: '' } },
remote
:
{
httpRequest
:
getPaperStuList
,
params
:
{
course_id
:
route
.
query
.
course_id
,
paper_id
:
route
.
query
.
paper_id
,
paper_use
:
route
.
query
.
paper_use
,
class_id
:
''
,
student_id
:
''
},
beforeRequest
(
params
:
any
)
{
if
(
params
.
class_id
!==
''
)
{
classId
.
value
=
params
.
class_id
}
return
params
}
},
filters
:
[
filters
:
[
{
type
:
'input'
,
prop
:
'class'
,
label
:
'所属班级:'
,
placeholder
:
'所属班级'
},
{
{
type
:
'input'
,
prop
:
'name'
,
label
:
'所属学生:'
,
placeholder
:
'所属学生'
}
type
:
'select'
,
prop
:
'class_id'
,
label
:
'所属班级:'
,
placeholder
:
'所属班级'
,
options
:
classList
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
,
filterable
:
true
,
remote
:
true
},
{
type
:
'select'
,
prop
:
'student_id'
,
label
:
'所属学生:'
,
placeholder
:
'所属学生'
,
options
:
stuList
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
,
filterable
:
true
,
remote
:
true
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course
_name
'
,
align
:
'center'
},
{
label
:
'所属班级'
,
prop
:
'class'
,
align
:
'center'
},
{
label
:
'所属班级'
,
prop
:
'class
_name
'
,
align
:
'center'
},
{
label
:
'学生姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学生姓名'
,
prop
:
'
student_
name'
,
align
:
'center'
},
{
label
:
'试卷名称'
,
prop
:
'paper_name'
,
align
:
'center'
},
{
label
:
'试卷名称'
,
prop
:
'paper_name'
,
align
:
'center'
},
{
label
:
'得分'
,
prop
:
'score'
,
align
:
'center'
},
{
label
:
'得分'
,
prop
:
'score'
,
align
:
'center'
},
{
label
:
'是否批改'
,
prop
:
'
correct
'
,
align
:
'center'
},
{
label
:
'是否批改'
,
prop
:
'
status_name
'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
_time
'
,
align
:
'center'
},
{
label
:
'更新时间'
,
prop
:
'update
d_at
'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
name
:
111
,
exam_id
:
'6952903190949920768'
,
student_id
:
'6953256575158976512'
}
]
]
}
}
})
})
const
handleCheckPaper
=
(
row
:
any
)
=>
{
const
handleCheckPaper
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
router
.
push
({
path
:
'/teach/view'
,
query
:
{
eid
:
row
.
exam_id
,
sid
:
row
.
student_id
}
})
router
.
push
({
path
:
'/teach/view'
,
query
:
{
eid
:
row
.
exam_id
,
sid
:
row
.
student_id
}
})
}
}
onMounted
(()
=>
{
checkPermission
(
'v1-teaching-paper-search-list'
)
&&
handleGetSearchList
()
})
const
handleGetSearchList
=
()
=>
{
const
params
:
any
=
{
type
:
'class'
,
search_id
:
classId
}
getSearchList
(
params
).
then
((
res
:
any
)
=>
{
stuList
.
value
=
res
.
data
})
}
// 获取学生列表
const
handleGetStuList
=
()
=>
{
const
params
:
any
=
{
type
:
'class'
,
search_id
:
classId
.
value
}
getSearchList
(
params
).
then
((
res
:
any
)
=>
{
classList
.
value
=
res
.
data
})
}
if
(
classId
.
value
!==
''
)
{
checkPermission
(
'v1-teaching-paper-search-list'
)
&&
handleGetStuList
()
}
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -42,7 +92,13 @@ const handleCheckPaper = (row: any) => {
...
@@ -42,7 +92,13 @@ const handleCheckPaper = (row: any) => {
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
#
table-operate=
"
{ row }">
<template
#
table-operate=
"
{ row }">
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
>
批改试卷
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
v-permission=
"'v1-teaching-paper-update' || 'v1-teaching-paper-view'"
>
批改试卷
</el-link
>
</el-space>
</el-space>
</
template
>
</
template
>
</AppList>
</AppList>
...
...
src/modules/teach/work/api.ts
浏览文件 @
e9311674
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学生列表
// 获取大作业列表
export
function
getProList
(
params
?:
{
type
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getWorkList
(
params
?:
{
course_id
:
string
;
title
?:
string
;
page
?:
string
;
page_size
?:
string
})
{
return
httpRequest
.
get
(
'/api/psp/backend/video/index'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/teaching/job/list'
,
{
params
})
}
// 搜索条件
export
function
getSearchList
(
params
?:
{
type
:
string
;
search_id
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/teaching/job/search-list'
,
{
params
})
}
// 大作业详情
export
function
getWorkDetail
(
params
?:
{
id
:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/teaching/job/view'
,
{
params
})
}
//大作业批改
export
function
updateWork
(
data
:
{
id
:
string
;
score
:
string
})
{
return
httpRequest
.
post
(
'/api/resource/v1/teaching/job/update'
,
data
)
}
}
src/modules/teach/work/components/CheckWork.vue
浏览文件 @
e9311674
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
type
{
FormInstance
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
{
getWorkDetail
,
updateWork
}
from
'../api'
const
emit
=
defineEmits
<
Emits
>
()
const
emit
=
defineEmits
<
Emits
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
ruleFormRef
=
ref
<
FormInstance
>
()
// 封面类型
// 封面类型
// 封面状态
// 封面状态
const
form
=
reactive
({
const
form
:
any
=
reactive
({
desc
:
''
,
course_name
:
''
,
detail
:
''
,
student_name
:
''
,
answer
:
''
student_sno_number
:
''
,
score
:
''
,
title
:
''
,
content
:
''
,
attachments
:
[],
is_critiqued
:
''
})
})
const
rules
=
reactive
<
FormRules
>
({
defineProps
({
score
:
[{
required
:
true
,
message
:
'请输入得分'
,
trigger
:
'blur'
}]
})
const
props
=
defineProps
({
isShowCheckDialog
:
{
isShowCheckDialog
:
{
type
:
Boolean
,
type
:
Boolean
,
required
:
true
required
:
true
},
id
:
{
type
:
String
,
required
:
true
}
}
})
})
interface
Emits
{
interface
Emits
{
(
e
:
'update:isShowCheckDialog'
,
isShowCheckDialog
:
boolean
):
void
(
e
:
'update:isShowCheckDialog'
,
isShowCheckDialog
:
boolean
):
void
(
e
:
'create'
):
void
}
}
// 取消
// 取消
const
handleCancel
=
()
=>
{
const
handleCancel
=
()
=>
{
emit
(
'update:isShowCheckDialog'
,
false
)
emit
(
'update:isShowCheckDialog'
,
false
)
}
}
// 确定
// 确认
const
handleConfirm
=
()
=>
{
const
handleConfirm
=
async
(
formEl
:
FormInstance
|
undefined
)
=>
{
if
(
!
formEl
)
return
await
formEl
.
validate
(
valid
=>
{
if
(
valid
)
{
updateWork
({
id
:
props
.
id
,
score
:
form
.
score
}).
then
(()
=>
{
emit
(
'update:isShowCheckDialog'
,
false
)
emit
(
'update:isShowCheckDialog'
,
false
)
emit
(
'create'
)
})
}
})
}
onMounted
(()
=>
{
handleGetWorkDetail
()
})
const
handleGetWorkDetail
=
()
=>
{
getWorkDetail
({
id
:
props
.
id
}).
then
(
res
=>
{
Object
.
keys
(
form
).
forEach
(
key
=>
{
form
[
key
]
=
res
.
data
[
key
]
})
form
.
attachments
=
JSON
.
parse
(
form
.
attachments
)
})
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:model-value=
"isShowCheckDialog"
draggable
:before-close=
"handleCancel"
width=
"
5
0%"
title=
"批改大作业"
>
<el-dialog
:model-value=
"isShowCheckDialog"
draggable
:before-close=
"handleCancel"
width=
"
3
0%"
title=
"批改大作业"
>
<el-form
:model=
"form"
ref=
"ruleFormRef"
label-width=
"100px
"
>
<el-form
:model=
"form"
label-width=
"110px"
:rules=
"rules"
ref=
"ruleFormRef
"
>
<el-row>
<el-row>
<el-col
:span=
"10"
>
<el-form-item
label=
"课程名称:"
prop=
"type"
>
投诉建议人:lisi
</el-form-item></el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"课程名称:"
prop=
"type"
>
{{
form
?.
course_name
}}
</el-form-item></el-col
>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"10"
>
<el-form-item
label=
"学生姓名:"
prop=
"type"
>
投诉建议人:lisi
</el-form-item></el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"10"
>
<el-form-item
label=
"学号:"
prop=
"type"
>
提交时间:2022-07-19
</el-form-item></el-col>
<el-form-item
label=
"学生姓名:"
prop=
"type"
>
{{
form
.
student_name
}}
</el-form-item></el-col
>
<el-col
:span=
"12"
>
<el-form-item
label=
"学号:"
prop=
"type"
>
{{
form
.
student_sno_number
}}
</el-form-item></el-col
>
</el-row>
</el-row>
<el-form-item
label=
"得分:"
prop=
"desc"
>
<el-form-item
label=
"得分:"
prop=
"score"
>
<el-input
v-model=
"form.desc"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
<el-input-number
v-model=
"form.score"
:min=
"1"
:max=
"100"
:controls=
"false"
:disabled=
"form.is_critiqued === '1'"
/>
</el-form-item>
</el-form-item>
<el-divider
border-style=
"desdashedc"
/>
<el-form-item
label=
"大作业标题:"
prop=
"
desc
"
>
<el-form-item
label=
"大作业标题:"
prop=
"
title
"
>
<el-input
v-model=
"form.
desc
"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
<el-input
v-model=
"form.
title
"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"大作业正文:"
prop=
"
detail
"
>
<el-form-item
label=
"大作业正文:"
prop=
"
content
"
>
<el-input
v-model=
"form.
detail
"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
<el-input
v-model=
"form.
content
"
autosize
type=
"textarea"
placeholder=
"Please input"
disabled
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"相关附件:"
prop=
"type"
>
<el-form-item
label=
"相关附件:"
prop=
"attachments"
>
<a
href=
"1"
>
11
</a>
<div
v-for=
"(item, index) in form.attachments"
:key=
"index"
>
<a
:href=
"item.url"
style=
"color: #aa1941"
target=
"_blank"
>
{{
item
.
name
}}
</a>
</div>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
v-if=
"form.is_critiqued !== '1'"
>
<span>
<span>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
@
click=
"handleCancel"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm
(ruleFormRef)
"
>
确定
</el-button>
</span>
</span>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
</template>
</template>
<
style
>
.el-input-number
:placeholder
{
text-align
:
left
;
}
</
style
>
src/modules/teach/work/views/List.vue
浏览文件 @
e9311674
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getProList } from '../api'
import
{
checkPermission
}
from
'@/utils/permission'
import
CheckWork
from
'../components/CheckWork.vue'
import
CheckWork
from
'../components/CheckWork.vue'
import
{
getWorkList
,
getSearchList
}
from
'../api'
const
appList
=
ref
()
const
appList
=
ref
()
const
isShowCheckDialog
=
ref
(
false
)
const
isShowCheckDialog
=
ref
(
false
)
const
id
=
ref
(
''
)
const
searchList
:
any
=
ref
([])
const
listOptions
=
$computed
(()
=>
{
const
listOptions
=
$computed
(()
=>
{
return
{
return
{
// remote: { httpRequest: getProList, params: { nam
e: '' } },
remote
:
{
httpRequest
:
getWorkList
,
params
:
{
course_id
:
''
,
titl
e
:
''
}
},
filters
:
[
filters
:
[
{
type
:
'select'
,
prop
:
'course'
,
label
:
'所属课程:'
,
placeholder
:
'所属课程'
},
{
{
type
:
'input'
,
prop
:
'paper_name'
,
label
:
'大作业名称:'
,
placeholder
:
'大作业名称'
}
type
:
'select'
,
prop
:
'course_id'
,
label
:
'所属课程:'
,
placeholder
:
'所属课程'
,
options
:
searchList
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
,
filterable
:
true
,
remote
:
true
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'序号'
,
type
:
'index'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course'
,
align
:
'center'
},
{
label
:
'所属课程'
,
prop
:
'course
_name
'
,
align
:
'center'
},
{
label
:
'学生姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学生姓名'
,
prop
:
'name'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'学号'
,
prop
:
'sno_number'
,
align
:
'center'
},
{
label
:
'提交时间'
,
prop
:
'created_time'
,
align
:
'center'
},
{
label
:
'批改人'
,
prop
:
'operator_name'
,
align
:
'center'
},
{
label
:
'批改时间'
,
prop
:
'update_time'
,
align
:
'center'
},
{
label
:
'得分'
,
prop
:
'score'
,
align
:
'center'
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
],
data
:
[
{
{
name
:
111
,
label
:
'提交时间'
,
exam_id
:
'6952903190949920768'
,
prop
:
'created_at'
,
student_id
:
'6953256575158976512'
align
:
'center'
,
computed
(
row
:
any
)
{
return
row
.
row
.
created_at
||
'-'
}
}
},
{
label
:
'批改人'
,
prop
:
'checker_id_name'
,
align
:
'center'
,
computed
(
row
:
any
)
{
return
row
.
row
.
checker_id_name
||
'-'
}
},
{
label
:
'批改时间'
,
prop
:
'marking_time'
,
align
:
'center'
,
computed
(
row
:
any
)
{
return
row
.
row
.
marking_time
||
'-'
}
},
{
label
:
'得分'
,
prop
:
'score'
,
align
:
'center'
,
computed
(
row
:
any
)
{
return
row
.
row
.
score
||
'-'
}
},
{
label
:
'操作'
,
slots
:
'table-operate'
,
align
:
'center'
}
]
]
}
}
})
})
const
handleCheckPaper
=
(
row
:
any
)
=>
{
const
handleCheckPaper
=
(
row
:
any
)
=>
{
console
.
log
(
row
)
console
.
log
(
row
)
id
.
value
=
row
.
job_id
isShowCheckDialog
.
value
=
true
isShowCheckDialog
.
value
=
true
console
.
log
(
isShowCheckDialog
.
value
)
}
onMounted
(()
=>
{
checkPermission
(
'v1-teaching-job-search-list'
)
&&
handleGetSearchList
()
})
const
handleGetSearchList
=
()
=>
{
getSearchList
({
type
:
'course'
,
search_id
:
''
}).
then
(
res
=>
{
searchList
.
value
=
res
.
data
})
}
const
handleFresh
=
()
=>
{
appList
.
value
.
refetch
()
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"批改
试卷
"
>
<AppCard
title=
"批改
大作业
"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
border
stripe
>
<template
#
table-operate=
"
{ row }">
<template
#
table-operate=
"
{ row }">
<el-space>
<el-space>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
>
批改
</el-link>
<el-link
type=
"primary"
plain
@
click=
"handleCheckPaper(row)"
v-if=
"row.created_at !== null"
v-permission=
"'v1-teaching-job-update' || 'v1-teaching-job-view'"
>
批改
</el-link
>
<div
v-else
>
-
</div>
</el-space>
</el-space>
</
template
>
</
template
>
</AppList>
</AppList>
</AppCard>
</AppCard>
<CheckWork
v-if=
"isShowCheckDialog === true"
v-model:isShowCheckDialog=
"isShowCheckDialog"
/>
<CheckWork
v-if=
"isShowCheckDialog === true"
v-model:isShowCheckDialog=
"isShowCheckDialog"
:id=
"id"
@
create=
"handleFresh"
/>
</template>
</template>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论