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

chore: update

上级 b8d0c4a6
......@@ -12,6 +12,7 @@ const myRef = $ref<HTMLElement>()
let countUp: CountUp | null = null
onMounted(() => {
if (!myRef) return
countUp = new CountUp(myRef, props.endVal, props.options)
if (!countUp.error) {
countUp.start()
......
......@@ -4,7 +4,7 @@ import AppList from '@/components/base/AppList.vue'
import { getContestantList } from '../api'
import { useMapStore } from '@/stores/map'
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject<ContestItem>('detail'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 性别
......@@ -13,7 +13,7 @@ const genderList = useMapStore().getMapValuesByKey('system_gender')
const listOptions = {
remote: {
httpRequest: getContestantList,
params: { competition_id: detail.id, student_name: '' }
params: { competition_id: detail?.id, student_name: '' }
},
filters: [{ type: 'input', prop: 'student_name', label: '选手姓名', placeholder: '请输入选手姓名' }],
columns: [
......@@ -38,7 +38,7 @@ const listOptions = {
}
const exportUrl = $computed(() => {
return `/api/resource/v1/backend/competition-competitor/export?competition_id=${detail.id}`
return `/api/resource/v1/backend/competition-competitor/export?competition_id=${detail?.id}`
})
</script>
......
......@@ -11,7 +11,7 @@ const emit = defineEmits<{
// 角色列表
const roleList = useMapStore().getMapValuesByKey('expert_role')
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
let list = $ref<any>([])
function fetchList() {
......
......@@ -18,7 +18,7 @@ const emit = defineEmits<{
const ScoringExpertsAddDialog = defineAsyncComponent(() => import('./ScoringExpertsAddDialog.vue'))
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 性别
......
......@@ -17,7 +17,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
// 数据状态
const status = useMapStore().getMapValuesByKey('system_status')
......
......@@ -17,7 +17,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
// 评分方法
const scoreMethods = useMapStore().getMapValuesByKey('scoring_manner')
......
......@@ -17,7 +17,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
// 数据状态
const status = useMapStore().getMapValuesByKey('system_status')
......
......@@ -17,7 +17,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ContestItem>(inject('detail'))
const detail = $ref(inject('detail') as ContestItem)
// 数据状态
const status = useMapStore().getMapValuesByKey('system_status')
......
......@@ -8,15 +8,15 @@ interface Props {
data: ExperimentItem
}
const props = defineProps<Props>()
defineProps<Props>()
const emit = defineEmits<{
defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void
}>()
const formRef = $ref<FormInstance>()
const form = reactive({
const form = reactive<any>({
is_show: 1,
rule_list: [
{
......@@ -48,7 +48,7 @@ function handleSubmit() {
// 当前评分方法
function currentRuleNames(value: number) {
const typeList = form.rule_list.map(item => item.type)
const typeList = form.rule_list.map((item: any) => item.type)
return gradeRuleList.filter(item => {
return item.value === value || item.value === 5 || !typeList.includes(item.value)
})
......
......@@ -7,7 +7,7 @@ const props = defineProps<Props>()
const teacherText = $computed(() => {
if (!props.data) return ''
return props.data.teacher.map(item => item.name).join('、')
return props.data.teacher.map((item: any) => item.name).join('、')
})
</script>
......
......@@ -8,7 +8,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ExperimentItem>(inject('detail'))
const detail = $ref(inject('detail') as ExperimentItem)
// 列表配置
const listOptions = {
......
......@@ -8,7 +8,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<GroupItem>(inject('detail'))
const detail = $ref(inject('detail') as GroupItem)
// 列表配置
const listOptions = {
......
......@@ -10,7 +10,7 @@ interface Props {
}
const props = defineProps<Props>()
const detail = $ref<ExperimentItem>(inject('detail'))
const detail = $ref(inject<ExperimentItem>('detail'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 列表配置
......@@ -38,7 +38,7 @@ function handleRefetch() {
</script>
<template>
<el-dialog title="学生分组">
<el-descriptions :column="2">
<el-descriptions :column="2" v-if="detail">
<el-descriptions-item label="实验名称:">{{ detail.name }}</el-descriptions-item>
<el-descriptions-item label="所属机构:">{{ detail.organ_id_name }}</el-descriptions-item>
<el-descriptions-item label="班级名称:">{{ data.name }}</el-descriptions-item>
......@@ -71,7 +71,6 @@ function handleRefetch() {
v-model="dialogVisible"
:data="data"
@update="handleRefetch"
v-if="dialogVisible"
></StudentGroupFormDialog>
v-if="dialogVisible"></StudentGroupFormDialog>
</el-dialog>
</template>
......@@ -14,7 +14,7 @@ const emit = defineEmits<{
(e: 'update:modelValue', visible: boolean): void
}>()
const detail = $ref<ExperimentItem>(inject('detail'))
const detail = $ref(inject('detail') as ExperimentItem)
const formRef = $ref<FormInstance>()
const form = reactive({ name: '' })
......@@ -28,7 +28,7 @@ function handleSubmit() {
}
// 创建
const handleCreate = () => {
const params = { ...form, experiment_id: detail.id, class_id: props.data.id }
const params = { ...form, experiment_id: detail?.id, class_id: props.data.id }
experimentAddClassGroup(params).then(() => {
ElMessage({ message: '创建成功', type: 'success' })
emit('update')
......@@ -42,8 +42,7 @@ const handleCreate = () => {
title="新增实验分组"
:close-on-click-modal="false"
width="600px"
@update:modelValue="$emit('update:modelValue')"
>
@update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
<el-form-item label="实验名称">{{ detail.name }}</el-form-item>
<el-form-item label="实验小组名称" prop="name">
......
......@@ -41,8 +41,8 @@ const listOptions = $computed(() => {
<template>
<el-dialog title="查看历史成绩">
<AppList v-bind="listOptions" ref="appList">
<template #table-name>{{ detail.student_name }}</template>
<template #table-number>{{ detail.sno_number }}</template>
<template #table-name>{{ detail?.student_name }}</template>
<template #table-number>{{ detail?.sno_number }}</template>
</AppList>
</el-dialog>
</template>
......
<script setup lang="ts">
import type { Contest } from '../types'
import dayjs from 'dayjs'
import { contestMode } from '@/utils/dictionary'
import { updateTrainCount } from '../api'
import { useMapStore } from '@/stores/map'
......@@ -13,9 +12,6 @@ const router = useRouter()
const isMy = $computed(() => {
return !!props.data.login_id
})
const modeText = $computed(() => {
return contestMode[props.data.mode]
})
const types = useMapStore().getMapValuesByKey('competition_type')
// 赛项类型
......
......@@ -13,7 +13,7 @@ const emit = defineEmits<{
(e: 'update'): void
}>()
const detail = $ref<ExperimentRecord>(inject('detail'))
const detail = $ref(inject('detail') as ExperimentRecord)
const isEmpty = $computed(() => {
return !props.competition_id || !detail
......
......@@ -24,7 +24,7 @@ function fetchInfo() {
data: {
experiment_id: props.experiment_id,
course_id: props.course_id,
book_id: detail.id
book_id: detail?.id
}
})
})
......@@ -32,15 +32,9 @@ function fetchInfo() {
watchEffect(() => {
fetchInfo()
})
const isEmpty = $computed(() => {
return !props.experiment_id || !detail?.id
})
</script>
<template>
<el-empty description="暂无数据" v-if="isEmpty" />
<template v-else>
<Preview :url="detail.url"></Preview>
</template>
<Preview :url="detail.url" v-if="props.experiment_id && detail?.id"></Preview>
<el-empty description="暂无数据" v-else />
</template>
<script setup lang="ts">
import type { ExperimentRecord } from '../types'
interface Props {
experiment_id?: string
}
defineProps<Props>()
const detail = $ref(inject<ExperimentRecord>('detail'))
</script>
<template>
<template v-if="detail && experiment_id"> </template>
<el-empty description="暂无数据" v-else />
</template>
......@@ -11,7 +11,7 @@ interface Props {
const props = defineProps<Props>()
const detail = $ref<ExperimentRecord>(inject('detail'))
const detail = $ref(inject<ExperimentRecord>('detail'))
const emit = defineEmits<{
(e: 'update'): void
......@@ -49,15 +49,13 @@ const update = () => {
title="上传实验报告"
:close-on-click-modal="false"
width="600px"
@update:modelValue="$emit('update:modelValue')"
>
@update:modelValue="$emit('update:modelValue')">
<el-form ref="formRef" :model="form" :rules="rules">
<el-form-item label="实验报告文件" prop="files">
<AppUpload
v-model="form.files"
: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>
</AppUpload>
</el-form-item>
......
......@@ -14,12 +14,10 @@ const emit = defineEmits<{
(e: 'update'): void
}>()
const detail = $ref<ExperimentRecord>(inject('detail'))
const detail = $ref(inject<ExperimentRecord>('detail'))
const dialogVisible = $ref(false)
const isEmpty = $computed(() => {
return !props.experiment_id || !detail
})
const canRemove = $computed(() => {
return !(detail?.status !== 0)
})
......@@ -34,7 +32,7 @@ function handlePreview(index: number) {
function handleRemove(index: number) {
ElMessageBox.confirm('删除之后无法恢复,确认删除该截图吗?', '提示').then(() => {
if (!props.experiment_id) return
const pictures = detail.pictures.filter((item, i) => i !== index)
const pictures = detail?.pictures.filter((item, i) => i !== index)
uploadExperimentPicture({ experiment_id: props.experiment_id, pictures: JSON.stringify(pictures) }).then(() => {
emit('update')
})
......@@ -43,8 +41,7 @@ function handleRemove(index: number) {
</script>
<template>
<el-empty description="暂无数据" v-if="isEmpty" />
<template v-else>
<template v-if="detail && experiment_id">
<div class="result-score">
<h2>我的成绩</h2>
<template v-if="detail.status === 2">
......@@ -71,6 +68,7 @@ function handleRemove(index: number) {
<ImageViewer v-model="imageViewerVisible" :index="imageViewerIndex" :items="detail.pictures"></ImageViewer>
<ResultScoreDialog v-model="dialogVisible"></ResultScoreDialog>
</template>
<el-empty description="暂无数据" v-else />
</template>
<style lang="scss" scoped>
......
......@@ -2,11 +2,11 @@
import type { ExperimentRecord } from '../types'
import { Document } from '@element-plus/icons-vue'
const detail = $ref<ExperimentRecord>(inject('detail'))
const detail = $ref(inject<ExperimentRecord>('detail'))
const score = $computed<number>(() => {
const result =
((detail.score_details.operate || 0) + (detail.score_details.result || 0) + (detail.score_details.file || 0)) / 3
((detail?.score_details.operate || 0) + (detail?.score_details.result || 0) + (detail?.score_details.file || 0)) / 3
return parseFloat(result.toFixed(2))
})
</script>
......
......@@ -8,6 +8,7 @@ import { upload } from '@/utils/upload'
import { getExperimentRecord, uploadExperimentPicture, submitExperimentRecord } from '../api'
import dayjs from 'dayjs'
const Info = defineAsyncComponent(() => import('../components/Info.vue'))
const Book = defineAsyncComponent(() => import('../components/Book.vue'))
const Video = defineAsyncComponent(() => import('../components/Video.vue'))
const Discuss = defineAsyncComponent(() => import('../components/Discuss.vue'))
......@@ -164,6 +165,9 @@ function handleResize() {
</el-form-item>
</el-form>
<el-tabs type="border-card">
<el-tab-pane label="实验信息" lazy>
<Info :experiment_id="form.experiment_id"></Info>
</el-tab-pane>
<el-tab-pane label="实训指导" lazy>
<Book :course_id="form.course_id" :experiment_id="form.experiment_id" :key="resizeKey"></Book>
</el-tab-pane>
......
......@@ -4,8 +4,8 @@ export const json2Array = function (data: any, isValueToNumber = true) {
}
// 参赛模式
export const contestMode: Record<number, any> = {
1: '个人赛'
export const contestMode: Record<string, any> = {
'1': '个人赛'
}
// 参赛模式列表
export const contestModeList = json2Array(contestMode, false)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论