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

chore: update

上级 320adfe6
......@@ -32,13 +32,13 @@ function handleClick(data: MessageType) {
// 指导老师
// 实验评分
if (payload?.channel === 1) {
router.push({ path: '/admin/lab/record', query: payload })
router.push({ path: '/admin/lab/score', query: payload })
}
} else if (userStore.role?.id === 6) {
// 专家
// 大赛评分
if (payload?.channel === 3) {
router.push({ path: '/admin/contest/record', query: payload })
router.push({ path: '/admin/contest/check', query: payload })
}
} else {
// 学生
......
import type { RouteRecordRaw } from 'vue-router'
import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/admin/contest/analyze',
component: AppLayout,
children: [
{ path: 'score', component: () => import('./views/Score.vue') },
{ path: 'student', component: () => import('./views/Student.vue') }
]
}
]
<script setup lang="ts"></script>
<template>
<div></div>
</template>
<script setup lang="ts"></script>
<template>
<div></div>
</template>
import httpRequest from '@/utils/axios'
// 获取实验记录列表
export function getExperimentRecordList(params?: {
// 获取大赛评分列表
export function getCheckList(params?: {
competition_id?: string
check_status?: string
organ_id?: string
......
......@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/admin/contest/record',
path: '/admin/contest/check',
component: AppLayout,
children: [
{ path: '', component: () => import('./views/Index.vue') },
......
<script setup lang="ts">
import { Refresh, Upload } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getExperimentRecordList } from '../api'
import { getCheckList } from '../api'
import { useFilterList } from '../composables/useFilterList'
const SyncExamDialog = defineAsyncComponent(() => import('../components/SyncExamDialog.vue'))
......@@ -16,7 +16,7 @@ const appList = $ref<InstanceType<typeof AppList> | null>(null)
const listOptions = $computed(() => {
return {
remote: {
httpRequest: getExperimentRecordList,
httpRequest: getCheckList,
params: {
competition_id: '',
check_status: '',
......@@ -120,7 +120,7 @@ function onUpdateSuccess() {
</template>
<template #table-x="{ row }">
<el-button text type="primary" v-if="row.publish_status === '0'" v-permission="'v1-expert-check-set-score'">
<router-link :to="`/admin/contest/record/${row.id}`" target="_blank">评分</router-link>
<router-link :to="`/admin/contest/check/${row.id}`" target="_blank">评分</router-link>
</el-button>
</template>
</AppList>
......
......@@ -3,6 +3,7 @@ import type { ContestBookItem } from '../types'
import { CirclePlus } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import AppList from '@/components/base/AppList.vue'
import ViewBookPreviewDialog from './ViewBookPreviewDialog.vue'
import { getContestBook, deleteContestBook } from '../api'
const FormDialog = defineAsyncComponent(() => import('./ViewBookFormDialog.vue'))
......@@ -46,6 +47,12 @@ function handleUpdate(row: ContestBookItem) {
rowData.value = row
dialogVisible = true
}
// 查阅
let viewVisible = $ref(false)
function handleView(row: ContestBookItem) {
rowData.value = row
viewVisible = true
}
// 删除
function handleRemoveClass(row: ContestBookItem) {
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
......@@ -68,7 +75,9 @@ function onUpdateSuccess() {
>
</template>
<template #table-x="{ row }">
<el-button link round type="success" v-permission="'competition-book-detail'">查阅</el-button>
<el-button link round type="info" @click="handleView(row)" v-permission="'competition-book-detail'"
>查阅</el-button
>
<el-button link round type="primary" @click="handleUpdate(row)" v-permission="'competition-book-update'"
>编辑</el-button
>
......@@ -78,4 +87,5 @@ function onUpdateSuccess() {
</template>
</AppList>
<FormDialog v-model="dialogVisible" :data="rowData" @update="onUpdateSuccess" v-if="dialogVisible"></FormDialog>
<ViewBookPreviewDialog v-model="viewVisible" :data="rowData" v-if="viewVisible && rowData"></ViewBookPreviewDialog>
</template>
<script setup lang="ts">
import type { ContestBookItem } from '../types'
import Preview from '@/components/Preview.vue'
interface Props {
data: ContestBookItem
}
const props = defineProps<Props>()
const file = $computed(() => {
return JSON.parse(props.data.url)
})
</script>
<template>
<el-dialog title="查阅训练指导书">
<Preview :url="file.url" style="height: 60vh"></Preview>
</el-dialog>
</template>
......@@ -3,6 +3,7 @@ import type { ContestVideoItem } from '../types'
import { CirclePlus } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import AppList from '@/components/base/AppList.vue'
import ViewVideoPreviewDialog from './ViewVideoPreviewDialog.vue'
import { getContestVideoList, deleteContestVideo } from '../api'
const FormDialog = defineAsyncComponent(() => import('./ViewVideoFormDialog.vue'))
......@@ -43,6 +44,12 @@ function handleUpdate(row: ContestVideoItem) {
rowData.value = row
dialogVisible = true
}
// 查阅
let viewVisible = $ref(false)
function handleView(row: ContestVideoItem) {
rowData.value = row
viewVisible = true
}
// 删除
function handleRemoveClass(row: ContestVideoItem) {
ElMessageBox.confirm('确定要删除吗?', '提示').then(() => {
......@@ -65,7 +72,9 @@ function onUpdateSuccess() {
>
</template>
<template #table-x="{ row }">
<el-button link round type="success" v-permission="'competition-video-detail'">查阅</el-button>
<el-button link round type="info" @click="handleView(row)" v-permission="'competition-video-detail'"
>查阅</el-button
>
<el-button link round type="primary" @click="handleUpdate(row)" v-permission="'competition-video-update'"
>编辑</el-button
>
......@@ -75,4 +84,5 @@ function onUpdateSuccess() {
</template>
</AppList>
<FormDialog v-model="dialogVisible" :data="rowData" @update="onUpdateSuccess" v-if="dialogVisible"></FormDialog>
<ViewVideoPreviewDialog v-model="viewVisible" :data="rowData" v-if="viewVisible && rowData"></ViewVideoPreviewDialog>
</template>
<script setup lang="ts">
import type { ContestVideoItem } from '../types'
import AppVideoPlayer from '@/components/base/AppVideoPlayer.vue'
import { getContestVideoPalyInfo } from '../api'
interface Props {
data: ContestVideoItem
}
const props = defineProps<Props>()
let playList = $ref<any>([])
function fetchInfo() {
getContestVideoPalyInfo({ source_id: props.data.source_id }).then(res => {
playList = res.data.replay_list.play_info_list
})
}
const playUrl = $computed(() => {
return playList[0]?.PlayURL || ''
})
onMounted(() => {
fetchInfo()
})
</script>
<template>
<el-dialog title="查阅操作视频">
<AppVideoPlayer
:options="{ fluid: true, sources: [{ src: playUrl, type: 'application/x-mpegURL' }] }"
v-if="playUrl"></AppVideoPlayer>
</el-dialog>
</template>
......@@ -3,7 +3,7 @@ import AppLayout from '@/components/layout/Index.vue'
export const routes: Array<RouteRecordRaw> = [
{
path: '/admin/lab/record',
path: '/admin/lab/score',
component: AppLayout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
......
......@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
<template>
<div class="bg">
<router-link to="/admin/contest/score" class="link1"></router-link>
<router-link to="/admin/contest/record" class="link2"></router-link>
<router-link to="/admin/contest/check" class="link2"></router-link>
<router-link to="/admin/contest/discuss" class="link3"></router-link>
<router-link to="/admin/contest/discuss" class="link4"></router-link>
</div>
......
......@@ -24,7 +24,7 @@ function handleChange(id: string, type: number) {
<template>
<div class="bg">
<router-link to="/admin/lab/book" class="link1"></router-link>
<router-link to="/admin/lab/record" class="link2"></router-link>
<router-link to="/admin/lab/score" class="link2"></router-link>
<router-link to="/admin/lab/video" class="link3"></router-link>
<router-link to="/admin/lab/discuss" class="link4"></router-link>
</div>
......
<script setup lang="ts"></script>
<template>
<AppCard></AppCard>
<div></div>
</template>
......@@ -58,7 +58,7 @@ const adminMenus: IMenuItem[] = [
},
{
name: '实验成绩管理',
path: '/admin/lab/record',
path: '/admin/lab/score',
tag: 'v1-teacher-record'
}
]
......@@ -89,7 +89,7 @@ const adminMenus: IMenuItem[] = [
},
{
name: '大赛评分',
path: '/admin/contest/record',
path: '/admin/contest/check',
tag: 'v1-expert-check'
},
{
......@@ -105,11 +105,11 @@ const adminMenus: IMenuItem[] = [
children: [
{
name: '赛项成绩画像',
path: '/admin/contest/score/analyze'
path: '/admin/contest/analyze/score'
},
{
name: '学生个人成绩画像',
path: '/admin/contest/student/analyze'
path: '/admin/contest/analyze/student'
}
]
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论