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

chore: 修改大赛训练的上传实验报告

上级 8bff36fb
...@@ -87,7 +87,24 @@ export function getScoreReport(params: { competition_id: string }) { ...@@ -87,7 +87,24 @@ export function getScoreReport(params: { competition_id: string }) {
return httpRequest.get('/api/lab/v1/student/competition/score-report', { params }) return httpRequest.get('/api/lab/v1/student/competition/score-report', { params })
} }
// 获取实验报告
export function getExperimentReport(params: { competition_id: string; platform_key: string }) {
return httpRequest.get('/api/lab/v1/student/competition/train-report', { params })
}
// 上传实验报告 // 上传实验报告
export function uploadExperimentReport(data: { experiment_id: string; file: string }) { export function uploadExperimentReport(data: {
return httpRequest.post('/api/lab/v1/student/experiment-record/upload-report', data) competition_id: string
platform_key: string
name: string
url: string
size: number
desc: string
}) {
return httpRequest.post('/api/lab/v1/student/competition/save-train-report', data)
}
// 删除实验报告
export function deleteExperimentReport(data: { id: string }) {
return httpRequest.post('/api/lab/v1/student/competition/delete-train-report', data)
} }
<script setup lang="ts"> <script setup lang="ts">
import type { ExperimentBookType } from '../types' import type { ExperimentBookType } from '../types'
import { CloseBold } from '@element-plus/icons-vue' import { Document, CloseBold } from '@element-plus/icons-vue'
import Preview from '@/components/Preview.vue' import Preview from '@/components/Preview.vue'
import { getExperimentBooks } from '../api' import { getExperimentBooks } from '../api'
......
<script setup lang="ts"> <script setup lang="ts">
import type { Contest } from '../types'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import type { ExperimentRecord } from '../types'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import dayjs from 'dayjs' import { getExperimentReport, uploadExperimentReport } from '../api'
import { uploadExperimentReport } from '../api'
interface Props { interface Props {
data: any data: Contest
} }
const props = defineProps<Props>() const props = defineProps<Props>()
const detail = $ref(inject<any>('detail'))
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update'): void (e: 'update'): void
(e: 'update:modelValue', visible: boolean): void (e: 'update:modelValue', visible: boolean): void
}>() }>()
const route = useRoute()
const formRef = $ref<FormInstance>() const formRef = $ref<FormInstance>()
const form = reactive<any>({ files: [] }) const form = reactive<any>({ files: [] })
watchEffect(() => {
form.files = detail?.file ? [detail.file] : [] async function fetchInfo() {
}) const res = await getExperimentReport({
competition_id: props.data.id,
platform_key: route.query.type as string
})
const detail = res.data.detail
form.files = detail.id ? [detail] : []
}
onMounted(fetchInfo)
const rules = ref<FormRules>({ const rules = ref<FormRules>({
files: [{ required: true, message: '请上传实验报告文件', trigger: 'blur' }] files: [{ required: true, message: '请上传实验报告文件', trigger: 'blur' }]
}) })
...@@ -34,8 +41,12 @@ function handleSubmit() { ...@@ -34,8 +41,12 @@ function handleSubmit() {
const update = () => { const update = () => {
const [file] = form.files const [file] = form.files
uploadExperimentReport({ uploadExperimentReport({
experiment_id: props.data, competition_id: props.data.id,
file: JSON.stringify({ name: file.name, url: file.url, upload_time: dayjs().format('YYYY-MM-DD HH:mm:ss') }) platform_key: route.query.type as string,
name: file.name,
url: file.url,
size: file.size,
desc: file.name
}).then(() => { }).then(() => {
ElMessage({ message: '上传成功', type: 'success' }) ElMessage({ message: '上传成功', type: 'success' })
emit('update') emit('update')
...@@ -49,15 +60,13 @@ const update = () => { ...@@ -49,15 +60,13 @@ const update = () => {
title="上传实验报告" title="上传实验报告"
:close-on-click-modal="false" :close-on-click-modal="false"
width="600px" width="600px"
@update:modelValue="$emit('update:modelValue')" @update:modelValue="$emit('update:modelValue')">
>
<el-form ref="formRef" :model="form" :rules="rules"> <el-form ref="formRef" :model="form" :rules="rules">
<el-form-item label="实验报告文件" prop="files"> <el-form-item label="实验报告文件" prop="files">
<AppUpload <AppUpload
v-model="form.files" v-model="form.files"
:limit="1" :limit="1"
accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,.pdf,application/pdf,.ppt,.pptx,application/vnd.ms-powerpoint" accept=".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,.pdf,application/pdf,.ppt,.pptx,application/vnd.ms-powerpoint">
>
<template #tip>实验报告文件只能上传一个,支持格式包含:doc docx pdf ppt pptx,大小不超过50M</template> <template #tip>实验报告文件只能上传一个,支持格式包含:doc docx pdf ppt pptx,大小不超过50M</template>
</AppUpload> </AppUpload>
</el-form-item> </el-form-item>
......
...@@ -123,7 +123,6 @@ const handleShowHead = function () { ...@@ -123,7 +123,6 @@ const handleShowHead = function () {
isHeadShow = !isHeadShow isHeadShow = !isHeadShow
} }
let experimentId = $ref('')
const getExperimentId = computed(() => { const getExperimentId = computed(() => {
const item = competition?.train_platform_configs.find((item: any) => item.platform_key === route.query.type) const item = competition?.train_platform_configs.find((item: any) => item.platform_key === route.query.type)
let value = '0' let value = '0'
...@@ -133,7 +132,6 @@ const getExperimentId = computed(() => { ...@@ -133,7 +132,6 @@ const getExperimentId = computed(() => {
? item?.url.substring(item?.url.indexOf('experiment_id=') + 14, item?.url.length + 1) ? item?.url.substring(item?.url.indexOf('experiment_id=') + 14, item?.url.length + 1)
: '0' : '0'
} }
experimentId = value
return value return value
}) })
...@@ -179,15 +177,13 @@ const reportDialogVisible = $ref(false) ...@@ -179,15 +177,13 @@ const reportDialogVisible = $ref(false)
<path <path
class="path-wapper" class="path-wapper"
d="M0 0l14.12 8.825A4 4 0 0116 12.217v61.566a4 4 0 01-1.88 3.392L0 86V0z" d="M0 0l14.12 8.825A4 4 0 0116 12.217v61.566a4 4 0 01-1.88 3.392L0 86V0z"
fill="#f8f9fa" fill="#f8f9fa"></path>
></path>
<path <path
class="path-arrow" class="path-arrow"
style="transform: rotate(180deg); transform-origin: center" style="transform: rotate(180deg); transform-origin: center"
d="M10.758 48.766a.778.778 0 000-1.127L6.996 43l3.762-4.639a.778.778 0 000-1.127.85.85 0 00-1.172 0l-4.344 5.202a.78.78 0 000 1.128l4.344 5.202a.85.85 0 001.172 0z" d="M10.758 48.766a.778.778 0 000-1.127L6.996 43l3.762-4.639a.778.778 0 000-1.127.85.85 0 00-1.172 0l-4.344 5.202a.78.78 0 000 1.128l4.344 5.202a.85.85 0 001.172 0z"
fill="#8D9EA7" fill="#8D9EA7"
fill-rule="nonzero" fill-rule="nonzero"></path>
></path>
</g> </g>
</svg> </svg>
</div> </div>
...@@ -195,7 +191,10 @@ const reportDialogVisible = $ref(false) ...@@ -195,7 +191,10 @@ const reportDialogVisible = $ref(false)
</div> </div>
</template> </template>
</DragPanel> </DragPanel>
<ReportDialog v-model="reportDialogVisible" :data="experimentId" v-if="reportDialogVisible && experimentId"></ReportDialog> <ReportDialog
v-model="reportDialogVisible"
:data="competition"
v-if="reportDialogVisible && competition"></ReportDialog>
</template> </template>
<!-- 上传报告 --> <!-- 上传报告 -->
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论