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

chore: update

上级 ef4b6f3f
<script setup lang="ts">
import type { RecordItem, FileItem } from '../types'
interface Props {
data: RecordItem
}
const props = defineProps<Props>()
// 实验过程截图
const pictures = $computed<FileItem[]>(() => {
try {
const list: FileItem[] = props.data.competition_competitor_pictures.pictures ? JSON.parse(props.data.competition_competitor_pictures.pictures) : []
return list.filter(item => item.size)
} catch (error) {
console.log(error)
}
return []
})
const srcList = computed(() => {
return pictures.map(item => item.url)
})
</script>
<template>
<el-dialog title="查看实验截图" width="800px" append-to-body>
<ul class="picture-list">
<li v-for="(item, index) in pictures" :key="item.url">
<p class="t1">
<el-image style="width: 100%" :src="item.url" :preview-src-list="srcList" :initial-index="index" />
</p>
<p class="t2">截图时间:{{ item.upload_time }}</p>
</li>
</ul>
<template #footer>
<el-row justify="center">
<el-button round auto-insert-space @click="$emit('update:modelValue', false)">关闭</el-button>
</el-row>
</template>
</el-dialog>
</template>
<style lang="scss" scoped>
.picture-list {
width: 100%;
li {
line-height: 30px;
}
a {
color: var(--main-color);
}
.t2 {
text-align: center;
}
}
</style>
...@@ -18,12 +18,14 @@ export interface RecordItem { ...@@ -18,12 +18,14 @@ export interface RecordItem {
status_name: string status_name: string
student_id: string student_id: string
student_name: string student_name: string
competition_competitor_pictures: any
} }
export interface FileItem { export interface FileItem {
name: string name: string
url: string url: string
upload_time: string upload_time: string
size: number
} }
export interface ReportItem { export interface ReportItem {
......
...@@ -7,6 +7,7 @@ import { useFilterList } from '../composables/useFilterList' ...@@ -7,6 +7,7 @@ import { useFilterList } from '../composables/useFilterList'
const SyncExamDialog = defineAsyncComponent(() => import('../components/SyncExamDialog.vue')) const SyncExamDialog = defineAsyncComponent(() => import('../components/SyncExamDialog.vue'))
const ImportExamDialog = defineAsyncComponent(() => import('../components/ImportExamDialog.vue')) const ImportExamDialog = defineAsyncComponent(() => import('../components/ImportExamDialog.vue'))
const ImportScoreDialog = defineAsyncComponent(() => import('../components/ImportScoreDialog.vue')) const ImportScoreDialog = defineAsyncComponent(() => import('../components/ImportScoreDialog.vue'))
const ScoreViewPicturesDialog = defineAsyncComponent(() => import('../components/ScoreViewPicturesDialog.vue'))
const route = useRoute() const route = useRoute()
...@@ -128,6 +129,13 @@ function onUpdateSuccess() { ...@@ -128,6 +129,13 @@ function onUpdateSuccess() {
appList?.refetch() appList?.refetch()
} }
const viewPictureVisible = ref(false)
const rowData = ref()
function handleViewPicture(row: any) {
rowData.value = row
viewPictureVisible.value = true
}
// function getModuleStatus(row: any, index: number) { // function getModuleStatus(row: any, index: number) {
// const [first] = row.student_module_status_list // const [first] = row.student_module_status_list
// try { // try {
...@@ -147,18 +155,25 @@ function onUpdateSuccess() { ...@@ -147,18 +155,25 @@ 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="Refresh" @click="syncDialogVisible = true" v-permission="'v1-expert-check-sync-exam'">系统同步考试成绩</el-button> <el-button type="primary" round :icon="Refresh" @click="syncDialogVisible = true" v-permission="'v1-expert-check-sync-exam'"
<el-button type="primary" round :icon="Upload" @click="importExamVisible = true" v-permission="'v1-expert-check-import-exam'">批量导入考试成绩</el-button> >系统同步考试成绩</el-button
<el-button type="primary" round :icon="Upload" @click="importScoreVisible = true" v-permission="'v1-expert-check-import-score'">批量导入完整评分</el-button> >
<el-button type="primary" round :icon="Upload" @click="importExamVisible = true" v-permission="'v1-expert-check-import-exam'"
>批量导入考试成绩</el-button
>
<el-button type="primary" round :icon="Upload" @click="importScoreVisible = true" v-permission="'v1-expert-check-import-score'"
>批量导入完整评分</el-button
>
</template> </template>
<template #table-count="{ row }"> {{ row.checked_count }}/{{ row.need_check_count }} </template> <template #table-count="{ row }"> {{ row.checked_count }}/{{ row.need_check_count }} </template>
<template #table-score="{ row }"> <template #table-score="{ row }">
<span :class="{ 'is-info': row.score_name !== '--' }">{{ row.score_name }}</span> <span :class="{ 'is-info': row.score_name !== '--' }">{{ row.score_name }}</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-expert-check-set-score'"> <!-- <el-button text type="primary" v-if="row.publish_status === '0'" v-permission="'v1-expert-check-set-score'">
<router-link :to="`/admin/contest/check/${row.id}`" target="_blank">评分</router-link> <router-link :to="`/admin/contest/check/${row.id}`" target="_blank">评分</router-link>
</el-button> </el-button> -->
<el-button text type="primary" @click="handleViewPicture(row)">查看截图</el-button>
</template> </template>
</AppList> </AppList>
</AppCard> </AppCard>
...@@ -168,6 +183,8 @@ function onUpdateSuccess() { ...@@ -168,6 +183,8 @@ function onUpdateSuccess() {
<ImportExamDialog v-model="importExamVisible" @update="onUpdateSuccess" v-if="importExamVisible"></ImportExamDialog> <ImportExamDialog v-model="importExamVisible" @update="onUpdateSuccess" v-if="importExamVisible"></ImportExamDialog>
<!-- 批量导入完整评分 --> <!-- 批量导入完整评分 -->
<ImportScoreDialog v-model="importScoreVisible" @update="onUpdateSuccess" v-if="importScoreVisible"></ImportScoreDialog> <ImportScoreDialog v-model="importScoreVisible" @update="onUpdateSuccess" v-if="importScoreVisible"></ImportScoreDialog>
<!-- 查看截图 -->
<ScoreViewPicturesDialog v-model="viewPictureVisible" :data="rowData" v-if="rowData"></ScoreViewPicturesDialog>
</template> </template>
<style lang="scss"> <style lang="scss">
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论