diff --git a/src/api/events/types.ts b/src/api/events/types.ts index b68276b..c2c53a6 100644 --- a/src/api/events/types.ts +++ b/src/api/events/types.ts @@ -143,7 +143,7 @@ export interface TournamentAdminInfoVO { /** 退赛人数 */ dropoutCount: string; /** 允许报名最大人数 */ - dtotalLimit: string; + totalLimit: string; /** 总对阵数 */ matchTotalCount: string; /** 已完成对阵数 */ diff --git a/src/pages/events/list/components/EventAuditModal.tsx b/src/pages/events/list/components/EventAuditModal.tsx index 4670538..4b3a46a 100644 --- a/src/pages/events/list/components/EventAuditModal.tsx +++ b/src/pages/events/list/components/EventAuditModal.tsx @@ -1,5 +1,7 @@ -import { defineComponent, reactive } from 'vue'; -import { Modal, Descriptions, Image, Radio, Input, Form, message } from 'ant-design-vue'; +import { defineComponent, reactive, ref } from 'vue'; +import { Modal, Descriptions, Image, Radio, Input, Form, Spin, message } from 'ant-design-vue'; +import { useEffect, useState } from '@/hooks'; +import { getEventDetail, type TournamentAdminInfoVO } from '../model/services'; import { validateEventAuditSubmit } from '../model/form'; import styles from './EventAuditModal.module.less'; @@ -12,31 +14,6 @@ interface EventAuditModalProps { onSubmit?: (payload: { approved: boolean; comment: string }) => void; } -// ===== Mock 数据 ===== -const MOCK_DETAIL = { - name: '第二届全国地学羽毛球邀请赛', - eventTime: '2026.05.26 08:00 ~ 2026.05.31 22:00', - descr: - '赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍赛事介绍。', - registerTime: '2026.05.24 08:00 ~ 2026.05.26 22:00', - cancelDeadline: '2026.05.25 22:00', - region: '北京市 北京市 东城区', - address: '李宁体育馆', - venueNo: '李宁体育馆', - publicEvent: '在首页展示赛事', - needIdCard: '无需提供', - needIdCardImage: '无需提供', - createTime: '2026.05.26 08:00', - creator: '张三', - status: '待审核', - enrolledCount: 100, - cancelledCount: 1, - maxCount: 1000, - crossedCount: 50, - completedCount: 50, - cover: 'https://picsum.photos/seed/eventcover/600/300', -}; - /** * 赛事审核弹窗 * 包含:基础信息 + 封面 + 审核操作(通过/未通过 + 审核内容) @@ -50,7 +27,8 @@ export default defineComponent({ onSubmit: { type: Function, default: undefined }, }, setup(props: EventAuditModalProps) { - const detail = MOCK_DETAIL; + const detail = ref(null); + const [loading, setLoading] = useState(false); // 审核表单 const auditForm = reactive({ @@ -58,6 +36,33 @@ export default defineComponent({ comment: '', }); + /** 加载赛事详情 */ + const fetchDetail = async (id: string) => { + setLoading(true); + detail.value = null; + try { + const res = await getEventDetail(id); + if (res.code == 200) { + detail.value = res.data; + } else { + message.error(res.msg || '获取赛事详情失败'); + } + } catch { + // 网络层已统一提示 + } finally { + setLoading(false); + } + }; + + /** 弹窗打开时重新拉取详情 */ + useEffect(() => { + if (props.visible && props.record?.id) { + auditForm.approved = true; + auditForm.comment = ''; + fetchDetail(props.record.id); + } + }, [() => props.visible]); + const handleOk = () => { const check = validateEventAuditSubmit({ approved: auditForm.approved, @@ -72,6 +77,104 @@ export default defineComponent({ } }; + /** 格式化时间范围 */ + const formatRange = (start: string, end: string) => { + if (!start && !end) return '-'; + return `${start || '?'} ~ ${end || '?'}`; + }; + + /** 渲染 0/1 开关文本 */ + const boolText = (val: string, trueText: string, falseText: string) => { + return val === '1' ? trueText : falseText; + }; + + /** 渲染详情内容 */ + const renderContent = () => { + const d = detail.value!; + + return ( + <> + {/* ===== 基础信息 ===== */} +
+
基础信息
+ + {d.name || '-'} + + {formatRange(d.startTimeBegin, d.startTimeEnd)} + + + + {d.descr || '-'} + + + + {formatRange(d.signupTimeBegin, d.signupTimeEnd)} + + + {d.signupTimeEnd || '-'} + + + {d.venueArea || '-'} + {d.venue || '-'} + {d.venueNo || '-'} + + + {boolText(d.isPublic, '在首页展示赛事', '非公开')} + + + {boolText(d.isRequireIdCardNo, '需要提供', '无需提供')} + + + {boolText(d.isRequireIdCardImg, '需要提供', '无需提供')} + + + {d.createTime || '-'} + {d.createNickname || '-'} + 待审核 + {d.signupCount || '0'} + + {d.dropoutCount || '0'} + + + {d.dtotalLimit || '-'} + {d.matchTotalCount || '0'} + {d.matchCount || '0'} + +
+ + {/* ===== 封面 ===== */} +
+
封面
+ {d.img ? : 暂无封面} +
+ + {/* ===== 审核操作 ===== */} +
+
+ 审核操作 +
+
+ + + 通过 + 未通过 + + + +