From a7e31613c541b46f257022c19f0309be9d45c2bf Mon Sep 17 00:00:00 2001 From: ZhuRui Date: Thu, 6 Aug 2026 17:05:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E8=B5=9B=E4=BA=8B?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=E8=AF=A6=E6=83=85=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E6=A0=B7=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/orders/types.ts | 8 +- src/assets/img/default.png | Bin 0 -> 8892 bytes .../components/EventDetailModal.module.less | 31 ----- .../list/components/EventDetailModal.tsx | 110 ++++++++++-------- .../orders/components/OrderDetailModal.tsx | 9 +- 5 files changed, 72 insertions(+), 86 deletions(-) create mode 100644 src/assets/img/default.png diff --git a/src/api/orders/types.ts b/src/api/orders/types.ts index 6c45c60..349e553 100644 --- a/src/api/orders/types.ts +++ b/src/api/orders/types.ts @@ -140,9 +140,9 @@ export interface TournamentAdminOrderInfoVO { /** 订单详情查询参数 */ export interface OrderDetailQueryParams { /** 订单编号 */ - orderNo: string; + orderNo?: string; /** 选手ID */ - uniqueId: string; + uniqueId?: string; } // ============================================================ @@ -178,9 +178,9 @@ export interface TournamentAdminOrderInfoPageVO { /** 选手列表查询参数 */ export interface OrderPlayerListQueryParams { /** 订单编号 */ - orderNo: string; + orderNo?: string; /** 选手ID */ - uniqueId: string; + uniqueId?: string; page: string; limit: string; } diff --git a/src/assets/img/default.png b/src/assets/img/default.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b4f5b31516d0bc5cb18fddc9a081800e0aaaaa GIT binary patch literal 8892 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 YES_NO_MAP[v] ?? v; const formatPublic = (v: string) => PUBLIC_MAP[v] ?? v; const formatGender = (v: string) => GENDER_MAP[v] ?? v; -const PAGE_SIZE = 10; +const PAGE_SIZE = 5; -/** 渲染身份证图片(cover 填充,与封面显示方式一致) */ +/** 渲染身份证图片(缩略图,点击可预览) */ const renderIdImages = (imgList: string[], singleImg: string) => { const urls = imgList.length > 0 ? imgList : singleImg ? [singleImg] : []; if (urls.length === 0) return --; return ( - -
- {urls.map((url) => ( -
- -
- ))} -
-
+ + {urls.map((url) => ( + + ))} + ); }; -/** 选手表格列 */ -const PLAYER_COLUMNS = [ +/** 选手表格基础列(不含证件号/证件图片,由 setup 内 computed 按需拼接) */ +const BASE_PLAYER_COLUMNS: any[] = [ { title: '选手', dataIndex: 'realName', key: 'realName', width: 100 }, { title: '性别', @@ -57,23 +60,25 @@ const PLAYER_COLUMNS = [ customRender: ({ text }: { text: string }) => formatGender(text), }, { title: '手机号', dataIndex: 'phone', key: 'phone', width: 130 }, - { - title: '证件号', - dataIndex: 'idCard', - key: 'idCard', - width: 180, - customRender: ({ record }: { record?: TournamentAdminInfoSignupVO }) => - record?.idCard ? record.idCard : --, - }, - { - title: '证件图片', - key: 'idCardImgs', - width: 280, - customRender: ({ record }: { record?: TournamentAdminInfoSignupVO }) => - record ? renderIdImages(record.idCardImgList || [], record.idCardImg || '') : --, - }, ]; +const ID_CARD_COLUMN: any = { + title: '证件号', + dataIndex: 'idCard', + key: 'idCard', + width: 180, + customRender: ({ record }: { record?: TournamentAdminInfoSignupVO }) => + record?.idCard ? record.idCard : --, +}; + +const ID_CARD_IMG_COLUMN: any = { + title: '证件图片', + key: 'idCardImgs', + width: 120, + customRender: ({ record }: { record?: TournamentAdminInfoSignupVO }) => + record ? renderIdImages(record.idCardImgList || [], record.idCardImg || '') : --, +}; + export default defineComponent({ name: 'EventDetailModal', props: { @@ -86,6 +91,14 @@ export default defineComponent({ const [detail, setDetail] = useState(null); const [detailLoading, setDetailLoading] = useState(false); + /** 动态列:根据赛事是否要求证件号/证件图片决定显示 */ + const playerColumns = computed(() => { + const cols = [...BASE_PLAYER_COLUMNS]; + if (detail.value?.isRequireIdCardNo === '1') cols.push(ID_CARD_COLUMN); + if (detail.value?.isRequireIdCardImg === '1') cols.push(ID_CARD_IMG_COLUMN); + return cols; + }); + // ===== 每个组别的选手数据(key = categoryId) ===== const categoryPlayers = ref>({}); const categoryPlayerTotal = ref>({}); @@ -230,12 +243,14 @@ export default defineComponent({ {/* ===== 封面 ===== */} - {detail.value.img && ( -
-
封面
- -
- )} +
+
封面
+ +
{/* ===== 赛事公告 ===== */} {detail.value.notice && ( @@ -249,21 +264,20 @@ export default defineComponent({ {detail.value.categoryList && detail.value.categoryList.length > 0 && (
组别信息
- {detail.value.categoryList.map((cat: InnerCategoryVO) => ( + {detail.value.categoryList.map((cat: InnerCategoryVO, idx: number) => (
- {cat.name}({CATEGORY_TYPE_MAP[cat.type] ?? cat.type}) -
-
- + 组别{idx + 1}:{cat.name}({CATEGORY_TYPE_MAP[cat.type] ?? cat.type}) +
{categoryPlayerTotal.value[cat.id] > 0 && (
refundSuccessList.value.length); const fetchData = async () => { - const params = { orderNo: props.orderNo, uniqueId: props.uniqueId }; + const params: OrderDetailQueryParams = {}; + if (props.orderNo) params['orderNo'] = props.orderNo; + else params['uniqueId'] = props.uniqueId; + const [detailRes] = await Promise.all([getOrderDetail(params), fetchPlayers(1)]); if (detailRes.code == 200) { setDetail(detailRes.data);