Appearance
第九章 弹窗交互
关盘口径(2026-04-21 生效):关盘来源统一为数据源推送(唯一来源);关盘 = 绝对终态,操盘页与结算详情页均不提供人工开盘入口。
9.1 赛果录入弹窗(4 个独立弹窗 + 全场扩展弹窗内 3 分区)
赛果录入 UI 设计(4 弹窗分治):
- 顶部无统一「赛果录入」按钮;改为按时段分组,每组顶部有独立入口
- 每个按钮打开独立弹窗,弹窗内仅录入该时段的赛果字段
- 15 分钟段弹窗:单弹窗内 6 Tab(常规 90 分钟分 6 段),每 Tab 独立应用按钮
- 全场赛果与扩展弹窗:弹窗内 3 分区(A 全场累计扩展 · B 加时赛 · C 点球大战),各分区独立应用按钮,按前置硬约束依次启用(A → B → C)
- 冠军赛事 / 长期盘口(EventTypeId = 1)不在本弹窗范围,由独立的冠军赛事结算详情模块处理
9.1.0 弹窗总览(4 个按钮 / 4 个弹窗)
| 按钮 | 位置 | 启用条件 | 弹窗内容 |
|---|---|---|---|
| 📝 上半场赛果录入(蓝) | 「上半场类盘口」分组顶部 | 半场结束(半场盘口关盘 或 数据源已返回半场比分) | 半场比分(主/客)+ 上半场进球详情 + 半场扩展统计(半场角球 / 半场牌)+ 半场特殊事件(半场乌龙 / 点球) |
| 📝 下半场赛果录入(青绿) | 「下半场类盘口」分组顶部 | 上半场弹窗已应用 + 任一 2H 盘口已关盘 或 数据源已返回全场比分(下半场 = 全场 − 半场 预填) | 下半场比分(主/客)+ 下半场进球详情 + 下半场扩展统计(下半场角球 / 下半场牌)+ 下半场特殊事件 |
| 📝 15 分钟段赛果录入(紫) | 「15 分钟段类盘口」分组顶部 | 至少一段结束 | 6 Tab:0-15' / 15-30' / 30-45' / 45-60' / 60-75' / 75-90'(对应段结束后启用;每 Tab 独立应用) |
| 📝 全场赛果与扩展(绿) | 「全场类盘口」分组顶部 | 上半场 + 下半场均已应用(分区 A);赛事进入加时(分区 B);赛事进入点球大战(分区 C) | 分区 A(全场累计扩展):全场合计比分只读 + 全场累计角球/牌只读 + 射门/射正/越位/犯规;分区 B(加时赛):加时上/下比分 + 加时段进球/角球/牌;分区 C(点球大战):主/客点球进球数 + 晋级方 |
事件触发类盘口(BT37 / BT159):依赖进球明细 / 角球明细,这些字段在"全场赛果录入"弹窗的子模块中录入。当结算人员在全场弹窗录入某粒进球时,相关事件触发类盘口即可结算(不必等全场结束)。
BT6 波胆赛中判输:依赖实时比分推送,由系统自动判输扫描,无需任何录入按钮。
一期无玩法级特殊录入。
9.1.1 半场赛果录入弹窗
┌─ 📝 半场赛果录入 ──────────────────────────┐
│ │
│ 数据来源:[绿色 数据源 / 橙色 人工] │
│ │
│ 主队半场得分: [ ] │
│ 客队半场得分: [ ] │
│ │
│ 校验:非负整数;半场 ≤ 全场(若全场已录入) │
│ │
│ 影响盘口(上半场类): │
│ • BT1-1H 上半场让球 │
│ • BT2-1H 上半场大小 │
│ • BT6-1H 上半场波胆 │
│ • BT9 半全场(依赖半场 + 全场结果组合) │
│ │
│ [取消] [应用半场赛果] │
└────────────────────────────────────────────┘前置条件:
- 任一上半场类盘口已关盘 或 数据源已返回半场比分
- 未满足时按钮灰置,提示「半场尚未结束 / 赛果未到位」
字段归属:本弹窗录半场比分 + 上半场进球详情 + 半场扩展统计(半场角球 / 半场牌)+ 半场特殊事件(时间 ≤ 45 分钟 + 半场伤停,上限 50 分钟);不含下半场、15 分钟段、全场扩展字段。完整归属见第 11.2.2.1 节。
应用后行为:
- 上半场类盘口(已关盘)按映射表(第 11.6 节)计算结算结果 → 预填到盘口卡片
- 半场角球类 / 半场牌类盘口(若有)按半场扩展字段结算
- BT159 半场相关 / BT37 半场相关按上半场进球详情逐粒触发结算
- 已录入字段锁定,不可再修改(需先对 1H 类已结算盘口执行二次结算才能重新录入)
9.1.2 下半场赛果录入弹窗(新增)
┌─ 📝 下半场赛果录入 ────────────────────────────┐
│ │
│ 前置:✓ 上半场已应用(半场 1:0) │
│ 数据源:[绿色 数据源 / 橙色 人工] │
│ │
│ ┌─ 基础层(必填)─────────────────────┐ │
│ │ 主队下半场得分: [ ] (预填 = 数据源│ │
│ │ 全场 − 半场) │ │
│ │ 客队下半场得分: [ ] │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─ 下半场进球详情(条件必填)───────────┐ │
│ │ 第 1 粒:[主/客] 时间[ ]分 球员[ ] │ │
│ │ 第 2 粒:[主/客] 时间[ ]分 球员[ ] │ │
│ │ ... (按「添加进球」动态增加行) │ │
│ │ ※ 时间范围 46 ≤ t ≤ 90 + 伤停 │ │
│ │ ※ 行数 = 下半场总进球(主+客) │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─ 下半场扩展统计(条件必填)───────────┐ │
│ │ 角球:主[ ] 客[ ] + 首个角球 │ │
│ │ 红黄牌:主黄[ ]红[ ] 客黄[ ]红[ ] │ │
│ │ + 首张牌 │ │
│ │ 乌龙球 / 点球进球(选填) │ │
│ └─────────────────────────────────────┘ │
│ │
│ 校验:非负整数;行数与比分一致;跨弹窗一致性 │
│ (上+下 合计核对数据源全场,见 11.4.5) │
│ │
│ 影响盘口: │
│ • BT1-2H / BT2-2H / BT6-2H / BT24-30 / BT57 │
│ • 下半场角球类 / 下半场牌类 │
│ • BT159 下半场相关 / BT37 下半场相关 │
│ │
│ [取消] [应用下半场赛果] │
└────────────────────────────────────────────────┘前置条件(硬约束):
- 上半场弹窗必须已应用(否则本按钮灰置,提示「请先录入并应用上半场赛果」)
- 任一 2H 盘口已关盘 或 数据源已返回全场比分
字段归属:本弹窗录下半场比分 + 下半场进球详情 + 下半场扩展统计 + 下半场特殊事件(时间 46-90 + 全场伤停,上限 100);不含上半场、15 分钟段、全场扩展字段。完整归属见第 11.2.2.2 节。
数据源预填:数据源开关 = 开 且数据源已推全场比分时,下半场比分字段预填 = 数据源全场比分 − 半场比分;结算人员可核对 / 修正。若数据源未推送全场比分,字段为空由结算人员人工录入。
应用后行为:
- 2H 类盘口立即按映射表计算结算结果 → 预填盘口卡片(不依赖全场扩展弹窗是否应用,独立结算)
- 下半场角球类 / 下半场牌类盘口(若有)按下半场扩展字段结算
- BT159 下半场相关 / BT37 下半场相关按下半场进球详情逐粒触发结算
- 跨弹窗一致性校验:上+下 合计非负;若数据源已推全场,合计值需与数据源全场比分一致(不一致橙色提示,不阻塞)
9.1.3 15 分钟段赛果录入弹窗(6 Tab + 独立应用)
┌─ 📝 15 分钟段赛果录入 ──────────────────────────────────┐
│ │
│ [0-15'] [15-30'] [30-45'] [45-60'] [60-75'] [75-90'] │
│ ✓ 已应用 ●当前 ○未结束 ○未结束 ○未结束 ○未结束 │
│ │
│ 当前 Tab:15-30' (已结束,可录入) │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ 主队 15-30' 得分: [ ] │ │
│ │ 客队 15-30' 得分: [ ] │ │
│ │ │ │
│ │ 段间递增校验:累计比分 ≥ 上一段累计比分 │ │
│ │ │ │
│ │ [应用本段赛果] ◄── 仅影响 15-30' 段 │
│ └────────────────────────────────────────┘ │
│ │
│ ⚠️ 每个 Tab 独立应用;切换 Tab 不丢失已填值; │
│ 应用仅影响该段对应盘口(BT48 / BT179 / BT180 该段) │
│ │
│ [关闭] │
└──────────────────────────────────────────────────────────┘Tab 状态:
| 状态 | 标识 | 说明 |
|---|---|---|
| 已应用 | ✓ | 该段赛果已录入并应用 |
| 当前 | ● | 当前选中的 Tab |
| 未结束 | ○(Tab 禁用) | 该段尚未结束(系统按时间判断) |
应用后行为:
- 仅该段对应的 BT48/BT179/BT180 盘口按该段比分计算结算结果
- 其他段盘口不受影响(不触发任何其他段的结算)
- 切换 Tab 后 UI 状态切换,但已填值和已应用状态保留
字段归属:本弹窗只管常规 6 段(0-15' / 16-30' / 31-45' / 46-60' / 61-75' / 76-90')。加时段(91-120')不在本弹窗录入,改在全场赛果录入弹窗的加时字段中录入(见 9.1.3)。完整归属见第 11.2.2 节。
9.1.4 全场赛果与扩展弹窗(3 分区,各分区独立应用按钮)
弹窗内 3 个独立分区(按前置硬约束依次启用:A → B → C),各分区独立应用按钮:
┌─ 📝 全场赛果与扩展 ──────────────────────────────────┐
│ │
│ 前置:✓ 上半场已应用(1:0)·✓ 下半场已应用(1:1) │
│ │
│ ━━━ 分区 A · 全场累计扩展 ━━━ │
│ 全场合计(只读):2:1 │
│ 全场角球(只读合计):主 6 · 客 4 │
│ 全场黄牌(只读合计):主 2 · 客 3 │
│ 全场红牌(只读合计):主 0 · 客 0 │
│ 射门:主[ ] 客[ ] 射正:主[ ] 客[ ] │
│ 越位:主[ ] 客[ ] 犯规:主[ ] 客[ ] │
│ [应用全场扩展] │
│ │
│ ━━━ 分区 B · 加时赛(仅赛事进入加时才启用)━━━ │
│ [此赛事未进入加时,本分区禁用] │
│ (进入加时时启用:加时上 / 加时下比分 + 加时进球 + 加时 │
│ 角球 / 牌 + [应用加时赛]) │
│ │
│ ━━━ 分区 C · 点球大战(仅赛事进入点球才启用)━━━ │
│ [此赛事未进入点球大战,本分区禁用] │
│ (进入点球时启用:主/客点球进球数 + 晋级方 + │
│ [应用点球大战]) │
│ │
│ [关闭] │
└──────────────────────────────────────────────────────┘前置条件(3 分区依次硬约束):
- 分区 A:上半场弹窗 + 下半场弹窗均已应用(全场合计值才有意义);打开弹窗时若任一未应用,分区 A 禁用并提示"请先应用上半场 + 下半场赛果"
- 分区 B:分区 A 已应用 + 赛事进入加时(业务判断:FT 合计平局 + 杯赛/淘汰赛阶段);常规 90 分钟分胜负的赛事分区 B 保持禁用
- 分区 C:分区 B 已应用 + 加时全场平局;常规加时分胜负的赛事分区 C 保持禁用
字段归属:
- 分区 A:射门 / 射正 / 越位 / 犯规(全场累计)+ 全场合计字段只读展示
- 分区 B:加时上比分 / 加时下比分 / 加时全场自动合计 / 加时段进球详情 / 加时段角球 / 加时段牌
- 分区 C:主/客点球进球数 / 晋级方
完整字段归属见第 11.2.2.4 节。
应用后行为(按分区独立):
- 分区 A 应用:FT 类全部(BT1 / BT2 / BT3 / BT5 / BT6 / BT7 / BT8 / BT158 / BT160 / BT161 等)+ BT9 半全场(全场部分)+ 全场角球类 / 全场牌类 / 射门射正类盘口按映射表计算结算结果 → 预填
- 分区 B 应用:加时类盘口(BT84 / BT85 等加时让球 / 大小 / 独赢)+ 加时角球 / 牌类盘口结算;加时段事件触发类(BT159/BT37 加时相关)按加时进球详情逐粒触发
- 分区 C 应用:晋级类盘口(杯赛晋级、小组出线等)按晋级方结算
- 跨弹窗一致性校验:分区 A 应用时校验"上+下 合计 = 全场合计"(自动派生天然一致)、"6 段累计 = 全场合计"(若 15 分钟段全部已应用);分区 B 应用时校验"加时下 ≥ 加时上"、"加时进球详情行数 = 加时全场总进球";分区 C 应用时校验"主/客点球数 ≠ 平"、"晋级方 = 点球多者"。不一致阻塞应用
9.1.5 数据来源状态栏
弹窗顶部展示当前赛果数据来源:
| 状态 | 展示 | 说明 |
|---|---|---|
| 数据源开启 | 绿色提示:「赛果已由 IM 拉取,可核对,无需人工录入」 | 所有字段只读 |
| 数据源关闭 | 橙色提示:「已拉到赛果,当前为人工补录模式」 | 字段可编辑 |
| 混合模式 | 基础比分取 IM 值(只读),缺失项可人工补充 | 部分只读部分可编辑 |
9.1.6 进球详情录入通用规则(4 弹窗共用)
四个弹窗均支持进球详情录入,仅时间区间与影响范围不同:
| 弹窗 | 时间区间 | 影响的事件触发类盘口 |
|---|---|---|
| 上半场弹窗 | 1 ≤ t ≤ 45 + 伤停(上限 50) | BT37 / BT159 的半场相关盘口 |
| 下半场弹窗 | 46 ≤ t ≤ 90 + 伤停(上限 100) | BT37 / BT159 的下半场相关盘口 |
| 15 分钟段弹窗(对应 Tab) | 各段起止区间内 | BT159 段相关盘口 |
| 全场扩展弹窗 · 分区 B 加时段 | 91 ≤ t ≤ 120 + 伤停(上限 126) | BT37 / BT159 加时相关盘口 |
每粒进球字段(3 弹窗共用):
| 列 | 说明 |
|---|---|
| 序号 | 第 1/2/3... 粒进球(按时间升序) |
| 进球球队 | 下拉:主队 / 客队(必选) |
| 进球时间 | 分钟数(必填,按所属弹窗校验时间区间) |
| 球员 | 文本(选填) |
| 删除 | 删除该行 |
操作按钮(每个进球详情区块独立):
- 「添加进球」:新增一行
- 「根据比分同步行数」:自动增减行数使进球详情行数 = 该区块对应的进球数(半场 / 段内 / 下半场 / 加时)
9.1.7 校验规则(核心规则引用)
核心规则:所有赛果录入校验规则统一定义在 第 11 章 11.4 校验规则(按 4 弹窗分治:11.4.1 上半场弹窗内校验 / 11.4.2 下半场弹窗内校验 / 11.4.3 15 分钟段弹窗内校验 / 11.4.4 全场扩展弹窗内校验(分区 A/B/C) / 11.4.5 跨弹窗一致性校验)。本节不重复列出,仅说明弹窗层的交互表现。
弹窗层交互行为:
| 交互 | 行为 |
|---|---|
| 输入时 | 实时校验,失败字段红色高亮 |
| 输入失败时的按钮 | 「应用赛果」按钮禁用,悬停提示具体失败原因 |
| 所有失败项同时 | 全部高亮 + 按优先级在下方展示失败提示 |
| 修正后 | 校验通过,红色消失,按钮恢复可用 |
| 未到位的赛果字段 | 允许留空,不报错;仅依赖该字段的盘口跳过结算,不阻塞其他盘口 |
完整校验规则见 第 11.4 节。
9.1.8 底部按钮
| 按钮 | 行为 |
|---|---|
| 关闭 | 关闭弹窗,不保存 |
| 应用赛果 | 保存赛果数据 → 系统对比最新拉取赛果与人工补录差异 → 仅对赛果变化的已关盘盘口重新计算结算结果 → 盘口卡片展示预填结果 |
「应用赛果」不执行关盘操作。已关盘的盘口不会再次关盘,开盘中的盘口不受影响。
9.2 结算赛事确认弹窗
点击「结算赛事」按钮触发。前置条件:该赛事下所有盘口均已结算或已取消。
数据源虽在赛果数据中提供"比赛结束时间"字段(仅作展示),但不单独推送"赛事完赛状态枚举"。赛事级"已结算"由结算人员确认所有盘口完成后主动触发,不依赖数据源的状态信号。
9.2.1 弹窗结构
┌─ ✅ 确认结算赛事 ───────────────────────────────┐
│ │
│ 赛事:曼联 vs 利物浦 比分 2-1 │
│ │
│ ⚠️ 待结算盘口警告(有待结算盘口时展示) │
│ • BT2-1H 上半场大小 待结算 │
│ • ... │
│ │
│ 结算摘要: │
│ 已结算盘口: 17 │
│ 已取消盘口: 0 │
│ 总投注额: ¥1,251,100 │
│ 预计派彩: ¥1,056,451 │
│ 平台盈亏: +¥194,649 │
│ │
│ 结算备注:(选填) │
│ ┌─────────────────────────────────────────────┐ │
│ │ │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ 【大额派彩时展示双勾选(预计派彩 > ¥50,000)】 │
│ ☐ 已核对赛果数据正确 │
│ ☐ 确认执行结算并发放派彩 │
│ │
│ [返回处理盘口] [确认结算赛事] │
└─────────────────────────────────────────────────┘双勾选触发条件(对齐 第 20.1 节 #13 大额派彩告警阈值):
| 预计派彩金额 | 弹窗展示 | 确认按钮规则 |
|---|---|---|
| ≤ ¥50,000 | 无双勾选项 | 点击即可提交 |
| > ¥50,000 | 展示双勾选项「☑ 已核对赛果数据正确」「☑ 确认执行结算并发放派彩」 | 两个选项全部勾选后按钮才启用 |
阈值判断口径(含多基准分场景的处理):
| 场景 | 判断依据 |
|---|---|
| 赛事内所有盘口基准分组 = 1(单组) | 以赛事合计预计派彩对比 ¥50,000 阈值 |
| 赛事内存在基准分组 ≥ 2 的盘口(多组) | 以**赛事合计预计派彩(所有分组累加)**对比 ¥50,000 阈值;不按"任一组 > 阈值"或"每组分别"判断 |
说明:赛事级"结算赛事"本身是赛事级资金落账操作,阈值判断采用合计派彩口径最符合业务语义(赛事 = 一次性落账单元)。多基准分组只影响盘口级结算的 UX 展示(按组分区),不改变赛事级双勾选的判断粒度。
归属:当前 ¥50,000 阈值为本模块系统级写死(一期不引入主管复核机制;二期评估移至风控管理面板配置)。
9.2.2 前置条件
| 条件 | 说明 |
|---|---|
| 所有盘口已完成处置 | 所有盘口状态为 已结算 或 已取消;有待结算或开盘中盘口时按钮禁用 |
| 无异常盘口 | 有异常盘口时阻止确认 |
9.2.3 前置校验与报错
| 校验项 | 规则 | 失败表现 |
|---|---|---|
| 待结算盘口检查 | 不存在状态为「关盘(待结算)」的盘口 | 按钮禁用 + 弹窗展示待结算盘口列表 |
| 开盘中盘口检查 | 不存在状态为「开盘」的盘口 | 按钮禁用 + 提示「仍有 N 个盘口开盘中」 |
| 异常盘口检查 | 不存在异常状态盘口 | 按钮禁用 + 提示「存在异常盘口,请先处理」 |
9.2.4 提交前时序保护(防竞态)
结算赛事是赛事级资金落账操作,需与"盘口自动重结算"等并发事件严格隔离:
| 阶段 | 系统行为 |
|---|---|
| 弹窗打开瞬间 | 抓取并记录所有盘口的当前状态快照(结算结果 / 派彩额 / 结算时间戳等),作为弹窗内结算摘要的基准 |
| 弹窗打开期间 | 若后台发生赛果变化触发某盘口自动重结算(见 第 11.7 节 聚合窗口),弹窗不主动关闭(避免打断结算人员) |
| 结算人员点击"确认结算赛事" | 系统再次校验所有盘口当前状态与弹窗打开时的快照是否一致 |
| 校验通过 | 执行 9.2.5 确认后行为 |
| 校验失败(任一盘口状态已变) | 弹窗不关闭,自动刷新为最新摘要 + 提示「检测到盘口 [BT1 -0.5] 赛果已更新,请重新核对后再确认」;结算人员需重新确认 |
设计意图:防止"结算人员看到旧快照 → 点确认 → 绕过后台自动重结算的新结果"的竞态场景,确保赛事级派彩落账始终基于最新盘口状态。
9.2.5 确认后行为
| 步骤 | 说明 |
|---|---|
| 1 | 赛事状态 → 已结算 |
| 2 | 赛事从操盘列表移除 |
| 3 | 派彩清单提交财务系统 |
| 4 | 记录结算日志 |
| 5 | 页面跳转回结算列表,或切换到左侧下一场待结算赛事 |
9.2b 赛事驳回确认弹窗
设计背景:赛事驳回仅改变赛事状态(→待结算),不影响盘口 / 注单 / 母单。目的是解除盘口二次结算的赛事级前置限制。赛事驳回后赛事重新出现在操盘列表。
9.2b.1 触发条件
赛事状态 = 已结算、已取消或异常,且距赛事最新结算时间 ≤ 24 小时时,点击赛事信息头「赛事驳回」按钮可触发。超窗后按钮永久禁用。
9.2b.2 弹窗结构
┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ 赛事驳回 ✕ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 确定要将此赛事从「{当前状态}」驳回为「待结算」吗? │
│ │
│ 赛事:{联赛名} {主队} vs {客队} │
│ 当前状态:{已结算 / 已取消 / 异常} │
│ 最新结算时间:{YYYY-MM-DD HH:mm:ss} │
│ 剩余驳回窗口:{HH:MM:SS} │
│ │
│ 驳回后: │
│ • 赛事状态回退为「待结算」 │
│ • 所有盘口/注单/串关状态不变 │
│ • 赛事重新出现在操盘列表 │
│ • 可对具体盘口执行二次结算 │
│ │
├─────────────────────────────────────────────────────────────────┤
│ [ 取消 ] [ 确认赛事驳回 ] │
└─────────────────────────────────────────────────────────────────┘9.2b.3 确认后行为
| 步骤 | 说明 |
|---|---|
| 1 | 赛事状态 已结算 / 已取消 / 异常 → 待结算 |
| 2 | 赛事信息头状态标签变为「待结算」(橙色),显示下一次 24 小时窗口倒计时 |
| 3 | 「赛事驳回」按钮消失,「结算赛事」按钮出现(禁用,需所有盘口已结算) |
| 4 | 盘口卡片中已结算盘口的「二次结算」按钮启用(之前禁用) |
| 5 | 赛事重新出现在操盘列表 |
| 6 | 记入结算日志(操作 = 赛事驳回) |
| 7 | 驳回操作本身不触发注单级联、不计循环次数;后续对盘口的操作按盘口粒度独立处理 |
9.3 赛事异常处理弹窗
点击赛事信息头的「赛事异常处理」按钮(仅在赛事状态 = 待结算时启用)触发。弹窗支持赛事级的 4 类异常原因选择。
按钮启用规则:仅在赛事状态 = 待结算时显示按钮;已结算 / 已取消 / 异常态下按钮隐藏,须先执行「赛事驳回」回待结算,才能再次发起异常处理。
按钮定位:「赛事异常处理」是赛事级异常的唯一入口。赛事级"已取消"、"异常态"均由此按钮下的弹窗产生。
9.3.1 弹窗结构
┌─ ⚠️ 赛事异常处理 ──────────────────────────────┐
│ │
│ 赛事:曼联 vs 利物浦 │
│ │
│ 影响范围: │
│ • 涉及盘口: 17 个 │
│ • 涉及注单: 456 笔 │
│ • 涉及金额: ¥892,300 │
│ │
│ 异常原因:(必选,4 选 1) │
│ ○ 赛事取消 ○ 赛事延期 │
│ ○ 赛事腰斩 ○ 数据错误 │
│ │
│ ┌─ 延期处理方式(仅选择延期时展示)─────────────┐ │
│ │ ○ 延期暂缓(赛事进入异常态,等待恢复) │ │
│ │ ○ 延期超时退款(超 24 小时未恢复,全额退款) │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌─ 腰斩处理方式(仅选择腰斩时展示)─────────────┐ │
│ │ ○ 按当前比分结算(已完成时段正常结算) │ │
│ │ ○ 全额退款 │ │
│ │ ○ 暂缓处理(赛事进入异常态) │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ │
│ 备注:(选填,数据错误时建议填写错误描述) │
│ ┌─────────────────────────────────────────────┐ │
│ │ │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ⚠️ 此操作提交后如需修正,需通过赛事驳回流程处理 │
│ │
│ [取消] [确认] │
└─────────────────────────────────────────────────┘9.3.2 异常原因(4 种,写死)
所有异常原因均须结算人员主动选择,系统不会自动判定。删除"其他"兜底原因(行业通用异常枚举不含兜底项;真遇到无法分类的情况归入"数据错误"并在备注说明)。
| 原因 | 说明 | 默认处理结果 |
|---|---|---|
| 赛事取消 | 结算人员根据官方取消公告发起 | 赛事 → 已取消,全额退款 |
| 赛事延期 | 结算人员判断赛事延期(需再选子方案) | 子方案决定(暂缓 → 异常态;超时退款 → 已取消) |
| 赛事腰斩 | 结算人员根据官方腰斩公告发起(需再选处理方式) | 处理方式决定(按比分 → 已结算;全额退款 → 已取消;暂缓 → 异常态) |
| 数据错误 | 仅做审计标记:点"确认"后系统仅留审计日志 + 赛事标红色「数据错误」标签。不动订单、不改赛事态、不下架、不关盘。实际修正按颗粒度走各自独立入口(操盘页调赔率 / 赛果录入页 / 盘口卡片 void / 盘口二次结算) | 不改赛事状态(保持待结算);不下架(赛事客户端正常可见) |
9.3.3 延期处理方式(仅选择延期时展示)
| 方式 | 赛事状态 | 注单影响 | 串关影响 | 后续 |
|---|---|---|---|---|
| 延期暂缓 | 异常态(待结算人员决策) | 注单保持待结算(不退款、不结算) | 母单保持待结算 | 赛事恢复 → 结算人员执行「赛事驳回」→ 待结算;无法恢复 → 结算人员先赛事驳回回待结算,再次打开弹窗选「延期超时退款」 |
| 延期超时退款 | 已取消 | 全额退款 | 该场子单系数 = 1.00(串关降级) | 距最新结算时间 ≤ 24h 可通过赛事驳回回滚 |
延期暂缓期间的盘口处理:选择"延期暂缓"后,系统立即批量关盘该赛事所有开盘中盘口(停止接受新投注),已有注单保持待结算。赛事恢复后需由数据源推送开盘信号自动恢复。对应数据源延期时所有盘口立即关盘的行业通用做法。
9.3.3b 数据错误处理(仅选择数据错误时展示,2026-04-23 定稿)
选择"数据错误"后,弹窗仅保留错误描述备注字段(建议填写);不提供盘口选择器,不提供错误类型分流。本入口仅做审计标记,点"确认"后系统不触发任何业务动作。
确认后系统动作:
| 维度 | 动作 |
|---|---|
| 订单 | 不动(已结算和未结算均保持原状) |
| 赛事业务态 | 不动(保持待结算) |
| 操盘列表 | 不下架(赛事客户端正常可见) |
| 盘口业务态 | 不动(无关盘逻辑,本入口无此权限;关盘来源唯一 = 数据源推送) |
| 审计日志 | 记录操作人 + 时间 + 错误描述 |
| UI 标识 | 赛事行红色「数据错误」标签(仅标识,不改业务态) |
实际修正按颗粒度走各自独立入口(弹窗外完成):
| 错误场景 | 修正入口 |
|---|---|
| 开盘中盘口赔率错 | 操盘详情页直接调赔率(trading-detail 07) |
| 开盘中 / 关盘未结算盘口赛果字段错 | 赛果录入页修正 |
| 已关盘未结算盘口赔率错 | 盘口卡片「取消盘口」按钮(void) |
| 已结算 / 已取消盘口数据错 | 盘口卡片「盘口二次结算」按钮(第 15 章) |
9.3.4 腰斩处理方式(仅选择腰斩时展示)
| 方式 | 赛事状态 | 注单影响 | 串关影响 |
|---|---|---|---|
| 按当前比分结算 | 已结算(按已完成时段) | 已完成时段盘口正常结算,未完成时段退款 | 已结算子单正常计入,对应未完成时段(退款)子单系数 = 1.00 |
| 全额退款 | 已取消 | 所有注单退还本金 | 该场子单系数 = 1.00(串关降级) |
| 暂缓处理 | 异常态 | 注单保持待结算 | 母单保持待结算 |
9.3.5 确认后行为
| 原因/方式 | 赛事状态变化 | 回滚路径 |
|---|---|---|
| 赛事取消 / 延期超时退款 / 腰斩-全额退款 | → 已取消 | 距最新结算时间 ≤ 24h 可通过「赛事驳回」回退到待结算,再逐盘口二次结算 |
| 延期暂缓 / 腰斩-暂缓处理 | → 异常态 | 再次打开异常处理弹窗选择新方式,或通过「赛事驳回」(距最新结算时间 ≤ 24h) |
| 腰斩-按比分结算 | 涉及盘口按比分结算后最终 → 已结算(需继续逐盘口处理) | 同"已结算"的赛事驳回路径 |
| 数据错误 | 不改赛事状态(保持待结算)+ 不下架 + 不关盘 + 不动订单 | 弹窗仅做审计标记;实际修正走弹窗外各自入口(操盘页调赔率 / 赛果录入页 / 盘口卡片 void / 盘口二次结算) |
9.4 盘口二次结算弹窗
点击已结算盘口的「二次结算」按钮触发。前置条件:赛事状态 = 待结算(含尚未确认结算 / 赛事驳回后回退)。赛事状态为已结算 / 已取消 / 异常态时二次结算按钮禁用,提示"请先执行赛事驳回"。二次结算前不强制填写说明。
注意与盘口首次结算的区别:首次结算(待结算盘口 → 已结算)在赛事异常态下允许(行业做法:腰斩时上半场已有明确赛果可正常结算);二次结算(已结算盘口 → 关盘)仅待结算时允许。详见 15.3.1 前置条件。
9.4.1 弹窗结构(单组场景)
适用范围:本节描述盘口内基准分组 = 1 的单组场景弹窗(~90% 场景)。盘口内基准分组 ≥ 2 时走 §9.4.3 多组基准分盘口自适应展示 的分区弹窗,本节结构仅作为基础模板。
┌─ ⚠️ 二次结算确认 ───────────────────────────────┐
│ │
│ 二次结算盘口:BT1 全场让球 -0.5 │
│ │
│ 二次结算影响: │
│ • 涉及注单: 89 笔 │
│ • 已派彩金额(需追回): ¥106,720 │
│ • 关联串关: 3 单 │
│ │
│ ⚠️ 二次结算确认后系统将执行差额处理(不足记坏账) │
│ │
│ [取消] [确认二次结算] │
└─────────────────────────────────────────────────┘9.4.2 进入二次结算后行为
| 步骤 | 说明 |
|---|---|
| 1 | 该盘口结算结果撤销 |
| 2 | 该盘口下所有注单回退为待结算 |
| 3 | 盘口卡片恢复为可操作状态(关盘,可重新选择结算结果) |
| 4 | 关联串关母单回退为待结算 |
| 5 | 二次结算后按 15.4.1 差额公式处理:差额 > 0 补发;差额 < 0 扣回(不足记坏账);差额 = 0 不动 |
9.4.3 多组基准分盘口的自适应展示(对齐 第 7.3.6 节)
| 场景 | 弹窗行为 |
|---|---|
| 盘口内基准分组 = 1(单组) | 9.4.1 弹窗结构与原流程一致 |
| 盘口内基准分组 ≥ 2(多组) | 弹窗按组分区展示,支持两种操作粒度: ① 全部组统一二次结算:所有组一次撤销,结算人员后续重新选择各组结果 ② 仅二次结算某一组:其他组保持原结算结果不动 |
多组二次结算弹窗示例:
┌─ ⚠️ 二次结算确认:BT1 全场让球 -0.5(含 2 组基准分)┐
│ │
│ ┌ 组 1:下注时比分 0:0(100 笔,¥500,000)────┐ │
│ │ 原结算结果:主队赢 已派彩:¥920,000 │ │
│ │ ☑ 对本组执行二次结算 │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌ 组 2:下注时比分 1:0(30 笔,¥150,000)─────┐ │
│ │ 原结算结果:主队输 已派彩:¥0 │ │
│ │ ☐ 对本组执行二次结算 │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ 关联串关:3 单(将按勾选组的结果回退) │
│ ⚠️ 差额处理按勾选组的原派彩执行 │
│ │
│ [取消] [确认二次结算] │
└────────────────────────────────────────────────────┘规则:
- 差额处理按勾选组的原派彩 / 新派彩独立计算,与其他组互不影响
- 关联串关母单回退仅作用于被二次结算组对应的注单
- 重新选择结果时仍按组分别选定(参见 第 7.3.6 节 多组弹窗 UX)
9.5 二次确认弹窗(合并至 第 9.2 节 结算赛事确认弹窗)
合并说明:原 第 9.5 节 "二次确认弹窗" 与 第 9.2 节 "结算赛事确认弹窗" 结构相同(摘要 + 双勾选),统一为同一个弹窗:
- 触发方式:点击「结算赛事」按钮 或 按 Ctrl+Enter 快捷键(Mac 可用 Cmd+Enter)
- 弹窗结构:见 第 9.2 节 结算赛事确认弹窗
- 双勾选项(保留在 第 9.2 节 内容中):☑ 已核对赛果数据正确 ☑ 确认执行结算并发放派彩
- 两个确认项全部勾选后「确认执行结算」按钮才启用
原 9.5.1 内容已并入 第 9.2.1 节 弹窗结构。
9.6 结算人员分配弹窗
点击赛事信息头的结算人员区域触发。
弹窗定义引用:完整弹窗结构见结算列表第 8 章 8.3 节 结算人员分配弹窗。按阶段分配模式(赛前 / 滚球),每个赛事分别指定赛前结算人员和滚球结算人员。与操盘手分配弹窗(按玩法分配,17 种 BT)不是同一组件,分配维度和数据模型均不同。