为活动组织者构建票务与参会者管理的 Web 应用
一个实战指南:如何规划、设计并交付一款帮助活动组织者管理报名、票务、参会者、邮件和现场签到的 Web 应用。

明确目标、用户与范围
在选功能或技术栈之前,先清楚地定义你要为谁做产品以及“成功”是什么样子。这能防止票务平台变成一堆半成品工具的集合。
定义用户与核心要完成的工作
先把你的主要客户类型列出来,不同类型会推动不同的优先级:
- 独立组织者 需要速度:快速创建活动、卖票,并尽量少被客服问题淹没。
- 场地方 更关心可重复的配置、容量控制和快速的现场操作。
- 代理/机构 需要多活动管理、客户访问权限和清晰的报表。
把核心任务用一句话写清,例如:“帮助组织者以最低的工作量和最低错误率售票并完成参会者签到。”
绘制核心工作流(端到端)
列出那些“必须可用”的路径,定义产品的基本体验:
创建活动 → 设置票种/定价 → 发布 → 参会者报名 → 支付 → 发票/票据下发 → 通过二维码签到 → 导出/报表。
任何一步缺失或脆弱,应用就会感觉不完整,即便有很多“花哨”功能。
设定你会实际追踪的成功指标
选择与工作流相关的、可以衡量的几个指标:
- 结账转化率(开始注册 → 完成订单)
- 平均签到时间与失败率(二维码扫描问题)
- 退款/转让处理时长(请求 → 解决)
- 每场活动的客服量(以及主要原因)
决定 MVP 与 v1
MVP 应该是“第一天就能用”的:活动创建、票务销售、确认邮件、基本签到和简单导出。把优惠规则、座位图、复杂税务等留到 v1,在验证需求后再做。
及早识别约束条件
明确 预算、时间线 和 团队技能——它们决定你是全套自建还是依赖现有服务。同时标记合规需求(发票、GDPR/CCPA、支付规则),避免后来在压力下大改。
核心功能与用户故事
在画界面或选数据库之前,先定义应用必须“允许人们做什么”——以及这些“人”是谁。好的票务/活动管理应用通常有几类明确角色,每类的权限和期望不同。
角色与权限(谁可以做什么)
先保持简单,然后逐步扩展:
- 组织者:创建活动、发布票务、管理设置,可退款/取消订单。
- 工作人员:查看参会者列表、进行二维码签到、有限的编辑权限。
- 财务:查看订单、打款、发票/收据,处理退单和退款。
- 参会者:报名、付款、接收票据并管理自己的订单详情。
实用规则:凡是能改钱相关字段或活动可见性的,都应作为单独权限控制。
需要规划的主要页面(“顺畅路径”)
尽早草拟核心导航,避免功能变成零散的终点:
- 活动设置(名称、场地/线上信息、日期/时区、容量、政策)
- 票种构建器(种类、价格、售卖窗口、限额、促销码)
- 结账 + 确认(报名表、支付、收据、票据下发)
- 订单详情(状态、支付、退款历史、参会者分配)
- 参会者列表 + 签到(搜索、筛选、扫码、签到日志)
- 组织者仪表盘(销售汇总、容量、提醒、最近活动)
可测试的用户故事与验收标准
写可在一次核验中验证的简短故事:
- 组织者发布票务:假设活动处于草稿状态,当我添加一个带价格和售卖日期的“普通票”时,那么它应出现在公开报名页,并在结束日期后停止售卖。
- 参会者购买票:当支付成功,则创建订单、生成唯一票据/二维码,并在 2 分钟内发送确认邮件。
- 工作人员签到参会者:当我扫描有效二维码,参会者被标记为“已签到”,带时间戳,且同一二维码除非有覆盖权限则不能再次使用。
必须支持的边界情况
及早规划这些以免后续补丁过多:售罄、重复订单、部分退款、拒付/争议、活动取消/改期、邮件发送失败、离线签到、票转让/分配。
每个工作流需要存储的数据
至少包括:活动状态与容量、票种规则(限额、售卖窗口)、订单/支付状态、参会者身份字段、二维码/令牌,以及不可变的 签到日志(谁替谁签到、何时、使用哪台设备)。这个“纸质证据”在争议发生时很关键。
活动、票种、订单与参会者的数据模型
清晰的数据模型决定你的系统易演进还是不断被应急修补。先定义要保存的“实体”(Event、TicketType、Order、Attendee)以及它们间的关系。
活动:事实来源
一个 Event 应覆盖日程、限额与发布信息:
- 基础信息:标题、描述、organizer_id
- 日期:start_at、end_at、timezone(以 UTC 存储时间戳,显示时用活动时区)
- 场地:venue_name、address、city、country(若复用场地可建独立 Venue 表)
- 容量:total_capacity(可选每票种上限)
- 状态:draft、published、canceled、ended
该结构支持常见管理需求,如隐藏草稿活动、在容量到达时关闭售卖、显示正确的本地时间。
票种:在卖什么
TicketType 定义一种售卖项:
- 名称、描述、价格、货币
- quantity_available(及 quantity_sold)
- 销售窗口:sales_start_at、sales_end_at
- 税费:tax_rate(或 tax_id)、fee_flat/fee_percent、fees_included 标志
- 附加项:可以建为独立 TicketType 或 AddOn 表并关联到 TicketType
- 折扣码:DiscountCode 表(code、type percent/fixed、amount、usage_limit、有效期)与 Event 或特定 TicketType 关联
订单与支付:发生了什么
把商业层拆成两层:
- Order:order_number、event_id、buyer_email、subtotal、taxes、fees、total、order_status(pending/confirmed/canceled)
- Payment:provider(如 Stripe)、provider_payment_id、payment_status(requires_action/paid/failed/refunded)、amount、captured_at
退款最好做成独立记录(Refund 表),便于做部分退款并保留完整审计。把收据/发票字段(billing_name、billing_address、vat_id)存到 Order 上。
参会者:谁持票
一个 Attendee(或 TicketInstance)应包含:
- event_id、ticket_type_id、order_id
- 参会者字段(姓名、邮箱、自定义表单答案)
- 票的分配与转让:assigned_to_email、transfer_token、transferred_at
- 签到:check_in_state(not_checked_in/checked_in)、checked_in_at、checked_in_by
- 标签/备注供工作人员使用(对 VIP、无障碍请求很有用)
导入/导出与运营字段
及早为 CSV 导出做准备:保持一致的字段名(order_number、ticket_type、attendee_name、checked_in_at),并包含用于胸牌打印的字段。
若预计后续集成,添加轻量级的“Webhook 事件”或 outbox 表,让管理后台能安全触发导出或 API 钩子而不丢失更新。
技术栈与架构决策
最适合的“栈”是你团队能构建、交付并支持的。对于活动管理 web 应用,快速迭代比理论上的完美更重要——尤其在你还不清楚真实流量模式时。
从简单开始:先做单体,后拆分
单一代码库(monolith)通常是正确的起点。它让部署、调试与数据访问简单——当你还在验证票种、促销码和组织者工作流时这点很重要。
只有在有明确理由时才拆服务:某部分需要独立伸缩、团队协作受阻或部署变得高风险。即便如此,你也可以在单体内先做模块化(独立文件夹/包),再考虑微服务化。
选择务实的栈
常见且成熟的组合:
- 前端:React(Next.js)或 Vue(Nuxt)用于快速 UI 开发与 SEO 友好活动页。
- 后端:Node.js(NestJS/Express)或 Python(Django/FastAPI)。选团队熟悉的技术。
- 数据库:PostgreSQL,适合关系型数据(活动、订单、参会者)与事务。
- 托管:托管平台(Render/Fly.io/Heroku 类)或云 PaaS。托管数据库通常值得投入。
别仅因工具流行就选它——在值班时,“乏味”的选项往往更可靠。
用 Koder.ai 加速(可选)
如果你的首要目标是快速交付 MVP(活动设置、结账、发票/票据、二维码签到与导出),像 Koder.ai 这样的 vibe-coding 平台可以通过聊天驱动的构建流程帮你从 spec 快速得到可运行的应用。
Koder.ai 与这种产品类型契合:它默认栈常和票务需求匹配——React 前端,Go + PostgreSQL 后端,并提供 Planning Mode、快照/回滚 与 源代码导出 等功能,方便安全迭代并完全拥有代码库。
存储与邮件:当作一级依赖
规划存放活动图片、生成的发票与 PDF 票据的位置:
- 对象存储(S3 兼容)用于上传与生成文件。
- 若需全球更快分发,再加 CDN。
确认邮件与提醒使用专门服务(SendGrid、Postmark、SES),能提升送达率并提供日志,便于排查“我没收到票”的问题。
环境与秘钥
尽早搭建 本地、预发布 与 生产 环境,并为每个环境配置独立:
- 支付秘钥、邮件凭证、Webhook 签名
- 数据库(不要把生产数据直接复制到开发)
- 基本 URL 与回调 URL
这能避免误扣款并保证测试更贴近真实场景。
标准与发布流程
达成一些基本约定:代码格式化(Prettier/Black)、lint 规则、提交约定与简单的发布流(功能分支 + 代码评审 + CI 检查)。小小的纪律能显著减少结账与票据下发环节的错误——这些错误代价最高。
UX 与 UI:报名、结账与组织者仪表盘
好的 UX 主要在于减少不确定性:参会者要清楚自己买了什么,组织者要有把握知道销售与签到情况。
参会者流程(保持可预测)
设计简洁、可复用的路径:活动页 → 选择票种 → 结账 → 确认。每一步回答一个问题:
- 活动页:"这是我想去的活动吗?"
- 票种选择:"我该选哪张,是否还可买?"
- 结账:"我能迅速安全地付钱吗?"
- 确认:"接下来怎么办,我怎么进场?"
在票种选择页,把可用性与规则清晰展示。显示剩余票数、售卖起止时间(并标注时区),以及售罄后如何处理(候补、停止售卖或联系组织者)。
如果支持促销码,不要把字段隐藏,但也不要给它与主要操作同等视觉权重。
表单:默认精简,必要时展开
结账摩擦会导致流失。保持初始表单最小(姓名、邮箱、支付),通过渐进式揭示展示可选的详细问题。
有效示例:
- 询问“需要发票吗?”→ 选是才显示开票字段
- 询问“替别人购买吗?”→ 为每张票展示参会者信息输入
- 询问“有无无障碍需求?”→ 可选且带简短说明
若一次订单购买多张票,清晰区分 付款人(收据、支付)与 参会者(姓名、签到),避免混淆。
减少客服工单的确认页
付款后确认应包含:活动详情、票务汇总、二维码访问或“票已附上”的说明,以及明确的下一步(“添加到日历”、“管理我的订单”)。提供指向轻量订单管理页的链接,例如 /orders/lookup。
组织者仪表盘:一目了然
组织者打开仪表盘通常要看三个数字:售出张数、收入、已签到人数。把这些放在顶部,接着提供快速筛选(日期、票种、状态、退款)。
对现场签到的工作人员来说,移动优先是必须的:大触控目标、高对比度、突出“扫码”/“搜索参会者”的切换。会场入口处界面慢或拥挤会迅速造成排队。
账户、角色与权限
票务应用很快变成多人协作场所:组织者创建活动,财务处理退款,现场工作人员只需扫码。清晰的账户与权限能保持体验顺畅并减少代价高昂的错误。
安全且简单的认证
支持组织者与工作人员邮箱+密码登录,并可选启用 MFA(若你的用户群需要)。
密码重置不要通过明文密码邮件发送。使用一次性、时限性重置链接(例如 15–60 分钟),仅存储哈希密码,使用后使重置令牌失效。对登录与重置操作加速率限制,并使用“相同响应”消息以防攻击者探测邮箱是否存在。
基于角色的访问控制(RBAC)
按事件层面定义角色并应用权限。很多团队管理多个活动,同一人可能在一个活动是财务,在另一个活动是查看者。
常见权限分组:
- View:只读访问参会者、订单与基础报表
- Edit:管理活动详情、票种、赠票与参会者编辑
- Finance:退款、打款、税务设置与支付导出
把权限写得显式(如 order.refund、attendee.update),别只靠模糊的“admin”。
签到工作人员(移动友好、权限受限)
创建专门的 Check-in 角色,可:
- 扫描二维码
- 按名/邮箱搜索参会者
- 标记出席并在规则允许下撤销
但不能查看收入、发起退款或编辑票价。这样就可以把手机交给临时工作人员而不用担心财务信息泄露。
敏感操作的审计日志
记录谁在何时做了什么,尤其是退款、赠票、编辑参会者详情或导出名单等。日志应包含 event ID、操作者账户、时间戳及前后值。审计日志在纠纷处理中和客服时非常有用。
支付、票据发放与二维码
支付让你的应用变得“真实”:钱在流动,期望升高,错误代价大。把结账与票据发放视为一个受控的工作流,需有清晰状态与审计。
选支付提供商(并只存引用,不存卡数据)
使用支持 Webhook 与退款的提供商(例如 Stripe、Adyen、PayPal)。数据库绝不存原始卡号或 CVV,只保存提供商生成的引用,如:
payment_intent_id/charge_idcustomer_id(可选)receipt_url(可选)
这让系统更简单,也降低合规风险。
把结账建模为状态机
预先定义订单/支付状态,保持客服、报表与邮件一致。常见状态包括:
- pending(订单已创建,等待支付确认)
- paid(提供商确认支付;可发票/票)
- failed(支付被拒)
- expired(结账会话超时)
- refunded 与 partially_refunded(记录退款金额与原因)
以提供商 Webhook 作为进入 paid 和 refunded 的来源,并保留不可变的事件日志(例如 order_events 表)以便追溯。
发票/票据:唯一代码 + 二维码
仅在订单变为 paid(或组织者主动发放赠票)时生成票据。为每张票创建唯一票码并在二维码中编码该标识。
实用规则:二维码负载本身不要包含有意义信息(例如随机 token 或签名字符串),由服务器在验证后再放行入场。
折扣、免费票与赠票
为折扣码实现明确规则:有效期、使用上限、可用票种、是否可叠加。免费票与赠票也应创建订单记录(total = 0),以保持报表与参会者历史完整。
收据与确认的单一事实来源
基于 Order 记录发送收据与确认邮件,而不是依赖前端的“成功”界面。支付确认后系统应生成票据、持久化并发送邮件,邮件中应包含查看订单的链接(例如 /orders/{id})及二维码等。
邮件通知与沟通
邮件是注册系统的基石:它安抚买家、传送票据并减少客服。把邮件当作产品功能,而不是事后补充。
必要的模板(及其必须包含的内容)
从一小组事务性模板开始:
- 订单确认:活动名、日期/时间、场地(或“线上”)、订单汇总、支付状态、清晰的“查看订单”链接。
- 票据下发:每张票的参会者名、票种、二维码(或安全的签到链接)与基本签到说明。
- 提醒邮件:关键信息(开门时间、停车/入场规则),并提供再次找回票的方式。
- 退款/取消通知:退款项、金额、时间线及联系组织者的方式。
保持主题行具体(“您在 {EventName} 的票”),避免过多营销语言以免影响送达率。
组织者品牌但不损害送达率
允许组织者上传 logo、主色和简短页脚,同时保持统一 HTML 结构。用固定布局的“品牌槽”胜过完全自定义 HTML,能避免渲染问题并降低垃圾邮件风险。
从送达角度出发,使用稳定的发件地址(如 [email protected]),并用 Reply-To 指向组织者(或验证过的发送者)。这样用户会收到熟悉的发件人,同时还能回复给组织者。
跟踪与支持工具
至少对每封邮件记录状态:queued、sent、delivered(若提供商报告)、bounced、complaint。这能支撑组织者看到时间线并帮助团队快速诊断问题。
在组织者仪表盘中提供两个关键的自助操作:
- 重发票据(带速率限制与审计日志)
- 更新参会者邮箱并重新下发(不改变原付款/订单记录)
可选的 SMS(基于许可)
仅在明确需要时添加短信(如场地临时变更)。应为主动选择,为每位参会者收集同意,并把短信限制为纯信息性内容,附带简单退订指引。
现场签到与参会者查找
现场签到环节决定应用在几秒内的用户感受。工作人员需要瞬间加载、能在嘈杂场馆中工作并回答一个问题:“此人能否入场?”
一个快速的签到界面
设计专用的“签到”视图(独立于组织者仪表盘)。优先考虑速度与大触控目标。
包含两种输入模式:
- 搜索:按姓名、邮箱、订单号或票码模糊搜索,输入即显示结果
- 扫码:使用设备相机扫描二维码,直接跳转到票/参会者记录
为离线场景支持在设备上缓存特定活动的参会者列表(仅存入场验证所需字段)。连接丢失时,应用仍能本地验证票据并将更新排队同步。
防止重复入场(并提供受控覆盖)
每张票应有明确状态:未签到 → 已签到。扫描被使用的票应展示醒目警告,包含时间戳和核销人员(若可用)。
仅对有明确权限的用户(例如“签到负责人”)允许覆盖,并要求填写原因备注,便于后续处理争议。
分组订单与多票种的部分签到
对于包含多张票的订单,支持逐张签到。界面应展示剩余票数与票种(例如“4 张普通票,已入场 2 张”)。这避免到场团体必须一次性全部入场的尴尬。
显示有用的上下文信息
在扫码/搜索瞬间展示:
- 票种与准入级别(VIP、工作坊附加项)
- 参会者备注(饮食要求、特别说明)
- 无障碍需求(仅在收集且必要时展示,且尽量简短)
记录每次签到
保存签到事件日志(扫码/搜索、设备/用户、时间、结果、覆盖原因)。这些日志支持会后报表与争议处理。
报表、导出与管理工具
好的报表能把你的应用从“卖票的地方”变成组织者活动筹备、现场与会后依赖的工具。
组织者期待的报表
从一小组高信心的报表开始,回答常见问题:
- 按票种的销售:售出单位、剩余(若限额)、毛额与净额
- 收入拆解:小计、折扣、手续费、税款与打款总额
- 订单状态:已付、待定、已取消、已退款、拒付(若适用)
- 出席率:已签到人数 vs 已发票数,按票种划分
确保这些数字与组织者在订单收据与打款摘要中看到的一致,减少客服引发的疑问。
有用的筛选与导出
报表在加上几个标准筛选后价值大增:
- 日期范围(订单创建、付款日期或签到时间)
- 票种
- 订单/参会者状态(已付/已退款、已签到/未签到)
提供 CSV(可选 XLSX)导出。明确说明导出包含哪些字段:order ID、买家信息、参会者信息、票种、价格、税费、折扣码、签到时间等。
同时说明导出是否包含 PII(邮箱/电话),并提供“最小化”导出选项便于与第三方共享。
漏斗指标(轻量但高价值)
为每个活动跟踪简单漏斗:活动页浏览 → 启动结账 → 支付完成。基础计数能帮助组织者发现问题(例如很多结账启动但少量付款),并验证推广效果。
支持与运营的管理工具
内部管理面板应以速度为先:
- 支持按订单 ID、买家邮箱、参会者姓名或(若存)卡片后 4 位搜索
- 查看完整订单时间线(创建、付款、邮件发送、退款)
- 重发确认邮件 与 重新下发票据
- 从支付提供商发起退款并记录结果
数据保留与导出策略
记录订单、参会者记录与日志保留多久以及保留期满后的处理,并在帮助文档(例如 /help/data-retention)和导出对话框中说明,让组织者知道他们下载与存储的内容和期限。
安全、隐私与可靠性的基础
对于票务应用来说,安全与可靠性不是“以后再做”的事。你会存姓名、邮箱,常伴随支付相关元数据——早期做几项基础选项能避免痛苦重写。
保护参会者数据(最小权限 + 加密)
从最小权限开始:组织者只看到自己活动,工作人员只看到签到所需信息,管理员权限严格受限。在后端实施基于角色的权限控制(别只靠前端隐藏)。
全程使用 HTTPS(包括 Webhook 与内部服务)。把秘钥(API key、Webhook 签名、数据库凭证)存到托管的机密管理器或云提供商的 Secret Manager 中——永远不要放在仓库或前端。
验证输入并阻止常见攻击
把每个字段都视为不可信:活动描述、参会者姓名、自定义问题、优惠码。
- 使用参数化查询或 ORM 防止注入
- 对用户生成内容进行转义并使用严格的内容安全策略来防 XSS
- 对会改变状态的请求(尤其使用 cookie 的场景)防 CSRF
- 对登录、密码重置与“重发票据”做速率限制
可向用户解释的隐私基础
尽量只收必要信息(例如票务只需姓名与邮箱),可选字段要明确标注。将事务类邮件(收据、票据、日程变更)与营销邮件分开。
若提供营销选项,存储明确同意并提供便捷退订。
真正测试过的备份与恢复
备份只有在能恢复时才有意义。自动化数据库备份,保持多个保留期,并定期将恢复过程演练到预发布环境。
写下简单的恢复清单:谁负责恢复、恢复到哪、如何验证扫码仍然可用。
能早期发现问题的监控
为前端/后端添加错误追踪,关键端点(结账、Webhook 处理、签到 API)的可用性检查,慢查询告警。少而可操作的告警比噪声满满的仪表板更有用。
测试、上线与迭代计划
测试与上线是票务应用赢得信任的阶段。结账或二维码验证上的小 bug 不只是惹人烦——可能会阻止现场入场。把这阶段当作产品的一部分,而不是最后一道坎。
关键路径的自动化测试
把精力放在直接影响钱与入场的流程,保持测试高价值且可重复:
- 结账:支付成功、支付取消、支付失败、促销码边界情况
- 票据发放:购买后只生成一张票、票种正确、邮件发送、PDF/PKPass 链接(若支持)有效
- 签到:二维码扫描接受有效票、拒绝已用票、离线/高延迟下优雅处理
- 退款/撤销:状态更新、票据失效、邮件与审计日志
为支付提供商的 Webhook 做若干“契约测试”,避免提供商 payload 变更悄然破坏订单状态切换。
上线前的预发布演练
用小型活动(甚至内部聚会)做预发布演练。让组织者与现场工作人员使用预发布系统进行真实彩排:创建活动、售票、扫码签到、发起退款、重发票据。
收集反馈并记录工作人员犹豫的点——这些通常是值得优先修复的界面问题。
上线检查清单与运营准备
上线前确认:
- 域名 + SSL、重定向规则、错误页面
- 邮件发信设置(SPF/DKIM/DMARC)与送达测试
- 生产支付秘钥与 Webhook 端点
- 日志、告警以及查看失败任务(邮件发送、票据生成)的方式
支持流程与持续迭代
准备好标准回复与内部处理步骤以应对争议、退款和重发票据请求。
上线后小步迭代——候补名单、座位、集成(CRM/邮件)与多活动账户等功能应以真实客服问题与组织者反馈为导向。
常见问题
活动售票 MVP 应包含哪些功能?
从活动创建、票种设置、结账、付款确认、二维码票券发放、基础签到和 CSV 导出开始。座位图、高级折扣和复杂税务规则可暂缓,等主办方证明确有需求后再加入。
我应该先为哪类用户设计活动主办方应用?
先明确主要用户,例如个人主办方、场地运营方或活动代理机构。然后定义一项清晰的核心任务,例如帮助主办方以较少错误完成售票和参会者签到。
活动管理应用需要哪些用户角色?
为主办方、财务用户和签到人员设置不同角色。每个角色只应拥有完成工作所需的操作权限,尤其是退款、票价、参会者数据和导出相关权限。
活动、票券和参会者的数据应如何组织?
将相关数据分开管理:活动定义日程和容量,票种定义用户购买的内容,订单记录购买行为,付款记录支付服务商状态,参会者保存个人票券。这种结构让退款、转票和报表更易管理。
应用应在何时发放票券和二维码?
让支付服务商通过已签名的 webhook 确认付款。当系统记录已支付订单后,为每位参会者创建一张唯一票券,并基于随机或签名令牌生成二维码,由服务器进行验证。
工作人员如何在入口快速为参会者签到?
使用专门适配移动端的签到页面,支持扫描二维码以及按姓名或邮箱搜索。工作人员重复扫描同一张票时,应显示明显警告;仅允许具备相应权限的人员进行覆盖操作。
如何减少购票结账时的流失?
让结账流程保持简短:先只询问购票人的姓名、邮箱和付款信息。仅在购票人需要时再显示发票字段、参会者信息或无障碍需求问题。
活动应用应如何处理付款和退款?
保存支付服务商的引用信息,例如付款或扣款 ID,绝不保存原始银行卡号或 CVV。跟踪待付款、已付款、失败、已退款和部分退款等支付状态,让客服和报表使用一致的数据。
应用应向购票人发送哪些邮件?
只有在数据库中已创建已支付订单和票券后才发送确认邮件。邮件应包含活动详情、票券摘要、找回订单的方式和清晰的入场说明。跟踪投递和退信状态,以便主办方在需要时重新发送票券。
主办方应查看哪些报表?
先提供按票种划分的销售额、包含费用和税款的收入、订单状态及到场率。再加入日期、票种、付款状态和签到状态筛选,并提供 CSV 导出。对于不需要参会者联系方式的合作伙伴,提供精简导出选项。