报名管理后台

ADMIN CONSOLE
{{ error }}
报名数据管理
共 {{ list.length }} 条报名记录,已提交 {{ submittedCount }} 条
运动队用户名赛事赛区状态运动员数提交时间退回操作
{{ r.teamName || '-' }} {{ r.username || '-' }} {{ r.game || '-' }} {{ r.submitted ? '已提交' : '填写中' }} {{ r.athleteCount }} {{ r.submittedAt ? new Date(r.submittedAt).toLocaleString('zh-CN') : '-' }} {{ r.returnedCount ? r.returnedCount + ' 次' : '-' }}
暂无报名数据

{{ detail.teamName || detail.username }} - 报名详情

运动队信息

所属地区:{{ [detail.step1?.province, detail.step1?.city, detail.step1?.district].filter(Boolean).join(' / ') || '-' }} 联系人:{{ detail.step1?.contact || '-' }} 电话:{{ detail.step1?.phone || '-' }} 邮箱:{{ detail.step1?.email || '-' }}

随队人员

职务姓名证件类型证件号码性别民族
{{ s.role }}{{ s.name }}{{ s.idType === 'passport' ? '护照' : '身份证' }}{{ s.idcard }}{{ s.gender }}{{ s.ethnicity }}

未填写

运动员({{ detail.step3?.length || 0 }} 人)

姓名证件类型证件号码性别出生日期组别
{{ a.name }}{{ a.idType === 'passport' ? '护照' : '身份证' }}{{ a.idcard }}{{ a.gender }}{{ a.birthdate }}{{ a.group || '-' }}

未填写

报项({{ detail.step4?.length || 0 }} 条)

运动员
{{ e.name }}

未填写

本赛事未开放的大类:{{ detailFlagsText }}

操作记录

操作操作人时间备注
{{ {submit:'提交',withdraw:'撤回',unlock:'管理员解锁'}[o.op] || o.op }}{{ o.operator }}{{ new Date(o.createdAt).toLocaleString('zh-CN') }}{{ o.note || '-' }}

暂无记录

共 {{ comps.length }} 个赛事 · 修改保存后前台即时生效
赛事名称赛区赛事级截止报项数(拳/械/练/集)操作
{{ c.title }} {{ (c.regions||[]).map(r=>r.name).join('、') || '-' }} {{ formatCnDateTime(c.deadline) || '-' }} {{ catCount(c, 'quanshu') }} / {{ catCount(c, 'qixie') }} / {{ catCount(c, 'duilian') }} / {{ catCount(c, 'collective') }}
暂无赛事

{{ compEditor._isNew ? '新建赛事' : '编辑赛事:' + compEditor.origTitle }}

点击日历选择,精确到秒;可留空(赛区级截止优先)
总人数 留空=不限;填0=禁止该性别
运动员不少于 人(留空=默认3人;填0=不限制最少人数)

勾选后:报名页显示材料上传区,必须上传齐全才能继续和提交;不勾选:报名页不显示材料上传区,等于临时停用该功能。

组别名称 *出生日期起出生日期止
按出生日期划分组别(含起止当天),各区间不能重叠;起始与截止日期至少填一项,留空的一项表示不设限——只填「起」= 该日及之后出生的都算(如儿童组 2015-01-01);只填「止」= 该日及之前出生的都算(如老年组 1966-12-31);两项都填 = 闭区间(如青年组 2004-09-01 至 2006-12-31)。配置后前台运动员的组别按身份证号/出生日期自动匹配、不可手改;不添加任何组别则前台保持手动填写
集体拳术 人;集体器械 不参加该项目的队伍人数记为0;留空=默认值(拳术6-12人、器械6-9人)
允许人作为对练组合当前:{{ duilianRangePreview }}
同一对练标识对应的运动员人数须在此范围内,否则前台不允许进入下一步;填「2–2」= 只允许2人一组(出现1人或3人同标识即算填错),填「2–3」= 2人或3人一组均可;下限最小2、上限最大9(对练标识只能选1-9);留空 = 默认2–3人。仅在勾选「开放对练报名」时生效

赛区(至少一个)

赛区ID *赛区名称 *比赛日期(日历选择,可只填一端)报名截止(可留空,日历选择,精确到秒)
比赛日期填在日历选择器里(可只填一个,如「只填起」表示该日起;都不填则前台不显示),保存后前台会在赛事标题下方显示成统一格式,与报名截止时间分开,不易混淆。
前台显示预览:{{ regionsDatePreview }}
「赛区ID」是赛区在系统里的唯一标识,报名记录按它区分赛区,请谨慎修改。 改了 ID 或删掉赛区,该赛区下已有的报名记录就会失去归属(参赛队前台会看到空白页、后台赛区列显示为「-」), 需要去「报名数据」页用「修复赛区」逐条挂回。只想改名字的话,把 ID 保持原样即可。
{{ compError }}

预设账号(预创建队伍登录,附带人数配额)

账号即运动队名称;密码可手填或一键生成;人数限制留空=沿用本赛事默认上限。预设账号可直接登录报名,其人数配额覆盖赛事默认总人数上限。导出 Excel 含全部已创建账号——本次新建的账号会带上明文密码;更早创建的账号仅存密码哈希,无法找回明文(导出中以"—"占位),如需换新密码可在下方列表中直接重置。

待创建({{ presetPending.length }} 行)
账号(运动队名称)密码人数限制
已创建账号({{ presetExisting.length }} 个) · 上次跳过:{{ presetSkippedMsg }}
账号运动队名称人数配额
{{ a.username }} {{ a.teamName }} {{ a.maxAthletes ?? '默认' }}

暂无预设账号

黏贴批量导入

每行一个账号,列之间用 Tab 或逗号分隔:
账号,密码,人数限制

共 {{ secLogs.total }} 条日志,留存期不少于 {{ secLogs.retentionDays }} 天(到期自动删除)
时间类别事件账号手机号IP 地址域名详情
{{ new Date(l.createdAt).toLocaleString('zh-CN') }} {{ catName(l.category) }} {{ l.type }} {{ l.account || '-' }} {{ l.phone || '-' }} {{ l.ip || '-' }} {{ l.host || '-' }} {{ l.detail || '-' }}
{{ secLogs.loading ? '加载中...' : '暂无日志' }}
第 {{ secLogs.page }} / {{ secLogs.pages }} 页

导出安全日志

按时间范围导出为 Excel 文件。起始/结束时间均可留空(留空 = 不限,导出留存期内全部日志)。

修改管理密码

{{ pwdError }}

导出上传资料(Zip)

压缩包内以运动队名称命名文件夹,图片按「姓名+身份证 / 姓名+身份证(2)/ 姓名+保险单 / 责任声明书」规则命名。可一键导出全部队伍,也可单独导出某一支队伍。

共 {{ list.length }} 条报名记录,已提交 {{ submittedCount }} 条
运动队 赛事 / 赛区 状态 操作
{{ r.teamName || r.username }}
{{ r.username }}
{{ r.game }}
{{ r.region }}
{{ r.submitted ? '已提交' : '填写中' }}
暂无报名记录

修复赛区归属

运动队:{{ relinkDlg.row && relinkDlg.row.teamName || '-' }} 账号:{{ relinkDlg.row && relinkDlg.row.username || '-' }}
这条报名原来的赛区(ID:{{ relinkDlg.row && relinkDlg.row.rawRegionId || '空' }})在当前赛事里已经找不到了, 所以参赛队打开前台会看到空白页。把它挂到下面选中的赛区,原来的数据就会回来。

赛事:{{ relinkDlg.row && relinkDlg.row.game || '-' }}

归入赛区

这条记录现在有 {{ relinkDlg.row && relinkDlg.row.athleteCount }} 名运动员。 如果所选赛区下已经有这支队伍的报名,会提示您是否用本条替换。
{{ relinkDlg.error }}