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

chore: update

上级 eff22a07
...@@ -32,13 +32,13 @@ function handleClick(data: MessageType) { ...@@ -32,13 +32,13 @@ function handleClick(data: MessageType) {
// 指导老师 // 指导老师
// 实验评分 // 实验评分
if (payload?.channel === 1) { if (payload?.channel === 1) {
router.push({ path: '/teacher/lab/record', query: payload }) router.push({ path: '/admin/lab/record', query: payload })
} }
} else if (userStore.role?.id === 6) { } else if (userStore.role?.id === 6) {
// 专家 // 专家
// 大赛评分 // 大赛评分
if (payload?.channel === 3) { if (payload?.channel === 3) {
router.push({ path: '/teacher/contest/record', query: payload }) router.push({ path: '/admin/contest/record', query: payload })
} }
} else { } else {
// 学生 // 学生
......
...@@ -90,14 +90,21 @@ function onUpdateSuccess() { ...@@ -90,14 +90,21 @@ function onUpdateSuccess() {
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<!-- <el-button type="primary" round :icon="CirclePlus" @click="handleAdd">新增参赛选手</el-button> --> <!-- <el-button type="primary" round :icon="CirclePlus" @click="handleAdd">新增参赛选手</el-button> -->
<el-button type="primary" round :icon="Upload" @click="importVisible = true">批量导入</el-button> <el-button
type="primary"
round
:icon="Upload"
@click="importVisible = true"
v-permission="'competition-competitor-import'"
>批量导入</el-button
>
</template> </template>
<template #table-x="{ row }: { row: Contestant }"> <template #table-x="{ row }: { row: Contestant }">
<el-button type="primary" round @click="handleView(row)" v-permission="'v1-backend-experiment-view'" <el-button type="primary" round @click="handleView(row)" v-permission="'competition-competitor-detail'"
>查看</el-button >查看</el-button
> >
<el-button type="primary" round @click="handleUpdate(row)" v-permission="'v1-backend-experiment-update'" <el-button type="primary" round @click="handleUpdate(row)" v-permission="'competition-competitor-update'"
>编辑</el-button >编辑</el-button
> >
</template> </template>
...@@ -108,15 +115,13 @@ function onUpdateSuccess() { ...@@ -108,15 +115,13 @@ function onUpdateSuccess() {
v-model="dialogVisible" v-model="dialogVisible"
:data="rowData" :data="rowData"
@update="onUpdateSuccess" @update="onUpdateSuccess"
v-if="dialogVisible && rowData" v-if="dialogVisible && rowData"></FormDialog>
></FormDialog>
<!-- 查看 --> <!-- 查看 -->
<ViewDialog <ViewDialog
v-model="viewVisible" v-model="viewVisible"
:data="rowData" :data="rowData"
@update="onUpdateSuccess" @update="onUpdateSuccess"
v-if="viewVisible && rowData" v-if="viewVisible && rowData"></ViewDialog>
></ViewDialog>
<!-- 批量导入 --> <!-- 批量导入 -->
<ImportDialog v-model="importVisible" @update="onUpdateSuccess" v-if="importVisible"></ImportDialog> <ImportDialog v-model="importVisible" @update="onUpdateSuccess" v-if="importVisible"></ImportDialog>
</template> </template>
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/contest/discuss', path: '/admin/contest/discuss',
component: AppLayout, component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }] children: [{ path: '', component: () => import('./views/Index.vue') }]
} }
......
...@@ -63,7 +63,7 @@ function onUpdateSuccess() { ...@@ -63,7 +63,7 @@ function onUpdateSuccess() {
<span :class="{ 'is-info': !!row.replies_num }">{{ row.replies_num }}</span> <span :class="{ 'is-info': !!row.replies_num }">{{ row.replies_num }}</span>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button text type="primary" @click="handleComment(row)" v-permission="'v1-teacher-discussion-view'" <el-button text type="primary" @click="handleComment(row)" v-permission="'v1-teacher-train-discussion-comment'"
>答疑</el-button >答疑</el-button
> >
</template> </template>
...@@ -73,8 +73,7 @@ function onUpdateSuccess() { ...@@ -73,8 +73,7 @@ function onUpdateSuccess() {
v-model="dialogVisible" v-model="dialogVisible"
:data="rowData" :data="rowData"
@update="onUpdateSuccess" @update="onUpdateSuccess"
v-if="dialogVisible && rowData" v-if="dialogVisible && rowData"></DiscussDialog>
></DiscussDialog>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
......
...@@ -58,7 +58,7 @@ const listOptions = $computed(() => { ...@@ -58,7 +58,7 @@ const listOptions = $computed(() => {
}) })
const importVisible = $ref(false) const importVisible = $ref(false)
const rowData = ref<Expert | undefined | null>(null) const rowData = ref<Expert>()
// 查看 // 查看
let viewDialogVisible = $ref(false) let viewDialogVisible = $ref(false)
...@@ -69,7 +69,7 @@ function handleView(row: Expert) { ...@@ -69,7 +69,7 @@ function handleView(row: Expert) {
// 新增 // 新增
function handleAdd() { function handleAdd() {
rowData.value = null rowData.value = undefined
dialogVisible = true dialogVisible = true
} }
...@@ -89,17 +89,22 @@ function onUpdateSuccess() { ...@@ -89,17 +89,22 @@ function onUpdateSuccess() {
<AppCard title="评分专家管理"> <AppCard title="评分专家管理">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<el-button type="primary" round :icon="CirclePlus" @click="handleAdd">新增评分专家</el-button> <el-button type="primary" round :icon="CirclePlus" @click="handleAdd" v-permission="'expert-create'"
<el-button type="primary" round :icon="Upload" @click="importVisible = true">批量导入</el-button> >新增评分专家</el-button
>
<el-button
type="primary"
round
:icon="Upload"
@click="importVisible = true"
v-permission="'expert-batch-import'"
>批量导入</el-button
>
</template> </template>
<template #table-x="{ row }: { row: Expert }"> <template #table-x="{ row }: { row: Expert }">
<el-button type="primary" round @click="handleView(row)" v-permission="'v1-backend-experiment-view'" <el-button type="primary" round @click="handleView(row)" v-permission="'expert-detail'">查看</el-button>
>查看</el-button <el-button type="primary" round @click="handleUpdate(row)" v-permission="'expert-update'">编辑</el-button>
>
<el-button type="primary" round @click="handleUpdate(row)" v-permission="'v1-backend-experiment-update'"
>编辑</el-button
>
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
......
...@@ -46,7 +46,7 @@ const exportUrl = $computed(() => { ...@@ -46,7 +46,7 @@ const exportUrl = $computed(() => {
<el-dialog title="参赛选手列表"> <el-dialog title="参赛选手列表">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<a :href="exportUrl" target="_blank"> <a :href="exportUrl" target="_blank" v-permission="'competition-competitor-export'">
<el-button type="primary">导出</el-button> <el-button type="primary">导出</el-button>
</a> </a>
</template> </template>
......
...@@ -63,17 +63,16 @@ function onUpdateSuccess() { ...@@ -63,17 +63,16 @@ function onUpdateSuccess() {
<template> <template>
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<el-button type="primary" :icon="CirclePlus" @click="handleAdd">新增</el-button> <el-button type="primary" :icon="CirclePlus" @click="handleAdd" v-permission="'competition-book-create'"
>新增</el-button
>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button link round type="success">查阅</el-button> <el-button link round type="success" v-permission="'competition-book-detail'">查阅</el-button>
<el-button link round type="primary" @click="handleUpdate(row)">编辑</el-button> <el-button link round type="primary" @click="handleUpdate(row)" v-permission="'competition-book-update'"
<el-button >编辑</el-button
link >
round <el-button link round type="danger" @click="handleRemoveClass(row)" v-permission="'competition-book-delete'"
type="danger"
@click="handleRemoveClass(row)"
v-permission="'v1-backend-experiment-class-add'"
>删除</el-button >删除</el-button
> >
</template> </template>
......
...@@ -60,17 +60,16 @@ function onUpdateSuccess() { ...@@ -60,17 +60,16 @@ function onUpdateSuccess() {
<template> <template>
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<el-button type="primary" :icon="CirclePlus" @click="handleAdd">新增</el-button> <el-button type="primary" :icon="CirclePlus" @click="handleAdd" v-permission="'competition-video-create'"
>新增</el-button
>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button link round type="success">查阅</el-button> <el-button link round type="success" v-permission="'competition-video-detail'">查阅</el-button>
<el-button link round type="primary" @click="handleUpdate(row)">编辑</el-button> <el-button link round type="primary" @click="handleUpdate(row)" v-permission="'competition-video-update'"
<el-button >编辑</el-button
link >
round <el-button link round type="danger" @click="handleRemoveClass(row)" v-permission="'competition-video-delete'"
type="danger"
@click="handleRemoveClass(row)"
v-permission="'v1-backend-experiment-class-add'"
>删除</el-button >删除</el-button
> >
</template> </template>
......
...@@ -73,18 +73,16 @@ function onUpdateSuccess() { ...@@ -73,18 +73,16 @@ function onUpdateSuccess() {
<AppCard title="赛项管理"> <AppCard title="赛项管理">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #header-buttons> <template #header-buttons>
<el-button type="primary" :icon="CirclePlus" v-permission="'v1-backend-experiment-create'" @click="handleAdd" <el-button type="primary" :icon="CirclePlus" v-permission="'competition-create'" @click="handleAdd">
>新增赛项</el-button 新增赛项
> </el-button>
</template> </template>
<template #table-x="{ row }: { row: ContestItem }"> <template #table-x="{ row }: { row: ContestItem }">
<el-button type="primary" round v-permission="'v1-backend-experiment-view'"> <el-button type="primary" round v-permission="'competition-detail'">
<router-link :to="`/admin/contest/items/${row.id}`" target="_blank">查看</router-link> <router-link :to="`/admin/contest/items/${row.id}`" target="_blank">查看</router-link>
</el-button> </el-button>
<el-button type="primary" round @click="handleUpdate(row)" v-permission="'v1-backend-experiment-update'" <el-button type="primary" round @click="handleUpdate(row)" v-permission="'competition-edit'">编辑</el-button>
>编辑</el-button
>
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
......
...@@ -68,10 +68,18 @@ const scoringRulesBookVisible = $ref(false) ...@@ -68,10 +68,18 @@ const scoringRulesBookVisible = $ref(false)
<template> <template>
<AppCard title="查看赛项信息"> <AppCard title="查看赛项信息">
<template #header-aside> <template #header-aside>
<el-button type="primary" @click="scoringRulesVisible = true">评分规则</el-button> <el-button type="primary" @click="scoringRulesVisible = true" v-permission="'competition-rule'"
<el-button type="primary" @click="scoringExpertsVisible = true">评分专家</el-button> >评分规则</el-button
<el-button type="primary" @click="contestantVisible = true">参赛选手</el-button> >
<el-button type="primary" @click="scoringRulesBookVisible = true">评分细则</el-button> <el-button type="primary" @click="scoringExpertsVisible = true" v-permission="'competition-bind-experts'"
>评分专家</el-button
>
<el-button type="primary" @click="contestantVisible = true" v-permission="'competition-competitor-list'"
>参赛选手</el-button
>
<el-button type="primary" @click="scoringRulesBookVisible = true" v-permission="'competition-rubric-update'"
>评分细则</el-button
>
</template> </template>
<div class="top" v-if="detail"> <div class="top" v-if="detail">
<div class="top-cover"> <div class="top-cover">
...@@ -110,8 +118,7 @@ const scoringRulesBookVisible = $ref(false) ...@@ -110,8 +118,7 @@ const scoringRulesBookVisible = $ref(false)
<!-- 评分细则 --> <!-- 评分细则 -->
<ScoringRulesBookDialog <ScoringRulesBookDialog
v-model="scoringRulesBookVisible" v-model="scoringRulesBookVisible"
v-if="scoringRulesBookVisible && detail" v-if="scoringRulesBookVisible && detail"></ScoringRulesBookDialog>
></ScoringRulesBookDialog>
</template> </template>
<style lang="scss"> <style lang="scss">
......
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { useMapStore } from '@/stores/map'
import { useFilterList } from '../composables/useFilterList' import { useFilterList } from '../composables/useFilterList'
import { syncExam } from '../api' import { syncExam } from '../api'
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update'): void (e: 'update'): void
}>() }>()
// 评分方法
const scoreMethods = useMapStore().getMapValuesByKey('scoring_manner')
const { competitions } = useFilterList() const { competitions } = useFilterList()
const form = reactive<any>({ const form = reactive<any>({
competition: undefined competition: undefined
...@@ -17,6 +22,10 @@ function handleSync(row: any) { ...@@ -17,6 +22,10 @@ function handleSync(row: any) {
emit('update') emit('update')
}) })
} }
// 评分方法
function scoreMethodText(value: string) {
return scoreMethods.find(item => item.value == value)?.label || value
}
</script> </script>
<template> <template>
...@@ -29,7 +38,9 @@ function handleSync(row: any) { ...@@ -29,7 +38,9 @@ function handleSync(row: any) {
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table :data="form.competition?.rules"> <el-table :data="form.competition?.rules">
<el-table-column label="评分方法" prop="type" align="center" width="200"></el-table-column> <el-table-column label="评分方法" prop="type" align="center" width="200">
<template #default="{ row }"> {{ scoreMethodText(row.type) }} </template>
</el-table-column>
<el-table-column label="考试名称" prop="exam_name" align="center"></el-table-column> <el-table-column label="考试名称" prop="exam_name" align="center"></el-table-column>
<el-table-column label="实考人数/应考人数" align="center" width="160"> <el-table-column label="实考人数/应考人数" align="center" width="160">
<template #default="{ row }"> {{ row.finish_count }}/{{ row.all_count }} </template> <template #default="{ row }"> {{ row.finish_count }}/{{ row.all_count }} </template>
......
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/contest/score', path: '/admin/contest/record',
component: AppLayout, component: AppLayout,
children: [ children: [
{ path: '', component: () => import('./views/Index.vue') }, { path: '', component: () => import('./views/Index.vue') },
......
...@@ -75,7 +75,9 @@ const dialogVisible = $ref(false) ...@@ -75,7 +75,9 @@ const dialogVisible = $ref(false)
</p> </p>
</div> </div>
<div> <div>
<el-button type="primary" @click="dialogVisible = true">评分</el-button> <el-button type="primary" @click="dialogVisible = true" v-permission="'v1-expert-check-set-score'"
>评分</el-button
>
</div> </div>
</el-row> </el-row>
</AppCard> </AppCard>
......
...@@ -94,7 +94,7 @@ function onUpdateSuccess() { ...@@ -94,7 +94,7 @@ function onUpdateSuccess() {
round round
:icon="Refresh" :icon="Refresh"
@click="syncDialogVisible = true" @click="syncDialogVisible = true"
v-permission="'v1-teacher-record-upload'" v-permission="'v1-expert-check-sync-exam'"
>系统同步考试成绩</el-button >系统同步考试成绩</el-button
> >
<el-button <el-button
...@@ -102,7 +102,7 @@ function onUpdateSuccess() { ...@@ -102,7 +102,7 @@ function onUpdateSuccess() {
round round
:icon="Upload" :icon="Upload"
@click="importExamVisible = true" @click="importExamVisible = true"
v-permission="'v1-teacher-record-upload'" v-permission="'v1-expert-check-import-exam'"
>批量导入考试成绩</el-button >批量导入考试成绩</el-button
> >
<el-button <el-button
...@@ -110,7 +110,7 @@ function onUpdateSuccess() { ...@@ -110,7 +110,7 @@ function onUpdateSuccess() {
round round
:icon="Upload" :icon="Upload"
@click="importScoreVisible = true" @click="importScoreVisible = true"
v-permission="'v1-teacher-record-upload'" v-permission="'v1-expert-check-import-score'"
>批量导入完整评分</el-button >批量导入完整评分</el-button
> >
</template> </template>
...@@ -119,8 +119,8 @@ function onUpdateSuccess() { ...@@ -119,8 +119,8 @@ function onUpdateSuccess() {
<span :class="{ 'is-info': row.score !== '--' }">{{ row.score }}</span> <span :class="{ 'is-info': row.score !== '--' }">{{ row.score }}</span>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button text type="primary" v-if="row.publish_status === '0'" v-permission="'v1-teacher-record-check'"> <el-button text type="primary" v-if="row.publish_status === '0'" v-permission="'v1-expert-check-set-score'">
<router-link :to="`/teacher/contest/record/${row.id}`" target="_blank">评分</router-link> <router-link :to="`/admin/contest/record/${row.id}`" target="_blank">评分</router-link>
</el-button> </el-button>
</template> </template>
</AppList> </AppList>
......
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/contest/record', path: '/admin/contest/score',
component: AppLayout, component: AppLayout,
children: [ children: [
{ path: '', component: () => import('./views/Index.vue') }, { path: '', component: () => import('./views/Index.vue') },
......
...@@ -60,14 +60,14 @@ function onUpdateSuccess() { ...@@ -60,14 +60,14 @@ function onUpdateSuccess() {
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #table-teachers="{ row }"> {{ row.teachers.join() }} </template> <template #table-teachers="{ row }"> {{ row.teachers.join() }} </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button round type="primary" v-permission="'v1-teacher-record-check'"> <el-button round type="primary" v-permission="'v1-expert-score-competitor-view'">
<router-link :to="`/teacher/contest/score/${row.id}?name=${row.name}`" target="_blank">查看成绩</router-link> <router-link :to="`/admin/contest/score/${row.id}?name=${row.name}`" target="_blank">查看成绩</router-link>
</el-button> </el-button>
<el-button <el-button
round round
type="primary" type="primary"
@click="handlePublish(row)" @click="handlePublish(row)"
v-permission="'v1-teacher-record-check'" v-permission="'v1-expert-score-publish'"
v-if="row.publish_status !== '1'"> v-if="row.publish_status !== '1'">
发布赛项成绩 发布赛项成绩
</el-button> </el-button>
......
...@@ -22,7 +22,7 @@ const genFileClassNames = $computed(() => { ...@@ -22,7 +22,7 @@ const genFileClassNames = $computed(() => {
<div class="button-group"> <div class="button-group">
<el-tooltip effect="dark" content="查看"> <el-tooltip effect="dark" content="查看">
<div class="button icon-view" v-permission="'v1-teacher-book-view'"> <div class="button icon-view" v-permission="'v1-teacher-book-view'">
<router-link :to="`/teacher/lab/book/${data.id}`" target="_blank"></router-link> <router-link :to="`/admin/lab/book/${data.id}`" target="_blank"></router-link>
</div> </div>
</el-tooltip> </el-tooltip>
<el-tooltip effect="dark" content="编辑"> <el-tooltip effect="dark" content="编辑">
......
...@@ -3,11 +3,11 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,11 +3,11 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/lab', path: '/admin/lab',
redirect: '/teacher/lab/book' redirect: '/admin/lab/book'
}, },
{ {
path: '/teacher/lab/book', path: '/admin/lab/book',
component: AppLayout, component: AppLayout,
children: [ children: [
{ path: '', component: () => import('./views/Index.vue') }, { path: '', component: () => import('./views/Index.vue') },
......
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/lab/record', path: '/admin/lab/discuss',
component: AppLayout, component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }] children: [{ path: '', component: () => import('./views/Index.vue') }]
} }
......
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/lab/discuss', path: '/admin/lab/record',
component: AppLayout, component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }] children: [{ path: '', component: () => import('./views/Index.vue') }]
} }
......
...@@ -9,7 +9,7 @@ defineProps<Props>() ...@@ -9,7 +9,7 @@ defineProps<Props>()
<template> <template>
<div class="list-item"> <div class="list-item">
<div class="list-item-pic"> <div class="list-item-pic">
<router-link :to="`/teacher/lab/video/${data.id}`" target="_blank"> <router-link :to="`/admin/lab/video/${data.id}`" target="_blank">
<el-image :src="data.cover" fit="cover"> <el-image :src="data.cover" fit="cover">
<template #error> <template #error>
<img src="/images/video_poster.png" /> <img src="/images/video_poster.png" />
...@@ -21,7 +21,7 @@ defineProps<Props>() ...@@ -21,7 +21,7 @@ defineProps<Props>()
<div class="list-item-main"> <div class="list-item-main">
<p>{{ data.name }}</p> <p>{{ data.name }}</p>
<div class="buttons"> <div class="buttons">
<router-link :to="`/teacher/lab/video/${data.id}`" target="_blank" v-permission="'v1-teacher-video-view'"> <router-link :to="`/admin/lab/video/${data.id}`" target="_blank" v-permission="'v1-teacher-video-view'">
<el-button type="primary" auto-insert-space>查看</el-button> <el-button type="primary" auto-insert-space>查看</el-button>
</router-link> </router-link>
<el-button <el-button
......
...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue' ...@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [ export const routes: Array<RouteRecordRaw> = [
{ {
path: '/teacher/lab/video', path: '/admin/lab/video',
component: AppLayout, component: AppLayout,
children: [ children: [
{ path: '', component: () => import('./views/Index.vue') }, { path: '', component: () => import('./views/Index.vue') },
......
...@@ -14,19 +14,19 @@ onMounted(() => { ...@@ -14,19 +14,19 @@ onMounted(() => {
}) })
function handleChange(id: string, type: number) { function handleChange(id: string, type: number) {
if (type === 1) { if (type === 1) {
router.push({ path: '/teacher/lab/book', query: { experiment_id: id } }) router.push({ path: '/admin/lab/book', query: { experiment_id: id } })
} else if (type === 2) { } else if (type === 2) {
router.push({ path: '/teacher/lab/video', query: { experiment_id: id } }) router.push({ path: '/admin/lab/video', query: { experiment_id: id } })
} }
} }
</script> </script>
<template> <template>
<div class="bg"> <div class="bg">
<router-link to="/teacher/contest/score" class="link1"></router-link> <router-link to="/admin/contest/score" class="link1"></router-link>
<router-link to="/teacher/contest/record" class="link2"></router-link> <router-link to="/admin/contest/record" class="link2"></router-link>
<router-link to="/teacher/contest/discuss" class="link3"></router-link> <router-link to="/admin/contest/discuss" class="link3"></router-link>
<router-link to="/teacher/contest/discuss" class="link4"></router-link> <router-link to="/admin/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)">
......
...@@ -14,19 +14,19 @@ onMounted(() => { ...@@ -14,19 +14,19 @@ onMounted(() => {
}) })
function handleChange(id: string, type: number) { function handleChange(id: string, type: number) {
if (type === 1) { if (type === 1) {
router.push({ path: '/teacher/lab/book', query: { experiment_id: id } }) router.push({ path: '/admin/lab/book', query: { experiment_id: id } })
} else if (type === 2) { } else if (type === 2) {
router.push({ path: '/teacher/lab/video', query: { experiment_id: id } }) router.push({ path: '/admin/lab/video', query: { experiment_id: id } })
} }
} }
</script> </script>
<template> <template>
<div class="bg"> <div class="bg">
<router-link to="/teacher/lab/book" class="link1"></router-link> <router-link to="/admin/lab/book" class="link1"></router-link>
<router-link to="/teacher/lab/record" class="link2"></router-link> <router-link to="/admin/lab/record" class="link2"></router-link>
<router-link to="/teacher/lab/video" class="link3"></router-link> <router-link to="/admin/lab/video" class="link3"></router-link>
<router-link to="/teacher/lab/discuss" class="link4"></router-link> <router-link to="/admin/lab/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)">
......
...@@ -28,7 +28,7 @@ const typeText = $computed(() => { ...@@ -28,7 +28,7 @@ const typeText = $computed(() => {
<li>参赛形式:{{ typeText }}</li> <li>参赛形式:{{ typeText }}</li>
<li>所属学校:{{ data.org_name }}</li> <li>所属学校:{{ data.org_name }}</li>
</ul> </ul>
<router-link :to="`/student/contest/lab/${data.id}`" target="_blank" v-if="isMy"> <router-link :to="`/student/contest/lab/${data.id}`" v-if="isMy">
<el-button round type="primary">我要训练</el-button> <el-button round type="primary">我要训练</el-button>
</router-link> </router-link>
<router-link :to="{ path: '/student/contest/join', query: { id: data.id, name: data.name } }" v-else> <router-link :to="{ path: '/student/contest/join', query: { id: data.id, name: data.name } }" v-else>
......
...@@ -5,8 +5,6 @@ import { useUserStore } from '@/stores/user' ...@@ -5,8 +5,6 @@ import { useUserStore } from '@/stores/user'
interface State { interface State {
studentMenus: IMenuItem[] studentMenus: IMenuItem[]
adminMenus: IMenuItem[] adminMenus: IMenuItem[]
teacherMenus: IMenuItem[]
expertMenus: IMenuItem[]
} }
// 学生菜单 // 学生菜单
...@@ -28,103 +26,105 @@ const studentMenus: IMenuItem[] = [ ...@@ -28,103 +26,105 @@ const studentMenus: IMenuItem[] = [
path: '/student/contest/score' path: '/student/contest/score'
} }
] ]
// 教师菜单 // 管理员菜单
const teacherMenus: IMenuItem[] = [ const adminMenus: IMenuItem[] = [
{
name: '首页',
path: '/'
},
{
name: '实验指导书管理',
path: '/teacher/lab/book',
tag: 'v1-teacher-book'
},
{
name: '实验操作视频管理',
path: '/teacher/lab/video',
tag: 'v1-teacher-video'
},
{
name: '实验讨论交流',
path: '/teacher/lab/discuss',
tag: 'v1-teacher-discussion'
},
{
name: '实验成绩管理',
path: '/teacher/lab/record',
tag: 'v1-teacher-record'
},
{
name: '大赛训练答疑',
path: '/teacher/contest/discuss'
}
]
// 专家菜单
const expertMenus: IMenuItem[] = [
{ {
name: '首页', name: '首页',
path: '/' path: '/'
}, },
{ {
name: '大赛评分', name: '智能营销',
path: '/teacher/contest/record' path: '/admin/lab',
children: [
{
name: '实验管理',
path: '/admin/lab/experiment',
tag: 'v1-backend-experiment'
},
{
name: '实验指导书管理',
path: '/admin/lab/book',
tag: 'v1-teacher-book'
},
{
name: '实验操作视频管理',
path: '/admin/lab/video',
tag: 'v1-teacher-video'
},
{
name: '实验讨论交流',
path: '/admin/lab/discuss',
tag: 'v1-teacher-discussion'
},
{
name: '实验成绩管理',
path: '/admin/lab/record',
tag: 'v1-teacher-record'
}
]
}, },
{ {
name: '大赛发布成绩', name: '技能大赛',
path: '/teacher/contest/score' path: '/admin/contest',
children: [
{
name: '赛项管理',
path: '/admin/contest/items',
tag: 'competition'
},
{
name: '参赛选手管理',
path: '/admin/contest/contestants',
tag: 'competition-competitor'
},
{
name: '评分专家管理',
path: '/admin/contest/experts',
tag: 'expert'
},
{
name: '大赛训练答疑',
path: '/admin/contest/discuss',
tag: 'v1-teacher-train-discussion'
},
{
name: '大赛评分',
path: '/admin/contest/record',
tag: 'v1-expert-check'
},
{
name: '大赛发布成绩',
path: '/admin/contest/score',
tag: 'v1-expert-score'
}
]
}, },
{ {
name: '大赛成绩分析', name: '成绩分析',
path: '/teacher/contest/analyze', path: '/admin/contest/analyze',
children: [ children: [
{ {
name: '赛项成绩画像', name: '赛项成绩画像',
path: '/teacher/contest/score/analyze' path: '/admin/contest/score/analyze'
}, },
{ {
name: '学生个人成绩画像', name: '学生个人成绩画像',
path: '/teacher/contest/student/analyze' path: '/admin/contest/student/analyze'
} }
] ]
} }
] ]
// 管理员菜单
const adminMenus: IMenuItem[] = [
{
name: '实验管理',
path: '/admin/lab/experiment',
tag: 'v1-backend-experiment'
},
{
name: '赛项管理',
path: '/admin/contest/items'
},
{
name: '参赛选手管理',
path: '/admin/contest/contestants'
},
{
name: '评分专家管理',
path: '/admin/contest/experts'
}
]
export const useMenuStore = defineStore({ export const useMenuStore = defineStore({
id: 'menu', id: 'menu',
state: (): State => ({ state: (): State => ({
studentMenus, studentMenus,
adminMenus, adminMenus
teacherMenus,
expertMenus
}), }),
getters: { getters: {
menus: state => { menus: state => {
const userStore = useUserStore() const userStore = useUserStore()
if (userStore.role?.id === 6) { if (userStore.role?.id === 1) {
return state.expertMenus
} else if (userStore.role?.id === 5) {
return state.teacherMenus
} else if (userStore.role?.id === 1) {
return state.studentMenus return state.studentMenus
} else { } else {
return state.adminMenus return state.adminMenus
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论