提交 1daf7d8f authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 9fc46ddc
......@@ -145,6 +145,7 @@ defineExpose({ refetch, tableRef })
<el-select
v-model="params[item.prop]"
v-bind="item"
filterable
clearable
@change="search"
v-if="item.type === 'select'"
......
import httpRequest from '@/utils/axios'
// 获取学员列表
export function getBookList(params?: { name?: string; lab_id?: string; page?: number; page_size?: number }) {
return httpRequest.get('/api/lab/backend/book/index', { params })
// 获取讨论交流列表
export function getDiscussList(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')
}
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 }
}
<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 = {
// remote: {
// httpRequest: getBookList,
// params: { name: '', lab_id: '' }
// },
const listOptions = $computed(() => {
return {
remote: {
httpRequest: getDiscussList,
params: { student_name: '', course_id: '', experiment_id: '', specialty_id: '', class_id: '' }
},
filterForm: { labelWidth: 100 },
filters: [
{ type: 'select', prop: 'lab_id', label: '实验课程名称', placeholder: '请选择实验课程名称' },
{ type: 'select', prop: 'lab_id', label: '实验名称', placeholder: '请选择实验名称' },
{ type: 'select', prop: 'lab_id', label: '专业', placeholder: '请选择专业' },
{ type: 'select', prop: 'lab_id', label: '班级', placeholder: '请选择班级' },
{ type: 'input', prop: 'name', label: '学生姓名', placeholder: '请输入学生姓名' }
{
type: 'select',
prop: 'course_id',
label: '实验课程名称',
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: [
{ label: '序号', type: 'index', width: 60 },
{ label: '实验名称', prop: 'name' },
{ label: '专业', prop: 'name' },
{ label: '班级', prop: 'name' },
{ label: '姓名', prop: 'name' },
{ label: '学号', prop: 'name' },
{ label: '标题', prop: 'name' },
{ label: '评论数量', prop: 'name' },
{ label: '是否回复', prop: 'name' },
{ label: '更新时间', prop: 'name' },
{ label: '操作', slots: 'table-x' }
],
data: [{}]
}
{ label: '实验名称', prop: 'experiment_id_name' },
{ label: '专业', prop: 'specialty_id_name' },
{ label: '班级', prop: 'class_id_name' },
{ label: '姓名', prop: 'student_name' },
{ label: '学号', prop: 'sno_number' },
{ label: '标题', prop: 'title' },
{ label: '评论数量', prop: 'replies_num', slots: 'table-replies-num' },
{ label: '是否回复', prop: 'is_reply_name', slots: 'table-reply' },
{ label: '更新时间', prop: 'created_time' },
{ label: '操作', slots: 'table-x', width: 100 }
]
}
})
</script>
<template>
<AppCard title="实验讨论交流">
<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>
<el-button>评论</el-button>
<el-button text type="primary">评论</el-button>
</template>
</AppList>
</AppCard>
</template>
<style lang="scss">
.is-success {
color: #63a103;
}
.is-info {
color: #b18862;
}
</style>
import httpRequest from '@/utils/axios'
// 获取学员列表
export function getBookList(params?: { name?: string; lab_id?: string; page?: number; page_size?: number }) {
return httpRequest.get('/api/lab/backend/book/index', { params })
// 获取实验成绩列表
export function getExperimentRecordList(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')
}
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 }
}
<script setup lang="ts">
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 listOptions = {
// remote: {
// httpRequest: getBookList,
// params: { name: '', lab_id: '' }
// },
const listOptions = $computed(() => {
return {
remote: {
httpRequest: getExperimentRecordList,
params: { student_name: '', course_id: '', experiment_id: '', specialty_id: '', class_id: '' }
},
filterForm: { labelWidth: 100 },
filters: [
{ type: 'select', prop: 'lab_id', label: '实验课程名称', placeholder: '请选择实验课程名称' },
{ type: 'select', prop: 'lab_id', label: '实验名称', placeholder: '请选择实验名称' },
{ type: 'select', prop: 'lab_id', label: '专业', placeholder: '请选择专业' },
{ type: 'select', prop: 'lab_id', label: '班级', placeholder: '请选择班级' },
{ type: 'input', prop: 'name', label: '学生姓名', placeholder: '请输入学生姓名' }
{
type: 'select',
prop: 'course_id',
label: '实验课程名称',
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: [
{ label: '序号', type: 'index', width: 60 },
{ label: '所属专业', prop: 'name' },
{ label: '所属班级', prop: 'name' },
{ label: '姓名', prop: 'name' },
{ label: '学号', prop: 'name' },
{ label: '实验名称', prop: 'name' },
{ label: '提交状态', prop: 'name' },
{ label: '实验成绩', prop: 'name' },
{ label: '更新时间', prop: 'name' },
{ label: '操作', slots: 'table-x' }
],
data: [{}]
}
{ label: '所属专业', prop: 'specialty_name' },
{ label: '所属班级', prop: 'class_name' },
{ label: '姓名', prop: 'student_name' },
{ label: '学号', prop: 'sno_number' },
{ label: '实验名称', prop: 'experiment_name' },
{ label: '提交状态', prop: 'status_name', slots: 'table-status' },
{ label: '实验成绩', prop: 'score', slots: 'table-score' },
{ label: '更新时间', prop: 'commit_time' },
{ label: '操作', slots: 'table-x', width: 100 }
]
}
})
</script>
<template>
......@@ -45,9 +81,24 @@ const listOptions = {
</a>
</el-row>
</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>
<el-button>打分</el-button>
<el-button text type="primary">打分</el-button>
</template>
</AppList>
</AppCard>
</template>
<style lang="scss">
.is-success {
color: #63a103;
}
.is-info {
color: #b18862;
}
</style>
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') }]
}
]
import type { IMenuItem } from '@/types'
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 {
studentMenus: IMenuItem[]
......@@ -25,41 +25,41 @@ const adminMenus: IMenuItem[] = [
path: '/admin/lab',
children: [
{
icon: markRaw(Tickets),
icon: markRaw(Notebook),
name: '实验指导书管理',
path: '/admin/lab/book'
},
{
icon: markRaw(Tickets),
icon: markRaw(VideoCamera),
name: '实验操作视频管理',
path: '/admin/lab/video'
},
{
icon: markRaw(Tickets),
icon: markRaw(ChatSquare),
name: '实验讨论交流',
path: '/admin/lab/discuss'
},
{
icon: markRaw(Tickets),
icon: markRaw(Finished),
name: '实验成绩管理',
path: '/admin/lab/score'
}
]
},
{
name: '技能大赛',
path: '/admin/contest'
},
{
name: '大赛成绩',
path: '/admin/contest/score'
},
// {
// name: '技能大赛',
// path: '/admin/contest'
// },
// {
// name: '大赛成绩',
// path: '/admin/contest/score'
// },
{
name: '系统管理',
path: '/admin/system',
children: [
{
icon: markRaw(Tickets),
icon: markRaw(ScaleToOriginal),
name: '实验管理',
path: '/admin/system/experiment'
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论