Skip to content

賽事詳情

最後更新:2026-04-09


功能說明

賽事詳情頁是體育模組的核心頁面,讓使用者查看單一賽事的完整資訊,包含即時比分、所有盤口賠率、比賽統計數據、直播影片/動畫、聊天互動、賽事方案等功能。

使用者流程

  1. 從賽事列表點擊任意賽事 → 進入 STEventDetailViewController
  2. 頂部 Header 顯示:隊名、即時比分、賽事時間、比賽階段
  3. 影片/動畫區域(依是否有直播/動畫)
  4. Tab 切換:
    • 投注:顯示所有盤口賠率
    • 統計:足球/籃球數據統計
    • 聊天:賽事聊天室(主播消息/表情/禮物)
    • 方案:付費專家方案
  5. 點擊賠率 → 加入投注,彈出投注面板
  6. 長按賠率 → 顯示更多玩法或賠率說明

頁面跳轉

  • 賽事列表點擊賽事 → STEventDetailViewController
  • 點擊賠率 → BetViewController(投注面板,底部 Modal)
  • 點擊方案 Tab → EventDetailPlanWebViewController(H5 方案列表)
  • 方案付費確認 → EventDetailPayPlanViewController

技術視角(開發看這裡)

相關檔案

主頁面

類型檔案路徑
ViewController(主)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController.swift
VC Extension(Action)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+Action.swift
VC Extension(TableView)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+TableView.swift
VC Extension(BallView)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+BallView.swift
VC Extension(Gesture)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+Gesture.swift
VC Extension(League)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+League.swift
VC Extension(MoreLive)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/STEventDetailViewController+MoreLive.swift
ViewModel(主)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/VM/STEventDetailViewModel.swift
ViewModel(RxSwift)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/EventDetail/VM/STEventDetailViewModel+RxSwift.swift

盤口 BetList

類型檔案路徑
ViewModel(盤口列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/BetList/BetListViewModel.swift
Protocol(盤口資料源)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/BetList/DataSource/BetGroupDataSource.swift
DataSource(一般賽事)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/BetList/DataSource/General/EventBetGroupDataSource.swift
DataSource(包賠投注)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/BetList/DataSource/RiskFree/RiskFreeBetGroupDataSource.swift
UseCase(包賠邏輯)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/BetList/DataSource/RiskFree/RiskFreeBetUseCase.swift
Cell(1 欄賠率)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Cell/OneColumnDetailCell.swift
Cell(2 欄賠率)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Cell/TwoColumnDetailCell.swift
Cell(3 欄賠率)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Cell/ThreeColumnDetailCell.swift

直播 / 影片 / 動畫

類型檔案路徑
BaseView/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/BaseVideoView.swift
BaseViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/BaseVideoViewModel.swift
直播 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Stream/EventDetailLiveView.swift
直播更多主播(橫屏內嵌)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Stream/More/MoreLiveView.swift
主播資訊 VC/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Stream/More/HostInfoViewController.swift
影片 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Video/EventDetailVideoView.swift
影片 Model/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Video/M/EventDetailVideoModel.swift
影片線路下拉選單/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Video/DropdownList/EventDetailLiveDropDownView.swift
動畫 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Animation/EventDetailAnimationView.swift
即時數據覆蓋層/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/RealTimeData/EventDetailRealTimeDataView.swift
全螢幕賽事資訊/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/RealTimeData/FullScreenEventInfoView.swift
AirPlay 提示/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/AirPlay/AirPlayAlertView.swift
AirPlay 浮窗/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/AirPlay/AirPlayFloatingView.swift
直播資訊 Model/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Models/LiveInfoModel.swift
直播訊息 Model/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/VideoAndStream/Models/LiveInfoMessageModel.swift

更多主播(豎屏 MoreStreamer)

類型檔案路徑
Model/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/M/EventDetailMoreLiveModel.swift
主 View(豎屏)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewNormalMoreLiveView.swift
主 View(全螢幕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewFullScreenMoreLiveView.swift
Data View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveDataView.swift
Header View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveHeaderView.swift
Component/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveComponent.swift
Cell Plugin/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveCellPlugin.swift
當前主播 Cell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveCurrentCell.swift
當前主播 SubCell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveCurrentSubCell.swift
更多主播 Cell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveMoreCell.swift
更多主播按鈕/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/NewMoreLiveButton.swift
舊版 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/EventDetailMoreLiveView.swift
舊版 Cell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/EventDetailMoreLiveCell.swift
舊版 SubCell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/EventDetailMoreLiveSubCell.swift
舊版 Header/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/MoreLiveHeaderView.swift
正在直播圖層/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/MoreLivingLayerView.swift
Collection SubView/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/MoreStreamer/V/MoreLiveCollectionSubView.swift

統計模組

類型檔案路徑
SegmentedViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/StatisticsSegmentedViewModel.swift
SegmentedView/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/StatisticsSegmentedView.swift
Protocol - Provider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Protocol/StatisticsProvider.swift
Protocol - ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Protocol/StatisticsViewModel.swift
Protocol - View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Protocol/StatisticsView.swift
SegmentedControl(共用)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/StatisticsSegmentedControl.swift
指數 Provider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Exponent/ExponentStatisticsProvider.swift
指數 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Exponent/ExponentViewModel.swift
指數 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Exponent/ExponentView.swift
情報 View(共用)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceView.swift
分析 VS View(共用)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Analyze/AnalyzeContentBaseView.swift
分析 VS View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Analyze/AnalyzeVSView.swift
分析歷史 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Analyze/AnalyzeHistoryView.swift
分析賽事 Cell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Analyze/AnalyzeEventCell.swift
籃球陣容 Model(共用)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Model/BasketballLineUpModel.swift

足球統計

類型檔案路徑
Providers 定義/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/FootballStatisticsProviders.swift
文字直播 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/TextStream/FootballTextStreamViewModel.swift
文字直播 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/TextStream/FootballTextStreamView.swift
陣容 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Squad/FootballSquadViewModel.swift
陣容 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Squad/FootballSquadView.swift
技術統計 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Technic/FootballTechnicViewModel.swift
分析 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Analyze/FootballAnalyzeViewModel.swift
分析 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Analyze/FootballAnalyzeView.swift
情報 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Intelligence/FootballIntelligenceViewModel.swift

籃球統計

類型檔案路徑
Providers 定義/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/BasketballStatisticsProviders.swift
文字直播 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/BasketballTextStreamViewModel.swift
文字直播 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/BasketballTextStreamView.swift
技術統計 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Technic/BasketballTechnicViewModel.swift
陣容 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Squad/BasketballSquadView.swift
陣容 Cell/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Squad/BasketballSquadTableViewCell.swift
分析 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Analyze/BasketballAnalyzeViewModel.swift
分析 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Analyze/BasketballAnalyzeView.swift
球員技術統計 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Analyze/SubView/BasketballPlayerTechniqueStatisticsView.swift
球員技術統計 ItemView/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Analyze/SubView/BasketballPlayerTechniqueStatisticsItemView.swift
未來賽事 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Analyze/SubView/FutureMatchView.swift
即時籃球 Header/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/RealTimeBasketballHeaderView.swift
技術統計 View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/SportTechniqueStatisticsView.swift
技術統計 ItemView/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/SportTechniqueStatisticsItemView.swift
情報 ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/Intelligence/BasketballIntelligenceViewModel.swift

其他球類統計

類型檔案路徑
Provider/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/OtherSport/OtherSportStatisticsProvider.swift
ViewModel/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/OtherSport/OtherSportStatisticsViewModel.swift
View/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/OtherSport/OtherSportStatisticsView.swift

其他子模組

類型檔案路徑
VC(方案 Web)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/EventDetailPlanWebViewController.swift
VC(競猜)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/ChatVoteViewController.swift
熱門滾球排名/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/HotInPlayRank/(目錄)
推送賽事詳情 Service/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Service/PushMatchDetailService.swift
常數定義/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Adapter/DetailConstants.swift
工具 / Helper/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Adapter/DetailHelper.swift
Timer 工具/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Adapter/TimerBox.swift
Modal 擴展/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Adapter/UIViewController+Modal.swift
ViewModel(熱門滾球排名)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/VM/HotInPlayRank/STHotInPlayRankViewModel.swift
View(活動中獎列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ActivityWinResult/ActivityWinListView.swift
View(活動中獎結果)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ActivityWinResult/ActivityWinResultView.swift
Cell(盤口基底)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Cell/EventDetailBaseCell.swift
View(盤口分組)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Cell/EventDetailGroupView.swift
View(聊天審核)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Approval/ChatApprovalView.swift
Model(聊天審核)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Approval/Model/ChatApprovalModel.swift
View(注單分享狀態)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Cell/ChatOrderShareStatusView.swift
View(客服)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatCustomService/EventDetailCustomServiceView.swift
View(聊天活動入口)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/ChatEventEntryView.swift
View(聊天活動圖片彈窗)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/ChatEventImagePopupView.swift
Cell(聊天活動列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/ChatEventListTableViewCell.swift
View(聊天活動列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/ChatEventListView.swift
Adapter(聊天活動)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/EventDetailEventAdapter.swift
View(聊天活動列表詳情)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/EventDetailEventListView.swift
View(聊天活動單一事件)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/EventDetailSingleEventView.swift
View(禁用高亮按鈕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatEventView/HighlightDisableButton.swift
Model(競猜)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/Model/ChatVoteModel.swift
View(競猜倒數)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/View/ChatVoteCountdownLabel.swift
View(競猜倒數視圖)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/View/ChatVoteCountdownView.swift
View(競猜選項)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/View/ChatVoteOptionView.swift
View(競猜球類項目)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/View/STChatVoteBallItemView.swift
ViewModel(競猜)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/ChatVote/ViewModel/ChatVoteViewModel.swift
Layout(分頁 Collection)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/CollectionLayout/PageCollectionViewFlowLayout.swift
View(聊天入口)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Entrance/ChatEntranceView.swift
Model(聊天入口)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Entrance/Model/ChatEntranceModel.swift
View(聊天回饋)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/FeedBack/EventDetailChatFeedback.swift
View(禮物頻道動畫)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Gift/Animation/GiftChannelView.swift
View(禮物容器)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Gift/Animation/GiftContainerView.swift
View(禮物數字標籤)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Gift/Animation/GiftDigitLabel.swift
View(禮物全螢幕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Gift/Animation/GiftFullScreenView.swift
View(聊天 Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Header/EventDetailChatHeaderView.swift
View(聊天直播)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Header/EventDetailChatLiveView.swift
View(直播 Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Header/EventLiveHeaderView.swift
Cell(自訂表情)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Keyboards/Cell/CustomEmojiCell.swift
Cell(表情列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Keyboards/Cell/EmojiListCellCollectionViewCell.swift
View(選單輸入框)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Keyboards/MenuTextField.swift
Model(投票資訊)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Manager/Model/VoteInfo.swift
Model(聊天訊息)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Models/ChatMessageModel.swift
Model(表情)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Models/EmojiModel.swift
Model(禮物)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Models/GiftModel.swift
Model(禮物排名)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Models/GiftRankTopModel.swift
Model(紅包資訊)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Models/RedInfoModel.swift
View(注單分享 Tab)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/EventDetailOrderShareTabView.swift
Cell(注單分享)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/EventDetailOrderShareTableViewCell.swift
View(注單分享按鈕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/EventDetailOrderShareTitleButton.swift
View(注單分享)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/EventDetailOrderShareView.swift
Model(注單分享描述)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/Model/EventDetailOrderShareDescModel.swift
Model(大單分享)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/Model/LargeOrderShareModel.swift
Helper(注單分享)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/OrderShare/OrderShareHelper.swift
View(紅包)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/RedPacket/EventRedPacketView.swift
View(紅包球類項目)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/RedPacket/RedPacketBallItemView.swift
View(聊天回覆提示)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/Reply/EventDetailChatViewReplyTipView.swift
View(主播推單)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/StreamerPush/LivePushOrderView.swift
View(小轉盤)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/SmallTurnTableView.swift
View(轉盤倒數)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableCountdownView.swift
View(轉盤遊戲)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableGameView.swift
VC Extension(轉盤 Socket)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableGameViewController+SocketMessage.swift
ViewController(轉盤遊戲)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableGameViewController.swift
Plugin(轉盤遊戲)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableGameViewControllerPlugin.swift
ViewModel(轉盤遊戲)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableGameViewModel.swift
View(轉盤需求)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableRquirementsView.swift
View(轉盤)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ChatView/TurnTable/TurnTableView.swift
View(盤口搜尋空狀態)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EmptyView/MarketSearchEmptyView.swift
Cell(方案列表)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/Cell/EventDetailPlanTableViewCell.swift
ViewController(方案付費)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/EventDetailPayPlanViewController.swift
ViewController(方案)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/EventDetailPlanViewController.swift
Model(方案)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/M/EventPlanModel.swift
ViewModel(方案)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/EventDetailPlan/VM/EventDetailPlanViewModel.swift
View(專家方案投注項)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ExpertPlan/ExpertPlanBetItemView.swift
View(專家方案詳情)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ExpertPlan/ExpertPlanDetailView.swift
View(專家方案容器)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ExpertPlan/ExpertPlanItemContainerView.swift
Model(專家方案主題)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ExpertPlan/ExpertPlanThemeType.swift
View(金幣文件)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/ExpertPlan/GoldDocumentView.swift
View(彈幕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/BBChatBarrageView.swift
View(Header 卡片)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderCardView.swift
View(Header 選單)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderMenuView.swift
View(Header 比分區塊)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderScoreBlock.swift
View(Header 比分)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderScoreView.swift
View(Header 主視圖)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderView.swift
ViewModel(Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailHeaderViewModel.swift
View(Header 提示)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/EventDetailTipsView.swift
View(直播選單按鈕)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/LiveMenuButton.swift
View(圓形視圖)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/Views/CircleView.swift
View(計分板資訊)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/Views/EventDetailScoreboardInfoView.swift
View(進度條)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/Views/EventProgressBar.swift
View(滾動標籤)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/Views/EventScrollLabel.swift
View(圖片標籤)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Header/Views/STImageLabel.swift
View(滾球排名球類項目)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/InPlayRank/InPlayRankBallItemView.swift
View Extension(聯賽 Action)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/League/BBLeagueView+Action.swift
View(聯賽)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/League/BBLeagueView.swift
View(充電投注類型)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/League/ChargeBetTypeView.swift
View(抽獎球類項目)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/LuckyDraw/LuckyDrawBallItemView.swift
Manager(抽獎)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/LuckyDraw/LuckyDrawManager.swift
View(抽獎)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/LuckyDraw/LuckyDrawView.swift
View(計分板基底)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailBaseView.swift
View(計分板美式足球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardAmericanFootball+Data.swift
View(計分板美式足球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardAmericanFootball.swift
View(計分板羽毛球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardBadminton+Data.swift
View(計分板羽毛球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardBadminton.swift
View(計分板籃球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardBasketball+Data.swift
View(計分板籃球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardBasketball.swift
View(計分板沙灘排球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardBechVolleyBall.swift
View(計分板足球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardFootball+Data.swift
View(計分板足球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardFootball.swift
View(計分板冰球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardIcehockeyBall+Data.swift
View(計分板冰球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardIcehockeyBall.swift
View(計分板乒乓球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardTableTennis+Data.swift
View(計分板乒乓球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardTableTennis.swift
View(計分板網球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardTennisball+Data.swift
View(計分板網球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardTennisball.swift
View(計分板排球+Data)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardVolleyball+Data.swift
View(計分板排球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Scoreboard/EventDetailScoreboardVolleyball.swift
Protocol(情報可更新)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Protocol/IntelligenceUpdatable.swift
Protocol(技術統計 VM)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Protocol/TechnicViewModel.swift
View(足球分析進球)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Analyze/SubView/FootballAnalyzeGoalView.swift
View(足球分析排名)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Analyze/SubView/FootballAnalyzeRankingView.swift
View(足球陣容通用 Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Squad/SubView/FootballSquadCommonHeadView.swift
View(足球陣容 Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Squad/SubView/FootballSquadHeadView.swift
Cell(足球陣容)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/Squad/SubView/FootballSquadTableViewCell.swift
Cell(足球文字直播)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Football/TextStream/SubView/RealTimeTableViewCell.swift
Cell(籃球即時數據)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/BasketballRealTimeTableViewCell.swift
View(籃球即時 Footer)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/RealTimeBasketballFooterView.swift
Model(籃球即時數據)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/RealTimeBasketballModel.swift
View(即時標題)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Basketball/TextStream/SubView/RealTimeTitleView.swift
View(分析估值指數)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/AnalyzeEstimationIndexView.swift
Model(估值預測)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/EstimationPredictModel.swift
View(情報虛線)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceDashView.swift
View(情報空狀態)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceEmptyView.swift
View(情報 Header)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceHeaderView.swift
Model(情報)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceModel.swift
Cell(情報)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Statistics/Shared/Intelligence/IntelligenceTableViewCell.swift
View(Tab 切換)/Users/user/Work/bbsport-new/BBSport/Tab/体育/Sport/EventDetail/Views/Tab/EventDetailTabView.swift
API(雷速基底)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/LeisuSportAPI.swift
API(雷速分析)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/LeisuSportAPI+AnalyzeRequest.swift
API(雷速籃球情報)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Basketball/LeisuSportAPI+BasketballIntelligenceRequest.swift
API(雷速籃球陣容)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Basketball/LeisuSportAPI+BasketballLineupRequest.swift
API(雷速籃球技術統計)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Basketball/LeisuSportAPI+BasketballTeahnicRequest.swift
API(雷速籃球文字直播)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Basketball/LeisuSportAPI+BasketballTextLiveRequest.swift
API(雷速足球情報)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Football/LeisuSportAPI+FootballIntelligenceRequest.swift
API(雷速足球陣容)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Football/LeisuSportAPI+FootballLineupRequest.swift
API(雷速足球賽事資訊)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Football/LeisuSportAPI+FootballMatchInfoRequest.swift
API(雷速足球文字直播)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/Football/LeisuSportAPI+FootballTextLiveRequest.swift
API(雷速 Request 基底)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/LeisuSportAPIRequest/LeisuSportAPIRequest.swift
API(雷速 JSON Decision)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/LeisuSportAPIRequest/Decision/LeisuSportParseJSONStringDecision.swift
API(雷速 Result Decision)/Users/user/Work/bbsport-new/BBSport/API/LeisuSportAPI/LeisuSportAPIRequest/Decision/LeisuSportParseResultDecision.swift
API(FB 賽事詳情)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/FBSportAPI+MatchDetailRequest.swift
API(FB 主播詳情)/Users/user/Work/bbsport-new/BBSport/API/FBSportAPI/FBSportAPI+MerchantDetailRequest.swift
API(UP 賽事詳情)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/UPSportAPI+MatchDetailRequest.swift
API(UP 主播詳情)/Users/user/Work/bbsport-new/BBSport/API/UPSportAPI/UPSportAPI+MerchantDetailRequest.swift
API(DB 賽事詳情)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Sport/DBSportAPI+EventDetailRequest.swift
API(DB 賽事資訊)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Sport/DBSportAPI+DBEventInfoRequest.swift
API(DB 盤口賠率)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Sport/DBSportAPI+MatchOddsInfoRequest.swift
API(DB 最新盤口資料)/Users/user/Work/bbsport-new/BBSport/API/DBSportAPI/Bet/DBSportAPI+LatestMarketInfoRequest.swift

API

FB 平台(FBSportAPI)

功能說明檔案EndpointMethod主要參數
賽事詳情FBSportAPI+MatchDetailRequest.swiftv1/match/getMatchDetailPOSTmatchId, languageType
賽事詳情(JSON String)同上 MatchDetailJsonStringRequestv1/match/getMatchDetailPOSTmatchId, languageType
主播詳情FBSportAPI+MerchantDetailRequest.swiftv1/merchant/detail--

UP 平台(UPSportAPI)

功能說明檔案EndpointMethod主要參數
賽事詳情UPSportAPI+MatchDetailRequest.swiftv1/match/getMatchDetailPOSTmatchId, languageType
賽事詳情(JSON String)同上 MatchDetailJsonStringRequestv1/match/getMatchDetailPOSTmatchId, languageType
主播詳情UPSportAPI+MerchantDetailRequest.swiftv1/merchant/detail--

DB 平台(DBSportAPI)

功能說明檔案EndpointMethod主要參數
賽事詳情(PB)DBSportAPI+EventDetailRequest.swiftyewu11/v1/w/matchDetail/getMatchDetailPBGETmid
賽事資訊DBSportAPI+DBEventInfoRequest.swiftapi/forehead/gamebetob/getEventInfoPOSTeventId, language
最新盤口資料DBSportAPI+LatestMarketInfoRequest.swiftyewu13/v1/betOrder/client/queryLatestMarketInfoPOSTbody dict

共用平台(STAPI)

功能說明檔案EndpointMethod
購買方案計數STAPI+PlanBuyCountRequest.swiftapi/forehead/live/sports/message/v2/buy/countPOST
金幣商城餘額STAPI+GoldMallBalanceRequest.swiftapi/forehead/activity/goldmall/balancePOST
熱門滾球排名STAPI+InPlayMatchRank.swiftapi/forehead/data/betting/inPlayMatchRankPOST
包賠配置STAPI+RiskFreeBetConfigurationRequest.swiftapi/forehead/activity/compensation/infoPOST
包賠確認STAPI+RiskFreeBetBetConfirmationRequest.swiftapi/forehead/activity/act/getPOST

資料模型

STEventDetailViewModel 關鍵屬性

屬性說明
eventId賽事 ID(字串)
gameType體育平台類型(GameType.fbSport / .dbSport / .upSport
sportId體育 ID(Int)
sportTypeCommonSportType(由 sportId 推導)
hostId當前主播 ID
isInPlay是否滾球(影響輪詢頻率)
isOpenLive是否開啟播放器
isFromFloatView是否從小窗跳轉回來
betListViewModel盤口 ViewModel
liveBetGameViewModel主播競猜遊戲 ViewModel
liveViewModel直播 BaseVideoViewModel
videoViewModel影片 BaseVideoViewModel
animationViewModel動畫 BaseVideoViewModel
headerViewModelHeader ViewModel

BetGroupDataSource 架構

protocol BetGroupDataSource
├── groupSections: [EventBetSection]        // Cell model
├── originalSectionOrder: [String]          // 後端原始盤口排序(置頂回復用)
├── getHeaderView(by:) -> UIView?           // table header(預設 nil)
├── filterGroups(_:sportId:) async -> [EventBetGroup]  // 過濾盤口
├── buildDataSource(groupTitle:searchText:sportId:groups:) async  // 建立 Cell Model + 過濾 + 置頂
└── pinAction(title:) async                 // 置頂行為

final class EventBetGroupDataSource: BetGroupDataSource
    → 一般賽事,不額外過濾

final class RiskFreeBetGroupDataSource: BetGroupDataSource
    → 包賠投注,透過 RiskFreeBetUseCase 過濾可用盤口
    → 有 bannerView(包賠 Banner)
    → onRiskFreeBetAvailable 回調是否有包賠

統計模組架構

StatisticsSegmentedViewModel
├── providers: [StatisticsProvider]
├── setupProviders()  → 依 sportType 建立不同 provider 組合
├── setupTechnicViewModelIfNeeded()  → 足球/籃球各自的 TechnicViewModel
└── requestData()  → 請求數據

protocol StatisticsProvider
├── title: String
├── buildView() -> StatisticsView
└── requestForDetailStatisticsIfNeeded(by:)

protocol StatisticsViewModel
├── initData(by:)
└── requestData(by:)

各球類 Provider 組合:

球類Providers
足球TextStream(文字直播)、Squad(陣容)、Exponent(指數)、Analyze(分析)、Intelligence(情報)
籃球 / 電競籃球TextStream(文字直播)、Exponent(指數)、Analyze(分析)、Intelligence(情報)
其他球類OtherSportStatisticsProvider(僅比分版)

三平台功能差異對照

功能FB(fbSport)UP(upSport)DB(dbSport)
賽事詳情 APIv1/match/getMatchDetail(POST)v1/match/getMatchDetail(POST)yewu11/.../getMatchDetailPB(GET)+ getEventInfo(POST)
Response ModelSTEventModelSTEventModelOBEventModel / OBEventInfoModel
直播
動畫
影片(視頻線路)
投注方式DetailHelper.fbBetActionHandlerDetailHelper.upBetActionHandlerDBBetCommonDatas(串關購物車模式)
盤口最新資料透過 Socket 推送透過 Socket 推送LatestMarketInfoRequest 輪詢
包賠投注有(RiskFreeBetGroupDataSource
統計數據完整(足球/籃球/其他)小眾球類不需要數據 tab完整
聊天/主播
主播詳情 APIv1/merchant/detailv1/merchant/detail無(透過 getEventInfo 取得)
串關購物車有(DBBetCommonDatas.shoppingCartItems

投注處理差異

  • FB / UP:點擊賠率 → DetailHelper.fbBetActionHandler / upBetActionHandler → 彈出投注面板
  • DB:點擊賠率 → DBBetCommonDatas 管理串關購物車 → 支援 addSeriesPass / deleteSeriesPass / startBet;頁面底部顯示購物車 cartView

統計數據平台差異

  • FB / DB:完整支援所有球類統計
  • UP:小眾球類(非足球/籃球)不顯示數據 Tab(OtherSportStatisticsProviderplat != .upSport 才發通知)

實作重點

  1. 輪詢策略isInPlay == true 每 5 秒輪詢;isInPlay == false 每 20 秒輪詢;使用 SwiftTimer 避免 RunLoop 問題

  2. 多平台盤口處理BetListViewModel 整合 FB/DB/UP 三平台盤口資料;EventBetGroupDataSource(一般賽事)、RiskFreeBetGroupDataSource(包賠投注)

  3. 主播切換currentStreamer 改變時更新 chatViewModelliveBetGameViewModel;切換時重置活動(紅包/轉盤/抽獎)、彈幕、禁言狀態

  4. 直播/影片/動畫三種播放模式

    • EventDetailLiveView:主播直播,支援更多主播切換、橫屏全螢幕、彈幕
    • EventDetailVideoView:賽事影片,支援多線路切換(線路一 ~ 四)
    • EventDetailAnimationView:賽事動畫,自動隱藏計時器
    • 三者皆繼承 BaseVideoView,共用 ViewModel BaseVideoViewModel
  5. 統計數據分離:各球類有獨立的 Provider 和 ViewModel;共用 StatisticsSegmentedViewModel 管理 Tab 切換;足球/籃球各自有 TechnicViewModel 處理技術統計,數據透過 closure 回傳給外部(Header、直播層等)

  6. 聊天模組整合:詳情頁內嵌聊天區 → STChatManager 管理連線;支援競猜(Vote)、轉盤(TurnTable)、紅包等互動

  7. 更多主播:豎屏用 NewNormalMoreLiveView,橫屏用 MoreLiveView(內嵌於 EventDetailLiveView);實作 NewMoreLiveDataViewDelegate 處理主播切換邏輯


API 呼叫流程

進入賽事詳情頁 (STEventDetailViewController)

viewDidLoad → STEventDetailViewModel.init → requestData()

  ├─ FB 平台:
  │  └─ [API] POST v1/match/getMatchDetail
  │     {languageType:"CMN", matchId:"{eventId}"}
  │     → 回傳: 賽事資訊 + 盤口賠率 + 直播 URL (一次取得)
  │     → 快取: SportDataManager.shared.queryEvent()

  ├─ DB 平台 (循序):
  │  ├─ [API 1] GET yewu11/v1/w/matchDetail/getMatchDetailPB {mid:"{eventId}"}
  │  ├─ [API 2] GET yewu11/v1/w/category/getCategoryList {sportId, mid}
  │  └─ [API 3, 並行] GET yewu11/v1/m/matchDetail/getMatchOddsInfoPB
  │     {mid, mcid:"{categoryId}", cuid} × N 個分類
  │     → 並行佇列: com.ob.detail.group

  └─ UP 平台:
     └─ [API] POST v1/match/getMatchDetail (同 FB 結構,不同 Host)

直播/動畫載入

賽事詳情回應中包含:
  ├─ video_url → 直播影片
  └─ animation_url → 動畫重播

額外請求 (如需):
  └─ [API] GET match/video/app (Host: pxdd/seo)
     → 回傳 VideoSourceList

盤口 Tab 切換

用戶切換盤口分類
  ├─ FB/UP: 不發請求,從快取過濾
  └─ DB: 若該分類未載入
     └─ [API] GET yewu11/v1/m/matchDetail/getMatchOddsInfoPB
        {mid, mcid:新分類ID}

即時更新 (WebSocket)

詳情頁開啟後訂閱 Socket
  └─ DetailHelper.subscribeSocketWith(channel:"105", event_id)
     → 接收: 足球半場比分、技術統計、賠率變動
     → 處理: STNotify.receivedFootballTechnic 等通知

定時輪詢 (備援):
  └─ initTimer() → 滾球每 5 秒 / 早盤每 20 秒 → requestData()

離開頁面:
  └─ DetailHelper.unsubscribeSocketWith(channel:"105", event_id)