{"version":3,"file":"static/chunks/1855-1d8b26de979c4ec6.js","mappings":"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","sources":["webpack://_N_E/./components/Button/index.js","webpack://_N_E/./components/Header/Service.js","webpack://_N_E/./components/Header/AppDownloadPopup.js","webpack://_N_E/./components/Header/index.js","webpack://_N_E/./components/Header/BackBar.js","webpack://_N_E/./components/Footer/index.js","webpack://_N_E/./components/Maintain/index.js","webpack://_N_E/./components/Layout/index.js","webpack://_N_E/./components/Modal/index.js","webpack://_N_E/./components/ReactIMG/index.js","webpack://_N_E/./components/SelfExclusion/index.js","webpack://_N_E/./lib/data/userinfo.js","webpack://_N_E/./lib/js/Globalfun.js","webpack://_N_E/./lib/js/Helper.js","webpack://_N_E/./lib/js/signalR.js","webpack://_N_E/./lib/js/withBetterRouter.js"],"sourcesContent":["import React from \"react\";\r\nimport { ReactSVG } from '@/ReactSVG';\r\n\r\nexport default class Button extends React.Component {\r\n constructor (props) {\r\n super(props)\r\n this.state = {\r\n }\r\n this.filterProps = {}\r\n Object.keys(this.props).forEach((v) => {\r\n if (!~[\"ghost\", \"inline\", \"radius\", \"loading\"].indexOf(v)) {\r\n this.filterProps[v] = this.props[v];\r\n }\r\n })\r\n }\r\n componentDidMount () {\r\n }\r\n render() {\r\n return \r\n {this.props.loading ? : null}{this.props.children}\r\n {this.props.fufix ? this.props.fufix : null}\r\n \r\n }\r\n}\r\n","\r\nimport React from \"react\";\r\nimport Toast from '@/Toast'\r\nimport { fetchRequest } from \"$LIB/SportRequest\";\r\nimport { ApiPort } from \"$LIB/SPORTAPI\";\r\nimport { Cookie } from \"$LIB/js/Helper\";\r\nimport HostConfig from \"$LIB/Host.config\";\r\n\r\nclass Service extends React.Component {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.state = {\r\n };\r\n this.FUN88Live = null;\r\n }\r\n PopUpLiveChat = () => {\r\n this.FUN88Live && this.FUN88Live.close();\r\n this.FUN88Live = window.open(\r\n 'about:blank',\r\n 'chat',\r\n 'toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=540, height=650'\r\n );\r\n fetchRequest(ApiPort.GETLiveChat).then((res) => {\r\n console.log(res)\r\n if (res) {\r\n localStorage.setItem('serverUrl', res.url);\r\n this.openServer(res.url);\r\n }\r\n });\r\n }\r\n openServer = (serverUrl) => {\r\n this.FUN88Live.document.title = 'FUN88在线客服';\r\n this.FUN88Live.location.href = serverUrl;\r\n this.FUN88Live.focus();\r\n }\r\n\trender() {\r\n\r\n\t global.PopUpLiveChat = () => { this.PopUpLiveChat() }\r\n\r\n\t\treturn (\r\n \r\n\t\t\t\t{/* 客服按钮 */}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default Service;\r\n","import Modal from \"@/Modal\";\nimport { ReactSVG } from \"@/ReactSVG\";\nimport HostConfig from \"$LIB/Host.config\";\nimport React from \"react\";\nimport { getAffParam } from \"$LIB/js/Helper\";\nimport ReactIMG from '@/ReactIMG';\n\nclass AppDownloadPopup extends React.Component {\n\trender() {\n\t\treturn this.props.visible ?\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
乐体育
\n\t\t\t\t\t\t\t\t
专注更多精彩体育赛事
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\tconst affParam = getAffParam();\n\t\t\t\t\t\t\t\twindow.location.href = process.env.BASE_PATH + '/Appinstall.html' + affParam;\n\t\t\t\t\t\t\t}}>获取
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
乐天堂FUN88
\n\t\t\t\t\t\t\t\t
行业领先游戏竞技平台
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
{\n\t\t\t\t\t\t\t\twindow.location.href = HostConfig.Config.MainSiteAppDownloadUrl;\n\t\t\t\t\t\t\t}}>获取
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t:null;\n\t}\n}\n\nexport default AppDownloadPopup;\n","import { ReactSVG } from '@/ReactSVG';\r\nimport HostConfig from '$LIB/Host.config';\r\nimport Toast from '@/Toast';\r\nimport Service from './Service';\r\nimport Router from 'next/router';\r\nimport { withBetterRouter } from '$LIB/js/withBetterRouter';\r\nimport { fetchRequest } from '$LIB/SportRequest';\r\nimport { ApiPort } from '$LIB/SPORTAPI';\r\nimport { getMemberInfo, logout } from '$LIB/data/userinfo';\r\nimport reactUpdate from 'immutability-helper';\r\nimport { Cookie, getUrlVars, urlVarsToQueryString } from '$LIB/js/Helper';\r\nimport { getMemberStorageKey, checkIsLogin, setIsLogin, setIsLogout } from '$LIB/js/util';\r\nimport { connect } from 'react-redux';\r\nimport { ACTION_UserInfo_login, ACTION_UserInfo_getBalanceSB } from '$LIB/redux/actions/UserInfoAction';\r\nimport {\r\n\tACTION_MaintainStatus_NoTokenBTI,\r\n\tACTION_MaintainStatus_NoTokenIM,\r\n\tACTION_MaintainStatus_NoTokenSABA,\r\n\tACTION_MaintainStatus_SetBTI,\r\n\tACTION_MaintainStatus_SetIM,\r\n\tACTION_MaintainStatus_SetSABA\r\n} from '$LIB/redux/actions/MaintainStatusAction';\r\nimport { signalRConnect } from '$LIB/js/signalR';\r\nimport { ACTION_UserSetting_Update } from '../../lib/redux/actions/UserSettingAction';\r\nimport AppDownloadPopup from './AppDownloadPopup';\r\nimport dynamic from 'next/dynamic';\r\nimport React from 'react';\r\nimport ReactIMG from '@/ReactIMG';\r\n\r\nconst Slider = dynamic(() => import('./Slider'), { ssr: false });\r\n\r\nconst Modal = dynamic(() => import('@/Modal'), { ssr: false });\r\n\r\nconst HomeTips = dynamic(() => import('@/HomeTips'), { ssr: false });\r\n\r\nlet staticHeaderMenu = [\r\n\t{ label: 'IM', count: null, sort: 0, router: '/sports-im', name: 'im', piwik: 'IM' },\r\n\t{ label: '沙巴', count: null, sort: 1, router: '/sports-saba', name: 'saba', piwik: 'OW' },\r\n\t{ label: 'BTI', count: null, sort: 1, router: '/sports-bti', name: 'bti', piwik: 'BTI' },\r\n];\r\n\r\nclass Header extends React.Component {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.state = {\r\n\t\t\tisSliderLoaded: false, //用來減少首屏請求量\r\n\t\t\tisSliderVisible: false,\r\n\t\t\tisFirstEntry: false, //是否首次進入(加速首次進入體感,移除側邊彈出動畫)\r\n\t\t\toptions: [...staticHeaderMenu],\r\n\t\t\tselectedVendor: staticHeaderMenu[0],\r\n\t\t\tisOpen: false,\r\n\t\t\tisRegistered: false,\r\n\t\t\tmemberInfo: '',\r\n\t\t\tisLogin: false,\r\n\t\t\thidePwd: false,\r\n\t\t\tmaintenancePopup: false,\r\n\t\t\tmaintenanceSport: '',\r\n\t\t\tjumpToSport: '',\r\n\t\t\tStatisticsAll: '0',\r\n\t\t\tshowHomeTips: false,\r\n\t\t\tshowAppDownloadPopup: false //展示app下載彈窗\r\n\t\t};\r\n\r\n\t\t//延遲加載,用於首屏加速\r\n\t\tthis.VendorIM = null;\r\n\t\tthis.VendorBTI = null;\r\n\t\tthis.VendorSABA = null;\r\n\t\tthis.BTICountPollingKey = null;\r\n\t\tthis.IMCountPollingKey = null;\r\n\t\tthis.SABACountPollingKey = null;\r\n\r\n\t\tthis.timer = null;\r\n\t\tthis.initDelayTimer = null; //初始延遲加載的timer\r\n\t\tthis.isDidUnmount = null; //紀錄是否已unmount,判斷異步動作是否還要執行\r\n\t\tthis.trCountDataHasSet = false;\r\n\t\tthis.changeHeaderMenu = this.changeHeaderMenu.bind(this);\r\n\t\tglobal.PopUpLiveChat = this.PopUpLiveChat.bind(this); // 全局化打开客服窗口\r\n\t\tthis.FUN88Live = null;\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconsole.log('===== header componentDidMount');\r\n\t\tthis.isDidUnmount = false;\r\n\t\t//console.log(ApiPort.Token)\r\n\r\n\t\t//header didmount會觸發兩次 第一次在 \"/\" 然後會自動跳轉\"/sports-bti\" 觸發 第二次 用這個useTokeLogin去判斷現在狀況\r\n\t\t//以上已修正 不會觸發兩次,現在每次進入 \"/\" 不會加載header 會直接跳轉體育頁 然後才觸發 header didmount 只會有一次\r\n\r\n\t\t//aff相關 轉移到layout處理\r\n\r\n\t\tlet vars = getUrlVars();\r\n\t\tconsole.log('=====vars',vars);\r\n\t\tlet isTokenLogin = false;\r\n\t\tif (vars.token && vars.token !== '' && vars.token !== JSON.parse(localStorage.getItem('firstLoginToken'))) {\r\n\t\t\tisTokenLogin = true;\r\n\t\t\tsetIsLogout(); //先logout\r\n\t\t\tconsole.log('=== token login from mainsite');\r\n\t\t\tlocalStorage.setItem('memberToken', JSON.stringify('Bearer ' + vars.token));\r\n\t\t\tlocalStorage.setItem('firstLoginToken', JSON.stringify(vars.token));\r\n\t\t\tApiPort.Token = 'Bearer ' + vars.token;\r\n\t\t\tif (vars.rtoken && vars.rtoken !== '') {\r\n\t\t\t\tlocalStorage.setItem('refreshToken', JSON.stringify(vars.rtoken));\r\n\t\t\t}\r\n\t\t\t//存完後清理網址參數 避免back循環\r\n\t\t\tconst cleanQueryString = urlVarsToQueryString(vars,['token','rtoken']);\r\n\t\t\tconsole.log('=== clean url to ',window.location.pathname + cleanQueryString);\r\n\t\t\tRouter.replace(window.location.pathname + cleanQueryString, undefined, {shallow: true});\r\n\t\t\tthis.RefreshToken(true);\r\n\t\t} else if (checkIsLogin()) {\r\n\t\t\tconsole.log('=== has login');\r\n\t\t\tthis.setState({\r\n\t\t\t\tisLogin: true\r\n\t\t\t});\r\n\r\n\t\t\tlet memberData = localStorage.getItem('memberInfo');\r\n\t\t\t//console.log(memberData);\r\n\t\t\tif (!memberData) {\r\n\t\t\t\tgetMemberInfo((res) => {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tmemberInfo: res\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tmemberInfo: JSON.parse(memberData)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (memberData) {\r\n\t\t\t\tconst memberObj = JSON.parse(memberData);\r\n\t\t\t\tif (memberObj){\r\n\t\t\t\t\tif (!memberObj || !memberObj.Currency || (memberObj.Currency.toUpperCase() !== 'CNY')) {\r\n\t\t\t\t\t\tToast.error('不支援的国家');\r\n\t\t\t\t\t\tlogout(memberObj.Language, memberObj.Currency);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (memberObj.IsGameLock) {\r\n\t\t\t\t\t\tToast.error('封锁的帐户');\r\n\t\t\t\t\t\tlogout(memberObj.Language);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.props.userInfo_getBalanceSB();\r\n\t\t\tthis.getMessageCount();\r\n\t\t\t// this.ReferreeTaskStatus();\r\n\t\t}\r\n\r\n\t\t//和登入態無關的公用數據,維護狀態等信息\r\n\t\tthis.getBasicInfo();\r\n\r\n\t\t//處理deeplink參數\r\n\t\tif (vars.deeplink && vars.sid && vars.eid && vars.lid) {\r\n\t\t\t//數據都要有 才會存\r\n\t\t\t// 先清理舊的deeplink參數\r\n\t\t\tlocalStorage.removeItem('deeplink');\r\n\t\t\t//存下新的deeplink參數\r\n\t\t\tconst deeplinkData = {\r\n\t\t\t\tvendor: vars.deeplink,\r\n\t\t\t\tsid: vars.sid,\r\n\t\t\t\teid: vars.eid,\r\n\t\t\t\tlid: vars.lid\r\n\t\t\t};\r\n\t\t\tlocalStorage.setItem('deeplink', JSON.stringify(deeplinkData));\r\n\t\t\t//存完後清理網址參數 避免back循環\r\n\t\t\tconst cleanQueryString = urlVarsToQueryString(vars,['deeplink','sid','eid','lid']);\r\n\t\t\tconsole.log('=== clean url to ',window.location.pathname + cleanQueryString);\r\n\t\t\tRouter.replace(window.location.pathname + cleanQueryString, undefined, {shallow: true});\r\n\t\t}\r\n\r\n\t\tthis.handleDeepLink();\r\n\r\n\t\t//下拉菜單更新\r\n\t\tlet currentSelectedVendor = this.state.options[0];\r\n\t\tconst menusFromRoute = this.state.options.filter((i) => Router.route.indexOf(i.router) !== -1);\r\n\t\tif (menusFromRoute && menusFromRoute.length > 0) {\r\n\t\t\tcurrentSelectedVendor = menusFromRoute[0];\r\n\t\t}\r\n\r\n\t\tstaticHeaderMenu.forEach((val) => {\r\n\t\t\tval.sort = val.name === currentSelectedVendor.name ? 0 : 1;\r\n\t\t});\r\n\t\tthis.setState({\r\n\t\t\t\tisOpen: false,\r\n\t\t\t\toptions: [...staticHeaderMenu].sort((a, b) => a.sort - b.sort),\r\n\t\t\t\tselectedVendor: currentSelectedVendor\r\n\t\t\t},\r\n\t\t\tasync () => {\r\n\t\t\t\t//更新滾球數量\r\n\t\t\t\tconst updateCount = (targetName) => {\r\n\t\t\t\t\treturn (pollingResult) => {\r\n\t\t\t\t\t\tif (this.isDidUnmount) return;\r\n\r\n\t\t\t\t\t\tconst SportDatas = pollingResult.NewData;\r\n\t\t\t\t\t\tlet totalRunningCount = 0;\r\n\t\t\t\t\t\tSportDatas.map((sport) => {\r\n\t\t\t\t\t\t\tconst runningMarkets = sport.Markets.filter((m) => m.MarketId === 3); //3滾球\r\n\t\t\t\t\t\t\tif (runningMarkets && runningMarkets.length > 0) {\r\n\t\t\t\t\t\t\t\ttotalRunningCount = totalRunningCount + runningMarkets[0].Count;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tlet targetIndex = -1;\r\n\t\t\t\t\t\tstaticHeaderMenu.map((item, index) => {\r\n\t\t\t\t\t\t\tif (item.name === targetName) {\r\n\t\t\t\t\t\t\t\ttargetIndex = index;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (targetIndex > -1) {\r\n\t\t\t\t\t\t\tstaticHeaderMenu[targetIndex].count = totalRunningCount;\r\n\t\t\t\t\t\t\tthis.setState({options: [...staticHeaderMenu].sort((a, b) => a.sort - b.sort)},() => {\r\n\t\t\t\t\t\t\t\tif (!this.trCountDataHasSet && this.state.options.some(o => o.count !== null)) {\r\n\t\t\t\t\t\t\t\t\tthis.trCountDataHasSet = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\r\n\t\t\t\tconst {query} = this.props.router; //從鏈接獲取要加載的參數\r\n\r\n\t\t\t\tif ( !query || (JSON.stringify(query) === JSON.stringify({})) ) //沒參數 才使用API緩存\r\n\t\t\t\t{\r\n\t\t\t\t\tconsole.log('=======Header PLAN TO USE API CACHE=======')\r\n\t\t\t\t\tconst thisSportName = currentSelectedVendor.name;\r\n\r\n\t\t\t\t\tconst handleInitialCache = (cacheData) => {\r\n\t\t\t\t\t\tif (cacheData && (global.initialCache[thisSportName].isUsedForHeader === false)) {\r\n\t\t\t\t\t\t\tif (!this.trCountDataHasSet) { //確定沒數據才用\r\n\t\t\t\t\t\t\t\tconsole.log('=======Header USE API CACHE for trCount=======')\r\n\t\t\t\t\t\t\t\tstaticHeaderMenu.map((item) => {\r\n\t\t\t\t\t\t\t\t\titem.count = cacheData.trCount[item.name];\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tthis.setState({options: [...staticHeaderMenu].sort((a, b) => a.sort - b.sort)}, () => {\r\n\t\t\t\t\t\t\t\t\tthis.trCountDataHasSet = true;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tglobal.initialCache[thisSportName].isUsedForHeader = true; //標記為已使用\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tconsole.log('=======Header ABORT USE API CACHE=======')\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!checkIsLogin()) {\r\n\t\t\t\t\t\t//優化Performance:未登入,優先等待並使用 initialCache\r\n\t\t\t\t\t\tlet cacheData = await global.initialCache[thisSportName].cachePromise;\r\n\t\t\t\t\t\thandleInitialCache(cacheData);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//已登入則按原方式 initialCache 和 正常獲取 競速,先拿到的先用\r\n\t\t\t\t\t\tglobal.initialCache[thisSportName].cachePromise.then(handleInitialCache);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.log('=======Header NO API CACHE=======')\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//優化Performance: 未登入+在默認體育頁+沒額外參數+未點擊切換 延遲10秒才開始獲取數據\r\n\t\t\t\tconst { pathname } = this.props.router;\r\n\t\t\t\tlet initDelay = 0;\r\n\t\t\t\tif (!checkIsLogin()\r\n\t\t\t\t\t&& pathname === ('/sports-' + HostConfig.Config.defaultSport) //在默認體育頁\r\n\t\t\t\t\t&& this.getUrlParams() === '' //沒參數\r\n\t\t\t\t\t&& !sessionStorage.getItem('changeHeaderMenu') //有切換過會有值\r\n\t\t\t\t) {\r\n\t\t\t\t\tinitDelay = 10*1000;\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log('=====Performance:Header:initDelay',initDelay);\r\n\r\n\t\t\t\tthis.initDelayTimer = setTimeout(async () => {\r\n\t\t\t\t\tif (this.isDidUnmount) return;\r\n\t\t\t\t\tconsole.log('=====Performance:Header:called',initDelay);\r\n\r\n\t\t\t\t\tawait this.asyncLoadVendors();\r\n\r\n\t\t\t\t\tif (this.state.selectedVendor.name === 'bti') {\r\n\t\t\t\t\t\t//選中BTI 刷新IM/SABA Count\r\n\t\t\t\t\t\tthis.VendorBTI.deletePolling(this.BTICountPollingKey);\r\n\t\t\t\t\t\tthis.IMCountPollingKey = this.VendorIM.getSportsPollingGlobal('headerCount', updateCount('im'));\r\n\t\t\t\t\t\tthis.SABACountPollingKey = this.VendorSABA.getSportsPollingGlobal('headerCount', updateCount('saba'));\r\n\t\t\t\t\t} else if (this.state.selectedVendor.name === 'im') {\r\n\t\t\t\t\t\t//選中IM 只刷新BTI/SABA Count\r\n\t\t\t\t\t\tthis.VendorIM.deletePolling(this.IMCountPollingKey);\r\n\t\t\t\t\t\tthis.BTICountPollingKey = this.VendorBTI.getSportsPollingGlobal('headerCount', updateCount('bti'));\r\n\t\t\t\t\t\tthis.SABACountPollingKey = this.VendorSABA.getSportsPollingGlobal('headerCount', updateCount('saba'));\r\n\t\t\t\t\t} else if (this.state.selectedVendor.name === 'saba') {\r\n\t\t\t\t\t\t//選中SABA 只刷新IM/BTI Count\r\n\t\t\t\t\t\tthis.VendorSABA.deletePolling(this.SABACountPollingKey);\r\n\t\t\t\t\t\tthis.IMCountPollingKey = this.VendorIM.getSportsPollingGlobal('headerCount', updateCount('im'));\r\n\t\t\t\t\t\tthis.BTICountPollingKey = this.VendorBTI.getSportsPollingGlobal('headerCount', updateCount('bti'));\r\n\t\t\t\t\t}\r\n\t\t\t\t},initDelay);\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\t//首次進入,展示側邊欄(此功能已取消)\r\n\t\t// const { pathname } = this.props.router;\r\n\t\t// if (pathname === '/sports-bti') {\r\n\t\t// \t//只有在默認頁bti頁面才處理這個邏輯\r\n\t\t// \tif (!isTokenLogin) {\r\n\t\t// \t\t//用token登入的,另外在登入完成後 才處理\r\n\t\t// \t\tthis.checkFirstEntry();\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tif (sessionStorage.getItem('tutorial')) {\r\n\t\t\t// 新手教學頁需求: Click the back button will go to the side bar page.\r\n\t\t\tthis.setState({ isSliderLoaded: true, isSliderVisible: true, isFirstEntry: true });\r\n\t\t\tsessionStorage.removeItem('tutorial');\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis.isDidUnmount = true;\r\n\t\t//刪除數量輪詢key\r\n\t\tif (this.VendorBTI) {\r\n\t\t\tthis.VendorBTI.deletePolling(this.BTICountPollingKey);\r\n\t\t}\r\n\t\tif (this.VendorIM) {\r\n\t\t\tthis.VendorIM.deletePolling(this.IMCountPollingKey);\r\n\t\t}\r\n\t\tif (this.VendorSABA) {\r\n\t\t\tthis.VendorSABA.deletePolling(this.SABACountPollingKey);\r\n\t\t}\r\n\t\tclearTimeout(this.timer);\r\n\t\tclearTimeout(this.initDelayTimer);\r\n\t}\r\n\r\n\tasyncLoadVendors = async () => {\r\n\t\tif (!this.VendorIM) {\r\n\t\t\tthis.VendorIM = (await import('$LIB/vendor/im/VendorIM')).default;\r\n\t\t}\r\n\t\tif (!this.VendorSABA) {\r\n\t\t\tthis.VendorSABA = (await import('$LIB/vendor/saba/VendorSABA')).default;\r\n\t\t}\r\n\t\tif (!this.VendorBTI) {\r\n\t\t\tthis.VendorBTI = (await import('$LIB/vendor/bti/VendorBTI')).default;\r\n\t\t}\r\n\r\n\t\treturn { VendorIM: this.VendorIM, VendorSABA: this.VendorSABA, VendorBTI: this.VendorBTI};\r\n\t}\r\n\r\n\t//獲取 包含?以及其後的參數\r\n\tgetUrlParams = () => {\r\n\t\tif (window && window.location && window.location.href && window.location.href.indexOf('?') >= 0) {\r\n\t\t\treturn window.location.href.slice(window.location.href.indexOf('?'));\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n\r\n\tgetBasicInfo = () => {\r\n\t\tthis.Checkdomin();\r\n\t\tthis.getMainDomain();\r\n\t\tthis.getServerUrl();\r\n\t\tthis.getMaintenanceStatus();\r\n\t};\r\n\r\n\tRefreshToken = (firstTime = false) => {\r\n\t\tconsole.log('RefreshToken');\r\n\t\tvar rstoken = JSON.parse(localStorage.getItem('refreshToken'));\r\n\t\tconst postData = {\r\n\t\t\tgrantType: 'refresh_token',\r\n\t\t\tclientId: 'Fun88.CN.App',\r\n\t\t\tclientSecret: 'FUNmuittenCN',\r\n\t\t\trefreshToken: rstoken\r\n\t\t};\r\n\r\n\t\tfetchRequest(ApiPort.RefreshTokenapi, 'POST', postData, true)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tconsole.log(res);\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tif (res.access_token && res.refresh_token) {\r\n\t\t\t\t\t\tlocalStorage.setItem('memberToken', JSON.stringify('Bearer ' + res.access_token));\r\n\t\t\t\t\t\tApiPort.Token = 'Bearer ' + res.access_token;\r\n\t\t\t\t\t\tlocalStorage.setItem('refreshToken', JSON.stringify(res.refresh_token));\r\n\r\n\t\t\t\t\t\tif (firstTime) {\r\n\t\t\t\t\t\t\tthis.getMemberData();\r\n\t\t\t\t\t\t\tthis.getBasicInfo();\r\n\t\t\t\t\t\t\tif (!window.RefreshTokensetInterval) {\r\n\t\t\t\t\t\t\t\twindow.RefreshTokensetInterval = setInterval(() => {\r\n\t\t\t\t\t\t\t\t\tthis.RefreshToken();\r\n\t\t\t\t\t\t\t\t}, 3300000);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tToast.destroy();\r\n\t\t\t\t\t\tToast.error('请重新登录,访问过期', 3);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t\tToast.destroy();\r\n\t\t\t});\r\n\t};\r\n\r\n\tgetMemberData = () => {\r\n\t\tconsole.log('getMemberData');\r\n\t\tfetchRequest(ApiPort.Member, 'GET', '', true)\r\n\t\t\t.then((res) => {\r\n\t\t\t\tconsole.log('fetchRequest member');\r\n\t\t\t\tconsole.log(res);\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tconsole.log(res);\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tisLogin: true,\r\n\t\t\t\t\t\tmemberInfo: res.result.memberInfo\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tlocalStorage.setItem('username', JSON.stringify(res.result.memberInfo.UserName));\r\n\r\n\t\t\t\t\tlocalStorage.setItem('memberCode', JSON.stringify(res.result.memberInfo.MemberCode));\r\n\r\n\t\t\t\t\tlocalStorage.setItem('PreferWallet', res.result.memberInfo.PreferWallet);\r\n\t\t\t\t\tlocalStorage.setItem('LoginOTP', res.result.memberInfo.LoginOTP);\r\n\t\t\t\t\tlocalStorage.setItem('Revalidate', res.result.memberInfo.Revalidate);\r\n\r\n\t\t\t\t\tlocalStorage.setItem('memberInfo', JSON.stringify(res.result.memberInfo));\r\n\t\t\t\t\tif (typeof _paq === 'object') {\r\n\t\t\t\t\t\t_paq.push([ 'setUserId', res.result.memberInfo.MemberCode ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tCookie.Create('Geet_status', '1', 1);\r\n\t\t\t\t\tif (!res.result.memberInfo.Currency || (res.result.memberInfo.Currency.toUpperCase() !== 'CNY')) {\r\n\t\t\t\t\t\tToast.error('不支援的国家');\r\n\t\t\t\t\t\tlogout(res.result.memberInfo.Language, res.result.memberInfo.Currency);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (res.result.memberInfo.IsGameLock) {\r\n\t\t\t\t\t\tToast.error('封锁的帐户');\r\n\t\t\t\t\t\tlogout(res.result.memberInfo.Language);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsetIsLogin();\r\n\t\t\t\t\tthis.props.userInfo_login(res.result.memberInfo.UserName); //redux 紀錄登入態\r\n\t\t\t\t\tthis.props.userInfo_getBalanceSB(true); //redux 獲取SB餘額\r\n\r\n\t\t\t\t\tthis.getVendorToken();\r\n\t\t\t\t\tthis.getMessageCount();\r\n\r\n\t\t\t\t\t//signalR重連bind當前用戶\r\n\t\t\t\t\tsignalRConnect(true);\r\n\r\n\t\t\t\t\tthis.checkFirstEntry();\r\n\r\n\t\t\t\t\tToast.destroy();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tToast.destroy();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tToast.destroy();\r\n\t\t\t});\r\n\t};\r\n\r\n\t//處理deeplink跳轉\r\n\thandleDeepLink() {\r\n\t\t//如果有deeplink就直接跳走\r\n\t\tconst deeplinkJSON = localStorage.getItem('deeplink');\r\n\t\tif (deeplinkJSON) {\r\n\t\t\tlet deeplinkSetting = JSON.parse(deeplinkJSON);\r\n\t\t\t//取到 就清理掉deeplink參數\r\n\t\t\tlocalStorage.removeItem('deeplink');\r\n\t\t\tif (\r\n\t\t\t\tdeeplinkSetting &&\r\n\t\t\t\tdeeplinkSetting.vendor &&\r\n\t\t\t\tdeeplinkSetting.sid &&\r\n\t\t\t\tdeeplinkSetting.eid &&\r\n\t\t\t\tdeeplinkSetting.lid\r\n\t\t\t) {\r\n\t\t\t\tlet targetVendorPage = 'sports-im';\r\n\t\t\t\tif (deeplinkSetting.vendor === 'im') {\r\n\t\t\t\t\ttargetVendorPage = 'sports-im';\r\n\t\t\t\t} else if (deeplinkSetting.vendor === 'bti') {\r\n\t\t\t\t\ttargetVendorPage = 'sports-bti';\r\n\t\t\t\t} else if (deeplinkSetting.vendor === 'saba') {\r\n\t\t\t\t\ttargetVendorPage = 'sports-saba';\r\n\t\t\t\t}\r\n\t\t\t\tRouter.push(\r\n\t\t\t\t\t`${targetVendorPage}/detail?sid=${deeplinkSetting.sid}&eid=${deeplinkSetting.eid}&lid=${deeplinkSetting.lid}&OE=false`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//檢查是否首次進入,並展開側邊欄\r\n\tcheckFirstEntry() {\r\n\t\tconst storageKey = getMemberStorageKey('first_entry');\r\n\t\tconst first_entry_json = localStorage.getItem(storageKey);\r\n\t\tif (!first_entry_json) {\r\n\t\t\t//this.setState({isSliderLoaded: true, isSliderVisible: true, isFirstEntry: true});\r\n\t\t\tlocalStorage.setItem(storageKey, JSON.stringify('111'));\r\n\t\t} else if (JSON.parse(first_entry_json) === '222' && checkIsLogin()) {\r\n\t\t\t//已登入 + 第一次 展示小教學提示\r\n\t\t\t//this.setState({showHomeTips: true});\r\n\t\t}\r\n\t}\r\n\r\n\t//首次進入,關閉側邊欄之後,展示彈窗\r\n\tcheckFirstEntryHotEvents() {\r\n\t\tconst storageKey = getMemberStorageKey('first_entry');\r\n\t\tconst first_entry_json = localStorage.getItem(storageKey);\r\n\t\tif (first_entry_json && JSON.parse(first_entry_json) === '111') {\r\n\t\t\tlocalStorage.setItem(storageKey, JSON.stringify('222'));\r\n\t\t\tthis.showHotEvents();\r\n\t\t}\r\n\t}\r\n\r\n\t//首次進入,關閉側邊欄->關閉彈窗->展示教學小提示\r\n\tcheckFirstEntryHomeTips() {\r\n\t\tif (checkIsLogin()) {\r\n\t\t\tconst storageKey = getMemberStorageKey('first_entry');\r\n\t\t\tconst first_entry_json = localStorage.getItem(storageKey);\r\n\t\t\tif (JSON.parse(first_entry_json) === '222') {\r\n\t\t\t\t//已登入 + 第一次 + 彈窗之後 展示小教學提示\r\n\t\t\t\tthis.setState({ showHomeTips: true });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//關閉 教學小提示\r\n\tcloseHomeTips() {\r\n\t\tconst storageKey = getMemberStorageKey('first_entry');\r\n\t\tlocalStorage.setItem(storageKey, JSON.stringify('333'));\r\n\t\tthis.setState({ showHomeTips: false });\r\n\t}\r\n\r\n\tCheckdomin() {\r\n\t\t// domain affCode\r\n\t\tfetchRequest(ApiPort.Domaincheck + global.location.protocol + '//' + global.location.host + '&?', 'GET')\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (res.affiliateCode) {\r\n\t\t\t\t\tCookie.Create('CO_affiliate', 'affiliate=' + res.affiliateCode, 30);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t}\r\n\r\n\tgetVendorToken = async () => {\r\n\t\t//獲取notification配置\r\n\t\tconst getNotiPromise = this.getMemberNotificationSetting().catch((e) => console.log(e));\r\n\r\n\t\tawait this.asyncLoadVendors();\r\n\r\n\t\t//IM登入\r\n\t\tconst IMloginPromise = this.VendorIM.getTokenFromGateway()\r\n\t\t\t.then((token) => {\r\n\t\t\t\tthis.props.maintainStatus_noTokenIM(false);\r\n\t\t\t})\r\n\t\t\t.catch((e) => {\r\n\t\t\t\tthis.props.maintainStatus_noTokenIM(true);\r\n\t\t\t\tconsole.log('im login failed', e);\r\n\t\t\t});\r\n\t\t//BTI登入\r\n\t\tconst BTIloginPromise = this.VendorBTI.getTokenFromGateway()\r\n\t\t\t.then((token) => {\r\n\t\t\t\tthis.props.maintainStatus_noTokenBTI(false);\r\n\t\t\t})\r\n\t\t\t.catch((e) => {\r\n\t\t\t\tthis.props.maintainStatus_noTokenBTI(true);\r\n\t\t\t\tconsole.log('bti login failed', e);\r\n\t\t\t});\r\n\r\n\t\t//SABA登入\r\n\t\tconst SABAloginPromise = this.VendorSABA.getTokenFromGateway()\r\n\t\t\t// .then(token => {\r\n\t\t\t// \tthis.props.maintainStatus_noTokenSABA(false);\r\n\t\t\t// })\r\n\t\t\t//沙巴特殊,不需要處理noToken 但還是要處理catch 避免獲取失敗 在登入頁卡住\r\n\t\t\t.catch((e) => {\r\n\t\t\t\t// this.props.maintainStatus_noTokenSABA(true);\r\n\t\t\t\tconsole.log('saba login failed', e);\r\n\t\t\t});\r\n\r\n\t\t//等待異步查詢完成\r\n\t\tconst results = await Promise.all([ getNotiPromise, IMloginPromise, BTIloginPromise, SABAloginPromise ]);\r\n\t};\r\n\r\n\tgetMainDomain = () => {\r\n\t\tfetchRequest(ApiPort.getMainsiteDomain, 'GET')\r\n\t\t\t.then((res) => {\r\n\t\t\t\tlocalStorage.setItem('domains', JSON.stringify(res));\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t};\r\n\r\n\tchangeHeaderMenu(key, item) {\r\n\t\tsessionStorage.setItem('changeHeaderMenu',JSON.stringify(item))\r\n\r\n\t\tif (this.checkMaintenanceStatus(item.name)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (key === 0) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tisOpen: !this.state.isOpen\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tif (item.router) {\r\n\t\t\t\tRouter.push(item.router);\r\n\t\t\t} else {\r\n\t\t\t\tthis.setState({\r\n\t\t\t\t\tisOpen: !this.state.isOpen\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tPushgtagdata(`Vendor`, 'View', `TopNav_${item.piwik}`);\r\n\t}\r\n\r\n\t//金額分隔符\r\n\tnumberWithCommas(x) {\r\n\t\treturn x ? x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',') : '';\r\n\t}\r\n\r\n\tgetMemberNotificationSetting() {\r\n\t\tlet that = this;\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tfetchRequest(ApiPort.GetMemberNotificationSetting, 'GET')\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\tif (res && res.memberCode && res.notificationSetting) {\r\n\t\t\t\t\t\t//緩存\r\n\t\t\t\t\t\tlocalStorage.setItem(\r\n\t\t\t\t\t\t\t'NotificationSetting-' + res.memberCode,\r\n\t\t\t\t\t\t\tJSON.stringify(res.notificationSetting)\r\n\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t//加載 盤口展示方式\r\n\t\t\t\t\t\tconst savedListDisplayType = res.notificationSetting['listDisplayType'];\r\n\t\t\t\t\t\tlet listDisplayType = 1;\r\n\t\t\t\t\t\tif (parseInt(savedListDisplayType) === 2) {\r\n\t\t\t\t\t\t\tlistDisplayType = 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthat.props.userSetting_updateListDisplayType(listDisplayType);\r\n\r\n\t\t\t\t\t\tresolve(res.notificationSetting);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treject('GetMemberNotificationSetting no data??' + JSON.stringify(res));\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((e) => reject('GetMemberNotificationSetting failed' + JSON.stringify(e)));\r\n\t\t});\r\n\t}\r\n\r\n\t// 未讀訊息統計\r\n\tgetMessageCount = () => {\r\n\t\tfetchRequest(ApiPort.UnreadMessage + 'key=UnreadPMATotalSumCount&', 'GET')\r\n\t\t\t.then((res) => {\r\n\t\t\t\tif (res) {\r\n\t\t\t\t\tconst total = res.unreadCategory.unreadPersonalMessage + res.unreadCategory.unreadTransaction;\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tStatisticsAll: total\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.log(error);\r\n\t\t\t});\r\n\t};\r\n\r\n\t// 獲取維護資訊\r\n\tgetMaintenanceStatus = () => {\r\n\t\tconst providers = [ 'SBT', 'IPSB', 'OWS' ]; // BTI, IM, SABA\r\n\t\tlet processed = [];\r\n\r\n\t\tproviders.forEach(function(provider) {\r\n\t\t\tprocessed.push(fetchRequest(`${ApiPort.GetProvidersMaintenanceStatus}provider=${provider}&`));\r\n\t\t});\r\n\r\n\t\tPromise.all(processed).then((res) => {\r\n\t\t\tlet BTISportStatus;\r\n\t\t\tlet IMSportStatus;\r\n\t\t\tlet SABASportStatus;\r\n\r\n\t\t\tif (res) {\r\n\t\t\t\tconsole.log(res);\r\n\t\t\t\tBTISportStatus =\r\n\t\t\t\t\tres[0].ErrorCode == 0 &&\r\n\t\t\t\t\tres[0].Result &&\r\n\t\t\t\t\tres[0].Result.find((v) => v.PlatformGroup === 'Mobile')['IsMaintenance'];\r\n\t\t\t\tIMSportStatus =\r\n\t\t\t\t\tres[1].ErrorCode == 0 &&\r\n\t\t\t\t\tres[1].Result &&\r\n\t\t\t\t\tres[1].Result.find((v) => v.PlatformGroup === 'Mobile')['IsMaintenance'];\r\n\t\t\t\tSABASportStatus = false;\r\n\t\t\t\t\tres[2].ErrorCode == 0 &&\r\n\t\t\t\t\tres[2].Result &&\r\n\t\t\t\t\tres[2].Result.find((v) => v.PlatformGroup === 'Mobile')['IsMaintenance'];\r\n\r\n\t\t\t\tthis.props.maintainStatus_setBTI(BTISportStatus === true);\r\n\t\t\t\tthis.props.maintainStatus_setIM(IMSportStatus === true);\r\n\t\t\t\tthis.props.maintainStatus_setSABA(SABASportStatus === true);\r\n\r\n\t\t\t\t//和token獲取狀態一起判斷\r\n\t\t\t\tBTISportStatus = this.checkMaintenanceStatus('bti');\r\n\t\t\t\tIMSportStatus = this.checkMaintenanceStatus('im');\r\n\t\t\t\tSABASportStatus = this.checkMaintenanceStatus('saba');\r\n\r\n\t\t\t\t// 都在維修\r\n\t\t\t\tif (BTISportStatus && IMSportStatus && SABASportStatus) {\r\n\t\t\t\t\tRouter.push('/maintenance');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst maintenanceInfoMap = {\r\n\t\t\t\t\t'sports-bti': {\r\n\t\t\t\t\t\tsport: 'bti',\r\n\t\t\t\t\t\tname: 'BTI体育',\r\n\t\t\t\t\t\tisMaintenance: BTISportStatus,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'sports-im': {\r\n\t\t\t\t\t\tsport: 'im',\r\n\t\t\t\t\t\tname: 'IM体育',\r\n\t\t\t\t\t\tisMaintenance: IMSportStatus,\r\n\t\t\t\t\t},\r\n\t\t\t\t\t'sports-saba': {\r\n\t\t\t\t\t\tsport: 'saba',\r\n\t\t\t\t\t\tname: '沙巴体育',\r\n\t\t\t\t\t\tisMaintenance: SABASportStatus,\r\n\t\t\t\t\t},\r\n\t\t\t\t}\r\n\t\t\t\t//如果有維修 按優先順序選擇 (直接復用上面的數據)\r\n\t\t\t\tconst sportPriority = [\r\n\t\t\t\t\tmaintenanceInfoMap['sports-im'],\r\n\t\t\t\t\tmaintenanceInfoMap['sports-saba'],\r\n\t\t\t\t\tmaintenanceInfoMap['sports-bti'],\r\n\t\t\t\t];\r\n\t\t\t\tconst nowGame = location.pathname.replace(/\\//g, '');\r\n\r\n\t\t\t\tconst minfo = maintenanceInfoMap[nowGame];\r\n\t\t\t\t//當前遊戲正在維修\r\n\t\t\t\tif (minfo && minfo.isMaintenance) {\r\n\t\t\t\t\tlet targetGame = null;\r\n\t\t\t\t\t//按優先順序 找一個 沒在維護中的遊戲\r\n\t\t\t\t\tfor(let spinfo of sportPriority) {\r\n\t\t\t\t\t\tif (!spinfo.isMaintenance) {\r\n\t\t\t\t\t\t\ttargetGame = spinfo;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (targetGame === null) { //都在維護(理論上不可能跑到這,前面已經先檢查過了)\r\n\t\t\t\t\t\tRouter.push('/maintenance');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmaintenancePopup: true,\r\n\t\t\t\t\t\t\t\tmaintenanceSport: minfo.name,\r\n\t\t\t\t\t\t\t\tjumpToSport: targetGame.name,\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t() => this.maintenanceChangeSports(1, targetGame.sport)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tcheckMaintenanceStatus = (name) => {\r\n\t\tconst { isBTI, isIM, isSABA, noTokenBTI, noTokenIM, noTokenSABA } = this.props.maintainStatus;\r\n\t\tconst { isLogin } = this.props.userInfo; //有登入才額外判斷 token獲取狀態\r\n\t\tswitch (name) {\r\n\t\t\tcase 'bti':\r\n\t\t\t\treturn isBTI || (isLogin && noTokenBTI);\r\n\t\t\tcase 'im':\r\n\t\t\t\treturn isIM || (isLogin && noTokenIM);\r\n\t\t\tcase 'saba':\r\n\t\t\t\treturn isSABA || (isLogin && noTokenSABA);\r\n\t\t\tdefault:\r\n\t\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\r\n\tmaintenanceChangeSports = (key, name) => {\r\n\t\tclearTimeout(this.timer);\r\n\t\tlet data = this.state.options.find((v) => v.name === name);\r\n\t\tthis.timer = setTimeout(() => {\r\n\t\t\tthis.setState(\r\n\t\t\t\t{\r\n\t\t\t\t\tmaintenancePopup: false\r\n\t\t\t\t},\r\n\t\t\t\t() => this.changeHeaderMenu(key, data)\r\n\t\t\t);\r\n\t\t}, 8000);\r\n\t};\r\n\r\n\t// 全局客服\r\n\tgetServerUrl = () => {\r\n\t\tfetchRequest(ApiPort.GETLiveChat).then((res) => {\r\n\t\t\tif (res && res.url !== localStorage.getItem('serverUrl')) {\r\n\t\t\t\tlocalStorage.setItem('serverUrl', res.url);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tPopUpLiveChat() {\r\n\t\tconst serverUrl = localStorage.getItem('serverUrl');\r\n\t\tif (serverUrl) {\r\n\t\t\tthis.showCS(serverUrl);\r\n\t\t}\r\n\t}\r\n\r\n\tshowCS = (serverUrl) => {\r\n\t\tthis.FUN88Live && this.FUN88Live.close();\r\n\t\tthis.FUN88Live = window.open(\r\n\t\t\t'about:blank',\r\n\t\t\t'chat',\r\n\t\t\t'toolbar=yes, location=yes, directories=no, status=no, menubar=yes, scrollbars=yes, resizable=no, copyhistory=yes, width=540, height=650'\r\n\t\t);\r\n\t\tthis.FUN88Live.document.title = 'FUN88在线客服';\r\n\t\tthis.FUN88Live.location.href = serverUrl;\r\n\t\tthis.FUN88Live.focus();\r\n\t};\r\n\r\n\tgameOptionsUI = (key, item) => {\r\n\t\tif (key === 0) {\r\n\t\t\treturn ;\r\n\t\t} else {\r\n\t\t\tif (this.checkMaintenanceStatus(item.name)) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t维修\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t{item.count}\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst { showAppDownloadBar, closeAppDownloadBar } = this.props;\r\n\t\tconst { isSliderLoaded, maintenancePopup, showHomeTips, showAppDownloadPopup } = this.state;\r\n\t\t//console.log(this.state);\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{showAppDownloadBar ? (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
全新乐体育APP
\r\n\t\t\t\t\t\t\t
亚洲领先体育投注平台
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`Download Nav`, 'Click', 'Download_TopNav');\r\n\t\t\t\t\t\t\t\tthis.setState({ showAppDownloadPopup: true });\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t立即下载\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t) : null}\r\n\t\t\t\t {\r\n\t\t\t\t\t\tthis.setState({ showAppDownloadPopup: false });\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tthis.setState({ isSliderLoaded: true, isSliderVisible: true });\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{this.state.StatisticsAll > 0 && }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.options.map((item, key) => {\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthis.gameOptionsUI(key, item);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\tthis.changeHeaderMenu(key, item);\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.gameOptionsUI(key, item)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.isLogin &&\r\n\t\t\t\t\t\t\t(this.state.hidePwd ? (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.setState({ hidePwd: false });\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{this.numberWithCommas(this.props.userInfo.balanceSB)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.setState({ hidePwd: true });\r\n\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tRouter.push('/bet-records?v=' + this.state.selectedVendor.name);\r\n\t\t\t\t\t\t\t\tPushgtagdata(`BetRecord`, 'View', `Topnav_BetRecord`);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tRouter.push('/search/' + this.state.selectedVendor.name);\r\n\t\t\t\t\t\t\t\tPushgtagdata(`Search`, 'Launch', `Topnav_Search`);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`Live Chat`, 'Launch', `Topnav_CS`);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{isSliderLoaded ? (\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tthis.setState({ isSliderVisible: false, isFirstEntry: false });\r\n\t\t\t\t\t\t\t//this.checkFirstEntryHotEvents();\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tconnectShowHotEvents={(func) => (this.showHotEvents = func)}\r\n\t\t\t\t\t\tonHotEventsClosed={() => {\r\n\t\t\t\t\t\t\tthis.checkFirstEntryHomeTips();\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t\tStatisticsAll={this.state.StatisticsAll}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : null}\r\n\t\t\t\t{maintenancePopup ? (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
平台维护通知
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t亲爱的会员,{this.state.maintenanceSport}正在维护 ,
\r\n\t\t\t\t\t\t\t请稍后回来。我们将在8秒内带您前往{this.state.jumpToSport}。\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t) : null}\r\n\t\t\t\t{/* 首次進入 教學小提示窗 */}\r\n\t\t\t\t{showHomeTips ? (\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tthis.closeHomeTips();\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t/>\r\n\t\t\t\t) : null}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n\tuserInfo: state.userInfo,\r\n\tmaintainStatus: state.maintainStatus\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n\tuserInfo_login: (username) => ACTION_UserInfo_login(username),\r\n\tuserInfo_getBalanceSB: (forceUpdate = false) => ACTION_UserInfo_getBalanceSB(forceUpdate),\r\n\tmaintainStatus_setBTI: (isMaintenance) => ACTION_MaintainStatus_SetBTI(isMaintenance),\r\n\tmaintainStatus_setIM: (isMaintenance) => ACTION_MaintainStatus_SetIM(isMaintenance),\r\n\tmaintainStatus_setSABA: (isMaintenance) => ACTION_MaintainStatus_SetSABA(isMaintenance),\r\n\tmaintainStatus_noTokenBTI: (isNoToken) => ACTION_MaintainStatus_NoTokenBTI(isNoToken),\r\n\tmaintainStatus_noTokenIM: (isNoToken) => ACTION_MaintainStatus_NoTokenIM(isNoToken),\r\n\tmaintainStatus_noTokenSABA: (isNoToken) => ACTION_MaintainStatus_NoTokenSABA(isNoToken),\r\n\tuserSetting_updateListDisplayType: (currentType) => ACTION_UserSetting_Update({ ListDisplayType: currentType })\r\n};\r\n\r\nexport default withBetterRouter(connect(mapStateToProps, mapDispatchToProps)(Header));\r\n","import React from \"react\";\nimport { ReactSVG } from '@/ReactSVG';\r\nimport Router from 'next/router';\r\nimport Service from './Service';\r\n\r\nclass BackBar extends React.Component {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.state = {};\r\n\r\n\t\tthis.handleBackEvent = this.handleBackEvent.bind(this);\r\n\t}\r\n\tcomponentDidMount() {}\r\n\thandleBackEvent() {\r\n\t\tif (this.props.backEvent) {\r\n\t\t\tthis.props.backEvent();\r\n\t\t} else {\r\n\t\t\thistory.length ? history.go(-1) : Router.push('/');\r\n\t\t}\r\n\t}\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t{this.props.title}\r\n\t\t\t\t{this.props.hasServer ? (\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tif (Router.router.pathname == '/deposit') {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`LiveChat`, 'Launch', 'Deposit_CS');\r\n\t\t\t\t\t\t\t} else if (Router.router.pathname == '/transfer') {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`LiveChat`, 'Launch', 'Transfer_CS');\r\n\t\t\t\t\t\t\t} else if (Router.router.pathname == '/information') {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`LiveChat`, 'Launch', 'Notification_CS');\r\n\t\t\t\t\t\t\t} else if (Router.router.pathname == '/tutorial/bet') {\r\n\t\t\t\t\t\t\t\tPushgtagdata(`LiveChat`, 'Launch', 'Bet_Tutorial_CS');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t) : null}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default BackBar;\r\n","\r\nconst Footer = () => [\r\n
Footer
\r\n]\r\nexport default Footer;","import Button from \"@/Button\";\r\nimport { ReactSVG } from \"@/ReactSVG\";\r\nconst Maintain = () => [\r\n
\r\n
\r\n \r\n
\r\n
\r\n
亲爱的客户
\r\n
\r\n 我们的系统正在升级维护中,请稍后再尝试登入\r\n 您可以通过以下方式联系我们在线客服\r\n
\r\n \r\n \r\n 电邮: cs@fun88.com\r\n \r\n \r\n 热线电话: +86 400 842 891\r\n \r\n
\r\n
,\r\n];\r\n\r\nexport default Maintain;\r\n","import React from \"react\";\r\nimport Head from \"next/head\"\r\nimport Header from \"@/Header\"\r\nimport BackBar from \"@/Header/BackBar\"\r\nimport Footer from \"@/Footer\"\r\nimport Maintain from \"@/Maintain\"\r\nimport EventInfo from \"$LIB/vendor/data/EventInfo\"\r\nimport Router from 'next/router'\r\nimport { withBetterRouter } from '$LIB/js/withBetterRouter';\r\nimport { resetRemSize, checkIsLogin, redirectToLogin } from '$LIB/js/util'\r\nimport { CSSTransition } from \"react-transition-group\"\r\nimport { ReactSVG } from '@/ReactSVG'\r\nimport '$LIB/js/Globalfun';\r\nimport {EventChangeType, SpecialUpdateType, VendorMarkets} from \"../../lib/vendor/data/VendorConsts\";\r\nimport {signalRConnect} from '$LIB/js/signalR';\r\nimport {connect} from \"react-redux\";\r\nimport {ACTION_UserInfo_getBalanceSB} from \"../../lib/redux/actions/UserInfoAction\";\r\nimport { getUrlVars } from '$LIB/js/Helper';\r\nimport ReactIMG from '@/ReactIMG';\r\nimport SelfExclusionModal from '@/SelfExclusion';\r\n\r\n/*\r\n {\r\n\t\tthis.ChangeTheme([ 'light', 'dark' ]);\r\n\t}}\r\n>\r\n\tChangeTheme\r\n\r\n*/\r\n\r\n// 默认显示的状态值\r\nglobal.HttpStatus = 0;\r\n\r\nfunction ChangeTheme(themeArr) {\r\n\tconst ThemeNode = document.getElementById(\"fun88_sport\"),\r\n\t\tThemeNodeClass = ThemeNode.getAttribute(\"class\"),\r\n\t\tThemeIndex = themeArr.indexOf(ThemeNodeClass);\r\n\r\n\tThemeIndex >= 0 && ThemeNode.setAttribute(\"class\", themeArr[ThemeIndex + 1 > themeArr.length - 1 ? 0 : ThemeIndex + 1]);\r\n}\r\nfunction MainComponent(props) {\r\n\tconst status = props.status ? props.status : (props.status === 0 ? 0 : 1);\r\n\tconst commonParams = {\r\n\t\t// ChangeTheme: ChangeTheme\r\n\t};\r\n\r\n\tconst notificationInfo = {\r\n\t\t}}\r\n\t>\r\n\t\t{/* 必須有內容,不可放null會報錯 */}\r\n\t\t{props.notificationInfo ? <>\r\n\t\t
\r\n\t\t\t\r\n\t\t\t{props.notificationInfo}\r\n\t\t
\r\n\t\t :
}\r\n\t\r\n\tconst notificationRecommend = {\r\n\t\t}}\r\n\t>\r\n\t\t{/* 必須有內容,不可放null會報錯 */}\r\n\t\t{props.notificationRecommend ? <>\r\n\t\t
{\r\n\t\t\tif (parseInt(props.notificationRecommend.id) === 0) {\r\n\t\t\t\treturn false; //如果MsgID === 0 表示是帳戶信息,無法點開看細節\r\n\t\t\t}\r\n\t\t\tRouter.push({pathname: \"/notification-detail\", query: {id: props.notificationRecommend.id, type: props.notificationRecommend.type}})\r\n\t\t}}>\r\n\t\t\t\r\n\t\t\t{props.notificationRecommend ?
\r\n\t\t\t\t

{props.notificationRecommend.title}

\r\n\t\t\t\t

\r\n\t\t\t
: null}\r\n\t\t\t\r\n\t\t
\r\n\t\t :
}\r\n\t\r\n\r\n\tif (global.HttpStatus === -100) {\r\n\t\treturn;\r\n\t}\r\n\tswitch (status) {\r\n\t\tcase 0:\r\n\t\t\treturn {props.children};\r\n\t\tcase 1: // Default Value 默认只包含Header\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{notificationInfo}\r\n\t\t\t\t\t\t{notificationRecommend}\r\n\t\t\t\t\t\t{props.children}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\tcase 10: // 只包含有返回上一页的Header\r\n\t\t\treturn
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t{notificationInfo}\r\n\t\t\t\t\t{notificationRecommend}\r\n\t\t\t\t\t{props.children}\r\n\t\t\t\t
\r\n\t\t\t
;\r\n\t\tcase 11: // 推送信息專用,返回是到通知頁(information)\r\n\t\t\treturn
\r\n\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t //用replace,避免用戶可以點擊back返回\r\n\t\t\t\t\t\t\t\t\t Router.replace('/information', undefined, { shallow: true });\r\n\t\t\t\t\t\t\t\t }}\r\n\t\t\t\t\t\t\t\t hasServer={props.hasServer} {...commonParams} />\r\n\t\t\t\t
\r\n\t\t\t\t\t{notificationInfo}\r\n\t\t\t\t\t{notificationRecommend}\r\n\t\t\t\t\t{props.children}\r\n\t\t\t\t
\r\n\t\t\t
;\r\n\t\tcase 2: // 包含Header和Footer\r\n\t\t\treturn (\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{notificationInfo}\r\n\t\t\t\t\t\t{notificationRecommend}\r\n\t\t\t\t\t\t{props.children}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t);\r\n\t\tcase 3: // 维护界面\r\n\t\t\treturn ;\r\n\t\tcase 999: //初始頁,不處理任何東西,因為馬上就會跳走\r\n\t\t\treturn {props.children};\r\n\t\tdefault:\r\n\t\t\treturn
500 Error!
;\r\n\t}\r\n}\r\n\r\nclass Layout extends React.Component {\r\n\tstatic defaultProps = {\r\n\t\ttitle: \"Fun88乐体育|英超官方赞助商\",\r\n\t\tDescription: \"Fun88乐体育提供全球热门赛事资讯,欧洲足球五大联赛、世界杯、NBA、CBA、中超等赛程,一手掌握最新赛况,即时享受竞猜乐趣\",\r\n\t\tKeywords: \"Fun88,Fun88乐天堂体育,乐体育,fun88乐体育,IM平台,BTI平台,虚拟货币,USDT,体育竞猜,欧冠竞猜,英超竞猜,NBA竞猜\",\r\n\t\tbarFixed: false,\r\n\t\thasServer: false\r\n\t}\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.state = {\r\n\t\t\tnotificationInfo: \"\",\r\n\t\t\tnotificationRecommendInfo: null,\r\n\t\t\tshowAppDownloadBar: false, //展示app下載橫幅(會影響sport-content,所以這個state不能放header裡面)\r\n\t\t};\r\n\r\n\t\tthis.Vendor = null;\r\n\t\tthis.eventPollingKey = null;\r\n\t\tthis.notification = this.notification.bind(this);\r\n\t}\r\n\tcomponentDidMount () {\r\n\t\tif (this.props.status === 999) {\r\n\t\t\tconsole.log('===layout didmount but do nothing'); //for初始頁 \"/\" 馬上跳走,不用處理\r\n\t\t\treturn;\r\n\t\t} else {\r\n\t\t\tconsole.log('===layout didmount')\r\n\t\t}\r\n\r\n\t\tlet vars = getUrlVars();\r\n\t\tif (vars.aff && vars.aff !== '') {\r\n\t\t\tconsole.log('=== get affcode ',vars.aff);\r\n\t\t\tsessionStorage.setItem('affCode', vars.aff);\r\n\t\t}\r\n\r\n\t\tresetRemSize();\r\n\r\n\t\t//進球通知\r\n\t\tthis.notification();\r\n\r\n\t\t//綁定後台推送(signalR)處理函數\r\n\t\t//這樣做是因為layout在換頁時會被unmount,需要重新綁定當前實例\r\n\t\tif (typeof window !== \"undefined\") {\r\n\t\t\t//獲取到全站群發訊息\r\n\t\t\twindow.signalR_onGetBroadcastSBMessage = this.signalR_getBroadcastSBMessage.bind(this);\r\n\t\t\t//獲取到單發個人訊息\r\n\t\t\twindow.signalR_onGetPrivateSBMessage = this.signalR_getPrivateSBMessage.bind(this);\r\n\t\t}\r\n\r\n\t\t//後台推送(signalR) 頁面刷新時重連\r\n\t\tsignalRConnect();\r\n\r\n\t\tthis.resetRemSizeWhenWindowResize = () => {\r\n\t\t\tconst width = document.documentElement.clientWidth || document.body.clientWidth,\r\n\t\t\t\theight = document.documentElement.clientHeight || document.body.clientHeight;\r\n\t\t\t// 因手机浏览器竖屏横屏状态宽高(浏览器地址栏工具栏)变化无常,记录手机浏览器可用宽高\r\n\t\t\t// 在可用宽高记录完成后,优先使用竖屏的宽高\r\n\t\t\tif (width < height && !global.documentWidth) {\r\n\t\t\t\tresetRemSize(width);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twindow.addEventListener('resize', this.resetRemSizeWhenWindowResize);\r\n\r\n\t\twindow.Pushgtagdata = (category, action, name) => {\r\n\t\t\tif (typeof _paq === 'object') {\r\n \t\t_paq.push([\"trackEvent\", category, action, name]);\r\n \t\t\t}\r\n\t\t};\r\n\t\tthis.props.landscape ? (function removeLandscape() {\r\n\t\t\tconst nodeDom = document.getElementById(\"orientLayer\");\r\n\t\t\tnodeDom && document.getElementsByTagName('body')[0].removeChild(nodeDom);\r\n\t\t\tconst cssDom = document.getElementById(\"orientLayerCss\");\r\n\t\t\tcssDom && document.getElementsByTagName('body')[0].removeChild(cssDom);\r\n\t\t}()) : (function landscape(config) {\r\n\t\t\t//檢查,避免重複添加多個\r\n\t\t\tconst existNodeDom = document.getElementById(\"orientLayer\");\r\n\t\t\tif (existNodeDom) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {\r\n\t\t\t\tvar isVertical = Number(document.getElementById(\"customerLandscape\").getAttribute('isVertical')) || 0;\r\n\t\t\t\tvar showWay = isVertical ? \"@media screen and (min-aspect-ratio: 12/7){#orientLayer{display:block;} }\" :\r\n\t\t\t\t\t\"@media all and (orientation : portrait){#orientLayer{display: block;} }\";\r\n\t\t\t\tvar color = config && config.color ? config.color : \"#000\",\r\n\t\t\t\t\ttxt = isVertical ? \"为了更好的体验,请使用竖屏浏览\" : \"为了更好的体验,请使用横屏浏览\",\r\n\t\t\t\t\timages = config && config.images ? config.images :\r\n\t\t\t\t\t\t\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIYAAADaCAMAAABU68ovAAAAXVBMVEUAAAD29vb////x8fH////////x8fH5+fn29vby8vL////5+fn39/f6+vr////x8fH////////+/v7////09PT////x8fH39/f////////////////////x8fH///+WLTLGAAAAHXRSTlMAIpML+gb4ZhHWn1c2gvHBvq1uKJcC6k8b187lQ9yhhboAAAQYSURBVHja7d3blpowFIDhTUIAOchZDkre/zE7ycySrbUUpsRN2/1fzO18KzEqxEVgTiZNfgmmtxRc8iaR8HNe8x4BtjQePKayYCIoyBSgvNNE1AkNSHqZyLqk97EgUCCHBzZ5mkg7ScvIJuIyOyXBRFxgpqWZyGsAZLB1KjsJi8nutHU4JCRbFRH8tmirI9k8Jx2sqNs8K/m0LQkrktO2crgcgXGB4AiTEsB0hJfo9MGgX7CGcYiYwQxmMOOvZwRhBG8tCoMXjBDeXvWCEcHbi14wgCBmMIMZzGAGM5jxETNwzMAxA8cMHDNwzMAxA8cMHDNwzMAxA8cMHDNwzMAxY6E2rUQxnH2tz9cirlJFwFBJedaPnUv0M7++egPDE8iAJcIDmxwH5wwv9vUviw2kLbVO3TJU5uul/EyB0FoLp4x60PdGUd3qPurrWyjGGTc05u+1dcgI7/+tCCPARWGhH7o5Y7RCf+bH9ctXLp6v2BVDxfqz0oPXeSVaNtINo/1SXDv4dck8IIkbhtC2ol+iouEonTBCbYvVMnXOjxww6s/RFrBUpXHh/gw1rHj5d/qhYn9Gpk2FWh6xRBRX5Oj3Znh2Sq49/L6+y8pB26q9GbE2dbA2mVbx6I+7MfBglLCttm73ZQi7AD3iL4HqjFYJHSPRppqaUaJ3ATpGa+ckpGak2hRRMyqjGMkvl+xyFeSMwjAqcsZgGDdyhl0oNTnDN4yenJGZFGxNChP5/Y3efh6SM2rDOJMzboYxkDMqwyjIGcIw6F+io2FU1IxIm1JqRmgXSkvNKNCXeTpGrU0JNSO2c6LIGPgCS8AuDHz9ta0SXWDtxoDRH+MqlbC2Dt2G2JFRadtQZt2qq/orGowdGb2euxYiqWEpVWhTBnszoNAPdStuQwxqf0aocdWKW4Z+DfszIh8pxJqbuCE4YAC+4bm0evtipjpgJHeFnyyt1Ku2xa0bhjxr27p75rECNwyI9ZwvXkHq+7aTaMEV44YYy/spfgjgjNHaWW+GeUhGEX7tLlVinIFDDSgnOwhi1V6bU0b6tVS9eAERe863g4dRrtiHdc6o+nn5vtyVVgR79Cqt4uL6gfHPQyGqtP2vf7HADGbcYwaOGThm4JiBYwaOGThm4JiBYwaOGThm4JiBYwaOGThm4JiBYwaOGThm4JjhtOM+J/AgT008yDMkN/dPP9hzS8zAMQN3OEYeekp5YU7KOKXwVXqiY+QS7smcinGKABWdiBgpPJTSMHJ4KidhhPBUSMLw4CmPhKHgKUXCkHsygum71ftNSgCX6bsl8FQyfbcL5EdYsDk0R3j7aiA5wpt5AjKg/2gLJEBD/0Hf2OOf/vRrj6z/7GtP4B3nMKyjHA12kIPSjnJs3FEO0TvKkYJHOWCR+rjJH0Vn6fI5PjNbAAAAAElFTkSuQmCC\";\r\n\t\t\t\t// style\r\n\t\t\t\tvar nodeStyle = document.createElement('style');\r\n\t\t\t\tnodeStyle.setAttribute('id', 'orientLayerCss');\r\n\t\t\t\tnodeStyle.setAttribute('type', 'text/css');\r\n\t\t\t\tnodeStyle.innerHTML =\r\n\t\t\t\t\t'@-webkit-keyframes rotation{10%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} 50%, 60%{transform: rotate(0deg); -webkit-transform: rotate(0deg)} 90%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} 100%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} } @keyframes rotation{10%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} 50%, 60%{transform: rotate(0deg); -webkit-transform: rotate(0deg)} 90%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} 100%{transform: rotate(-90deg); -webkit-transform: rotate(-90deg)} } #orientLayer{display: none; z-index: 999999;} ' +\r\n\t\t\t\t\tshowWay +\r\n\t\t\t\t\t' .mod-orient-layer{display: none; position: fixed; height: 100%; width: 100%; left: 0; top: 0; right: 0; bottom: 0; background: ' +\r\n\t\t\t\t\tcolor +\r\n\t\t\t\t\t'; z-index: 9997} .mod-orient-layer__content{position: absolute; width: 100%; top: 45%; margin-top: -75px; text-align: center} .mod-orient-layer__icon-orient{background-image: url(' +\r\n\t\t\t\t\timages +\r\n\t\t\t\t\t'); display: inline-block; width: 67px; height: 109px; transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -webkit-animation: rotation infinite 1.5s ease-in-out; animation: rotation infinite 1.5s ease-in-out; -webkit-background-size: 67px; background-size: 67px} .mod-orient-layer__desc{margin-top: 20px; font-size: 15px; color: #fff}'\r\n\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(nodeStyle);\r\n\t\t\t\t// dom\r\n\t\t\t\tvar nodeDom = document.createElement('div');\r\n\t\t\t\tnodeDom.setAttribute('id', 'orientLayer');\r\n\t\t\t\tnodeDom.setAttribute('class', 'mod-orient-layer');\r\n\t\t\t\tnodeDom.innerHTML =\r\n\t\t\t\t\t'
' +\r\n\t\t\t\t\ttxt + '
';\r\n\t\t\t\tdocument.getElementsByTagName('body')[0].appendChild(nodeDom);\r\n\t\t\t}\r\n\t\t}())\r\n\r\n\t\t//是否展示app下載橫幅\r\n\t\tlet showAppDownloadBar = false;\r\n\t\tif (!sessionStorage.getItem('appdownload-closed') //用seesionStorage滿足需求\r\n\t\t\t&& checkIsLogin()\r\n\t\t){\r\n\t\t\tshowAppDownloadBar = true;\r\n\t\t}\r\n\t\tif (this.state.showAppDownloadBar !== showAppDownloadBar) { //有變更才配置\r\n\t\t\tthis.setState({showAppDownloadBar});\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount () {\r\n\t\tif (this.Vendor) {\r\n\t\t\tthis.Vendor.deletePolling(this.eventPollingKey);\r\n\t\t}\r\n\t\tif (this.resetRemSizeWhenWindowResize) {\r\n\t\t\twindow.removeEventListener('resize', this.resetRemSizeWhenWindowResize);\r\n\t\t}\r\n\r\n\t\t//解綁後台推送(signalR)處理函數\r\n\t\tif (typeof window !== \"undefined\") {\r\n\t\t\t//獲取到全站群發訊息\r\n\t\t\twindow.signalR_onGetBroadcastSBMessage = null;\r\n\t\t\t//獲取到單發個人訊息\r\n\t\t\twindow.signalR_onGetPrivateSBMessage = null;\r\n\t\t}\r\n\r\n\t\tif (this.signalR_timout_handler) {\r\n\t\t\tclearTimeout(this.signalR_timout_handler);\r\n\t\t}\r\n\t\tif (this.notification_timeout_handler) {\r\n\t\t\tclearTimeout(this.notification_timeout_handler);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//處理push 廣播群發\r\n\tsignalR_getBroadcastSBMessage(messageID, messageTitle, messageContent, messageLanguage, messageCategoryId) {\r\n\t\treturn this.signalR_getMessage('B',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\r\n\t}\r\n\r\n\t//處理push 單發個人\r\n\tsignalR_getPrivateSBMessage(messageID, messageTitle, messageContent, messageLanguage, messageCategoryId) {\r\n\t\treturn this.signalR_getMessage('P',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\r\n\t}\r\n\r\n\t//處理push type=B 為廣播群發 type=P 為單發個人\r\n\tsignalR_getMessage(type='B', messageID, messageTitle, messageContent, messageLanguage, messageCategoryId) {\r\n\t\tlet thisMsgType = 'broadcastSBMessage';\r\n\t\tif (type !== 'B') {\r\n\t\t\tthisMsgType = 'privateSBMessage';\r\n\t\t}\r\n\r\n\t\tconst replaceAll = function(source, search, replacement) {\r\n\t\t\treturn source.replace(new RegExp(search, 'g'), replacement);\r\n\t\t};\r\n\r\n\t\t// +號特別處理 改成htmlencode的空白(%20)\r\n\t\tif (messageTitle && messageTitle.length > 0) {\r\n\t\t\tmessageTitle = replaceAll(messageTitle,/\\+/,'%20');\r\n\t\t}\r\n\t\tif (messageContent && messageContent.length > 0) {\r\n\t\t\tmessageContent = replaceAll(messageContent,/\\+/,'%20');\r\n\t\t}\r\n\r\n\t\t//發過來的內容url encode過 需要decode\r\n\t\tconst urlDecodedMessageTitle = decodeURIComponent(messageTitle);\r\n\t\tconst urlDecodedMessageContent = decodeURIComponent(messageContent);\r\n\r\n\t\tconsole.log('===signalR get ' + thisMsgType + ' ON Layout',messageID, urlDecodedMessageTitle, urlDecodedMessageContent, messageTitle, messageContent, messageLanguage, messageCategoryId);\r\n\r\n\t\t//存款到帳,自動刷新餘額\r\n\t\tif (messageID === 0 && urlDecodedMessageContent && urlDecodedMessageContent && urlDecodedMessageContent.indexOf(\"存款已成功到账\") > 0) {\r\n\t\t\tconsole.log('===signalR refresh balance');\r\n\t\t\tthis.props.userInfo_getBalanceSB(true);\r\n\t\t}\r\n\r\n\t\tthis.setState({\r\n\t\t\tnotificationRecommendInfo: {\r\n\t\t\t\tid: messageID,\r\n\t\t\t\ttype: thisMsgType,\r\n\t\t\t\ttitle: urlDecodedMessageTitle,\r\n\t\t\t\tinfo: urlDecodedMessageContent\r\n\t\t\t}\r\n\t\t}, () => {\r\n\t\t\t//考慮連續push,先關閉現有的timeout\r\n\t\t\tif (this.signalR_timout_handler) {\r\n\t\t\t\tclearTimeout(this.signalR_timout_handler);\r\n\t\t\t\tthis.signalR_timout_handler = null;\r\n\t\t\t}\r\n\t\t\t//然後起一個新的\r\n\t\t\tthis.signalR_timout_handler = setTimeout(() => {\r\n\t\t\t\tthis.setState({notificationRecommendInfo: null});\r\n\t\t\t\tclearTimeout(this.signalR_timout_handler);\r\n\t\t\t\tthis.signalR_timout_handler = null;\r\n\t\t\t}, 10000);\r\n\t\t});\r\n\t}\r\n\r\n\t//進球通知\r\n\tasync notification() {\r\n\t\tif (!checkIsLogin()) {\r\n\t\t\treturn; //未登入不用通知\r\n\t\t}\r\n\r\n\t\tconst {pathname} = this.props.router;\r\n\r\n\t\tif (pathname == '/sports-im') {\r\n\t\t\tthis.Vendor = (await import('$LIB/vendor/im/VendorIM')).default;\r\n\t\t} else if (pathname == '/sports-saba') {\r\n\t\t\tthis.Vendor = (await import('$LIB/vendor/saba/VendorSABA')).default;\r\n\t\t} else if (pathname == '/sports-bti') {\r\n\t\t\tthis.Vendor = (await import('$LIB/vendor/bti/VendorBTI')).default;\r\n\t\t} else {\r\n\t\t\tthis.Vendor = null;\r\n\t\t}\r\n\r\n\t\tconsole.log('===notification path',pathname,', current vendor:', (this.Vendor ? this.Vendor.configs.VendorName : 'null vendor'));\r\n\r\n\t\tlet currentVendor = this.Vendor;\r\n\t\tif (!currentVendor) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet whistle = new Audio(\"/sound/whistle.mp3\");\r\n\t\twhistle.muted = true;\r\n\t\twhistle.muted = false;\r\n\r\n\t\t//console.log('===currentVendor',currentVendor.configs.VendorPage);\r\n\r\n\t\t// 動態獲取比賽數據,這樣 不管怎麼變動,都不用重新配置輪詢\r\n\t\tconst getEventInfosFunc = async () => {\r\n\t\t\t// 1. 先取用戶配置\r\n\t\t\tconst memberSetting = currentVendor.getMemberSetting();\r\n\r\n\t\t\tlet eventInfos = [];\r\n\t\t\tif (memberSetting.goalNotification) {\r\n\t\t\t\t// 進球通知只需要 足球,其他都不用\r\n\t\t\t\tconst targetSportId = 1;\r\n\r\n\t\t\t\t// 如果勾選 全部滾球 直接查詢全部滾球數據,因為全部滾球一定會包含 收藏 和 投注 賽事\r\n\t\t\t\tif (memberSetting.goalAllRB) {\r\n\t\t\t\t\tconst runningPR = await currentVendor.getEvents(targetSportId,VendorMarkets.RUNNING);\r\n\t\t\t\t\tconst runningEvents = runningPR.NewData;\r\n\t\t\t\t\teventInfos = eventInfos.concat(runningEvents.map(ev => new EventInfo(ev.EventId, ev.SportId, ev.IsOutRightEvent === true)));\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// 2. 收藏賽事有開,取收藏賽事\r\n\t\t\t\t\tif (memberSetting.goalMyFavorite) {\r\n\t\t\t\t\t\tconst favEvents = await currentVendor.getFavouriteEvents();\r\n\t\t\t\t\t\tconst favEventInfos = favEvents.map(ev => {\r\n\t\t\t\t\t\t\treturn new EventInfo(ev.EventId, ev.SportId, ev.IsOutRightEvent === true);\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\teventInfos = eventInfos.concat(favEventInfos);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// 3. 投注賽事有開,取投注賽事(注單未結算)\r\n\t\t\t\t\tif (memberSetting.goalIBet) {\r\n\t\t\t\t\t\tconsole.log('before await');\r\n\t\t\t\t\t\tconst unsettleWagers = await currentVendor.getUnsettleWagers();\r\n\t\t\t\t\t\tconsole.log('after await');\r\n\t\t\t\t\t\tlet unsettleWagerEventInfos = []\r\n\t\t\t\t\t\tunsettleWagers.map(uw => {\r\n\t\t\t\t\t\t\tuw.WagerItems.map(wi => {\r\n\t\t\t\t\t\t\t\tunsettleWagerEventInfos.push(new EventInfo(wi.EventId, wi.SportId, wi.IsOutRightEvent))\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\teventInfos = eventInfos.concat(unsettleWagerEventInfos);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// 4.去重複\r\n\t\t\t\t\teventInfos = eventInfos.filter((ei, index, self) => self.findIndex(t => t.EventId === ei.EventId) === index);\r\n\t\t\t\t\t// 5.去除優勝冠軍\r\n\t\t\t\t\teventInfos = eventInfos.filter(ei => !ei.IsOutRightEvent);\r\n\t\t\t\t\t// 6.只保留足球\r\n\t\t\t\t\teventInfos = eventInfos.filter(ei => parseInt(ei.SportId) === targetSportId);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//console.log('===notification eventInfos',JSON.parse(JSON.stringify(eventInfos)));\r\n\r\n\t\t\treturn eventInfos;\r\n\t\t}\r\n\r\n\t\t// 輪詢 多個比賽數據(在notification 使用) 返回輪詢key,在componentWillUnmount時記得刪掉輪詢\r\n\t\tthis.eventPollingKey = currentVendor.getEventsDetailPollingGlobal('notification',PollingResult => {\r\n\t\t\t//console.log('===update Event',PollingResult);\r\n\t\t\t// this.setState({EventDetail: PollingResult.NewData});\r\n\t\t\tif (!currentVendor) {\r\n\t\t\t\tconsole.log('===null vendor: abort notification');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// 處理 數據變化\r\n\t\t\tPollingResult.Changes.map(changeData => {\r\n\t\t\t\t// 類型:更新\r\n\t\t\t\tif (changeData.ChangeType === EventChangeType.Update) {\r\n\t\t\t\t\tchangeData.SpecialUpdates.map(sUpdateData => {\r\n\t\t\t\t\t\tconst thisEventId = changeData.EventId; // 比賽ID\r\n\r\n\t\t\t\t\t\t// 進球通知\r\n\t\t\t\t\t\t// HomeGoal: 2, //主場進球\r\n\t\t\t\t\t\t// AwayGoal: 3, //客場進球\r\n\r\n\t\t\t\t\t\t// 主場進球\r\n\t\t\t\t\t\tif (sUpdateData.UpdateType === SpecialUpdateType.HomeGoal) {\r\n\t\t\t\t\t\t\t//處理通知\r\n\t\t\t\t\t\t\tconst thisEvent = changeData.NewValue;\r\n\r\n\t\t\t\t\t\t\tconsole.log('===',thisEventId, '主場進球', sUpdateData.OldValue,'=>', sUpdateData.NewValue);\r\n\t\t\t\t\t\t\tthis.setState({notificationInfo: thisEvent.HomeTeamName + '(进球) ' + (thisEvent.HomeScore ?? 0) + ' - ' + (thisEvent.AwayScore ?? 0) + ' ' + thisEvent.AwayTeamName});\r\n\r\n\t\t\t\t\t\t\t//考慮連續進球,先關閉現有的timeout\r\n\t\t\t\t\t\t\tif (this.notification_timeout_handler) {\r\n\t\t\t\t\t\t\t\tclearTimeout(this.notification_timeout_handler);\r\n\t\t\t\t\t\t\t\tthis.notification_timeout_handler = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//然後起一個新的\r\n\t\t\t\t\t\t\tthis.notification_timeout_handler = setTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.setState({notificationInfo: \"\"});\r\n\t\t\t\t\t\t\t\tclearTimeout(this.notification_timeout_handler);\r\n\t\t\t\t\t\t\t\tthis.notification_timeout_handler = null;\r\n\t\t\t\t\t\t\t}, 10000);\r\n\r\n\t\t\t\t\t\t\t//聲音\r\n\t\t\t\t\t\t\tconst memberSetting = currentVendor.getMemberSetting();\r\n\t\t\t\t\t\t\tif (memberSetting.goalSound) {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\twhistle.play().catch(e=> {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log('===play sound error',e);\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}catch (e) {\r\n\t\t\t\t\t\t\t\t\tconsole.log('===play sound error',e);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t//震動\r\n\t\t\t\t\t\t\tif (memberSetting.goalVibration) {\r\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\twindow.navigator.vibrate(500);\r\n\t\t\t\t\t\t\t\t\t}catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log('===vibrate error',e);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// 客場進球\r\n\t\t\t\t\t\tif (sUpdateData.UpdateType === SpecialUpdateType.AwayGoal) {\r\n\t\t\t\t\t\t\tconst thisEvent = changeData.NewValue;\r\n\r\n\t\t\t\t\t\t\t// 處理通知\r\n\t\t\t\t\t\t\tconsole.log('===',thisEventId, '客場進球', sUpdateData.OldValue, '=>', sUpdateData.NewValue);\r\n\t\t\t\t\t\t\tthis.setState({notificationInfo: thisEvent.HomeTeamName + ' ' + (thisEvent.HomeScore ?? 0) + ' - ' + (thisEvent.AwayScore ?? 0) + ' ' + thisEvent.AwayTeamName + '(进球)'});\r\n\r\n\t\t\t\t\t\t\t//考慮連續進球,先關閉現有的timeout\r\n\t\t\t\t\t\t\tif (this.notification_timeout_handler) {\r\n\t\t\t\t\t\t\t\tclearTimeout(this.notification_timeout_handler);\r\n\t\t\t\t\t\t\t\tthis.notification_timeout_handler = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t//然後起一個新的\r\n\t\t\t\t\t\t\tthis.notification_timeout_handler = setTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.setState({notificationInfo: \"\"});\r\n\t\t\t\t\t\t\t\tclearTimeout(this.notification_timeout_handler);\r\n\t\t\t\t\t\t\t\tthis.notification_timeout_handler = null;\r\n\t\t\t\t\t\t\t}, 10000);\r\n\r\n\t\t\t\t\t\t\t//聲音\r\n\t\t\t\t\t\t\tconst memberSetting = currentVendor.getMemberSetting();\r\n\t\t\t\t\t\t\tif (memberSetting.goalSound) {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\twhistle.play().catch(e=> {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log('===play sound error',e);\r\n\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t}catch (e) {\r\n\t\t\t\t\t\t\t\t\tconsole.log('===play sound error',e);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t//震動\r\n\t\t\t\t\t\t\tif (memberSetting.goalVibration) {\r\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\twindow.navigator.vibrate(500);\r\n\t\t\t\t\t\t\t\t\t}catch (e) {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log('===vibrate error',e);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}, getEventInfosFunc); // <== 查詢參數 獲取 比賽查詢依據(EventInfo) 的函數\r\n\t}\r\n\trender() {\r\n\t\tconst { title, Description, Keywords } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t{title}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t {/* QQ 竖屏锁定 */}\r\n\t\t\t\t\t {/* UC 竖屏锁定 */}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t {this.setState({notificationInfo: \"\"})}}\r\n\t\t\t\t\tcloseNotificationRecommend={(e) => {e.stopPropagation();this.setState({notificationRecommendInfo: null})}}\r\n\t\t\t\t\tshowAppDownloadBar={this.state.showAppDownloadBar}\r\n\t\t\t\t\tcloseAppDownloadBar={() => {\r\n\t\t\t\t\t\tthis.setState({showAppDownloadBar: false},() => {sessionStorage.setItem('appdownload-closed','1');});\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tkey=\"main-component\"\r\n\t\t\t\t/>\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{/* 自我限制彈窗 */}\r\n\t\t\t\t global.hasSelfExclusion = func}\r\n\t\t\t\t/>\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n\tuserInfo_getBalanceSB: (forceUpdate = false) => ACTION_UserInfo_getBalanceSB(forceUpdate)\r\n}\r\n\r\nexport default withBetterRouter(\r\n\tconnect(\r\n\t\tnull,\r\n\t\tmapDispatchToProps\r\n\t)(Layout)\r\n);\r\n","import ReactDOM from \"react-dom\";\nimport Button from \"@/Button\";\nimport React, { Component, Fragment } from \"react\";\n\nexport default class Modal extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isShow: false,\n animationType: \"leave\",\n };\n }\n componentDidMount() {\n if (this.props.visible) {\n this.enter();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.visible && !prevProps.visible) {\n this.enter();\n }\n\n if (!this.props.visible && prevProps.visible) {\n this.leave();\n }\n }\n\n enter() {\n this.setState({ isShow: true, animationType: \"enter\" });\n }\n\n leave() {\n this.setState({ animationType: \"leave\" });\n }\n\n animationEnd = () => {\n const { animationType } = this.state;\n if (animationType === \"leave\") {\n this.setState({ isShow: false });\n }\n };\n\n render() {\n const { isShow, animationType } = this.state;\n const {\n onCancel,\n children,\n wrapClassName = \"\",\n className,\n closable = true,\n mask = true,\n maskClosable,\n title = \"\",\n animation = true,\n } = this.props;\n const style = {\n animationDuration: animation ? \"150ms\" : \"0ms\",\n WebkitAnimationDuration: animation ? \"150ms\" : \"0ms\",\n };\n return isShow\n ? ReactDOM.createPortal(\n \n {mask && (\n \n )}\n \n {title?
{title}
:null}\n
\n {children ? children : \"\"}\n
\n {closable ? (\n
\n ) : null}\n
\n ,\n (this.props.wrapDom && this.props.wrapDom.current) ||\n document.body\n )\n : null;\n }\n}\n\nModal.info = function (args) {\n console.log(args);\n let div = document.createElement(\"div\");\n document.body.appendChild(div);\n let infoProps = {\n closable: false,\n className: `modal-info ${args.className}`,\n title: args.title || \"\",\n maskClosable: args.maskClosable === false? false : true,\n onCancel: cancelDestroy,\n onOk: handleOk,\n };\n\n function cancelDestroy() {\n destroy();\n }\n function destroy() {\n const { onCancel } = args;\n if (onCancel) {\n onCancel();\n }\n render(Object.assign(infoProps, { visible: false }));\n div.parentNode.removeChild(div);\n }\n\n function handleOk() {\n const { onOk } = args;\n if (onOk) {\n onOk();\n }\n render(Object.assign(infoProps, { visible: false }));\n div.parentNode.removeChild(div);\n }\n\n function render(props) {\n const cancelBtnComponent = (\n \n );\n console.log(args)\n\n ReactDOM.render(\n React.createElement(\n Modal,\n props,\n <>\n {args.content ?
{args.content}
: null}\n {args.type === \"confirm\" ? (\n \n {args.btnReverse ? null : args.onlyOKBtn?null:cancelBtnComponent}\n \n {args.btnReverse ? args.onlyOKBtn?null:cancelBtnComponent : null}\n \n ) : args.type === \"cancel\" ? (\n \n {args.btnReverse ? null : args.onlyCancelBtn?null:cancelBtnComponent}\n \n { args.btnReverse ? args.onlyCancelBtn?null:cancelBtnComponent : null}\n \n ) : (\n
\n \n \n
\n )}\n \n ),\n div\n );\n }\n\n render(Object.assign(infoProps, { visible: true }));\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n//處理圖片路徑問題(放在public目錄的本地圖片才需要換成ReactIMG,外部圖片直接使用img即可)\nconst Image = ({ src, alt = '', className = '', style = {}, innerRef, onClick }) => {\n\n return (\n \n );\n};\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string,\n className: PropTypes.string,\n};\n\nexport default Image;\n","import React from \"react\";\nimport Modal from \"@/Modal\";\nimport {connect} from \"react-redux\";\nimport moment from 'moment';\n\n//自我限制彈窗\nclass SelfExclusionModal extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n ModalOpen: false,\n }\n\n //往父物件傳遞 公用函數\n //打開彈窗(轉帳金額限制)\n this.props.proxySetModalOpen && this.props.proxySetModalOpen(this.setModalOpen);\n //判斷自我限制 並 打開彈窗(存款 轉帳 投注 限制)\n this.props.proxyHasSelfExclusion && this.props.proxyHasSelfExclusion(this.hasSelfExclusion)\n }\n\n componentDidMount () {\n }\n\n componentWillUnmount() {\n }\n\n setModalOpen = () => {\n this.setState({ModalOpen: true});\n }\n\n //判斷自我限制(disableType 1:存款 2:轉帳 3:投注) 並 打開彈窗\n hasSelfExclusion = (disableType) => {\n if (this.props.ModalType == 1) {\n const info = this.props.userInfo.selfExclusionInfo;\n const isDisabled = info.Status && (\n (disableType == 1 && info.DisableDeposit)\n || (disableType == 2 && info.DisableFundIn)\n || (disableType == 3 && info.DisableBetting)\n )\n\n if (isDisabled) {\n this.setModalOpen();\n return true;\n }\n }\n return false;\n }\n\n render () {\n\n let setupDate = null;\n let dateDuration = '永久';\n if (this.props.ModalType == 1) {\n setupDate = moment(this.props.userInfo.selfExclusionInfo.SelfExcludeSetDate + '+08:00').format('YYYY/MM/DD');\n if( this.props.userInfo.selfExclusionInfo.SelfExclusionSettingID == 3) {\n dateDuration = '永久';\n } else {\n dateDuration = this.props.userInfo.selfExclusionInfo.SelfExcludeDuration + '天';\n }\n }\n\n return \n
\n { this.props.ModalType == 1 ? <>\n { `您在 ${setupDate} 已成功设定(${dateDuration})自我行为控制,如需要任何帮助,请联系` } {\n global.PopUpLiveChat();\n }}\n >在线客服。\n : null }\n { this.props.ModalType == 2 ? <>\n 转帐金额已超过您的自我限制金额,若您需要任何帮助,请联系 {\n global.PopUpLiveChat();\n }}\n >在线客服。\n : null }\n
\n
{\n this.setState({ModalOpen: false}, () => {\n this.props.afterCloseModal && this.props.afterCloseModal();\n });\n }}\n >\n 知道了\n
\n \n }\n}\n\nconst mapStateToProps = (state) => ({\n userInfo: state.userInfo,\n});\n\nexport default connect(mapStateToProps)(SelfExclusionModal);\n","import { fetchRequest } from '$LIB/SportRequest';\nimport { ApiPort } from '$LIB/SPORTAPI';\nimport { realyNameReg } from '$LIB/SportReg';\nimport Toast from '@/Toast';\nimport { Cookie } from '$LIB/js/Helper';\nimport { checkIsLogin, setIsLogout } from '$LIB/js/util';\n\n// 获取用户账户信息以及设置为LocalStorage\nexport function getMemberInfo(call, refresh) {\n\tconsole.log(call, refresh);\n\tconst localMemberInfo = localStorage.getItem('memberInfo');\n\tlet memberInfo = {};\n\n\tif (localMemberInfo === null || localMemberInfo === '' || refresh) {\n\t\tfetchRequest(ApiPort.Member, 'GET')\n\t\t\t.then((res) => {\n\t\t\t\tif (res && res.isSuccess) {\n\t\t\t\t\tres.result.memberInfo.Contacts.forEach((val) => {\n\t\t\t\t\t\tres.result.memberInfo['isVerified' + val.ContactType] = [\n\t\t\t\t\t\t\tval.Contact,\n\t\t\t\t\t\t\tval.Status === 'Verified'\n\t\t\t\t\t\t];\n\t\t\t\t\t});\n\n\t\t\t\t\tObject.assign(memberInfo, res.result.memberInfo);\n\t\t\t\t}\n\n\t\t\t\tconst memberInfoString = JSON.stringify(memberInfo);\n\t\t\t\tconsole.log(memberInfoString);\n\t\t\t\tlocalStorage.setItem('memberInfo', memberInfoString === '{}' ? '' : memberInfoString);\n\t\t\t\tcall(memberInfo);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.log('getMemberInfo(GETMemberlistAPI) error:', error);\n\t\t\t\treturn null;\n\t\t\t});\n\t} else {\n\t\tcall(JSON.parse(localMemberInfo));\n\t}\n}\n\n// 设置用户真实姓名\nexport function setUserRealyName(name, call) {\n\tfetchRequest(ApiPort.Member, 'PATCH', {\n\t\tkey: 'FirstName',\n\t\tvalue1: name\n\t})\n\t\t.then((res) => {\n\t\t\tif (res) {\n\t\t\t\tif (res.isSuccess == true) {\n\t\t\t\t\tToast.success('更新成功!');\n\t\t\t\t} else if (res.isSuccess == false) {\n\t\t\t\t\tToast.error(res.result.Message);\n\t\t\t\t}\n\t\t\t\tcall(res);\n\t\t\t}\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('setUserRealyName error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\n//存款前 提交真實姓名和銀行卡\nexport function setUserRealyNameAndBankCard(name, bankName, accountNumber, call) {\n\tfetchRequest(ApiPort.PostBankCardVerification, 'POST', {\n\t\trealName: name,\n\t\tbankName: bankName,\n\t\taccountNumber: accountNumber,\n\t})\n\t\t.then((res) => {\n\t\t\tif (res) {\n\t\t\t\t// if (res.isSuccess == true) {\n\t\t\t\t// \tToast.success('更新成功!');\n\t\t\t\t// } else\n\t\t\t\t// if (res.isSuccess == false) {\n\t\t\t\t// \tToast.error(res.result.Message);\n\t\t\t\t// }\n\t\t\t\tcall(res);\n\t\t\t}\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('setUserRealyName error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\n//验证充值之前 填写资料的次数 如果失败 就直接进入 超过验证次数限制页面\nexport function getResendAttempt(call, serviceAction = 'BankCardVerification', channel = 'SMS') {\n\tfetchRequest(`${ApiPort.ResendAttempt}serviceAction=${serviceAction}&channelType=${channel}&`, 'GET')\n\t\t.then((res) => {\n\t\t\tcall(res);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('getResendAttempt error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\nexport function setMemberInfo(data, call) {\n\tfetchRequest(ApiPort.PUTMemberlistAPI, 'PATCH', data)\n\t\t.then((res) => {\n\t\t\tcall(res);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('setMemberInfo error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\nexport function setMemberInfoPut(data, call) {\n\tfetchRequest(ApiPort.PUTMemberlistAPI, 'PUT', data)\n\t\t.then((res) => {\n\t\t\tcall(res);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('setMemberInfo error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\n// 获取密保问题\nexport function getQuestion(call) {\n\tfetchRequest(ApiPort.GetQuestions, 'GET')\n\t\t.then((res) => {\n\t\t\tcall(res);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log('getQuestion error:', error);\n\t\t\treturn null;\n\t\t});\n}\n\nexport function backToMainsite(link) {\n\tlet affCode;\n\tif (Cookie.GetCookieKeyValue('CO_Referer') || sessionStorage.getItem('affCode')) {\n\t\taffCode = Cookie.GetCookieKeyValue('CO_Referer') || sessionStorage.getItem('affCode');\n\t}\n\n\tlet targetDomain = '';\n\tlet StagingApi = Boolean(\n\t\t[\n\t\t\t'sportsstaging.fun88.biz',\n\t\t\t'sports1staging.fun88.biz',\n\t\t\t'sports2staging.fun88.biz',\n\t\t\t'sports3staging.fun88.biz',\n\t\t\t'sports4staging.fun88.biz',\n\t\t\t'sports5staging.fun88.biz',\n\t\t\t'localhost:6868',\n\t\t\t'localhost:8080',\n\t\t\t'192.168.0.108:8080',\n\t\t\t'192.168.137.1:6868',\n\t\t\t'192.168.0.108:6868',\n\t\t\t'127.0.0.1:6868'\n\t\t].find((v) => global.location.href.includes(v))\n\t);\n\n\t// 測試環境\n\tif (StagingApi) {\n\t\ttargetDomain = 'http://member.stagingp4.fun88.biz/';\n\t\t// 訪客導回\n\t\tif (!checkIsLogin()) {\n\t\t\twindow.location.href = `${targetDomain}${affCode ? '?aff=' + affCode : ''}`;\n\t\t\treturn;\n\t\t}\n\t\t// 會員導回\n\t\tconst url = new URL(targetDomain);\n\t\tconst token = JSON.parse(localStorage.getItem('memberToken'));\n\t\tconst refreshToken = JSON.parse(localStorage.getItem('refreshToken'));\n\t\tif (link) {\n\t\t\t/* 如果未登录 会自动跳转去login */\n\t\t\tlet mainsiteServiceLink = `${url.protocol}//${url.hostname}/${link}`;\n\t\t\twindow.location.href = mainsiteServiceLink;\n\t\t\treturn;\n\t\t}\n\t\tif (url && token) {\n\t\t\tlet mainsiteServiceLink = `${url.protocol}//${url.hostname}/Services/SBV2Service.ashx?token=${token.split(\n\t\t\t\t' '\n\t\t\t)[1]}&rtoken=${refreshToken}&cultureLanguage=zh-cn`;\n\t\t\tconsole.log(mainsiteServiceLink);\n\t\t\twindow.location.href = mainsiteServiceLink;\n\t\t}\n\t} else {\n\t\t// 正式環境\n\t\tconst url = new URL(global.location.href);\n\t\ttargetDomain =\n\t\t\turl.hostname.split('.').length == 3\n\t\t\t\t? `${url.protocol}//${url.hostname.split('.')[1]}.${url.hostname.split('.')[2]}`\n\t\t\t\t: `${url.protocol}//${url.hostname}`;\n\n\t\t// 訪客導回\n\t\tif (!checkIsLogin()) {\n\t\t\twindow.location.href = `${targetDomain}${affCode ? '?aff=' + affCode : ''}`;\n\t\t\treturn;\n\t\t}\n\t\t// 會員導回\n\t\tconst token = JSON.parse(localStorage.getItem('memberToken'));\n\t\tconst refreshToken = JSON.parse(localStorage.getItem('refreshToken'));\n\t\tif (link) {\n\t\t\t/* 如果未登录 会自动跳转去login */\n\t\t\tlet mainsiteServiceLink = `${url.protocol}//${url.hostname}/${link}`;\n\t\t\twindow.location.href = mainsiteServiceLink;\n\t\t\treturn;\n\t\t}\n\t\tif (url && token) {\n\t\t\tlet mainsiteServiceLink = `${targetDomain}/Services/SBV2Service.ashx?token=${token.split(\n\t\t\t\t' '\n\t\t\t)[1]}&rtoken=${refreshToken}&cultureLanguage=zh-cn`;\n\t\t\tconsole.log(mainsiteServiceLink);\n\t\t\twindow.location.href = mainsiteServiceLink;\n\t\t}\n\t}\n}\n\n// 登出\nexport function logout(language, currency, userName) {\n\tlet memberData = JSON.parse(localStorage.getItem('memberInfo'));\n\tlet accessToken = localStorage.getItem('memberToken').split(' ')[1];\n\tlet data = {\n\t\tclient_id: 'Fun88.CN.App',\n\t\tclient_secret: 'FUNmuittenCN',\n\t\trefresh_token: localStorage.getItem('refreshToken'),\n\t\taccess_token: accessToken ? accessToken : 'Bearer ' + localStorage.getItem('memberToken'),\n\t\tmembercode: userName ? userName : memberData.UserName,\n\t\tsiteId: 31\n\t};\n\n\tfetchRequest(ApiPort.Logout, 'POST', data)\n\t\t.then((data) => {\n\t\t\tif (data.status === 1) {\n\t\t\t\tlet defaultDomain = JSON.parse(localStorage.getItem('domains'))['DefaultDomain'];\n\n\t\t\t\tsetIsLogout();\n\n\t\t\t\tif (language && currency) {\n\t\t\t\t\tlet CurrencyCode = currency.split('').slice(0, currency.length - 1).join('');\n\t\t\t\t\tlet LanguageCode = language.split('-')[1];\n\t\t\t\t\tif (currency.toUpperCase() !== 'CNY') {\n\t\t\t\t\t\tlet url = new URL(defaultDomain);\n\t\t\t\t\t\tlet goToUrl = `${url.protocol}//${url.host}/${CurrencyCode}/${LanguageCode}`;\n\t\t\t\t\t\tconsole.log(goToUrl);\n\t\t\t\t\t\twindow.location.href = goToUrl;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\twindow.location.href = defaultDomain;\n\t\t\t} else {\n\t\t\t\tconsole.log(data.message);\n\t\t\t}\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.log(error);\n\t\t});\n}\n","if (process.browser) {\n setTimeout(() => {\n let script2 = document.createElement('script');\n script2.src = 'https://e2.platform88798.com/E2/EagleEye.js';\n script2.type = 'text/javascript';\n document.querySelectorAll('body')[0].appendChild(script2);\n }, 5000);\n}\n","// import 'url-search-params-polyfill' // 兼容 URLSearchParams\nimport { fetchRequest } from '$LIB/SportRequest';\nexport function isMobile() {\n\tvar check = false;\n\t(function(a) {\n\t\tif (\n\t\t\t/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n\t\t\t\ta\n\t\t\t) ||\n\t\t\t/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n\t\t\t\ta.substr(0, 4)\n\t\t\t)\n\t\t)\n\t\t\tcheck = true;\n\t})(navigator.userAgent || navigator.vendor || window.opera);\n\treturn check;\n}\n\nexport function isMobileAndroid() {\n\tvar isMobile = {\n\t\tAndroid: function() {\n\t\t\treturn navigator.userAgent.match(/Android/i);\n\t\t}\n\t};\n\n\treturn isMobile.Android();\n}\n\nexport function isMobileIOS() {\n\tvar isMobile = {\n\t\tiOS: function() {\n\t\t\treturn navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\t\t}\n\t};\n\n\treturn isMobile.iOS();\n}\nexport function getStyle(element, attr) {\n\tif(element.currentStyle){\n\t\treturn element.currentStyle[attr];\n\t}else{\n\t\treturn window.getComputedStyle(element,null)[attr];\n\t}\n}\nexport const getUrlVars = () => {\n\tlet vars = {};\n\tconst hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');\n\tfor (var i = 0; i < hashes.length; i++) {\n\t\tlet hash = hashes[i].split('=');\n\t\tif (hash[1]) {\n\t\t\tvars[hash[0]] = hash[1].split('#')[0];\n\t\t}\n\t}\n\treturn vars;\n};\n\nexport const urlVarsToQueryString = (vars, removeVarProps = [], withLeadingQ = true) => {\n\t//順便指定移除特定參數\n\tif (removeVarProps && removeVarProps.length > 0) {\n\t\tremoveVarProps.map(prop => {\n\t\t\tdelete vars[prop];\n\t\t})\n\t}\n\n\tlet varArr = [];\n\tfor(let prop in vars) {\n\t\tvarArr.push(prop + '=' + vars[prop]);\n\t}\n\tif (varArr.length > 0) {\n\t\treturn (withLeadingQ ? '?' : '') + varArr.join('&');\n\t}\n\treturn '';\n}\n\nexport const checkAffQueryString = (querystring) => {\n\t// ?aff=808296&media=jtoq&web=0&referrer=https://bbs.hubaobo.com/forum.php\n\tif (querystring !== '') {\n\t\tvar urlParams = new URLSearchParams(querystring);\n\t\t//console.error('cookie : ',urlParams.get('aff'))\n\t\tif (urlParams.has('aff')) Cookie.Create('CO_affiliate', 'affiliate=' + urlParams.get('aff'), 2);\n\t\tif (urlParams.has('media')) Cookie.Create('CO_Media', 'Media=' + urlParams.get('media'), 2);\n\t\tif (urlParams.has('web')) Cookie.Create('CO_WebStieID', 'WebStieID=' + urlParams.get('web'), 2);\n\t\tif (urlParams.has('referrer')) Cookie.Create('CO_Referer', 'Referer=' + urlParams.get('referrer'), 2);\n\t}\n};\n\nexport async function getAffiliateCode() {\n\tlet data = await fetchRequest(\n\t\t'/api/App/Domain?hostname=' + window.location.protocol + '//' + window.location.hostname + '&',\n\t\t'GET'\n\t);\n\tlet affCode = data ? data.affiliateCode : '';\n\t// var affCode = await getAffiliateReferralCode();\n\tif (affCode === '') {\n\t\taffCode = Cookie.GetCookieKeyValue('CO_affiliate') !== null ? Cookie.GetCookieKeyValue('CO_affiliate') : '';\n\t}\n\treturn affCode;\n}\n\nexport function getAffCode() {\n\tif (Cookie.GetCookieKeyValue(\"CO_affiliate\") != \"\") {\n\t\treturn Cookie.GetCookieKeyValue(\"CO_affiliate\");\n\t} else if (sessionStorage.getItem(\"affCode\")) {\n\t\treturn sessionStorage.getItem(\"affCode\");\n\t}\n\treturn null;\n}\n\nexport function getAffParam() {\n\tconst affcode = getAffCode();\n\tlet affparam = '';\n\tif (affcode) {\n\t\taffparam = '?aff=' + affcode;\n\t}\n\treturn affparam;\n}\n\nexport const Cookie = {\n\tCreate: (name, value, days) => {\n\t\tlet expires;\n\t\tif (days) {\n\t\t\tvar date = new Date();\n\t\t\tdate.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n\t\t\texpires = '; expires=' + date.toGMTString();\n\t\t} else {\n\t\t\texpires = '';\n\t\t}\n\t\tlet domain = document.location.hostname;\n\t\tlet domainSplits = domain.split('.');\n\t\tlet isIPDomain = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(\n\t\t\tdomain\n\t\t);\n\t\tif (!(domainSplits.length === 1) && !isIPDomain) {\n\t\t\tif (domainSplits.length >= 3) {\n\t\t\t\tdomainSplits = domainSplits.slice(-2);\n\t\t\t\tdomain = '.' + domainSplits.join('.');\n\t\t\t} else {\n\t\t\t\tdomain = '.' + domainSplits.join('.');\n\t\t\t}\n\t\t}\n\t\tvar encodeValue = encodeURIComponent(value);\n\t\t//console.error(\"encodevalue: \",encodeValue);\n\t\tdocument.cookie = name + '=' + encodeValue + expires + '; path=/; domain=' + domain;\n\t\t// document.cookie = name + '=' + value + expires + '; path=/;';\n\t},\n\tDelete: (cookieName) => {\n\t\tCookie.Create(cookieName, '', -1);\n\t\tdocument.cookie = cookieName + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n\t},\n\tGet: (cookieName) => {\n\t\tvar name = cookieName + '=';\n\t\tvar decodedCookie = decodeURIComponent(document.cookie);\n\t\tvar ca = decodedCookie.split(';');\n\t\tfor (var i = 0; i < ca.length; i++) {\n\t\t\tvar c = ca[i];\n\t\t\twhile (c.charAt(0) == ' ') {\n\t\t\t\tc = c.substring(1);\n\t\t\t}\n\t\t\tif (c.indexOf(name) == 0) {\n\t\t\t\treturn c.substring(name.length, c.length);\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t},\n\tGetCookieKeyValue: (cookieName) => {\n let aff = Cookie.Get(cookieName);\n\t\treturn aff ? (aff.split('=')[1] || aff.split('=')[0]) : '';\n\t}\n};\n","import HostConfig from '$LIB/Host.config';\nimport { checkIsLogin } from '$LIB/js/util';\n\n/**\n * 後台推送\n *\n * window.signalR_connectFlag //防止同時多個連線\n * window.signalR_connection //當前使用的連線\n * window.signalR_onGetBroadcastSBMessage //獲取到全站群發訊息\n * window.signalR_onGetPrivateSBMessage //獲取到單發個人訊息\n *\n **/\nexport function signalRConnect(forceReconnect = false) {\n if ((typeof window !== \"undefined\")) {\n const isLogin = checkIsLogin();\n if (!isLogin) {\n return; //沒登入不使用\n }\n\n //懶加載script\n const existScript = document.getElementById(\"signalRLib\");\n if (!existScript) {\n let signalRLib = document.createElement('script');\n signalRLib.id = 'signalRLib';\n signalRLib.src = process.env.BASE_PATH + '/js/jquery.signalR.min.js';\n document.getElementsByTagName('body')[0].appendChild(signalRLib);\n }\n if (typeof jQuery === \"undefined\" || !jQuery.hubConnection) {\n setTimeout(() => signalRConnect(forceReconnect), 1000); //1秒後檢查是否加載完成\n return;\n }\n }\n if ((typeof window !== \"undefined\") && (typeof jQuery !== \"undefined\") && jQuery.hubConnection) {\n\n console.log('===signalRConnect with forceReconnect:',forceReconnect);\n\n if (window.signalR_connectFlag) { //防止重複連線\n console.log('===signalR hasOtherConnecting=>break');\n return true;\n }\n window.signalR_connectFlag = true;\n\n //有已存在的連線\n if (window.signalR_connection) {\n if (!forceReconnect) { //已存在,不用重連,直接返回\n console.log('===signalR exists=>break');\n window.signalR_connectFlag = false;\n return true;\n } else { //強制重連,先把目前的連線停掉\n try{\n window.signalR_connection.stop();\n console.log('===signalR stop ok');\n } catch (e) {\n console.log('===signalR stop has error??',e);\n }\n }\n }\n\n let connection = jQuery.hubConnection(HostConfig.Config.SignalRUrl);\n\n //收到推送的處理\n var proxy = connection.createHubProxy(\"ChatHub\");\n proxy.on(\"broadcastSBMessage\", function (messageID, messageTitle, messageContent, messageLanguage, messageCategoryId) {\n console.log('===signalR get broadcastSBMessage',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n\n const isLogin = checkIsLogin();\n if (!isLogin) {\n console.log('===signalR get broadcastSBMessage but exit due to not login...',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n return;\n }\n\n if (messageLanguage && (messageLanguage.toLowerCase() !== 'zh-cn')) {\n console.log('===signalR get broadcastSBMessage but exit due to language not match...',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n return;\n }\n\n if (window.signalR_onGetBroadcastSBMessage) {\n console.log('===signalR get broadcastSBMessage before raise event',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n window.signalR_onGetBroadcastSBMessage(messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n console.log('===signalR get broadcastSBMessage after raise event',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n } else {\n console.log('===signalR get broadcastSBMessage but no event handler???',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n }\n });\n proxy.on(\"privateSBMessage\", function (messageID, messageTitle, messageContent, messageLanguage, messageCategoryId) {\n console.log('===signalR get privateSBMessage',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n\n const isLogin = checkIsLogin();\n if (!isLogin) {\n console.log('===signalR get privateSBMessage but exit due to not login...',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n return;\n }\n\n if (messageLanguage && (messageLanguage.toLowerCase() !== 'zh-cn')) {\n console.log('===signalR get privateSBMessage but exit due to language not match...',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n return;\n }\n\n if (window.signalR_onGetPrivateSBMessage) {\n console.log('===signalR get privateSBMessage before raise event',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n window.signalR_onGetPrivateSBMessage(messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n console.log('===signalR get privateSBMessage after raise event',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n } else {\n console.log('===signalR get privateSBMessage but no event handler???',messageID, messageTitle, messageContent, messageLanguage, messageCategoryId);\n }\n });\n\n console.log('===signalR start connect...');\n\n connection.start().done(function () {\n const token = localStorage.getItem(\"memberToken\");\n token && proxy.invoke(\"MapMemberCode\", token.replace(/Bearer\\s|\\\"/g, \"\"), \"zh-cn\");\n proxy.invoke(\"JoinGroup\", \"SB\");\n console.log(\"===signalR connected!!!\",token);\n window.signalR_connection = connection;\n window.signalR_connectFlag = false;\n }).fail(function () {\n console.log(\"===signalR connect fail??? reconnect after 10 seconds...\");\n window.signalR_connectFlag = false;\n setTimeout(() => signalRConnect(forceReconnect), 10000); //10秒後重連\n });\n } else {\n console.log('===signalRConnect with forceReconnect:',forceReconnect,' but window not ready????');\n setTimeout(() => signalRConnect(forceReconnect), 10000); //10秒後重連\n }\n}\n","import { withRouter } from \"next/router\";\nimport queryString from \"query-string\";\n\nexport const withBetterRouter = Component => {\n return withRouter(({ router, ...props }) => {\n //由於export的靜態頁面拿不到query,用此去修復\n const queryFromQueryString = queryString.parse(router.asPath.split(/\\?/)[1]);\n if (queryFromQueryString && (JSON.stringify(queryFromQueryString) !== '{}')) {\n if (!router.query && JSON.stringify(router.query) !== '{}') {\n //原本query有數據,就用object.assign加上去\n router.query = Object.assign({}, router.query, queryFromQueryString);\n } else {\n //沒有數據 直接取代\n router.query = queryFromQueryString;\n }\n }\n\n return ;\n });\n};"],"names":["Button","props","state","filterProps","Object","keys","forEach","v","indexOf","componentDidMount","render","button","this","className","ghost","radius","loading","inline","span","ReactSVG","src","children","fufix","React","Service","PopUpLiveChat","FUN88Live","close","window","open","fetchRequest","ApiPort","then","res","localStorage","setItem","url","openServer","serverUrl","document","title","location","href","focus","global","div","onClick","AppDownloadPopup","visible","Modal","closable","wrapClassName","ReactIMG","affParam","getAffParam","HostConfig","onClose","Slider","dynamic","ssr","HomeTips","staticHeaderMenu","label","count","sort","router","name","piwik","Header","asyncLoadVendors","VendorIM","default","VendorSABA","VendorBTI","getUrlParams","slice","getBasicInfo","Checkdomin","getMainDomain","getServerUrl","getMaintenanceStatus","RefreshToken","firstTime","rstoken","JSON","parse","getItem","postData","grantType","clientId","clientSecret","refreshToken","access_token","refresh_token","stringify","getMemberData","RefreshTokensetInterval","setInterval","Toast","catch","error","setState","isLogin","memberInfo","result","UserName","MemberCode","PreferWallet","LoginOTP","Revalidate","_paq","push","Cookie","Currency","toUpperCase","logout","Language","IsGameLock","setIsLogin","userInfo_login","userInfo_getBalanceSB","getVendorToken","getMessageCount","signalRConnect","checkFirstEntry","err","getNotiPromise","IMloginPromise","BTIloginPromise","SABAloginPromise","getMemberNotificationSetting","e","console","log","getTokenFromGateway","token","maintainStatus_noTokenIM","maintainStatus_noTokenBTI","Promise","all","total","unreadCategory","unreadPersonalMessage","unreadTransaction","StatisticsAll","processed","provider","BTISportStatus","IMSportStatus","SABASportStatus","ErrorCode","Result","find","PlatformGroup","maintainStatus_setBTI","maintainStatus_setIM","maintainStatus_setSABA","checkMaintenanceStatus","Router","maintenanceInfoMap","sport","isMaintenance","sportPriority","minfo","pathname","replace","targetGame","spinfo","maintenancePopup","maintenanceSport","jumpToSport","maintenanceChangeSports","maintainStatus","isBTI","isIM","isSABA","noTokenBTI","noTokenIM","noTokenSABA","userInfo","key","clearTimeout","timer","data","options","setTimeout","changeHeaderMenu","showCS","gameOptionsUI","item","isSliderLoaded","isSliderVisible","isFirstEntry","selectedVendor","isOpen","isRegistered","hidePwd","showHomeTips","showAppDownloadPopup","BTICountPollingKey","IMCountPollingKey","SABACountPollingKey","initDelayTimer","isDidUnmount","trCountDataHasSet","bind","vars","getUrlVars","setIsLogout","rtoken","cleanQueryString","urlVarsToQueryString","undefined","shallow","checkIsLogin","memberData","getMemberInfo","memberObj","deeplink","sid","eid","lid","removeItem","deeplinkData","vendor","handleDeepLink","currentSelectedVendor","menusFromRoute","filter","i","length","val","a","b","updateCount","query","thisSportName","handleInitialCache","cacheData","initDelay","targetName","pollingResult","SportDatas","NewData","totalRunningCount","map","runningMarkets","Markets","m","MarketId","Count","targetIndex","index","some","o","initialCache","isUsedForHeader","trCount","cachePromise","sessionStorage","deletePolling","getSportsPollingGlobal","componentWillUnmount","deeplinkJSON","deeplinkSetting","targetVendorPage","storageKey","getMemberStorageKey","first_entry_json","checkFirstEntryHotEvents","showHotEvents","checkFirstEntryHomeTips","closeHomeTips","protocol","host","affiliateCode","Pushgtagdata","numberWithCommas","x","toString","that","resolve","reject","memberCode","notificationSetting","savedListDisplayType","listDisplayType","parseInt","userSetting_updateListDisplayType","showAppDownloadBar","closeAppDownloadBar","id","balanceSB","userName","hotEventsVendorName","connectShowHotEvents","func","onHotEventsClosed","onCancel","closeModal","animation","br","onClickClose","mapDispatchToProps","username","ACTION_UserInfo_login","forceUpdate","ACTION_UserInfo_getBalanceSB","ACTION_MaintainStatus_SetBTI","ACTION_MaintainStatus_SetIM","ACTION_MaintainStatus_SetSABA","isNoToken","ACTION_MaintainStatus_NoTokenBTI","ACTION_MaintainStatus_NoTokenIM","maintainStatus_noTokenSABA","ACTION_MaintainStatus_NoTokenSABA","currentType","ACTION_UserSetting_Update","ListDisplayType","withBetterRouter","connect","BackBar","handleBackEvent","backEvent","history","go","hasServer","style","marginBottom","timeout","onExited","notificationRecommend","closeNotificationRecommend","HttpStatus","notificationInfo","commonParams","Footer","notificationRecommendInfo","notification","status","width","documentWidth","action","landscape","nodeDom","cssDom","existNodeDom","navigator","userAgent","isVertical","getElementById","nodeStyle","innerHTML","getElementsByTagName","appendChild","createElement","setAttribute","signalR_onGetBroadcastSBMessage","notification_timeout_handler","signalR_getBroadcastSBMessage","signalR_getMessage","messageID","messageTitle","messageContent","messageLanguage","messageCategoryId","type","urlDecodedMessageContent","decodeURIComponent","urlDecodedMessageTitle","signalR_timout_handler","Vendor","currentVendor","whistle","getEventInfosFunc","targetSportId","runningEvents","runningPR","eventInfos","memberSetting","favEvents","favEventInfos","ev","EventInfo","goalIBet","getUnsettleWagers","unsettleWagers","unsettleWagerEventInfos","findIndex","t","EventId","ei","PollingResult","Changes","changeData","NewValue","getMemberSetting","goalSound","goalVibration","UpdateType","SpecialUpdateType","thisEvent","meta","charSet","httpEquiv","content","Description","Keywords","closeNotification","stopPropagation","isvertical","proxyHasSelfExclusion","animationEnd","animationType","isShow","enter","componentDidUpdate","prevProps","leave","mask","maskClosable","animationDuration","WebkitAnimationDuration","ReactDOM","onAnimationEnd","wrapDom","current","body","Component","info","args","cancelDestroy","destroy","assign","infoProps","parentNode","removeChild","handleOk","onOk","cancelBtnComponent","cancelText","btnBlock","btnReverse","onlyOKBtn","okText","onlyCancelBtn","Image","alt","innerRef","img","ref","process","propTypes","PropTypes","SelfExclusionModal","setModalOpen","ModalOpen","hasSelfExclusion","disableType","ModalType","selfExclusionInfo","Status","DisableDeposit","DisableFundIn","DisableBetting","proxySetModalOpen","setupDate","dateDuration","moment","SelfExcludeSetDate","format","SelfExclusionSettingID","SelfExcludeDuration","afterCloseModal","call","refresh","localMemberInfo","isSuccess","Contacts","ContactType","Contact","memberInfoString","setUserRealyName","value1","Message","setUserRealyNameAndBankCard","bankName","accountNumber","realName","getResendAttempt","serviceAction","channel","backToMainsite","link","affCode","targetDomain","Boolean","includes","URL","mainsiteServiceLink","hostname","split","language","currency","accessToken","client_id","client_secret","membercode","siteId","defaultDomain","CurrencyCode","join","LanguageCode","goToUrl","script2","querySelectorAll","getStyle","element","attr","currentStyle","getComputedStyle","hashes","hash","removeVarProps","withLeadingQ","prop","varArr","affcode","GetCookieKeyValue","affparam","Create","value","days","expires","date","Date","setTime","getTime","toGMTString","domain","domainSplits","isIPDomain","test","encodeValue","encodeURIComponent","cookie","Delete","cookieName","Get","ca","c","charAt","substring","aff","forceReconnect","existScript","signalRLib","jQuery","hubConnection","signalR_connectFlag","signalR_connection","stop","connection","proxy","createHubProxy","on","toLowerCase","signalR_onGetPrivateSBMessage","start","done","invoke","fail","withRouter","queryFromQueryString","queryString","asPath"],"sourceRoot":""}