Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
b8a55b7b
提交
b8a55b7b
authored
8月 18, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
04ed8fbf
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
99 行增加
和
48 行删除
+99
-48
useGetProjectList.ts
src/composables/useGetProjectList.ts
+11
-10
api.ts
src/modules/admin/system/experiment/api.ts
+4
-0
FormDialog.vue
...modules/admin/system/experiment/components/FormDialog.vue
+50
-23
useGetCourseList.ts
...s/admin/system/experiment/composables/useGetCourseList.ts
+6
-4
useGetTeacherList.ts
.../admin/system/experiment/composables/useGetTeacherList.ts
+6
-4
types.ts
src/modules/admin/system/experiment/types.ts
+3
-2
Index.vue
src/modules/admin/system/experiment/views/Index.vue
+19
-5
没有找到文件。
src/composables/useGetProjectList.ts
浏览文件 @
b8a55b7b
...
@@ -21,17 +21,18 @@ interface MemberType {
...
@@ -21,17 +21,18 @@ interface MemberType {
}
}
const
store
=
useUserStore
()
const
store
=
useUserStore
()
const
members
=
ref
<
MemberType
[]
>
([])
const
departments
=
ref
<
DepartmentType
[]
>
([])
const
organizations
=
ref
<
OrganizationType
[]
>
([])
export
function
useGetProjectList
()
{
export
function
useGetProjectList
()
{
const
members
=
ref
<
MemberType
[]
>
([])
!
departments
.
value
.
length
&&
const
departments
=
ref
<
DepartmentType
[]
>
([])
getProjectList
({
organization_id
:
store
.
organization
?.
id
,
project_id
:
store
.
project
?.
id
}).
then
((
res
:
any
)
=>
{
const
organizations
=
ref
<
OrganizationType
[]
>
([])
members
.
value
=
res
.
data
.
members
getProjectList
({
organization_id
:
store
.
organization
?.
id
,
project_id
:
store
.
project
?.
id
}).
then
((
res
:
any
)
=>
{
departments
.
value
=
res
.
data
.
departments
members
.
value
=
res
.
data
.
members
organizations
.
value
=
res
.
data
.
departments
.
reduce
((
result
:
OrganizationType
[],
item
:
DepartmentType
)
=>
{
departments
.
value
=
res
.
data
.
departments
return
result
.
concat
(
item
.
organizations
)
organizations
.
value
=
res
.
data
.
departments
.
reduce
((
result
:
OrganizationType
[],
item
:
DepartmentType
)
=>
{
},
[])
return
result
.
concat
(
item
.
organizations
)
})
},
[])
})
return
{
members
,
departments
,
organizations
}
return
{
members
,
departments
,
organizations
}
}
}
src/modules/admin/system/experiment/api.ts
浏览文件 @
b8a55b7b
...
@@ -11,6 +11,10 @@ export function createExperiment(data: ExperimentCreateItem) {
...
@@ -11,6 +11,10 @@ export function createExperiment(data: ExperimentCreateItem) {
return
httpRequest
.
post
(
'/api/resource//v1/backend/experiment/create'
,
data
)
return
httpRequest
.
post
(
'/api/resource//v1/backend/experiment/create'
,
data
)
}
}
// 更新实验
export
function
updateExperiment
(
data
:
ExperimentCreateItem
)
{
return
httpRequest
.
post
(
'/api/resource//v1/backend/experiment/update'
,
data
)
}
// 获取实验课程列表
// 获取实验课程列表
export
function
getExperimentCourseList
(
params
:
{
organ_id
?:
string
})
{
export
function
getExperimentCourseList
(
params
:
{
organ_id
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/courses'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/courses'
,
{
params
})
...
...
src/modules/admin/system/experiment/components/FormDialog.vue
浏览文件 @
b8a55b7b
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
ExperimentCreateItem
}
from
'../types'
import
type
{
Experiment
Item
,
Experiment
CreateItem
}
from
'../types'
import
{
ElMessage
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
createExperiment
}
from
'../api'
import
{
createExperiment
,
updateExperiment
}
from
'../api'
import
{
useGetProjectList
}
from
'@/composables/useGetProjectList'
import
{
useGetProjectList
}
from
'@/composables/useGetProjectList'
import
{
useGetCourseList
}
from
'../composables/useGetCourseList'
import
{
useGetCourseList
}
from
'../composables/useGetCourseList'
import
{
useGetTeacherList
}
from
'../composables/useGetTeacherList'
import
{
useGetTeacherList
}
from
'../composables/useGetTeacherList'
...
@@ -11,7 +11,7 @@ import { useGetTeacherList } from '../composables/useGetTeacherList'
...
@@ -11,7 +11,7 @@ import { useGetTeacherList } from '../composables/useGetTeacherList'
import
{
useMapStore
}
from
'@/stores/map'
import
{
useMapStore
}
from
'@/stores/map'
interface
Props
{
interface
Props
{
data
?:
any
data
?:
ExperimentItem
|
null
}
}
const
props
=
defineProps
<
Props
>
()
const
props
=
defineProps
<
Props
>
()
...
@@ -29,42 +29,69 @@ const { courses } = useGetCourseList()
...
@@ -29,42 +29,69 @@ const { courses } = useGetCourseList()
const
{
teachers
}
=
useGetTeacherList
()
const
{
teachers
}
=
useGetTeacherList
()
// 实验类型
// 实验类型
const
types
=
useMapStore
().
getMapValuesByKey
(
'experiment_type'
)
const
types
=
useMapStore
().
getMapValuesByKey
(
'experiment_type'
)
// 数据状态
const
status
=
useMapStore
().
getMapValuesByKey
(
'system_status'
)
const
status
=
useMapStore
().
getMapValuesByKey
(
'system_status'
)
const
title
=
$computed
(()
=>
{
return
'新增实验'
})
const
formRef
=
$ref
<
FormInstance
>
()
const
formRef
=
$ref
<
FormInstance
>
()
const
form
=
reactive
<
ExperimentCreateItem
>
({
const
form
=
reactive
<
ExperimentCreateItem
>
({
organ_id
:
''
,
organ_id
:
''
,
status
:
'1'
,
status
:
'1'
,
course_id
:
''
,
course_id
:
''
,
name
:
''
,
name
:
''
,
length
:
''
,
length
:
10
,
type
:
''
,
type
:
''
,
score
:
''
,
score
:
100
,
teachers_id
:
''
,
teachers_id
:
''
,
teachers_ids
:
[]
teachers_ids
:
[]
})
})
watchEffect
(()
=>
{
watchEffect
(()
=>
{
Object
.
assign
(
form
,
props
.
data
)
if
(
!
props
.
data
)
return
const
score
=
parseFloat
(
props
.
data
.
score
)
const
length
=
parseFloat
(
props
.
data
.
length
)
const
teachers_ids
=
props
.
data
.
teacher
.
map
(
item
=>
item
.
id
)
Object
.
assign
(
form
,
props
.
data
,
{
score
,
length
,
teachers_ids
})
})
})
const
rules
=
ref
<
FormRules
>
({
const
rules
=
ref
<
FormRules
>
({
organ_id
:
[{
required
:
true
,
message
:
'请选择实验所属部门/学校'
,
trigger
:
'blur'
}],
organ_id
:
[{
required
:
true
,
message
:
'请选择实验所属部门/学校'
}],
course_id
:
[{
required
:
true
,
message
:
'请选择实验课程'
,
trigger
:
'blur'
}]
course_id
:
[{
required
:
true
,
message
:
'请选择实验课程'
}],
name
:
[{
required
:
true
,
message
:
'请输入实验名称'
}],
length
:
[{
required
:
true
,
message
:
'请输入实验学时'
}],
type
:
[{
required
:
true
,
message
:
'请选择实验类型'
}],
teachers_ids
:
[{
type
:
'array'
,
required
:
true
,
message
:
'请选择指导教师'
,
trigger
:
'change'
}],
score
:
[{
required
:
true
,
message
:
'请输入实验总成绩'
}]
})
})
const
isUpdate
=
$computed
(()
=>
{
return
!!
form
.
id
})
const
title
=
$computed
(()
=>
{
return
isUpdate
?
'编辑实验'
:
'新增实验'
})
// 提交
// 提交
function
handleSubmit
()
{
function
handleSubmit
()
{
formRef
?.
validate
().
then
(
update
)
formRef
?.
validate
().
then
(()
=>
{
const
params
=
{
...
form
,
teachers_id
:
form
.
teachers_ids
?.
join
(
','
)
||
''
}
isUpdate
?
handleUpdate
(
params
)
:
handleCreate
(
params
)
})
}
}
//
修改
//
新增
const
update
=
()
=>
{
function
handleCreate
(
params
:
ExperimentCreateItem
)
{
createExperiment
(
form
).
then
(()
=>
{
createExperiment
(
params
).
then
(()
=>
{
ElMessage
({
message
:
'创建成功'
,
type
:
'success'
})
ElMessage
({
message
:
'创建成功'
,
type
:
'success'
})
emit
(
'update'
)
emit
(
'update'
)
emit
(
'update:modelValue'
,
false
)
emit
(
'update:modelValue'
,
false
)
formRef
?.
resetFields
()
})
}
// 修改
function
handleUpdate
(
params
:
ExperimentCreateItem
)
{
updateExperiment
(
params
).
then
(()
=>
{
ElMessage
({
message
:
'修改成功'
,
type
:
'success'
})
emit
(
'update'
)
emit
(
'update:modelValue'
,
false
)
})
})
}
}
</
script
>
</
script
>
...
@@ -73,23 +100,23 @@ const update = () => {
...
@@ -73,23 +100,23 @@ const update = () => {
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"$emit('update:modelValue')"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"150px"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"150px"
>
<el-form-item
label=
"实验所属部门/学校"
prop=
"organ_id"
>
<el-form-item
label=
"实验所属部门/学校"
prop=
"organ_id"
>
<el-select
v-model=
"form.organ_id"
style=
"width: 100%"
>
<el-select
v-model=
"form.organ_id"
style=
"width: 100%"
:disabled=
"isUpdate"
>
<el-option
v-for=
"item in organizations"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in organizations"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验课程"
prop=
"course_id"
>
<el-form-item
label=
"实验课程"
prop=
"course_id"
>
<el-select
v-model=
"form.course_id"
style=
"width: 100%"
>
<el-select
v-model=
"form.course_id"
style=
"width: 100%"
:disabled=
"isUpdate"
>
<el-option
v-for=
"item in courses"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in courses"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验名称"
prop=
"name"
>
<el-form-item
label=
"实验名称"
prop=
"name"
>
<el-input
v-model=
"form.name"
/>
<el-input
v-model=
"form.name"
:disabled=
"isUpdate"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验学时"
prop=
"length"
>
<el-form-item
label=
"实验学时"
prop=
"length"
>
<el-input
v-model=
"form.length
"
/>
<el-input
-number
v-model=
"form.length"
:min=
"1"
:max=
"20"
step-strictly
style=
"width: 100%
"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"指导教师"
prop=
"teachers_ids"
>
<el-form-item
label=
"指导教师"
prop=
"teachers_ids"
>
<el-select
v-model=
"form.teachers_id
"
style=
"width: 100%"
>
<el-select
v-model=
"form.teachers_id
s"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"item in teachers"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
<el-option
v-for=
"item in teachers"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
...
@@ -99,7 +126,7 @@ const update = () => {
...
@@ -99,7 +126,7 @@ const update = () => {
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验总成绩"
prop=
"score"
>
<el-form-item
label=
"实验总成绩"
prop=
"score"
>
<el-input
v-model=
"form.score
"
/>
<el-input
-number
v-model=
"form.score"
:min=
"1"
:max=
"150"
step-strictly
style=
"width: 100%
"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"有效状态"
prop=
"files"
>
<el-form-item
label=
"有效状态"
prop=
"files"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio-group
v-model=
"form.status"
>
...
...
src/modules/admin/system/experiment/composables/useGetCourseList.ts
浏览文件 @
b8a55b7b
...
@@ -8,10 +8,12 @@ interface CourseType {
...
@@ -8,10 +8,12 @@ interface CourseType {
}
}
const
store
=
useUserStore
()
const
store
=
useUserStore
()
const
courses
=
ref
<
CourseType
[]
>
([])
export
function
useGetCourseList
()
{
export
function
useGetCourseList
()
{
const
courses
=
ref
<
CourseType
[]
>
([])
!
courses
.
value
.
length
&&
getExperimentCourseList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
getExperimentCourseList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
courses
.
value
=
res
.
data
courses
.
value
=
res
.
data
})
})
return
{
courses
}
return
{
courses
}
}
}
src/modules/admin/system/experiment/composables/useGetTeacherList.ts
浏览文件 @
b8a55b7b
...
@@ -8,10 +8,12 @@ interface TeacherType {
...
@@ -8,10 +8,12 @@ interface TeacherType {
}
}
const
store
=
useUserStore
()
const
store
=
useUserStore
()
const
teachers
=
ref
<
TeacherType
[]
>
([])
export
function
useGetTeacherList
()
{
export
function
useGetTeacherList
()
{
const
teachers
=
ref
<
TeacherType
[]
>
([])
!
teachers
.
value
.
length
&&
getExperimentTeacherList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
getExperimentTeacherList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
teachers
.
value
=
res
.
data
teachers
.
value
=
res
.
data
})
})
return
{
teachers
}
return
{
teachers
}
}
}
src/modules/admin/system/experiment/types.ts
浏览文件 @
b8a55b7b
...
@@ -29,13 +29,14 @@ export interface ExperimentItem {
...
@@ -29,13 +29,14 @@ export interface ExperimentItem {
}
}
export
interface
ExperimentCreateItem
{
export
interface
ExperimentCreateItem
{
id
?:
string
organ_id
:
string
organ_id
:
string
status
:
string
status
:
string
course_id
:
string
course_id
:
string
name
:
string
name
:
string
length
:
string
length
:
number
type
:
string
type
:
string
score
:
string
score
:
number
teachers_id
:
string
teachers_id
:
string
teachers_ids
?:
string
[]
teachers_ids
?:
string
[]
}
}
src/modules/admin/system/experiment/views/Index.vue
浏览文件 @
b8a55b7b
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
CirclePlusFilled
}
from
'@element-plus/icons-vue'
import
{
CirclePlusFilled
}
from
'@element-plus/icons-vue'
import
type
{
ExperimentItem
}
from
'../types'
import
type
{
ExperimentItem
}
from
'../types'
import
FormDialog
from
'../components/FormDialog
.vue'
import
AppList
from
'@/components/base/AppList
.vue'
import
{
getExperimentList
}
from
'../api'
import
{
getExperimentList
}
from
'../api'
const
FormDialog
=
defineAsyncComponent
(()
=>
import
(
'../components/FormDialog.vue'
))
const
appList
=
$ref
<
InstanceType
<
typeof
AppList
>
|
null
>
(
null
)
// 列表配置
// 列表配置
const
listOptions
=
{
const
listOptions
=
{
remote
:
{
remote
:
{
...
@@ -34,18 +38,28 @@ const listOptions = {
...
@@ -34,18 +38,28 @@ const listOptions = {
}
}
let
dialogVisible
=
$ref
(
false
)
let
dialogVisible
=
$ref
(
false
)
const
rowData
=
ref
<
ExperimentItem
|
undefined
|
null
>
(
null
)
// 新增
function
handleAdd
()
{
function
handleAdd
()
{
rowData
.
value
=
null
dialogVisible
=
true
dialogVisible
=
true
}
}
function
handleUpdate
()
{
// 编辑
function
handleUpdate
(
row
:
ExperimentItem
)
{
rowData
.
value
=
row
dialogVisible
=
true
dialogVisible
=
true
}
}
function
onUpdateSuccess
()
{
dialogVisible
=
false
appList
?.
refetch
()
}
</
script
>
</
script
>
<
template
>
<
template
>
<AppCard
title=
"实验管理"
>
<AppCard
title=
"实验管理"
>
<AppList
v-bind=
"listOptions"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
>
<template
#
header-buttons
>
<template
#
header-buttons
>
<el-button
type=
"primary"
round
:icon=
"CirclePlusFilled"
@
click=
"handleAdd"
>
新增实验
</el-button>
<el-button
type=
"primary"
round
:icon=
"CirclePlusFilled"
@
click=
"handleAdd"
>
新增实验
</el-button>
</
template
>
</
template
>
...
@@ -57,9 +71,9 @@ function handleUpdate() {
...
@@ -57,9 +71,9 @@ function handleUpdate() {
<el-button
type=
"primary"
round
>
<el-button
type=
"primary"
round
>
<router-link
:to=
"`/admin/system/experiment/$
{row.id}`" target="_blank">关联班级与分组
</router-link>
<router-link
:to=
"`/admin/system/experiment/$
{row.id}`" target="_blank">关联班级与分组
</router-link>
</el-button>
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleUpdate"
>
编辑
</el-button>
<el-button
type=
"primary"
round
@
click=
"handleUpdate
(row)
"
>
编辑
</el-button>
</
template
>
</
template
>
</AppList>
</AppList>
</AppCard>
</AppCard>
<FormDialog
v-model=
"dialogVisible"
></FormDialog>
<FormDialog
v-model=
"dialogVisible"
:data=
"rowData"
@
update=
"onUpdateSuccess"
v-if=
"dialogVisible"
></FormDialog>
</template>
</template>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论