Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-lab
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-lab
Commits
04ed8fbf
提交
04ed8fbf
authored
8月 17, 2022
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
010d6187
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
217 行增加
和
62 行删除
+217
-62
useGetProjectList.ts
src/composables/useGetProjectList.ts
+31
-12
main.ts
src/main.ts
+3
-1
api.ts
src/modules/admin/system/experiment/api.ts
+18
-2
FormDialog.vue
...modules/admin/system/experiment/components/FormDialog.vue
+64
-28
useGetCourseList.ts
...s/admin/system/experiment/composables/useGetCourseList.ts
+17
-0
useGetTeacherList.ts
.../admin/system/experiment/composables/useGetTeacherList.ts
+17
-0
types.ts
src/modules/admin/system/experiment/types.ts
+41
-0
Index.vue
src/modules/admin/system/experiment/views/Index.vue
+26
-17
map.ts
src/stores/map.ts
+0
-2
没有找到文件。
src/composables/useGetProjectList.ts
浏览文件 @
04ed8fbf
import
{
getProjectList
}
from
'@/api/base'
import
{
getProjectList
}
from
'@/api/base'
export
function
useProjectList
(
id
?:
string
,
projectId
?:
string
)
{
import
{
useUserStore
}
from
'@/stores/user'
const
list
=
ref
([])
const
members
=
ref
([])
// 部门信息
const
departmentList
=
ref
([])
interface
DepartmentType
{
getProjectList
({
organization_id
:
id
,
project_id
:
projectId
}).
then
((
res
:
any
)
=>
{
id
:
string
list
.
value
=
res
.
data
.
departments
name
:
string
organizations
:
OrganizationType
[]
}
// 机构信息
interface
OrganizationType
{
id
:
string
name
:
string
}
// 成员信息
interface
MemberType
{
id
:
string
name
:
string
}
const
store
=
useUserStore
()
export
function
useGetProjectList
()
{
const
members
=
ref
<
MemberType
[]
>
([])
const
departments
=
ref
<
DepartmentType
[]
>
([])
const
organizations
=
ref
<
OrganizationType
[]
>
([])
getProjectList
({
organization_id
:
store
.
organization
?.
id
,
project_id
:
store
.
project
?.
id
}).
then
((
res
:
any
)
=>
{
members
.
value
=
res
.
data
.
members
members
.
value
=
res
.
data
.
members
departmentList
.
value
=
res
.
data
.
departments
.
reduce
((
a
:
any
,
b
:
any
)
=>
{
departments
.
value
=
res
.
data
.
departments
if
(
b
.
organizations
.
length
)
{
organizations
.
value
=
res
.
data
.
departments
.
reduce
((
result
:
OrganizationType
[],
item
:
DepartmentType
)
=>
{
a
.
push
(
b
.
organizations
)
return
result
.
concat
(
item
.
organizations
)
}
return
a
.
flat
(
Infinity
)
},
[])
},
[])
})
})
return
{
list
,
members
,
departmentList
}
return
{
members
,
departments
,
organizations
}
}
}
src/main.ts
浏览文件 @
04ed8fbf
...
@@ -16,6 +16,8 @@ import modules from './modules'
...
@@ -16,6 +16,8 @@ import modules from './modules'
import
{
permissionDirective
}
from
'@/utils/permission'
import
{
permissionDirective
}
from
'@/utils/permission'
import
{
useMapStore
}
from
'@/stores/map'
const
app
=
createApp
(
App
)
const
app
=
createApp
(
App
)
// 注册公共组件
// 注册公共组件
app
.
component
(
'AppCard'
,
AppCard
).
component
(
'AppList'
,
AppList
).
component
(
'AppUpload'
,
AppUpload
)
app
.
component
(
'AppCard'
,
AppCard
).
component
(
'AppList'
,
AppList
).
component
(
'AppUpload'
,
AppUpload
)
...
@@ -29,4 +31,4 @@ app.use(ElementPlus, { locale: zhCn })
...
@@ -29,4 +31,4 @@ app.use(ElementPlus, { locale: zhCn })
app
.
mount
(
'#app'
)
app
.
mount
(
'#app'
)
document
.
domain
=
'ezijing.com'
useMapStore
().
getMapList
()
src/modules/admin/system/experiment/api.ts
浏览文件 @
04ed8fbf
import
httpRequest
from
'@/utils/axios'
import
httpRequest
from
'@/utils/axios'
import
type
{
ExperimentCreateItem
}
from
'./types'
// 获取实验列表
// 获取实验列表
export
function
getExperimentList
(
params
?:
{
name
?:
string
;
lab_id
?:
string
;
page
?:
number
;
page_size
?:
number
})
{
export
function
getExperimentList
(
params
?:
{
name
?:
string
;
page
?:
number
;
'per-page'
?:
number
})
{
return
httpRequest
.
get
(
'/api/lab/backend/book/index'
,
{
params
})
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/list'
,
{
params
})
}
// 创建实验
export
function
createExperiment
(
data
:
ExperimentCreateItem
)
{
return
httpRequest
.
post
(
'/api/resource//v1/backend/experiment/create'
,
data
)
}
// 获取实验课程列表
export
function
getExperimentCourseList
(
params
:
{
organ_id
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/courses'
,
{
params
})
}
// 获取实验指导老师列表
export
function
getExperimentTeacherList
(
params
:
{
organ_id
?:
string
})
{
return
httpRequest
.
get
(
'/api/resource/v1/backend/experiment/teachers'
,
{
params
})
}
}
src/modules/admin/system/experiment/components/FormDialog.vue
浏览文件 @
04ed8fbf
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
import
type
{
FormInstance
,
FormRules
}
from
'element-plus'
// import { ElMessage } from 'element-plus'
import
type
{
ExperimentCreateItem
}
from
'../types'
import
{
ElMessage
}
from
'element-plus'
import
{
createExperiment
}
from
'../api'
import
{
useGetProjectList
}
from
'@/composables/useGetProjectList'
import
{
useGetCourseList
}
from
'../composables/useGetCourseList'
import
{
useGetTeacherList
}
from
'../composables/useGetTeacherList'
import
{
useMapStore
}
from
'@/stores/map'
interface
Props
{
interface
Props
{
data
?:
any
data
?:
any
...
@@ -8,23 +16,43 @@ interface Props {
...
@@ -8,23 +16,43 @@ interface Props {
const
props
=
defineProps
<
Props
>
()
const
props
=
defineProps
<
Props
>
()
defineEmits
<
{
const
emit
=
defineEmits
<
{
(
e
:
'update'
):
void
(
e
:
'update'
):
void
(
e
:
'update:modelValue'
,
visible
:
boolean
):
void
(
e
:
'update:modelValue'
,
visible
:
boolean
):
void
}
>
()
}
>
()
// 机构列表
const
{
organizations
}
=
useGetProjectList
()
// 课程列表
const
{
courses
}
=
useGetCourseList
()
// 指导教师列表
const
{
teachers
}
=
useGetTeacherList
()
// 实验类型
const
types
=
useMapStore
().
getMapValuesByKey
(
'experiment_type'
)
const
status
=
useMapStore
().
getMapValuesByKey
(
'system_status'
)
const
title
=
$computed
(()
=>
{
const
title
=
$computed
(()
=>
{
return
'新增实验'
return
'新增实验'
})
})
const
formRef
=
$ref
<
FormInstance
>
()
const
formRef
=
$ref
<
FormInstance
>
()
const
form
=
reactive
({
title
:
''
,
status
:
1
})
const
form
=
reactive
<
ExperimentCreateItem
>
({
organ_id
:
''
,
status
:
'1'
,
course_id
:
''
,
name
:
''
,
length
:
''
,
type
:
''
,
score
:
''
,
teachers_id
:
''
,
teachers_ids
:
[]
})
watchEffect
(()
=>
{
watchEffect
(()
=>
{
Object
.
assign
(
form
,
props
.
data
)
Object
.
assign
(
form
,
props
.
data
)
})
})
const
rules
=
ref
<
FormRules
>
({
const
rules
=
ref
<
FormRules
>
({
title
:
[{
required
:
true
,
message
:
'请输入问题描述
'
,
trigger
:
'blur'
}],
organ_id
:
[{
required
:
true
,
message
:
'请选择实验所属部门/学校
'
,
trigger
:
'blur'
}],
co
ntent
:
[{
required
:
true
,
message
:
'请输入问题详情
'
,
trigger
:
'blur'
}]
co
urse_id
:
[{
required
:
true
,
message
:
'请选择实验课程
'
,
trigger
:
'blur'
}]
})
})
// 提交
// 提交
function
handleSubmit
()
{
function
handleSubmit
()
{
...
@@ -32,42 +60,50 @@ function handleSubmit() {
...
@@ -32,42 +60,50 @@ function handleSubmit() {
}
}
// 修改
// 修改
const
update
=
()
=>
{
const
update
=
()
=>
{
// submitSuggestion(form).then(() => {
createExperiment
(
form
).
then
(()
=>
{
// ElMessage({ message: '提交成功', type: 'success' })
ElMessage
({
message
:
'创建成功'
,
type
:
'success'
})
// emit('update')
emit
(
'update'
)
// formRef?.resetFields()
emit
(
'update:modelValue'
,
false
)
// })
formRef
?.
resetFields
()
})
}
}
</
script
>
</
script
>
<
template
>
<
template
>
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
>
<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=
"title"
>
<el-form-item
label=
"实验所属部门/学校"
prop=
"organ_id"
>
<el-select
v-model=
"form.title"
></el-select>
<el-select
v-model=
"form.organ_id"
style=
"width: 100%"
>
<el-option
v-for=
"item in organizations"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验课程"
prop=
"content"
>
<el-form-item
label=
"实验课程"
prop=
"course_id"
>
<el-select
v-model=
"form.title"
></el-select>
<el-select
v-model=
"form.course_id"
style=
"width: 100%"
>
<el-option
v-for=
"item in courses"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验名称"
prop=
"
files
"
>
<el-form-item
label=
"实验名称"
prop=
"
name
"
>
<el-input
v-model=
"form.
titl
e"
/>
<el-input
v-model=
"form.
nam
e"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验学时"
prop=
"
files
"
>
<el-form-item
label=
"实验学时"
prop=
"
length
"
>
<el-input
v-model=
"form.
title
"
/>
<el-input
v-model=
"form.
length
"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"指导教师"
prop=
"files"
>
<el-form-item
label=
"指导教师"
prop=
"teachers_ids"
>
<el-input
v-model=
"form.title"
/>
<el-select
v-model=
"form.teachers_id"
style=
"width: 100%"
>
<el-option
v-for=
"item in teachers"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验类型"
prop=
"files"
>
<el-form-item
label=
"实验类型"
prop=
"type"
>
<el-select
v-model=
"form.title"
></el-select>
<el-select
v-model=
"form.type"
style=
"width: 100%"
>
<el-option
v-for=
"item in types"
:key=
"item.id"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"实验总成绩"
prop=
"
files
"
>
<el-form-item
label=
"实验总成绩"
prop=
"
score
"
>
<el-input
v-model=
"form.
titl
e"
/>
<el-input
v-model=
"form.
scor
e"
/>
</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"
class=
"ml-4"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
label=
"1"
>
有效
</el-radio>
<el-radio
v-for=
"item in status"
:key=
"item.id"
:label=
"item.value"
>
{{
item
.
label
}}
</el-radio>
<el-radio
label=
"2"
>
失效
</el-radio>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-row
justify=
"center"
>
<el-row
justify=
"center"
>
...
...
src/modules/admin/system/experiment/composables/useGetCourseList.ts
0 → 100644
浏览文件 @
04ed8fbf
import
{
getExperimentCourseList
}
from
'../api'
import
{
useUserStore
}
from
'@/stores/user'
interface
CourseType
{
id
:
string
name
:
string
}
const
store
=
useUserStore
()
export
function
useGetCourseList
()
{
const
courses
=
ref
<
CourseType
[]
>
([])
getExperimentCourseList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
courses
.
value
=
res
.
data
})
return
{
courses
}
}
src/modules/admin/system/experiment/composables/useGetTeacherList.ts
0 → 100644
浏览文件 @
04ed8fbf
import
{
getExperimentTeacherList
}
from
'../api'
import
{
useUserStore
}
from
'@/stores/user'
interface
TeacherType
{
id
:
string
name
:
string
}
const
store
=
useUserStore
()
export
function
useGetTeacherList
()
{
const
teachers
=
ref
<
TeacherType
[]
>
([])
getExperimentTeacherList
({
organ_id
:
store
.
organization
?.
id
}).
then
((
res
:
any
)
=>
{
teachers
.
value
=
res
.
data
})
return
{
teachers
}
}
src/modules/admin/system/experiment/types.ts
0 → 100644
浏览文件 @
04ed8fbf
export
interface
ExperimentItemTeacher
{
id
:
string
name
:
string
}
export
interface
ExperimentItem
{
course_id
:
string
course_name
:
string
created_operator
:
string
created_operator_name
:
string
created_time
:
string
delete_time
:
string
id
:
string
length
:
string
name
:
string
organ_id
:
string
organ_id_name
:
string
project_id
:
string
project_id_name
:
string
score
:
string
status
:
string
status_name
:
string
teacher
:
ExperimentItemTeacher
[]
type
:
string
type_name
:
string
updated_operator
:
string
updated_operator_name
:
string
updated_time
:
string
}
export
interface
ExperimentCreateItem
{
organ_id
:
string
status
:
string
course_id
:
string
name
:
string
length
:
string
type
:
string
score
:
string
teachers_id
:
string
teachers_ids
?:
string
[]
}
src/modules/admin/system/experiment/views/Index.vue
浏览文件 @
04ed8fbf
<
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
FormDialog
from
'../components/FormDialog.vue'
import
FormDialog
from
'../components/FormDialog.vue'
//
import { getExperimentList } from '../api'
import
{
getExperimentList
}
from
'../api'
// 列表配置
// 列表配置
const
listOptions
=
{
const
listOptions
=
{
// remote: {
remote
:
{
// httpRequest: getExperimentList,
httpRequest
:
getExperimentList
,
// params: { name: '' }
params
:
{
name
:
''
},
// },
callback
(
data
:
{
total
:
number
;
list
:
ExperimentItem
[]
})
{
const
{
list
,
total
}
=
data
const
dataList
=
list
.
map
(
item
=>
{
const
teacher_names
=
item
.
teacher
.
map
(
teacher
=>
teacher
.
name
).
join
(
'、'
)
return
{
...
item
,
teacher_names
}
})
return
{
list
:
dataList
,
total
}
}
},
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'实验名称'
,
placeholder
:
'请输入实验名称'
}],
filters
:
[{
type
:
'input'
,
prop
:
'name'
,
label
:
'实验名称'
,
placeholder
:
'请输入实验名称'
}],
columns
:
[
columns
:
[
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'序号'
,
type
:
'index'
,
width
:
60
},
{
label
:
'实验课程名称'
,
prop
:
'name'
},
{
label
:
'实验课程名称'
,
prop
:
'
course_
name'
},
{
label
:
'实验名称'
,
prop
:
'name'
},
{
label
:
'实验名称'
,
prop
:
'name'
},
{
label
:
'实验学时'
,
prop
:
'
name
'
},
{
label
:
'实验学时'
,
prop
:
'
length
'
},
{
label
:
'指导教师'
,
prop
:
'
name
'
},
{
label
:
'指导教师'
,
prop
:
'
teacher_names
'
},
{
label
:
'实验类型'
,
prop
:
'name'
},
{
label
:
'实验类型'
,
prop
:
'
type_
name'
},
{
label
:
'实验总成绩'
,
prop
:
'
nam
e'
},
{
label
:
'实验总成绩'
,
prop
:
'
scor
e'
},
{
label
:
'更新人'
,
prop
:
'name'
},
{
label
:
'更新人'
,
prop
:
'
updated_operator_
name'
},
{
label
:
'更新时间'
,
prop
:
'
na
me'
},
{
label
:
'更新时间'
,
prop
:
'
updated_ti
me'
},
{
label
:
'操作'
,
slots
:
'table-x'
,
width
:
300
}
{
label
:
'操作'
,
slots
:
'table-x'
,
width
:
300
}
],
]
data
:
[{}]
}
}
let
dialogVisible
=
$ref
(
false
)
let
dialogVisible
=
$ref
(
false
)
...
@@ -41,12 +49,13 @@ function handleUpdate() {
...
@@ -41,12 +49,13 @@ function handleUpdate() {
<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
>
<
template
#
table-x
>
<
template
#
table-x=
"{ row }: { row: ExperimentItem }"
>
<el-button
type=
"primary"
round
>
<el-button
type=
"primary"
round
>
<router-link
to=
"/admin/system/experiment/123
"
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
>
<el-button
type=
"primary"
round
>
<router-link
to=
"/admin/system/experiment/123
"
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"
>
编辑
</el-button>
</
template
>
</
template
>
...
...
src/stores/map.ts
浏览文件 @
04ed8fbf
...
@@ -40,5 +40,3 @@ export const useMapStore = defineStore({
...
@@ -40,5 +40,3 @@ export const useMapStore = defineStore({
}
}
}
}
})
})
useMapStore
().
getMapList
()
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论