提交 70618bc3 authored 作者: 王鹏飞's avatar 王鹏飞

chore: 优化实验管理页面

上级 d348409b
...@@ -21,6 +21,10 @@ export function updateExperiment(data: ExperimentCreateItem) { ...@@ -21,6 +21,10 @@ export function updateExperiment(data: ExperimentCreateItem) {
return httpRequest.post('/api/resource/v1/backend/experiment/update', data) return httpRequest.post('/api/resource/v1/backend/experiment/update', data)
} }
// 获取课程实验列表
export function getCourseExperimentList(params: { course_id: string }) {
return httpRequest.get('/api/resource/v1/backend/experiment/experiments', { params })
}
// 获取实验课程列表 // 获取实验课程列表
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 })
......
import { getCourseExperimentList } from '../api'
interface ExperimentType {
id: string
name: string
}
export function useGetCourseExperimentList() {
const courseExperiments = ref<ExperimentType[]>([])
function updateCourseExperiments(courseId: string) {
getCourseExperimentList({ course_id: courseId }).then((res: any) => {
courseExperiments.value = res.data
})
}
return { courseExperiments, updateCourseExperiments }
}
...@@ -3,39 +3,98 @@ import type { ExperimentItem } from '../types' ...@@ -3,39 +3,98 @@ import type { ExperimentItem } from '../types'
import { CirclePlus } from '@element-plus/icons-vue' import { CirclePlus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue' import AppList from '@/components/base/AppList.vue'
import { getExperimentList } from '../api' import { getExperimentList } from '../api'
import { useGetCourseList } from '../composables/useGetCourseList'
import { useGetCourseExperimentList } from '../composables/useGetCourseExperimentList'
import { useMapStore } from '@/stores/map'
const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue')) const FormDialog = defineAsyncComponent(() => import('../components/FormDialog.vue'))
// 数据状态
const status = useMapStore().getMapValuesByKey('system_status')
// 课程列表
const { courses, updateCourses } = useGetCourseList()
updateCourses('')
// 课程实验
const { courseExperiments, updateCourseExperiments } = useGetCourseExperimentList()
const appList = $ref<InstanceType<typeof AppList> | null>(null) const appList = $ref<InstanceType<typeof AppList> | null>(null)
const params = reactive({
id: '',
course_id: '',
name: '',
status: ''
})
watch(
() => params.course_id,
() => {
updateCourseExperiments(params.course_id)
}
)
// 列表配置 // 列表配置
const listOptions = { const listOptions = $computed(() => {
remote: { return {
httpRequest: getExperimentList, remote: {
params: { name: '' }, httpRequest: getExperimentList,
callback(data: { total: number; list: ExperimentItem[] }) { params,
const { list, total } = data beforeRequest(requestParams: any) {
const dataList = list.map(item => { if (params.course_id !== requestParams.course_id) {
const teacher_names = item.teacher.map(teacher => teacher.name).join('、') requestParams.id = ''
return { ...item, teacher_names } }
}) params.course_id = requestParams.course_id || ''
return { list: dataList, total } return requestParams
} },
}, callback(data: { total: number; list: ExperimentItem[] }) {
filters: [{ type: 'input', prop: 'name', label: '实验名称', placeholder: '请输入实验名称' }], const { list, total } = data
columns: [ const dataList = list.map(item => {
{ label: '序号', type: 'index', width: 60 }, const teacher_names = item.teacher.map(teacher => teacher.name).join('、')
{ label: '实验课程名称', prop: 'course_name' }, return { ...item, teacher_names }
{ label: '实验名称', prop: 'name' }, })
{ label: '实验学时', prop: 'length' }, return { list: dataList, total }
{ label: '指导教师', prop: 'teacher_names' }, }
{ label: '实验类型', prop: 'type_name' }, },
{ label: '实验总成绩', prop: 'score' }, filters: [
{ label: '更新人', prop: 'updated_operator_name' }, {
{ label: '更新时间', prop: 'updated_time' }, type: 'select',
{ label: '操作', slots: 'table-x', width: 200 } prop: 'course_id',
] label: '实验课程',
} placeholder: '请选择实验课程',
options: courses.value,
labelKey: 'name',
valueKey: 'id'
},
{
type: 'select',
prop: 'id',
label: '实验名称',
placeholder: '请选择实验',
options: courseExperiments.value,
labelKey: 'name',
valueKey: 'id'
},
{
type: 'select',
prop: 'status',
label: '生效状态',
placeholder: '请选择生效状态',
options: status
}
],
columns: [
{ label: '序号', type: 'index', width: 60 },
{ label: '实验课程名称', prop: 'course_name' },
{ label: '实验名称', prop: 'name' },
{ label: '实验学时', prop: 'length' },
{ label: '指导教师', prop: 'teacher_names' },
{ label: '实验类型', prop: 'type_name' },
{ label: '实验总成绩', prop: 'score' },
{ label: '生效状态', prop: 'status_name' },
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 200 }
]
}
})
let dialogVisible = $ref(false) let dialogVisible = $ref(false)
const rowData = ref<ExperimentItem | undefined | null>(null) const rowData = ref<ExperimentItem | undefined | null>(null)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论