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

chore: update

上级 2da7580c
......@@ -7,6 +7,7 @@ import { getContestExpertList, updateContestExpert } from '../api'
import { useMapStore } from '@/stores/map'
const emit = defineEmits<{
(e: 'update'): void
(e: 'update:modelValue', visible: boolean): void
}>()
......@@ -73,8 +74,14 @@ function handleSubmit() {
const experts = list.map((item: any) => {
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(() => {
ElMessage.success('保存成功')
emit('update')
emit('update:modelValue', false)
})
}
......
<script setup lang="ts">
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 dayjs from 'dayjs'
......@@ -41,12 +42,50 @@ const statusText = $computed(() => {
return status.find(item => item.value == detail?.status)?.label
})
// 获取赛项信息
function fetchInfo() {
getContest({ id: props.id }).then(res => {
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 {
return dayjs(timestamp * 1000).format('YYYY-MM-DD')
......@@ -58,11 +97,19 @@ function formatTime(timestamp: number): string {
// 评分规则
const scoringRulesVisible = $ref(false)
// 评分专家
const scoringExpertsVisible = $ref(false)
let scoringExpertsVisible = $ref(false)
// 参赛选手
const contestantVisible = $ref(false)
// 评分细则
const scoringRulesBookVisible = $ref(false)
function handleExperts() {
if (!ruleInfo) {
ElMessage.error('请先维护评分规则')
return
}
scoringExpertsVisible = true
}
</script>
<template>
......@@ -71,9 +118,7 @@ const scoringRulesBookVisible = $ref(false)
<el-button type="primary" @click="scoringRulesVisible = true" v-permission="'competition-rule'"
>评分规则</el-button
>
<el-button type="primary" @click="scoringExpertsVisible = true" v-permission="'competition-bind-experts'"
>评分专家</el-button
>
<el-button type="primary" @click="handleExperts" v-permission="'competition-bind-experts'">评分专家</el-button>
<el-button type="primary" @click="contestantVisible = true" v-permission="'competition-competitor-list'"
>参赛选手</el-button
>
......@@ -86,7 +131,7 @@ const scoringRulesBookVisible = $ref(false)
<p>赛项封面:</p>
<img :src="detail.cover" />
</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="赛项类型:">{{ typeText }}</el-descriptions-item>
<el-descriptions-item label="主办单位:">{{ detail.host_unit.label }}</el-descriptions-item>
......@@ -101,6 +146,8 @@ const scoringRulesBookVisible = $ref(false)
<el-descriptions-item label="正式比赛时间:"
>{{ 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>
</div>
</AppCard>
......@@ -111,9 +158,15 @@ const scoringRulesBookVisible = $ref(false)
<ViewVideo :id="id"></ViewVideo>
</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>
<!-- 评分细则 -->
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论