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

chore: update

上级 2da7580c
...@@ -7,6 +7,7 @@ import { getContestExpertList, updateContestExpert } from '../api' ...@@ -7,6 +7,7 @@ import { getContestExpertList, updateContestExpert } from '../api'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void (e: 'update:modelValue', visible: boolean): void
}>() }>()
...@@ -73,8 +74,14 @@ function handleSubmit() { ...@@ -73,8 +74,14 @@ function handleSubmit() {
const experts = list.map((item: any) => { const experts = list.map((item: any) => {
return { id: item.id, expert_id: item.expert_id, role: item.info.role } return { id: item.id, expert_id: item.expert_id, role: item.info.role }
}) })
const expertsLeader = experts.filter((item: any) => item.role === '1')
if (expertsLeader.length !== 1) {
ElMessage.error('必须有且只有一个专家组长')
return
}
updateContestExpert({ id: detail.id, experts }).then(() => { updateContestExpert({ id: detail.id, experts }).then(() => {
ElMessage.success('保存成功') ElMessage.success('保存成功')
emit('update')
emit('update:modelValue', false) emit('update:modelValue', false)
}) })
} }
......
<script setup lang="ts"> <script setup lang="ts">
import type { ContestItem } from '../types' import type { ContestItem } from '../types'
import { getContest } from '../api' import { ElMessage } from 'element-plus'
import { getContest, getContestRules, getContestExpertList } from '../api'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import dayjs from 'dayjs' import dayjs from 'dayjs'
...@@ -41,12 +42,50 @@ const statusText = $computed(() => { ...@@ -41,12 +42,50 @@ const statusText = $computed(() => {
return status.find(item => item.value == detail?.status)?.label return status.find(item => item.value == detail?.status)?.label
}) })
// 获取赛项信息
function fetchInfo() { function fetchInfo() {
getContest({ id: props.id }).then(res => { getContest({ id: props.id }).then(res => {
detail = res.data.detail detail = res.data.detail
}) })
} }
onMounted(fetchInfo) // 获取赛项规则
let ruleInfo = $ref<any>()
function fetchRule() {
getContestRules({ competition_id: props.id }).then(res => {
ruleInfo = res.data.detail
})
}
// 获取评分专家
let experts = $ref<any>([])
// 专家组长
const expertLeaders = $computed(() => {
return experts.filter((item: any) => {
return item.info.role === '1'
})
})
const expertLeadersText = $computed(() => {
return expertLeaders.map((item: any) => item.name).join('、')
})
// 普通专家
const expertMembers = $computed(() => {
return experts.filter((item: any) => {
return item.info.role === '2'
})
})
const expertMembersText = $computed(() => {
return expertMembers.map((item: any) => item.name).join('、')
})
function fetchExperts() {
getContestExpertList({ id: props.id }).then(res => {
experts = res.data.detail
})
}
onMounted(() => {
fetchInfo()
fetchRule()
fetchExperts()
})
function formatDate(timestamp: number): string { function formatDate(timestamp: number): string {
return dayjs(timestamp * 1000).format('YYYY-MM-DD') return dayjs(timestamp * 1000).format('YYYY-MM-DD')
...@@ -58,11 +97,19 @@ function formatTime(timestamp: number): string { ...@@ -58,11 +97,19 @@ function formatTime(timestamp: number): string {
// 评分规则 // 评分规则
const scoringRulesVisible = $ref(false) const scoringRulesVisible = $ref(false)
// 评分专家 // 评分专家
const scoringExpertsVisible = $ref(false) let scoringExpertsVisible = $ref(false)
// 参赛选手 // 参赛选手
const contestantVisible = $ref(false) const contestantVisible = $ref(false)
// 评分细则 // 评分细则
const scoringRulesBookVisible = $ref(false) const scoringRulesBookVisible = $ref(false)
function handleExperts() {
if (!ruleInfo) {
ElMessage.error('请先维护评分规则')
return
}
scoringExpertsVisible = true
}
</script> </script>
<template> <template>
...@@ -71,9 +118,7 @@ const scoringRulesBookVisible = $ref(false) ...@@ -71,9 +118,7 @@ const scoringRulesBookVisible = $ref(false)
<el-button type="primary" @click="scoringRulesVisible = true" v-permission="'competition-rule'" <el-button type="primary" @click="scoringRulesVisible = true" v-permission="'competition-rule'"
>评分规则</el-button >评分规则</el-button
> >
<el-button type="primary" @click="scoringExpertsVisible = true" v-permission="'competition-bind-experts'" <el-button type="primary" @click="handleExperts" v-permission="'competition-bind-experts'">评分专家</el-button>
>评分专家</el-button
>
<el-button type="primary" @click="contestantVisible = true" v-permission="'competition-competitor-list'" <el-button type="primary" @click="contestantVisible = true" v-permission="'competition-competitor-list'"
>参赛选手</el-button >参赛选手</el-button
> >
...@@ -86,7 +131,7 @@ const scoringRulesBookVisible = $ref(false) ...@@ -86,7 +131,7 @@ const scoringRulesBookVisible = $ref(false)
<p>赛项封面:</p> <p>赛项封面:</p>
<img :src="detail.cover" /> <img :src="detail.cover" />
</div> </div>
<el-descriptions class="descriptions-box" :column="2"> <el-descriptions :column="2">
<el-descriptions-item label="赛项名称:">{{ detail.name }}</el-descriptions-item> <el-descriptions-item label="赛项名称:">{{ detail.name }}</el-descriptions-item>
<el-descriptions-item label="赛项类型:">{{ typeText }}</el-descriptions-item> <el-descriptions-item label="赛项类型:">{{ typeText }}</el-descriptions-item>
<el-descriptions-item label="主办单位:">{{ detail.host_unit.label }}</el-descriptions-item> <el-descriptions-item label="主办单位:">{{ detail.host_unit.label }}</el-descriptions-item>
...@@ -101,6 +146,8 @@ const scoringRulesBookVisible = $ref(false) ...@@ -101,6 +146,8 @@ const scoringRulesBookVisible = $ref(false)
<el-descriptions-item label="正式比赛时间:" <el-descriptions-item label="正式比赛时间:"
>{{ formatTime(detail.start_at) }} ~ {{ formatTime(detail.end_at) }}</el-descriptions-item >{{ formatTime(detail.start_at) }} ~ {{ formatTime(detail.end_at) }}</el-descriptions-item
> >
<el-descriptions-item label="专家组长:">{{ expertLeadersText }}</el-descriptions-item>
<el-descriptions-item label="专家:">{{ expertMembersText }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</AppCard> </AppCard>
...@@ -111,9 +158,15 @@ const scoringRulesBookVisible = $ref(false) ...@@ -111,9 +158,15 @@ const scoringRulesBookVisible = $ref(false)
<ViewVideo :id="id"></ViewVideo> <ViewVideo :id="id"></ViewVideo>
</AppCard> </AppCard>
<!-- 评分规则 --> <!-- 评分规则 -->
<ScoringRulesDialog v-model="scoringRulesVisible" v-if="scoringRulesVisible && detail"></ScoringRulesDialog> <ScoringRulesDialog
v-model="scoringRulesVisible"
@update="fetchRule"
v-if="scoringRulesVisible && detail"></ScoringRulesDialog>
<!-- 评分专家 --> <!-- 评分专家 -->
<ScoringExpertsDialog v-model="scoringExpertsVisible" v-if="scoringExpertsVisible && detail"></ScoringExpertsDialog> <ScoringExpertsDialog
v-model="scoringExpertsVisible"
@update="fetchExperts"
v-if="scoringExpertsVisible && detail"></ScoringExpertsDialog>
<!-- 参赛选手 --> <!-- 参赛选手 -->
<ContestantDialog v-model="contestantVisible" v-if="contestantVisible && detail"></ContestantDialog> <ContestantDialog v-model="contestantVisible" v-if="contestantVisible && detail"></ContestantDialog>
<!-- 评分细则 --> <!-- 评分细则 -->
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论