Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
1daf7d8f
提交
1daf7d8f
authored
8月 23, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
9fc46ddc
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
245 行增加
和
80 行删除
+245
-80
AppList.vue
src/components/base/AppList.vue
+1
-0
api.ts
src/modules/admin/lab/discuss/api.ts
+16
-3
useFilterList.ts
src/modules/admin/lab/discuss/composables/useFilterList.ts
+24
-0
Index.vue
src/modules/admin/lab/discuss/views/Index.vue
+75
-25
api.ts
src/modules/admin/lab/score/api.ts
+16
-3
useFilterList.ts
src/modules/admin/lab/score/composables/useFilterList.ts
+24
-0
Index.vue
src/modules/admin/lab/score/views/Index.vue
+75
-24
index.ts
src/modules/protocol/index.ts
+0
-11
Index.vue
src/modules/protocol/views/Index.vue
+0
-0
menu.ts
src/stores/menu.ts
+14
-14
没有找到文件。
src/components/base/AppList.vue
浏览文件 @
1daf7d8f
...
@@ -145,6 +145,7 @@ defineExpose({ refetch, tableRef })
...
@@ -145,6 +145,7 @@ defineExpose({ refetch, tableRef })
<el-select
<el-select
v-model=
"params[item.prop]"
v-model=
"params[item.prop]"
v-bind=
"item"
v-bind=
"item"
filterable
clearable
clearable
@
change=
"search"
@
change=
"search"
v-if=
"item.type === 'select'"
v-if=
"item.type === 'select'"
...
...
src/modules/admin/lab/discuss/api.ts
浏览文件 @
1daf7d8f
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学员列表
// 获取讨论交流列表
export
function
getBookList
(
params
?:
{
name
?:
string
;
lab_id
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getDiscussList
(
params
?:
{
return
httpRequest
.
get
(
'/api/lab/backend/book/index'
,
{
params
})
course_id
?:
string
experiment_id
?:
string
specialty_id
?:
string
class_id
?:
string
student_name
?:
string
page
?:
number
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/lab/v1/teacher/discussion/list'
,
{
params
})
}
// 获取筛选条件
export
function
getFilterList
()
{
return
httpRequest
.
get
(
'/api/lab/v1/teacher/discussion/search-list'
)
}
}
src/modules/admin/lab/discuss/composables/useFilterList.ts
0 → 100644
浏览文件 @
1daf7d8f
import
{
getFilterList
}
from
'../api'
export
interface
FilterItem
{
id
:
string
name
:
string
}
// 课程
const
courses
=
ref
<
FilterItem
[]
>
([])
// 实验
const
experiments
=
ref
<
FilterItem
[]
>
([])
// 专业
const
specialties
=
ref
<
FilterItem
[]
>
([])
// 班级
const
classes
=
ref
<
FilterItem
[]
>
([])
export
function
useFilterList
()
{
getFilterList
().
then
(
res
=>
{
courses
.
value
=
res
.
data
.
courses
experiments
.
value
=
res
.
data
.
experiments
specialties
.
value
=
res
.
data
.
specialties
classes
.
value
=
res
.
data
.
classes
})
return
{
courses
,
experiments
,
specialties
,
classes
}
}
src/modules/admin/lab/discuss/views/Index.vue
浏览文件 @
1daf7d8f
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
// import { getBookList } from '../api'
import
{
getDiscussList
}
from
'../api'
import
{
useFilterList
}
from
'../composables/useFilterList'
const
{
courses
,
experiments
,
specialties
,
classes
}
=
useFilterList
()
// 列表配置
// 列表配置
const
listOptions
=
{
const
listOptions
=
$computed
(()
=>
{
// remote: {
return
{
// httpRequest: getBookList,
remote
:
{
// params: { name: '', lab_id: '' }
httpRequest
:
getDiscussList
,
// },
params
:
{
student_name
:
''
,
course_id
:
''
,
experiment_id
:
''
,
specialty_id
:
''
,
class_id
:
''
}
},
filterForm
:
{
labelWidth
:
100
},
filterForm
:
{
labelWidth
:
100
},
filters
:
[
filters
:
[
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'实验课程名称'
,
placeholder
:
'请选择实验课程名称'
},
{
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'实验名称'
,
placeholder
:
'请选择实验名称'
},
type
:
'select'
,
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'专业'
,
placeholder
:
'请选择专业'
},
prop
:
'course_id'
,
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'班级'
,
placeholder
:
'请选择班级'
},
label
:
'实验课程名称'
,
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名'
,
placeholder
:
'请输入学生姓名'
}
placeholder
:
'请选择实验课程名称'
,
options
:
courses
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'experiment_id'
,
label
:
'实验名称'
,
placeholder
:
'请选择实验名称'
,
options
:
experiments
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'specialty_id'
,
label
:
'专业'
,
placeholder
:
'请选择专业'
,
options
:
specialties
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'class_id'
,
label
:
'班级'
,
placeholder
:
'请选择班级'
,
options
:
classes
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'input'
,
prop
:
'student_name'
,
label
:
'学生姓名'
,
placeholder
:
'请输入学生姓名'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'实验名称'
,
prop
:
'
name'
},
{
label
:
'实验名称'
,
prop
:
'experiment_id_
name'
},
{
label
:
'专业'
,
prop
:
'
name'
},
{
label
:
'专业'
,
prop
:
'specialty_id_
name'
},
{
label
:
'班级'
,
prop
:
'
name'
},
{
label
:
'班级'
,
prop
:
'class_id_
name'
},
{
label
:
'姓名'
,
prop
:
'
name'
},
{
label
:
'姓名'
,
prop
:
'student_
name'
},
{
label
:
'学号'
,
prop
:
'name
'
},
{
label
:
'学号'
,
prop
:
'sno_number
'
},
{
label
:
'标题'
,
prop
:
'nam
e'
},
{
label
:
'标题'
,
prop
:
'titl
e'
},
{
label
:
'评论数量'
,
prop
:
'name
'
},
{
label
:
'评论数量'
,
prop
:
'replies_num'
,
slots
:
'table-replies-num
'
},
{
label
:
'是否回复'
,
prop
:
'name
'
},
{
label
:
'是否回复'
,
prop
:
'is_reply_name'
,
slots
:
'table-reply
'
},
{
label
:
'更新时间'
,
prop
:
'na
me'
},
{
label
:
'更新时间'
,
prop
:
'created_ti
me'
},
{
label
:
'操作'
,
slots
:
'table-x'
}
{
label
:
'操作'
,
slots
:
'table-x'
,
width
:
100
}
],
]
data
:
[{}]
}
}
}
)
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"实验讨论交流"
>
<AppCard
title=
"实验讨论交流"
>
<AppList
v-bind=
"listOptions"
>
<AppList
v-bind=
"listOptions"
>
<template
#
table-replies-num=
"
{ row }">
<span
:class=
"
{ 'is-info': !!row.replies_num }">
{{
row
.
replies_num
}}
</span>
</
template
>
<
template
#
table-reply=
"{ row }"
>
<span
:class=
"
{ 'is-success': row.is_reply === '1' }">
{{
row
.
is_reply_name
}}
</span>
</
template
>
<
template
#
table-x
>
<
template
#
table-x
>
<el-button>
评论
</el-button>
<el-button
text
type=
"primary"
>
评论
</el-button>
</
template
>
</
template
>
</AppList>
</AppList>
</AppCard>
</AppCard>
</template>
</template>
<
style
lang=
"scss"
>
.is-success
{
color
:
#63a103
;
}
.is-info
{
color
:
#b18862
;
}
</
style
>
src/modules/admin/lab/score/api.ts
浏览文件 @
1daf7d8f
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
// 获取学员列表
// 获取实验成绩列表
export
function
getBookList
(
params
?:
{
name
?:
string
;
lab_id
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getExperimentRecordList
(
params
?:
{
return
httpRequest
.
get
(
'/api/lab/backend/book/index'
,
{
params
})
course_id
?:
string
experiment_id
?:
string
specialty_id
?:
string
class_id
?:
string
student_name
?:
string
page
?:
number
page_size
?:
number
})
{
return
httpRequest
.
get
(
'/api/lab/v1/teacher/record/list'
,
{
params
})
}
// 获取筛选条件
export
function
getFilterList
()
{
return
httpRequest
.
get
(
'/api/lab/v1/teacher/record/search-list'
)
}
}
src/modules/admin/lab/score/composables/useFilterList.ts
0 → 100644
浏览文件 @
1daf7d8f
import
{
getFilterList
}
from
'../api'
export
interface
FilterItem
{
id
:
string
name
:
string
}
// 课程
const
courses
=
ref
<
FilterItem
[]
>
([])
// 实验
const
experiments
=
ref
<
FilterItem
[]
>
([])
// 专业
const
specialties
=
ref
<
FilterItem
[]
>
([])
// 班级
const
classes
=
ref
<
FilterItem
[]
>
([])
export
function
useFilterList
()
{
getFilterList
().
then
(
res
=>
{
courses
.
value
=
res
.
data
.
courses
experiments
.
value
=
res
.
data
.
experiments
specialties
.
value
=
res
.
data
.
specialties
classes
.
value
=
res
.
data
.
classes
})
return
{
courses
,
experiments
,
specialties
,
classes
}
}
src/modules/admin/lab/score/views/Index.vue
浏览文件 @
1daf7d8f
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
Upload
,
Promotion
}
from
'@element-plus/icons-vue'
import
{
Upload
,
Promotion
}
from
'@element-plus/icons-vue'
// import { getBookList } from '../api'
import
{
getExperimentRecordList
}
from
'../api'
import
{
useFilterList
}
from
'../composables/useFilterList'
const
{
courses
,
experiments
,
specialties
,
classes
}
=
useFilterList
()
const
LAB_URL
=
import
.
meta
.
env
.
VITE_LAB_URL
const
LAB_URL
=
import
.
meta
.
env
.
VITE_LAB_URL
// 列表配置
// 列表配置
const
listOptions
=
{
const
listOptions
=
$computed
(()
=>
{
// remote: {
return
{
// httpRequest: getBookList,
remote
:
{
// params: { name: '', lab_id: '' }
httpRequest
:
getExperimentRecordList
,
// },
params
:
{
student_name
:
''
,
course_id
:
''
,
experiment_id
:
''
,
specialty_id
:
''
,
class_id
:
''
}
},
filterForm
:
{
labelWidth
:
100
},
filterForm
:
{
labelWidth
:
100
},
filters
:
[
filters
:
[
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'实验课程名称'
,
placeholder
:
'请选择实验课程名称'
},
{
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'实验名称'
,
placeholder
:
'请选择实验名称'
},
type
:
'select'
,
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'专业'
,
placeholder
:
'请选择专业'
},
prop
:
'course_id'
,
{
type
:
'select'
,
prop
:
'lab_id'
,
label
:
'班级'
,
placeholder
:
'请选择班级'
},
label
:
'实验课程名称'
,
{
type
:
'input'
,
prop
:
'name'
,
label
:
'学生姓名'
,
placeholder
:
'请输入学生姓名'
}
placeholder
:
'请选择实验课程名称'
,
options
:
courses
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'experiment_id'
,
label
:
'实验名称'
,
placeholder
:
'请选择实验名称'
,
options
:
experiments
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'specialty_id'
,
label
:
'专业'
,
placeholder
:
'请选择专业'
,
options
:
specialties
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'select'
,
prop
:
'class_id'
,
label
:
'班级'
,
placeholder
:
'请选择班级'
,
options
:
classes
.
value
,
labelKey
:
'name'
,
valueKey
:
'id'
},
{
type
:
'input'
,
prop
:
'student_name'
,
label
:
'学生姓名'
,
placeholder
:
'请输入学生姓名'
}
],
],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'所属专业'
,
prop
:
'
name'
},
{
label
:
'所属专业'
,
prop
:
'specialty_
name'
},
{
label
:
'所属班级'
,
prop
:
'
name'
},
{
label
:
'所属班级'
,
prop
:
'class_
name'
},
{
label
:
'姓名'
,
prop
:
'
name'
},
{
label
:
'姓名'
,
prop
:
'student_
name'
},
{
label
:
'学号'
,
prop
:
'name
'
},
{
label
:
'学号'
,
prop
:
'sno_number
'
},
{
label
:
'实验名称'
,
prop
:
'
name'
},
{
label
:
'实验名称'
,
prop
:
'experiment_
name'
},
{
label
:
'提交状态'
,
prop
:
'name
'
},
{
label
:
'提交状态'
,
prop
:
'status_name'
,
slots
:
'table-status
'
},
{
label
:
'实验成绩'
,
prop
:
'nam
e'
},
{
label
:
'实验成绩'
,
prop
:
'score'
,
slots
:
'table-scor
e'
},
{
label
:
'更新时间'
,
prop
:
'na
me'
},
{
label
:
'更新时间'
,
prop
:
'commit_ti
me'
},
{
label
:
'操作'
,
slots
:
'table-x'
}
{
label
:
'操作'
,
slots
:
'table-x'
,
width
:
100
}
],
]
data
:
[{}]
}
}
}
)
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -45,9 +81,24 @@ const listOptions = {
...
@@ -45,9 +81,24 @@ const listOptions = {
</a>
</a>
</el-row>
</el-row>
</
template
>
</
template
>
<
template
#
table-status=
"{ row }"
>
<span
:class=
"
{ 'is-success': row.status === 2 }">
{{
row
.
status_name
}}
</span>
</
template
>
<
template
#
table-score=
"{ row }"
>
<span
:class=
"
{ 'is-info': row.score !== '--' }">
{{
row
.
score
}}
</span>
</
template
>
<
template
#
table-x
>
<
template
#
table-x
>
<el-button>
打分
</el-button>
<el-button
text
type=
"primary"
>
打分
</el-button>
</
template
>
</
template
>
</AppList>
</AppList>
</AppCard>
</AppCard>
</template>
</template>
<
style
lang=
"scss"
>
.is-success
{
color
:
#63a103
;
}
.is-info
{
color
:
#b18862
;
}
</
style
>
src/modules/protocol/index.ts
deleted
100644 → 0
浏览文件 @
9fc46ddc
import
type
{
RouteRecordRaw
}
from
'vue-router'
import
AppLayout
from
'@/components/layout/Index.vue'
export
const
routes
:
Array
<
RouteRecordRaw
>
=
[
{
path
:
'/'
,
component
:
AppLayout
,
props
:
{
sidebar
:
false
},
children
:
[{
path
:
''
,
component
:
()
=>
import
(
'./views/Index.vue'
)
}]
}
]
src/modules/protocol/views/Index.vue
deleted
100644 → 0
浏览文件 @
9fc46ddc
src/stores/menu.ts
浏览文件 @
1daf7d8f
import
type
{
IMenuItem
}
from
'@/types'
import
type
{
IMenuItem
}
from
'@/types'
import
{
defineStore
}
from
'pinia'
import
{
defineStore
}
from
'pinia'
import
{
Tickets
}
from
'@element-plus/icons-vue'
import
{
Notebook
,
Tickets
,
VideoCamera
,
ChatSquare
,
Finished
,
ScaleToOriginal
}
from
'@element-plus/icons-vue'
interface
State
{
interface
State
{
studentMenus
:
IMenuItem
[]
studentMenus
:
IMenuItem
[]
...
@@ -25,41 +25,41 @@ const adminMenus: IMenuItem[] = [
...
@@ -25,41 +25,41 @@ const adminMenus: IMenuItem[] = [
path
:
'/admin/lab'
,
path
:
'/admin/lab'
,
children
:
[
children
:
[
{
{
icon
:
markRaw
(
Tickets
),
icon
:
markRaw
(
Notebook
),
name
:
'实验指导书管理'
,
name
:
'实验指导书管理'
,
path
:
'/admin/lab/book'
path
:
'/admin/lab/book'
},
},
{
{
icon
:
markRaw
(
Tickets
),
icon
:
markRaw
(
VideoCamera
),
name
:
'实验操作视频管理'
,
name
:
'实验操作视频管理'
,
path
:
'/admin/lab/video'
path
:
'/admin/lab/video'
},
},
{
{
icon
:
markRaw
(
Tickets
),
icon
:
markRaw
(
ChatSquare
),
name
:
'实验讨论交流'
,
name
:
'实验讨论交流'
,
path
:
'/admin/lab/discuss'
path
:
'/admin/lab/discuss'
},
},
{
{
icon
:
markRaw
(
Tickets
),
icon
:
markRaw
(
Finished
),
name
:
'实验成绩管理'
,
name
:
'实验成绩管理'
,
path
:
'/admin/lab/score'
path
:
'/admin/lab/score'
}
}
]
]
},
},
{
//
{
name
:
'技能大赛'
,
//
name: '技能大赛',
path
:
'/admin/contest'
//
path: '/admin/contest'
},
//
},
{
//
{
name
:
'大赛成绩'
,
//
name: '大赛成绩',
path
:
'/admin/contest/score'
//
path: '/admin/contest/score'
},
//
},
{
{
name
:
'系统管理'
,
name
:
'系统管理'
,
path
:
'/admin/system'
,
path
:
'/admin/system'
,
children
:
[
children
:
[
{
{
icon
:
markRaw
(
Tickets
),
icon
:
markRaw
(
ScaleToOriginal
),
name
:
'实验管理'
,
name
:
'实验管理'
,
path
:
'/admin/system/experiment'
path
:
'/admin/system/experiment'
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论