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

chore: update

上级 9239d83a
...@@ -23,27 +23,21 @@ function handleChange(id: string, type: number) { ...@@ -23,27 +23,21 @@ function handleChange(id: string, type: number) {
<template> <template>
<div class="bg"> <div class="bg">
<router-link to="/teacher/lab/book" class="link1"></router-link> <router-link to="/teacher/contest/score" class="link1"></router-link>
<router-link to="/teacher/lab/record" class="link2"></router-link> <router-link to="/teacher/contest/record" class="link2"></router-link>
<router-link to="/teacher/lab/video" class="link3"></router-link> <router-link to="/teacher/contest/discuss" class="link3"></router-link>
<router-link to="/teacher/lab/discuss" class="link4"></router-link> <router-link to="/teacher/contest/discuss" class="link4"></router-link>
</div> </div>
<div class="select-group"> <div class="select-group">
<el-select size="large" placeholder="实验指导书" @change="handleChange($event, 1)"> <el-select size="large" placeholder="大赛评分" @change="handleChange($event, 1)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
<el-select size="large" placeholder="实验视频" @change="handleChange($event, 2)"> <el-select size="large" placeholder="大赛成绩发布" @change="handleChange($event, 2)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
<!-- <el-select size="large" placeholder="实验答疑" @change="handleChange($event, 3)"> <el-select size="large" placeholder="大赛成绩分析" @change="handleChange($event, 2)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
<el-select size="large" placeholder="实验成绩" @change="handleChange($event, 4)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select size="large" placeholder="大赛评分" @change="handleChange($event, 5)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> -->
</div> </div>
</template> </template>
...@@ -51,7 +45,7 @@ function handleChange(id: string, type: number) { ...@@ -51,7 +45,7 @@ function handleChange(id: string, type: number) {
.bg { .bg {
position: relative; position: relative;
margin: 20px auto; margin: 20px auto;
background: url(@/assets/images/home_teacher_bg.png) no-repeat center center; background: url(@/assets/images/home_expert_bg.png) no-repeat center center;
background-size: contain; background-size: contain;
width: 1308px; width: 1308px;
height: 642px; height: 642px;
......
<script setup lang="ts">
import type { ExperimentItem } from '../types'
import { getExperimentList } from '../api'
const router = useRouter()
let list = $ref<ExperimentItem[]>([])
function fetchList() {
getExperimentList().then(res => {
list = res.data.list
})
}
onMounted(() => {
fetchList()
})
function handleChange(id: string, type: number) {
if (type === 1) {
router.push({ path: '/teacher/lab/book', query: { experiment_id: id } })
} else if (type === 2) {
router.push({ path: '/teacher/lab/video', query: { experiment_id: id } })
}
}
</script>
<template>
<div class="bg">
<router-link to="/teacher/lab/book" class="link1"></router-link>
<router-link to="/teacher/lab/record" class="link2"></router-link>
<router-link to="/teacher/lab/video" class="link3"></router-link>
<router-link to="/teacher/lab/discuss" class="link4"></router-link>
</div>
<div class="select-group">
<el-select size="large" placeholder="实验指导书" @change="handleChange($event, 1)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select size="large" placeholder="实验视频" @change="handleChange($event, 2)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<!-- <el-select size="large" placeholder="实验答疑" @change="handleChange($event, 3)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select size="large" placeholder="实验成绩" @change="handleChange($event, 4)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select size="large" placeholder="大赛评分" @change="handleChange($event, 5)">
<el-option v-for="item in list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> -->
</div>
</template>
<style lang="scss" scoped>
.bg {
position: relative;
margin: 20px auto;
background: url(@/assets/images/home_teacher_bg.png) no-repeat center center;
background-size: contain;
width: 1308px;
height: 642px;
.link1 {
position: absolute;
bottom: 100px;
width: 400px;
height: 300px;
}
.link2 {
position: absolute;
left: 450px;
bottom: 50px;
width: 310px;
height: 250px;
}
.link3 {
position: absolute;
top: 0;
right: 80px;
width: 400px;
height: 300px;
}
.link4 {
position: absolute;
bottom: 0;
right: 0;
width: 400px;
height: 340px;
}
}
.select-group {
position: fixed;
bottom: 40px;
.el-select {
width: 144px;
:deep(.el-input__wrapper) {
box-shadow: none;
}
}
.el-select + .el-select {
margin-left: 20px;
}
}
</style>
...@@ -3,15 +3,17 @@ import AppMessage from '@/components/Message.vue' ...@@ -3,15 +3,17 @@ import AppMessage from '@/components/Message.vue'
import Total from '../components/Total.vue' import Total from '../components/Total.vue'
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
const userStore = useUserStore() const userStore = useUserStore()
const StudentHome = defineAsyncComponent(() => import('../components/StudentHome.vue'))
const AdminHome = defineAsyncComponent(() => import('../components/AdminHome.vue')) const AdminHome = defineAsyncComponent(() => import('../components/AdminHome.vue'))
const TeacherHome = defineAsyncComponent(() => import('../components/TeacherHome.vue'))
const StudentHome = defineAsyncComponent(() => import('../components/StudentHome.vue'))
</script> </script>
<template> <template>
<div class="home"> <div class="home">
<Total></Total> <Total></Total>
<StudentHome v-if="userStore.role?.id === 1"></StudentHome> <AdminHome v-if="userStore.role?.id === 6"></AdminHome>
<AdminHome v-else></AdminHome> <TeacherHome v-else-if="userStore.role?.id === 5"></TeacherHome>
<StudentHome v-else></StudentHome>
</div> </div>
<AppMessage></AppMessage> <AppMessage></AppMessage>
</template> </template>
......
...@@ -8,7 +8,8 @@ export const routes: Array<RouteRecordRaw> = [ ...@@ -8,7 +8,8 @@ export const routes: Array<RouteRecordRaw> = [
children: [ children: [
{ path: '', component: () => import('./views/Index.vue') }, { path: '', component: () => import('./views/Index.vue') },
{ path: 'join', component: () => import('./views/Join.vue') }, { path: 'join', component: () => import('./views/Join.vue') },
{ path: 'lab/:id', component: () => import('./views/Lab.vue'), props: true } { path: 'lab/:id', component: () => import('./views/Lab.vue'), props: true },
{ path: 'score', component: () => import('./views/Score.vue') }
] ]
} }
] ]
<script setup lang="ts"></script>
<template>
<AppCard></AppCard>
</template>
...@@ -6,26 +6,34 @@ interface State { ...@@ -6,26 +6,34 @@ interface State {
studentMenus: IMenuItem[] studentMenus: IMenuItem[]
adminMenus: IMenuItem[] adminMenus: IMenuItem[]
teacherMenus: IMenuItem[] teacherMenus: IMenuItem[]
expertMenus: IMenuItem[]
} }
// 学生菜单 // 学生菜单
const studentMenus: IMenuItem[] = [ const studentMenus: IMenuItem[] = [
{ {
name: '智能营销', name: '首页',
path: '/'
},
{
name: '我的实验',
path: '/student/lab' path: '/student/lab'
}, },
{ {
name: '技能大赛', name: '我的大赛',
path: '/student/contest' path: '/student/contest'
},
{
name: '大赛成绩查询',
path: '/student/contest/score'
} }
] ]
// 教师、专家菜单 // 教师菜单
const teacherMenus: IMenuItem[] = [ const teacherMenus: IMenuItem[] = [
{ {
name: '智能营销', name: '首页',
path: '/teacher/lab', path: '/'
tag: 'v1-teacher', },
children: [
{ {
name: '实验指导书管理', name: '实验指导书管理',
path: '/teacher/lab/book', path: '/teacher/lab/book',
...@@ -45,13 +53,18 @@ const teacherMenus: IMenuItem[] = [ ...@@ -45,13 +53,18 @@ const teacherMenus: IMenuItem[] = [
name: '实验成绩管理', name: '实验成绩管理',
path: '/teacher/lab/record', path: '/teacher/lab/record',
tag: 'v1-teacher-record' tag: 'v1-teacher-record'
}
]
}, },
{ {
name: '技能大赛', name: '大赛训练答疑',
path: '/teacher/contest', path: '/teacher/contest/discuss'
children: [ }
]
// 专家菜单
const expertMenus: IMenuItem[] = [
{
name: '首页',
path: '/'
},
{ {
name: '训练答疑', name: '训练答疑',
path: '/teacher/contest/discuss' path: '/teacher/contest/discuss'
...@@ -61,30 +74,31 @@ const teacherMenus: IMenuItem[] = [ ...@@ -61,30 +74,31 @@ const teacherMenus: IMenuItem[] = [
path: '/teacher/contest/record' path: '/teacher/contest/record'
}, },
{ {
name: '发布成绩', name: '大赛发布成绩',
path: '/teacher/contest/score' path: '/teacher/contest/score'
},
{
name: '大赛成绩分析',
path: '/teacher/contest/analyze',
children: [
{
name: '赛项成绩画像',
path: '/teacher/contest/score/analyze'
},
{
name: '学生个人成绩画像',
path: '/teacher/contest/student/analyze'
} }
] ]
} }
] ]
// 管理员菜单 // 管理员菜单
const adminMenus: IMenuItem[] = [ const adminMenus: IMenuItem[] = [
{
name: '智能营销',
path: '/admin/lab',
tag: 'v1-backend-experiment',
children: [
{ {
name: '实验管理', name: '实验管理',
path: '/admin/lab/experiment', path: '/admin/lab/experiment',
tag: 'v1-backend-experiment' tag: 'v1-backend-experiment'
}
]
}, },
{
name: '技能大赛',
path: '/admin/contest',
children: [
{ {
name: '赛项管理', name: '赛项管理',
path: '/admin/contest/items' path: '/admin/contest/items'
...@@ -97,8 +111,6 @@ const adminMenus: IMenuItem[] = [ ...@@ -97,8 +111,6 @@ const adminMenus: IMenuItem[] = [
name: '评分专家管理', name: '评分专家管理',
path: '/admin/contest/experts' path: '/admin/contest/experts'
} }
]
}
] ]
export const useMenuStore = defineStore({ export const useMenuStore = defineStore({
...@@ -106,17 +118,20 @@ export const useMenuStore = defineStore({ ...@@ -106,17 +118,20 @@ export const useMenuStore = defineStore({
state: (): State => ({ state: (): State => ({
studentMenus, studentMenus,
adminMenus, adminMenus,
teacherMenus teacherMenus,
expertMenus
}), }),
getters: { getters: {
menus: state => { menus: state => {
const userStore = useUserStore() const userStore = useUserStore()
if (userStore.role?.id === 6) { if (userStore.role?.id === 6) {
return state.adminMenus return state.expertMenus
} else if (userStore.role?.id === 5) { } else if (userStore.role?.id === 5) {
return state.teacherMenus return state.teacherMenus
} else { } else if (userStore.role?.id === 1) {
return state.studentMenus return state.studentMenus
} else {
return state.adminMenus
} }
} }
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论