Appearance
第十一章 操作流程说明
交互原型
体验操作流程:点击「上架」按钮查看上架弹窗,体验完整的操作交互流程。
本章详细描述操盘列表中各核心操作的完整流程,包括触发入口、操作步骤、系统反馈、异常处理等。
11.1 上架操作
11.1.1 操作入口
| 入口位置 | 操作方式 | 适用场景 |
|---|---|---|
| 行操作按钮 | 点击上架按钮 | 单个赛事上架 |
| 批量操作栏 | 选中后点击批量上架 | 多个赛事上架 |
| 快捷按钮 | 点击待上架全部后批量操作 | 批量处理待上架赛事 |
11.1.2 上架确认弹窗
弹窗标题:✅ 确认上架赛事
弹窗内容: 上架时,若没有分配操盘手,需要先提示分配操盘手
┌────────────────────────────────────────┐
│ ✅ 确认上架赛事 ✕ │
├────────────────────────────────────────┤
│ 选中赛事 3 场 │
│ 已滚球 1 场 (红色) │
│ 即将开赛 1 场 (橙色) │
├────────────────────────────────────────┤
│ 盘口初始状态 * │
│ ● 跟随数据源(推荐) ← 默认 │
│ 上架后盘口跟随IM状态,可立即投注 │
│ ○ 锁定 │
│ 盘口可见但暂停投注,需手动解锁 │
│ ○ 隐藏 │
│ 盘口对玩家不可见,需手动取消隐藏 │
├────────────────────────────────────────┤
│ 分配操盘手 * │
│ [ 点击分配操盘手 ] ✓ 已分配 6 个玩法 │
│ (按玩法分别指定赛前/滚球操盘手) │
├────────────────────────────────────────┤
│ [ 取消 ] [ 确认上架 ] │
└────────────────────────────────────────┘11.1.3 弹窗字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 选中赛事 | 展示 | - | 本次操作涉及的赛事数量 |
| 已滚球 | 展示 | - | 选中赛事中已在滚球的数量,红色高亮 |
| 紧急(10分钟内) | 展示 | - | 选中赛事中10分钟内开赛的数量,橙色高亮 |
| 盘口初始状态 | 单选 | 是 | 上架后盘口的初始状态 |
| 分配操盘手 | 弹窗 | 是 | 点击打开操盘手分配弹窗,详见11.6节 |
分配操盘手说明
上架时必须完成操盘手分配。点击「分配操盘手」按钮打开统一的分配弹窗,按玩法分别指定赛前和滚球操盘手。
当前用户角色 可选择的操盘手范围 普通操盘手 仅能选择自己作为所有玩法的操盘手 主管 可选择任意操盘手,支持不同玩法不同人 风控 可选择任意操盘手,支持不同玩法不同人 普通操盘手上架时,系统自动将所有玩法的赛前和滚球操盘手设为当前用户,无需手动选择。
11.1.4 盘口初始状态选项
| 选项 | 说明 | 默认 | 适用场景 |
|---|---|---|---|
| 跟随数据源 | 上架后盘口跟随IM状态,可立即投注 | ✓ | 默认信任数据源的常规赛事 |
| 锁定 | 盘口可见但暂停投注,需手动解锁 | 需检查赔率后再开放投注 | |
| 隐藏 | 盘口对玩家不可见,需手动取消隐藏 | 高风险赛事 |
设计说明:与第10章10.2.3节保持一致,上架时盘口初始状态提供「跟随数据源」、「锁定」、「隐藏」三个选项,与操盘详情页上架弹窗完全统一。
11.1.5 操作流程
| 步骤 | 用户操作 | 系统响应 |
|---|---|---|
| 1 | 点击上架按钮 | 弹出上架确认对话框 |
| 2 | 选择盘口初始状态 | 单选框选中 |
| 3 | 选择负责操盘手 | 下拉列表显示可选操盘手 |
| 4 | 点击确认上架 | 执行上架,关闭对话框 |
| 5 | - | 列表刷新,状态变更为已上架 |
11.1.6 上架失败处理
| 失败原因 | 系统提示 | 处理方式 |
|---|---|---|
| 未选择盘口初始状态 | 请选择盘口初始状态 | 阻止提交 |
| 未选择操盘手 | 请选择负责操盘手 | 阻止提交 |
| 赛事已取消 | 该赛事已取消,无法上架 | 关闭对话框,刷新列表 |
| 数据源关盘 | 数据源已关盘,无法上架 | 阻止提交 |
| 网络异常 | 网络异常,请重试 | 允许重试 |
11.2 下架操作
11.2.1 操作入口
| 入口位置 | 操作方式 | 适用场景 |
|---|---|---|
| 行操作按钮 | 点击下架按钮 | 单个赛事下架 |
| 批量操作栏 | 选中后点击批量下架 | 多个赛事下架 |
11.2.2 下架确认弹窗
弹窗标题:⚠️ 确认下架赛事
┌────────────────────────────────────────┐
│ ⚠️ 确认下架赛事 ✕ │
├────────────────────────────────────────┤
│ ⚠️ 警告:下架后所有盘口将变为隐藏状态 │
│ (客户端不可见),需人工重新上架恢复。 │
├────────────────────────────────────────┤
│ 当前投注额 ¥125,000 │
│ 未结算注单数 328 笔 │
├────────────────────────────────────────┤
│ [ 取消 ] [ 确认下架 ] │
└────────────────────────────────────────┘11.2.3 下架后盘口状态
关键规则:下架操作将盘口状态变为隐藏(隐藏来源=system,详情=delist_link),客户端不可见。
| 操作 | 盘口状态变化 | 原因 |
|---|---|---|
| 下架 | 开盘/锁定 → 隐藏(隐藏来源=system,详情=delist_link) | 下架联动隐藏,客户端不可见;需先上架才能恢复 |
| 重新上架 | 根据选择的盘口初始状态 | 需要人工确认 |
11.2.4 下架操作的前提条件
下架仅在本地盘口未关盘时可用。数据源关盘后,本地跟随关盘的赛事不可下架(已不在操盘列表显示)。
| 赛事阶段 | 数据源状态 | 本地盘口状态 | 可否下架 | 说明 |
|---|---|---|---|---|
| 未开赛 | 开盘 | 开盘/隐藏/锁定 | 是 | 正常下架 |
| 未开赛 | 暂停 | 隐藏/锁定 | 是 | 正常下架 |
| 滚球中 | 开盘 | 开盘/隐藏/锁定 | 是 | 下架后已接受注单继续跟踪结算 |
| 滚球中 | 暂停 | 隐藏/锁定 | 是 | 下架后已接受注单继续跟踪结算 |
| 任意 | 关盘 | 关盘 | 否 | 赛事已流转到结算管理 |
不同阶段下架的业务影响
- 未开赛下架:客户端不可见,无已接受注单(或注单全额退款)
- 滚球中下架:客户端不可见,已接受注单需持续跟踪比赛结果并完成结算
11.3 盘口操作(详情页功能)
重要说明:操盘列表仅提供上架/下架操作,盘口操作(隐藏/取消隐藏/锁盘/解锁)统一在「赛事操盘详情页」进行。
本节保留解锁后盘口状态规则作为业务规则参考,具体操作流程详见「赛事操盘详情页规范」文档。
11.3.1 解锁后盘口状态规则
解锁成功后,盘口最终状态由当前数据源状态和该联赛的「是否跟随数据源盘口状态」(默认值为「是」,联赛管理配置)决定:
| 数据源状态 | 联赛跟随配置 | 解锁后盘口状态 | 说明 |
|---|---|---|---|
| 开盘 | 是/否 | 开盘 | 正常恢复,可接受投注 |
| 暂停 | 是 | 开盘 | 本地状态不变,C端显示暂停投注 |
| 暂停 | 否 | 开盘 | 本地状态不变,告警列显示数据源暂停 |
| 维护 | 是/否 | 隐藏 | 维护状态强制隐藏,不受跟随配置影响 |
| 关盘 | 是/否 | 阻止解锁 | 关盘状态下无法解锁,Toast提示「数据源已关盘,无法解锁」 |
11.4 按钮状态控制
11.4.1 行操作按钮状态
与7.4.1保持一致:操盘列表仅提供上架/下架操作,盘口操作(隐藏/取消隐藏/锁盘/解锁)统一在「赛事操盘详情页」进行。一键锁盘除外。
| 赛事状态 | 上架状态 | 可用按钮 |
|---|---|---|
| 正常 | 待上架 | 上架、详情 |
| 正常 | 已上架 | 下架、详情 |
| 正常 | 已下架 | 上架、详情 |
| 延期 | 已上架 | 下架、详情 |
| 延期 | 待上架 | 详情 |
| 延期 | 已下架 | 详情 |
延期赛事操作说明(与10.5.2保持一致):
- 已上架的延期赛事允许下架(操盘主动撤出)
- 待上架/已下架的延期赛事禁止上架(防止异常赛事上线)
11.4.2 禁用按钮说明
禁用状态的按钮显示为灰色,鼠标悬停时显示禁用原因提示。
| 按钮 | 禁用条件 | 提示文案 |
|---|---|---|
| 上架 | 赛事状态=延期 | 延期赛事暂不可上架 |
| 上架 | 数据源已关盘 | 数据源已关盘 |
| 下架 | 待上架或已下架 | 赛事未上架 |
| 详情 | 无(始终可用) | - |
11.5 数据导出
11.5.1 导出字段
导出文件包含以下字段(已移除串关列):
| 字段 | 说明 |
|---|---|
| 赛事编号 | 唯一标识 |
| 联赛 | 联赛名称 |
| 主队 | 主队名称 |
| 客队 | 客队名称 |
| 开赛时间 | 计划开赛时间 |
| 比赛进程 | 赛前、即将、滚球 |
| 比分 | 当前比分 |
| 上架状态 | 待上架、已上架、已下架 |
| 赛事状态 | 正常、延期 |
| 盘口状态 | 开盘、隐藏、锁定、关盘 |
| 盘口数 | 开盘盘口数/总盘口数 |
| 赔率类型 | 马来盘、欧洲盘、香港盘、印尼盘 |
| 投注额 | 投注总金额 |
| 预计赔付 | 预计赔付金额 |
| 预估盈亏 | 预估盈亏金额 |
| 操盘手 | 负责操盘手姓名 |
11.5.2 导出字段映射
| 页面显示字段 | Excel导出字段名 | 格式/类型 | 说明 |
|---|---|---|---|
| 赛事编号 | EventId | 字符串 | 唯一标识 |
| 联赛 | League | 字符串 | 联赛名称 |
| 主队 | HomeTeam | 字符串 | 主队名称 |
| 客队 | AwayTeam | 字符串 | 客队名称 |
| 开赛时间 | ScheduledTime | 日期时间(ISO8601) | 计划开赛时间(UTC+8) |
| 比赛进程 | MatchPhase | 字符串枚举 | 赛前、即将、滚球、中场、完场 |
| 比分 | Score | 字符串(H-A格式) | 当前比分,如3-2 |
| 上架状态 | ListingStatus | 字符串枚举 | 待上架、已上架、已下架 |
| 赛事状态 | EventStatus | 字符串枚举 | 正常、延期 |
| 盘口状态 | MarketStatus | 字符串枚举 | 开盘、隐藏、锁定、关盘 |
| 盘口数 | MarketCount | 字符串(N/M格式) | 开盘盘口数/总盘口数 |
| 赔率类型 | OddsType | 字符串枚举 | 香港盘(HK)、小数盘(Decimal) |
| 投注额 | TotalStaked | 数值(CNY) | 投注总金额,精度2位小数 |
| 预计赔付 | EstimatedPayout | 数值(CNY) | 预计赔付金额,精度2位小数 |
| 预估盈亏 | EstimatedP&L | 数值(CNY) | 预估盈亏金额,精度2位小数 |
| 操盘手 | Traders | 字符串 | 负责操盘手姓名(多个用;分隔) |
11.5.3 导出限制
| 限制项 | 限制值 | 说明 |
|---|---|---|
| 最大导出数量 | 10000条 | 超出时提示缩小筛选范围 |
| 导出频率 | 每分钟1次 | 防止频繁导出 |
| 文件格式 | Excel格式 | 文件后缀为xlsx |
11.5.3 告警轮播间隔
告警列表采用自动轮播机制展示高优先级告警。
| 配置项 | 默认值 | 说明 | 归属模块 |
|---|---|---|---|
| 轮播间隔 | 10秒 | 每条告警展示时长(默认值为10秒,系统级写死,修改需发版) | 系统级写死 |
| 轮播规则 | 顺序 | 按优先级从高到低顺序轮播,当前正在轮播的告警高亮显示 | 系统级写死 |
11.6 操盘手分配弹窗(SSOT)
SSOT声明:本节为操盘手分配弹窗的单一真源。操盘列表、操盘详情页、联赛管理等所有涉及操盘手分配的入口,均使用本节定义的统一弹窗组件。
操盘手分配统一采用按玩法分配模式,每个玩法可分别指定赛前操盘手和滚球操盘手。
11.6.1 分配弹窗结构
┌─────────────────────────────────────────────────────────────────────┐
│ 分配操盘手 ✕ │
├─────────────────────────────────────────────────────────────────────┤
│ 当前赛事:曼城 vs 利物浦 #48291037 │
│ (批量操作时显示:即将分配 N 场赛事) │
├─────────────────────────────────────────────────────────────────────┤
│ 阶段选择 │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ ● 赛前 │ │ ○ 滚球 │ │
│ └───────────────┘ └───────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 玩法汇总:共 8 个玩法 | 已分配 5 个 | 待分配 3 个 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ 待分配玩法 (3) │ │ 已分配玩法 (5) │ │
│ ├───────────────────┤ ├───────────────────┤ │
│ │ ☐ 让球盘 │ │ 独赢盘 → 张三 │ │
│ │ ☐ 大小球 │ ─[张三▼]─> │ 波胆 → 张三 │ │
│ │ ☐ 角球大小 │ <────────── │ 半场全场 → 李四 │ │
│ │ │ │ 总进球 → 李四 │ │
│ │ │ │ 单双 → 王五 │ │
│ └───────────────────┘ └───────────────────┘ │
│ │
│ [ 从联赛默认导入 ] [ 复制赛前配置到滚球 ] │
├─────────────────────────────────────────────────────────────────────┤
│ 操盘手统计 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 张三: 2个玩法 | 李四: 2个玩法 | 王五: 1个玩法 │ │
│ └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ [ 取消 ] [ 确认分配 ] │
└─────────────────────────────────────────────────────────────────────┘11.6.2 弹窗区域说明
| 区域 | 说明 |
|---|---|
| 阶段选择 | 切换赛前/滚球阶段,分别配置该阶段的操盘手分配 |
| 玩法汇总 | 显示当前阶段的玩法总数、已分配数、待分配数 |
| 待分配玩法 | 左侧列表,显示尚未分配操盘手的玩法,支持多选 |
| 操盘手选择 | 中间下拉框,选择要分配的目标操盘手,点击箭头执行分配 |
| 已分配玩法 | 右侧列表,显示已分配的玩法及对应操盘手,可选中后移回左侧 |
| 操盘手统计 | 底部汇总,显示各操盘手在当前阶段负责的玩法数量 |
11.6.3 穿梭框交互规则
| 操作 | 说明 |
|---|---|
| 左侧选中 + 点击 → | 将选中的玩法分配给下拉框中的操盘手,移至右侧 |
| 右侧选中 + 点击 ← | 将选中的玩法移回左侧(取消分配) |
| 切换阶段 | 保留当前阶段配置,切换显示另一阶段的分配状态 |
| 从联赛默认导入 | 从联赛管理的默认配置导入当前阶段的操盘手分配 |
| 复制赛前配置到滚球 | 将赛前阶段的分配配置复制到滚球阶段(仅在滚球页签显示) |
11.6.4 校验规则
| 校验项 | 规则 | 失败提示 |
|---|---|---|
| 必须全覆盖 | 赛前和滚球两个阶段的所有玩法均须分配操盘手 | 请为所有玩法分配操盘手 |
| 操盘手权限 | 选中的操盘手须有该联赛的操盘权限 | {操盘手}无该联赛操盘权限 |
| 操盘手状态 | 选中的操盘手须处于在职且未锁定状态 | {操盘手}已离职或被锁定 |
11.6.4 校验规则
| 校验项 | 规则 | 失败提示 |
|---|---|---|
| 必须全覆盖 | 所有玩法的赛前和滚球操盘手均须选择 | 请为所有玩法分配操盘手 |
| 操盘手权限 | 选中的操盘手须有该联赛的操盘权限 | {操盘手}无该联赛操盘权限 |
| 操盘手状态 | 选中的操盘手须处于在职且未锁定状态 | {操盘手}已离职或被锁定 |
11.6.5 分配入口
本弹窗在以下入口触发,交互完全一致:
| 页面 | 入口位置 | 触发操作 | 备注 |
|---|---|---|---|
| 操盘列表 | 上架确认弹窗 | 点击「分配操盘手」 | 上架时必须完成分配 |
| 操盘列表 | 行操作「操盘手」列 | 点击操盘手名称 | 仅主管/风控可操作 |
| 操盘列表 | 批量操作栏 | 点击「分配操盘手」 | 批量分配,统一配置 |
| 操盘详情页 | 顶部栏 | 点击「更换操盘手」 | 仅主管/风控可操作 |
| 联赛管理 | 联赛配置 | 配置默认操盘手 | 新赛事上架时自动应用 |
11.6.6 批量分配规则
批量操作时的特殊处理:
| 场景 | 处理规则 |
|---|---|
| 选中赛事玩法不一致 | 取所有赛事玩法的并集,未包含的玩法对该赛事自动跳过 |
| 部分赛事已有分配 | 弹窗默认显示空,确认后覆盖原有分配 |
| 操盘手权限不覆盖所有联赛 | 该操盘手对应的玩法在无权限赛事中标记为「权限不足」跳过 |
11.6.7 操盘手转移
当操盘手需要交接工作时,支持批量转移:
| 步骤 | 用户操作 | 系统响应 |
|---|---|---|
| 1 | 筛选「操盘手=张三」的赛事 | 列表显示张三负责的所有赛事 |
| 2 | 全选或部分选中赛事 | 批量操作栏显示 |
| 3 | 点击「分配操盘手」 | 打开分配弹窗 |
| 4 | 配置新的操盘手分配 | 支持按玩法+赛前/滚球分别配置 |
| 5 | 确认分配 | 批量更新,记录变更日志 |
11.6.8 分配冲突处理
| 冲突场景 | 系统行为 |
|---|---|
| 联赛默认操盘手未配置 | 「从联赛默认导入」按钮禁用,提示「联赛未配置」 |
| 目标操盘手已达负责上限 | 弹窗警告,允许强制分配或选择其他操盘手 |
| 赛事已进入滚球阶段 | 赛前操盘手列禁用(灰色),仅允许修改滚球操盘手 |
11.7 并发操作与竞态处理
多操盘手同时操作同一赛事时,系统需要处理并发冲突以保证数据一致性。
11.7.1 乐观锁机制
系统采用乐观锁策略处理并发冲突:
| 机制 | 说明 |
|---|---|
| 版本号 | 每条赛事/盘口记录包含version字段,每次更新自增 |
| 冲突检测 | 提交时比对版本号,若与服务端不一致则判定冲突 |
| 冲突提示 | 弹窗提示「数据已被他人修改,请刷新后重试」,提供刷新按钮 |
| 自动刷新 | 冲突发生后,点击刷新按钮获取最新数据,操盘手需重新执行操作 |
11.7.2 并发场景处理
| 并发场景 | 处理规则 |
|---|---|
| 同时上架同一赛事 | 先提交者成功,后提交者收到「赛事已上架」提示 |
| 同时下架同一赛事 | 先提交者成功,后提交者收到「赛事已下架」提示 |
| 同时更换操盘手 | 先提交者成功,后提交者收到版本冲突提示需刷新 |
| 批量操作与单条操作冲突 | 单条操作先完成则批量操作中该条跳过,汇总提示部分成功 |
11.7.3 WebSocket状态同步
| 同步机制 | 说明 |
|---|---|
| 实时推送 | 赛事状态变更通过WebSocket实时推送到所有在线客户端 |
| 增量更新 | 仅推送变更字段,减少网络开销 |
| 本地状态刷新 | 收到推送后自动刷新受影响行,无需手动刷新整页 |
| 离线重连 | 断线重连后自动拉取增量更新,保证状态一致 |
修订记录
| 版本 | 日期 | 修订内容 |
|---|---|---|
| v1.0 | 2026-01-15 | 初稿 |
| v1.1 | 2026-01-21 | 【D1/D2决策对齐】1) 移除原型提示中"锁盘"引用;2) 11.1.2-11.1.4节移除"锁定"盘口初始状态选项,"暂停"改为默认;3) 11.1.3/11.1.6节操盘手改为必填;4) 11.3/11.4节盘口操作流程移至详情页,仅保留解锁后状态规则;5) VitePress语法转换;6) 章节重编号 |
| v1.2 | 2026-01-21 | 【功能归属修正】11.6节重写操盘手分配功能,明确在「联赛管理」和「操盘赛事列表」实现;补充分配模式(统一/按玩法)、穿梭框交互、操盘手转移、分配冲突处理 |
| v1.3 | 2026-01-28 | 【审计修正】新增11.7节并发操作与竞态处理,明确乐观锁机制、并发场景处理规则、WebSocket状态同步 |
| v1.4 | 2026-01-28 | 11.1.4节引用格式修正:「与10 10.2.3节」→「与第10章10.2.3节」 |
| v1.5 | 2026-01-28 | 【操盘手分配重构】11.6节重写为SSOT单一真源:1)移除「统一分配」模式,仅保留按玩法分配;2)每个玩法支持分别指定赛前操盘手和滚球操盘手;3)新增快捷操作(全部设为、赛前=滚球、从联赛默认导入);4)11.1.3节上架弹窗引用统一分配弹窗 |
| v1.6 | 2026-02-11 | 【A1架构修正】IM暂停不再改变本地状态,仅影响C端展示:1)11.1.4节「跟随数据源」描述修正为"IM暂停则C端显示暂停投注";2)11.1.2节上架弹窗口径同步;3)11.3.1节解锁后状态规则更新:暂停(跟随=是/否)均改为开盘,说明本地状态不变、C端显示差异;4)删除不跟随配置下的解锁选择对话框 |
| v1.7 | 2026-02-12 | 【下架联动隐藏】下架操作从"盘口变为锁定"改为"盘口变为隐藏(隐藏来源=system,详情=delist_link)":11.2.2节弹窗文案、11.2.3节关键规则和状态变化表同步更新 |