{"version":3,"sources":["webpack:///./src/view/components/ImageLoad/index.js","webpack:///./src/view/utils/userUtils.js","webpack:///./src/view/services/callApi.js","webpack:///./src/view/services/createHeader.js","webpack:///./src/view/services/baseName.js","webpack:///./src/view/containers/Layout/index.js","webpack:///./src/view/components/Footer/index.js","webpack:///./src/view/components/Footer/index.less","webpack:///./src/view/components/Header/index.js","webpack:///./src/view/components/FastEntry/index.js","webpack:///./src/view/components/FastEntry/index.less","webpack:///./src/view/statics/images/icon_channel.png","webpack:///./src/view/components/SearchBox/index.js","webpack:///./src/view/components/SearchBox/index.less","webpack:///./src/view/components/UserBox/index.js","webpack:///./src/view/components/UserBox/components/Account/index.js","webpack:///./src/view/components/ImageUploader/index.js","webpack:///./src/view/utils/token/VirtualFile.js","webpack:///./src/view/utils/token/onComposeOssError.js","webpack:///./src/view/utils/token/onComposeOssFileAdd.js","webpack:///./src/view/utils/token/onComposeOssComplete.js","webpack:///./src/view/components/ImageUploader/ButtonUpload/index.js","webpack:///./src/view/components/ImageUploader/ButtonUpload/index.less","webpack:///./src/view/components/ImageUploader/TabContainer/index.js","webpack:///./src/view/components/ImageUploader/ImageItem/index.js","webpack:///./src/view/components/ImageLoad/index.less","webpack:///./src/view/components/ImageUploader/ImageItem/index.less","webpack:///./src/view/components/ImageUploader/Cropper/index.js","webpack:///./src/view/components/ImageUploader/Cropper/index.less","webpack:///./src/view/components/ImageUploader/Footer/index.js","webpack:///./src/view/components/ImageUploader/index.less","webpack:///./src/view/components/LoginModal/index.js","webpack:///./src/view/global/account/constants.js","webpack:///./src/view/components/LoginModal/index.less","webpack:///./src/view/statics/images/web_login_wx_color.png","webpack:///./src/view/statics/images/web_login_qq_color.png","webpack:///./src/view/components/RegisterModal/index.js","webpack:///./src/view/components/RegisterModal/index.less","webpack:///./src/view/components/UserBox/components/LoginBtn/index.less","webpack:///./src/view/components/UserBox/components/Account/index.less","webpack:///./src/view/statics/images/default_user_avatar.png","webpack:///./src/view/statics/images/default_user.png","webpack:///./src/view/components/UserBox/components/History/index.js","webpack:///./src/view/components/ContentElement/SeriesVideo/index.js","webpack:///./src/view/components/ContentElement/SeriesVideo/index.less","webpack:///./src/view/components/ContentElement/TvColumn/index.js","webpack:///./src/view/components/ContentElement/TvColumn/index.less","webpack:///./src/view/components/ContentElement/News/index.js","webpack:///./src/view/components/ContentElement/News/index.less","webpack:///./src/view/components/ContentElement/Topic/index.js","webpack:///./src/view/components/ContentElement/Topic/index.less","webpack:///./src/view/components/ContentElement/index.less","webpack:///./src/view/components/UserBox/components/History/index.less","webpack:///./src/view/statics/images/default_view.png","webpack:///./src/view/components/UserBox/index.less","webpack:///./src/view/statics/images/menu_tv.png","webpack:///./src/view/statics/images/menu_radio.png","webpack:///./src/view/statics/images/menu_programs_all.png","webpack:///./src/view/statics/images/menu_programs.png","webpack:///./src/view/components/Header/index.less","webpack:///./src/view/components/HeaderBanner/index.js","webpack:///./src/view/components/HeaderBanner/constants.js","webpack:///./src/view/components/HeaderBanner/index.less","webpack:///./src/view/containers/Layout/index.less","webpack:///./src/view/components/ErrorBoundary/index.js","webpack:///./src/view/containers/NewsDetail/actions.js","webpack:///./src/view/routes/matchRoutes.js","webpack:///./src/view/components/SwiperBox/index.js","webpack:///./src/view/components/SwiperBox/index.less","webpack:///./src/view/components/NavBar/index.js","webpack:///./src/view/components/NavBar/index.less","webpack:///./src/view/components/FriendlyLinks/index.js","webpack:///./src/view/components/FriendlyLinks/index.less","webpack:///./src/view/components/HotNews/index.js","webpack:///./src/view/components/RollingNews/index.js","webpack:///./src/view/components/RollingNews/index.less","webpack:///./src/view/components/CardFlow/Double/index.less","webpack:///./src/view/components/HotNews/constants.js","webpack:///./src/view/components/HotNews/index.less","webpack:///./src/view/components/CardFlow/Single/index.js","webpack:///./src/view/components/CardFlow/Single/index.less","webpack:///./src/view/containers/HomePage/prefetch.js","webpack:///./src/view/containers/HomePage/selectors.js","webpack:///./src/view/containers/HomePage/index.less","webpack:///./src/view/containers/SearchPage/components/LoadMore/index.js","webpack:///./src/view/containers/SearchPage/components/LoadMore/index.less","webpack:///./src/view/containers/SearchPage/prefetch.js","webpack:///./src/view/containers/SearchPage/selectors.js","webpack:///./src/view/containers/SearchPage/index.less","webpack:///./src/view/containers/ChannelsPage/prefetch.js","webpack:///./src/view/containers/ChannelsPage/selectors.js","webpack:///./src/view/containers/ChannelsPage/index.less","webpack:///./src/view/containers/TvPrograms/prefetch.js","webpack:///./src/view/containers/TvPrograms/selectors.js","webpack:///./src/view/containers/TvPrograms/index.less","webpack:///./src/view/components/HtmlParser/index.js","webpack:///./src/view/components/HtmlParser/VideoPlayer/index.js","webpack:///./src/view/components/HtmlParser/VideoPlayer/index.less","webpack:///./src/view/components/HtmlParser/AudioPlayer/index.js","webpack:///./src/view/components/HtmlParser/AudioPlayer/index.less","webpack:///./src/view/components/HtmlParser/Vote/index.js","webpack:///./src/view/components/HtmlParser/Vote/index.less","webpack:///./src/view/components/HtmlParser/ImgLink/index.js","webpack:///./src/view/components/HtmlParser/ImgLink/index.less","webpack:///./src/view/components/HtmlParser/index.less","webpack:///./src/view/containers/NewsDetail/Articles/index.less","webpack:///./src/view/components/LoadingBox/index.js","webpack:///./src/view/components/LoadingBox/index.less","webpack:///./src/view/containers/NewsDetail/Gallery/index.less","webpack:///./src/view/statics/images/arrow_right_.png","webpack:///./src/view/statics/images/arrow_left_.png","webpack:///./src/view/statics/images/arrow_left_gray.png","webpack:///./src/view/statics/images/arrow_left_red.png","webpack:///./src/view/statics/images/arrow_right_gray.png","webpack:///./src/view/statics/images/arrow_right_red.png","webpack:///./src/view/components/VideoPlay/index.less","webpack:///./src/view/containers/NewsDetail/Video/index.less","webpack:///./src/view/containers/NewsDetail/Tv/index.less","webpack:///./src/view/containers/TopicDetail/Series/index.less","webpack:///./src/view/containers/TopicDetail/Topic/index.less","webpack:///./src/view/components/MonthRadioWithYear/index.js","webpack:///./src/view/components/MonthRadioWithYear/index.less","webpack:///./src/view/containers/TvColumn/prefetch.js","webpack:///./src/view/containers/TvColumn/selectors.js","webpack:///./src/view/containers/TvColumn/index.less","webpack:///./src/view/containers/TvChannelDetail/prefetch.js","webpack:///./src/view/containers/TvChannelDetail/selectors.js","webpack:///./src/view/containers/TvChannelDetail/index.less","webpack:///./src/view/containers/TvColumnDetail/prefetch.js","webpack:///./src/view/containers/TvColumnDetail/selectors.js","webpack:///./src/view/containers/TvColumnDetail/index.less","webpack:///./src/view/containers/LiveRoom/prefetch.js","webpack:///./src/view/containers/LiveRoom/selectors.js","webpack:///./src/view/containers/LiveRoom/index.less","webpack:///./src/view/containers/ErrorPage/index.less","webpack:///./src/view/rootReducers.js","webpack:///./src/view/containers sync ^\\.\\/.*\\/reducers$","webpack:///./src/view/containers/ChannelsPage/reducers.js","webpack:///./src/view/containers/HomePage/reducers.js","webpack:///./src/view/containers/LiveRoom/reducers.js","webpack:///./src/view/containers/NewsDetail/reducers.js","webpack:///./src/view/containers/SearchPage/reducers.js","webpack:///./src/view/containers/TopicDetail/reducers.js","webpack:///./src/view/containers/TvChannelDetail/reducers.js","webpack:///./src/view/containers/TvColumn/reducers.js","webpack:///./src/view/containers/TvColumnDetail/reducers.js","webpack:///./src/view/containers/TvPrograms/reducers.js","webpack:///./src/view/global/reducers.js","webpack:///./src/view/constants/hardCode.js","webpack:///./src/view/global/account/reducers.js","webpack:///./src/view/rootSagas.js","webpack:///./src/view/containers/ChannelsPage/sagas.js","webpack:///./src/view/containers/HomePage/sagas.js","webpack:///./src/view/containers/LiveRoom/sagas.js","webpack:///./src/view/containers/NewsDetail/sagas.js","webpack:///./src/view/containers/SearchPage/sagas.js","webpack:///./src/view/containers/TopicDetail/sagas.js","webpack:///./src/view/containers/TvChannelDetail/sagas.js","webpack:///./src/view/containers/TvColumn/sagas.js","webpack:///./src/view/containers/TvColumnDetail/sagas.js","webpack:///./src/view/containers/TvPrograms/sagas.js","webpack:///./src/view/global/sagas.js","webpack:///./src/view/global/account/sagas.js","webpack:///./src/view/global/account/actions.js","webpack:///./src/view/components/VideoPlay/index.js","webpack:///./src/view/utils/tools.js","webpack:///./src/view/containers/HomePage/index.js","webpack:///./src/view/containers/TvColumn/index.js","webpack:///./src/view/constants/antProps.js","webpack:///./src/view/containers/NewsDetail/prefetch.js","webpack:///./src/view/containers/NewsDetail/selectors.js","webpack:///./src/view/containers/TopicDetail/actions.js","webpack:///./src/view/global/account/selectors.js","webpack:///./src/view/containers/HomePage/actions.js","webpack:///./src/view/containers/SearchPage/actions.js","webpack:///./src/view/containers/ChannelsPage/actions.js","webpack:///./src/view/containers/TvPrograms/actions.js","webpack:///./src/view/containers/TvColumn/actions.js","webpack:///./src/view/containers/TvColumn/constant.js","webpack:///./src/view/containers/TvChannelDetail/actions.js","webpack:///./src/view/containers/TvColumnDetail/actions.js","webpack:///./src/view/containers/LiveRoom/actions.js","webpack:///./src/view/routes/index.js","webpack:///./src/view/containers/Root/index.js","webpack:///./src/view/components/ImageUploader/constants.js","webpack:///./src/view/components/CardBox/tools.js","webpack:///./src/view/containers/SearchPage/index.js","webpack:///./src/view/containers/ChannelsPage/index.js","webpack:///./src/view/containers/TvPrograms/index.js","webpack:///./src/view/containers/NewsDetail/Articles/index.js","webpack:///./src/view/containers/NewsDetail/Gallery/index.js","webpack:///./src/view/containers/NewsDetail/Video/index.js","webpack:///./src/view/containers/NewsDetail/Tv/index.js","webpack:///./src/view/containers/TopicDetail/Series/index.js","webpack:///./src/view/containers/NewsDetail/OutLink/index.js","webpack:///./src/view/containers/TopicDetail/Topic/index.js","webpack:///./src/view/containers/TvChannelDetail/index.js","webpack:///./src/view/containers/TvColumnDetail/index.js","webpack:///./src/view/containers/LiveRoom/index.js","webpack:///./src/view/containers/ErrorPage/index.js","webpack:///./src/view/utils/utils.js","webpack:///./src/view/services/index.js","webpack:///./src/view/global/actions.js","webpack:///./src/view/constants/style/responsive.less","webpack:///./src/view/global/prefetch.js","webpack:///./src/view/global/selectors.js","webpack:///./src/view/utils/localDataUtils.js","webpack:///./src/view/utils/token/createComposeOss.js","webpack:///./src/view/components/UserBox/components/LoginBtn/index.js","webpack:///./src/view/constants/reg.js","webpack:///./src/view/components/ContentElement/index.js","webpack:///./src/view/components/CardBox/constants.js","webpack:///./src/view/components/CardBox/index.less","webpack:///./src/view/components/NavBar/constants.js","webpack:///./src/view/components/CardFlow/Double/index.js","webpack:///./src/view/components/CardBox/index.js","webpack:///external \"videojs\"","webpack:///./src/view/containers/TopicDetail/prefetch.js","webpack:///./src/view/containers/TopicDetail/selectors.js","webpack:///./src/view/containers/TvChannelDetail/enum.js","webpack:///./src/view/containers sync ^\\.\\/.*\\/sagas$","webpack:///./src/view/constants/type.js","webpack:///./src/client/index.js","webpack:///./src/view/routes/renderRoutes.js","webpack:///./src/view/routes/dependences.js","webpack:///./src/view/utils/actionUtils.js","webpack:///./src/view/components/CardFlow/index.js","webpack:///./src/view/components/HelmetSEO/index.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$"],"names":["props","state","isLoaded","attempts","this","src","className","styles","image","join","once","alt","crossOrigin","React","Component","createDeviceId","deviceId","Cookie","set","expires","saveUser","userData","JSON","stringify","getUser","window","get","parse","getJWT","jwt","logout","remove","getDeviceId","callApi","endpoint","method","data","bodyStream","toUpperCase","paramsForGetMethod","paramsArr","Object","keys","forEach","key","undefined","push","toString","length","headers","global","__X_FORWARDED_FOR__","xForwardedFor","logger","Promise","resolve","reject","url","timeout","responseType","then","res","log","config","status","err","response","error","createHeaders","requestUrl","userUtils","Timestamp","Date","getTime","md5","contentMD5","Base64","stringToSigned","__DEVICEID__","Authorization","pk","HTTPS","HTTP","TEST","REAL","BASENAME","localhost","mapBaseName","BaseName","location","hostname","assign","api","getBaseName","connect","selectors","setUserInfo","AccountActions","setScreenSize","Actions","getBannerFocus","request","getCommonChannel","getFriendlyLinks","handleOnResize","screenSize","range","getScreenRange","sizeStr","reduce","result","size","scrollbars","isPrefetch","addEventListener","removeEventListener","children","history","bannerList","friendlyLinks","channelList","style","minHeight","innerHeight","OUTLINE","title","Footer","renderPopoverContent","pictureUrl","name","qrcodefriendlyLinkResponses","footer","responsiveStyles","layout","id","content","href","logo","map","qrcode","i","Popover","placement","trigger","Button","shape","icon","item","target","message","links","beian","module","exports","Header","fixedBar","fixed","document","documentElement","scrollTop","body","setState","handleBackToTop","scrollTo","qrCodeVisible","loading","isIndex","pathname","fixedOrIndex","header","menu","j","newBlank","opaque","btn","onClick","FastEntry","list","gridArray","column","nav","channel","require","Search","Input","handleClickSearch","keyword","encodeURIComponent","handleOnChange","e","value","replace","urlParams","decodeURIComponent","placeholder","opaqueClassName","ref","keywords","enterButton","maxLength","onChange","onSearch","visible","ButtonGroup","Group","AVATAR_LOGIN_DEFAULT","AVATAR_NO_LOGIN_DEFAULT","AccountSelectors","updateUserInfo","handleOnClickLogin","popoverVisible","handleStartEdit","userInfo","isEdit","valName","nickName","handleFinishEdit","valAvatarUrl","handleOnVisibleChange","setTimeout","handleInputName","handleChangeAvatarUrl","handleSaveUserInfo","avatarUrl","success","renderAccountPopover","info","Icon","type","block","edit","width","height","padding","borderRadius","aspectRatio","composeOssOptions","COMPOSEOSS_TYPE","AVATAR","renderLoginPopover","text","onVisibleChange","getPopupContainer","parentElement","GlobalSelectors","getUploadToken","GlobalActions","createComposeOss","uploadToken","composeOssMethods","handleExpire","onOssExpire","fileAdded","onOssFileAdded","progress","onOssProgress","onOssError","complete","onOssComplete","completeQueue","onOssCompleteQueue","token","IMAGE","oss","upload","destroy","uploadBase64","uploadBase64Oss","uploadOss","destroyOss","uploadList","uploader","resultList","dataStage","concat","a","b","index","R","findIndex","propEq","done","splice","merge","onOssChange","onButtonClick","onModalCancel","onOssUpload","onDataChange","v","sourceLink","onTabChange","tabKey","onItemClick","current","equals","onStatusChange","onCoverCrop","isCropping","cropper","getCroppedCanvas","base64Data","isNil","toDataURL","IMAGE_UPLOAD_STATUS","CHOOSE","IMAGE_UPLOAD_TABKEY","CONTENT","dataSource","Fragment","Modal","onCancel","onOk","render","button","selected","CROP","c","PureComponent","virtualFileFromDataUrl","dataUrl","filename","file","dataURItoBlob","VirtualFile","_readAsX","rej","reader","FileReader","onerror","onload","VirtualFilesIndex","readAsText","_file","readAsArrayBuffer","readAsBinaryString","readAsDataUrl","now","defineProperty","enumerable","configurable","readonly","_mimeType","mime","lookup","dataURI","byteString","atob","split","mimeString","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","Blob","onComposeOssError","code","onComposeOssFileAdd","fileFile","localName","URL","createObjectURL","onComposeOssComplete","pickAll","ButtonUpload","aspectRatioRaw","backgroundImage","label","TabPane","Tabs","TabContainer","activeKey","tab","imgUrl","ImageItem","UPLOAD","img","masked","isFailed","query","consumeAspectRatio","ratio","zoomable","zoomOnWheel","zoomOnTouch","guides","viewMode","preview","disabled","FormItem","Form","Item","loginByPassword","loginByCode","loginByThirdParty","getVerificationCode","create","thirdPartyLoginCallBack","handleThirdPartyLogin","validatePhone","rule","callback","RegExp","REG","PHONE_NUMBER","pattern","test","handleChangeTab","currentTab","handleToRegister","onOpenRegister","handleToThirdPartyLogin","redirectUri","thirdPartyType","KEY","authUrl","AppID","THIRD_PARTY_LOGIN","uri","thirdPartyLogin","open","handleGetCode","formValues","form","getFieldsValue","phone","count","mobileNumber","countInterval","setInterval","clearInterval","handleLogin","validateFields","values","account","password","remember","localStorage","setItem","removeItem","verificationCode","os","setFieldsValue","messageCallBack","close","isRequesting","getFieldDecorator","mask","maskClosable","animated","rules","required","validator","validateTrigger","allowClear","preserve","initialValue","valuePropName","Checkbox","0","1","2","register","validatePwdConfirm","handleToLogin","onOpenLogin","handleRegister","PASSWORD","getBrowseHistory","historyOnce","renderHistoryPopover","dateList","historyByDate","today","dateStrings","format","subtract","Scrollbars","autoHide","autoHideTimeout","date","str","record","source","renderEmptyPopover","bg","theme","Paragraph","Typography","getSize","handleOnExpand","isExpand","handleCloseExpand","handleToSeriesVideoDetail","news","TOPIC_ROUTE","renderNewsList","maxSize","newsList","Row","gutter","Col","xs","xl","xxl","cover","coverUrl","backgroundSize","detail","dangerouslySetInnerHTML","__html","Tag","from","memberNum","desc","ellipsis","rows","expandable","onExpand","summary","onMouseLeave","handleToTvColumnDetail","contentType","route","getDetailRoute","objectType","sid","releasedAt","updateAt","tvChannelName","NEWS_CONTENT_TYPE","3","4","5","handleClick","renderTagRb","renderOverlay","subTitle","HeaderBanner","handleInitTimmer","handleShowBanner","banner","timmer","displayMap","appearOffset","disappearOffset","t","handleHideBanner","targetType","newsPk","NEWS_ROUTE","clearTimeout","show","DISPLAY_ROUTE","includes","isMobile","backgroundColor","hasError","Module","apiAction","getNewsContent","GET_NEWS_CONTENT","getChannelInfo","GET_CHANNEL_INFO","getRecentlyNewsList","GET_RECENTLY_NEWS_LIST","getRecommendList","GET_RECOMMEND_LIST","getMoreList","GET_MORE_LIST","getColumnVideoList","GET_COLUMN_VIDEO_LIST","getMoreColumnVideoList","GET_MORE_COLUMN_VIDEO_LIST","LEAVE_PAGE","leavePage","action","computeMatch","Router","prototype","matchRoutes","routes","branch","some","matchStr","path","matchPath","match","getGradientBg","bgColor","background","renderBullet","bannerData","mySwiper","Swiper","loop","autoplay","observer","direction","pagination","el","clickable","onmouseover","stop","onmouseout","start","slice","swiper","NavBar","handleOpenMore","stopPropagation","showMore","handleCloseMore","handleComposeChannels","col","renderNavChannel","composeChannels","span","tabIndex","hidefocus","channels","onMouseOver","justify","colSpan","ICON_CLASS","textFriendlyLinkResponse","friendlyLinkResponse","link","linkUrl","HotNews","handleOpen","renderHeadCol","textNews","warpper","group","k","newsGroup","PRESET_STYLE","titleStyle","color","titleColor","pictrueNews","rollNews","sm","tag","getCompressCoverUrl","flowData","extra","entityType","ENTITY_TYPE","DATA_JSON","sourceData","propTypes","PropTypes","array","isRequired","handleMarqueeStop","Marquee","handleMarqueeStart","speed","refs","marquee","marqueeI","marqueeII","clientWidth","handleMarquee","display","scrollLeft","offsetWidth","handleOnClick","onMouseOut","fontWeight","textDecoration","CardFlowSingle","handleCompletionArray","isMulti","completionArray","cardSize","bottom","onClickCard","palceholder","string","bool","func","object","getSeoConfig","getChannelFocus","getHotNews","getRollNews","getHomeShowChannels","getChannelNews","HomePagePrefetch","call","Api","put","ActionTypes","GlobalActionTypes","seoSet","metaTitle","filter","Boolean","metaKeywords","metaDescription","description","prefetchSet","failure","channelPk","args","childChannels","displayType","beginScore","child","channelId","pageSize","DISPLAY_TYPE_COUNT","fork","homeSelector","globalSelector","createSelector","home","toJS","homeChannels","hotNews","focus","TYPE_TEXT","handleLoadMore","pageNum","isLoading","onLoad","sources","total","searchNews","SearchPagePrefetch","pathName","searchSelector","search","series","tvColumns","topics","newsItems","getAllSubChannelNews","ChannelsPagePrefetch","channelInfo","channelsSelector","channelRequesting","channelNews","getTvChannel","getTvColumn","TvProgramsPrefetch","getTvChannelList","statusList","tvChannels","tvChannelPk","beginAt","startOf","endAt","endOf","tvProgramsSelector","tvPrograms","playMedia","currId","videoArr","getElementById","pause","audioArr","renderItems","voteList","voteFunc","ReactDom","videoUrl","poster","posterUrl","audioUrl","audioTitle","imgLinkArr","outLink","imgSrc","vote","voteElId","handleFilterContent","pauseVideo","videoJs","addLanguage","Play","Pause","LIVE","Loaded","Progress","Fullscreen","Mute","Unmute","controls","language","on","class","data-setup","playAudio","isPlaying","audioEl","play","playStatusChange","timeUpdate","ontimeupdate","readyState","buffered","Math","round","end","duration","timer","getDuration","getd","Number","isNaN","durationNum","formatPlayTime","actualLeft","slideLeftDistance","audioPlayListener","slide","offsetLeft","offsetParent","event","setCurrTime","currPercent","currentTime","currTime","time","parseInt","clickSidebar","clickWidth","pageX","slideBarWidth","initListenTouch","audioPoint","pointStart","preventDefault","pointX","audioBox","pointMove","pointEnd","maxMove","moveWidth","audio","point","handleVote","userinfo","votePk","voteOptions","userId","params","userPk","objectPk","voteOptionPks","voteOptionPk","voteCallback","obj","reload","errorMessage","chooseItem","arr","youCanVote","endTime","isEnd","voteCount","voteBotWords","activeClass","indexOf","disable","percent","data-link-type","Option","Select","MonthRadioWithYear","handleSelectYear","onChangeTime","currnetYear","currentMonth","month","selectedYear","selectedMonth","year","valueOf","handleSelectMonth","renderYearOption","renderMonthRadio","Radio","buttonStyle","getColumnInfo","TvColumnPrefetch","tvColumnPk","currentPage","searchByTime","PAGE_SIZE","columnPk","columnSelector","hasMore","columnInfo","columnVideoList","getTvChannelDetail","getTvMenuList","TvChannelDetailPrefetch","slogan","add","TvChannelSelector","TvChannel","tvChannelDetail","tvChannelList","tvMenuList","dateDataListWithLiveMenu","tvColumn","TvColumnDetailPrefetch","lastScore","columnDetailSelector","columnDetail","relateNews","videoDetail","nameText","getLive","liveCount","LiveRoomPrefetch","countType","LiveRoomSelector","LiveRoom","liveDetail","reducers","moduleList","mapModules","moduleName","routesList","Array","Set","moduleReducer","globalReducer","accountReducer","combineReducers","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","allChannelsInitialState","fromJS","allChannels","REQUEST","SUCCESS","FAILURE","GET_CHANNEL_NEWS","setIn","homeChannelsInitialState","GET_HOME_SHOW_CHANNELS","cur","getEntity","hotNewsInitialState","GET_HOT_NEWS","textNewsData","pictrueNewsData","GET_ROLL_NEWS","focusInitialState","focusList","GET_CHANNEL_FOCUS","channelFocusList","initialState","GET_LIVE","newsContent","classificationName","moreRelateNews","columnVideo","moreColumnVideo","NewsDetail","responseList","l","r","mergeWith","mergeDeepWithKey","SearchPage","SEARCH_NEWS","dataMenuFn","splitEvery","newsTopicDetail","newsTopicColumn","topicMemberList","newsTopicMemberList","channelNewsList","channelNewsIsRequesting","TopicDetail","GET_NEWS_TOPIC","GET_NEWS_TOPIC_COLUMN","_","memberList","GET_NEWS_TOPIC_MEMBER_LIST","GET_CHANNEL_NEWS_LIST","TvChannelDetail","GET_TV_CHANNEL_DETAIL","GET_TV_CHANNEL_LIST","GET_TV_MENU_LIST","dateMenuFn","dateDataList","GET_TV_COLUMN","tvColumnList","ele","timestamp","dateAt","tvMenus","tvMenu","TvColumn","GET_COLUMN_INFO","relativeIsRequesting","TvColumnDetail","SET_VIDEO_DETAIL","tvProgramsInitialState","tvChannelsColumn","GET_TV_CHANNEL","initialGlobalState","SCREEN_SIZE","root","actionTypes","SET_SCREEN_SIZE","GET_FRIENDLY_LINKS","GET_COMMON_CHANNEL","initialPrefetchState","use","prefetch","PREFETCH_SET","SEO_SET","bannerInitialState","GET_BANNER_FOCUS","initialUploadTokenState","GET_UPLOAD_TOKEN","Account","SET_USER_INFO","LOGOUT","LOGIN_BY_PASSWORD","LOGIN_BY_CODE","LOGIN_BY_THIRD_PARTY","GET_BROWSE_HISTORY","curr","recentVisitTime","sagas","moduleSaga","all","watchAll","HomePage","takeLatest","GET_ALL_SUB_CHANNEL_NEWS","takeEvery","GET_SEO_CONFIG","getRecentlyLive","GET_RECENTLY_LIVE","LIVE_COUNT","channelPK","addNewsCount","getRelateNewsList","getNewsTopic","getNewsTopicColumn","getNewsTopicMemberList","getChannelNewsList","TvPrograms","getChannelFlow","globalSaga","ADD_NEWS_COUNT","getUserInfo","accountSaga","REGISTER","GET_VERIFICATION_CODE","GET_USER_INFO","UPDATE_USER_INFO","componentDidUpdate","oldProps","playTime","isEnded","myPlayer","getItem","handleSaveTime","handleOnPlay","handleOnEnded","onEnd","_this","playPromise","dispose","restProps","isHls","autoPlay","composeArray","innerWidth","ceil","swapPoiArray","i1","i2","removed","handleTabChange","parent","renderFirstTabPane","renderChannelNews","hasChild","OS","isPc","prefetchSaga","handleScrollLoad","times","VOLUME","scrollHeight","clientHeight","LOAD_POSITION","handleGetColumnVideoList","handleGetTime","handleToDetail","newsData","channelLastestNews","serialsInfo","lastest","helmetData","paddingBottom","Spin","spinning","blank","NewsDetailPrefetch","newsSelector","accountSelector","setVideoDetail","getComponent","component","asyncComponent","isSsr","loader","exact","dependence","VIDEOJS","hasNav","Root","hasHeader","matchRoutesList","ConfigProvider","locale","zhCN","Switch","Route","Redirect","to","FLOW_TYPE","NEWS","timeLength","imageCount","calVideoTime","TOPIC","OUTLINK","LIVE_STATUS","overlay","renderHighlight","regExp","SeriesVideo","Topic","News","handleCheckChannel","checkChannel","handleRefreshNews","renderRagioGroup","renderCardFlow","currentChannel","groupSize","handleRenderLink","programs","packUp","filterTvChannels","customLink","moreBox","articleBox","scrollBottom","bottomBoundary","HEADER_HEIGHT","fixedBottom","handleOnClickCard","handleDownload","saveAs","attaches","hasRelateNews","article","overspread","preSubTitle","media","originLink","author","changePicIndex","galleryList","images","_loadIndex","loadIndex","isViewEnd","imgLoading","Image","currPic","scrollToView","showArrow","slideImgWidth","nexGallery","currPicItem","align","position","onMouseEnter","delta","nexGalleryId","urlJSON","safeLens","video","handleChangeNews","active","componentDidMount","topicId","handleInitSeries","videoId","episodeId","section","sectionList","handleChangeSeries","handleChangeVideo","p","currentIndex","currentVideoIndex","currentVideoDetail","nextProps","nextState","oldDetail","nextDetail","flatten","marginLeft","crawlUrl","columnWithPlay","currentVideo","handleAnalysisVideoUrl","sd","hd","ud","handlePlayEnd","nextIndex","handleToggleShowAll","showAll","topic","backgroundUrl","handleChangeDate","scrollBox","offsetTop","clogo","currentMenu","playUrl","imageJSON","fontSize","weekday","day","dateTime","handleChangeId","nexIndex","scrollToTop","parentBox","handleGetPlayUrl","rtmp","flv","m3u8","mp4","tips","timeL","h","m","s","formatNum","nums","_nums","_result","_first","_after","getVideoUrl","quality","videoSourceUrl","getStrLength","len","substr","escape","substring","cutStr","cfg","_len","stuff","hightLight","reg","navigator","userAgent","ua","isWindowsPhone","isSymbian","isAndroid","isFireFox","isTablet","isPhone","loadScript","script","createElement","setAttribute","appendChild","timeFormat","nowDate","dateInfo","fmtObj","getFullYear","getMonth","getDate","hour","getHours","minute","getMinutes","second","getSeconds","dateData","timeData","timeAfter","abs","paramObj","lens","view","lensPath","small","big","vertical","temp","DATA_JSON_STR","searchParams","serialsId","externalUrl","LIVE_ROUTE","apiBaseName","seoData","saveLocal","getLocal","composeOssIndex","VIDEO","FILE","randomIndex","appendComposeOssElementToBody","containerId","containerElement","uploadButtonId","uploadButtonElement","cssText","container","uploadButton","generateTokenHost","tokenRaw","accessKeyId","accessKeySecret","securityToken","AccessKeyId","AccessKeySecret","SecurityToken","dir","directory","bucket","region","host","visitHost","generateDefaultOptions","options","uploadTypeDefault","multipleDefault","maxSizeDefault","typesDefault","uploadType","multiple","uploadImmediately","types","newComposeOssInstance","ComposeOss","ossType","upload_button","generatorRandomNumber","random","click","uploadPromise","fileNameList","fileName","uploadOptions","restOptions","removeChild","handleOpenLoginModal","loginModalVisible","handleOpenRegisterModal","registerModalVisible","SeriesVideoBlock","TvColumnBlock","NewsBlock","TopicBlock","6","7","8","9","CardFlowDouble","handleComposeArray","flow","renderDefaultHeadCol","headColSpan","item1","item2","any","CardBox","Function","layoutStyle","CLASS_TYPE","IMG_OSS_RESIZE","oneOfType","number","videojs","TopicDetailPrefetch","topicSelector","dayTime","__PRELOADED_STATE__","createHistory","createBrowserHistory","sagaMiddleware","middlewares","enhancers","applyMiddleware","composeEnhancers","compose","store","createStore","runSaga","run","injectedReducers","injectedSagas","Loadable","preloadReady","hydrate","Provider","renderRoutes","namespace","camel","camelString","Upper","_tmpString","camelStringArr","newItem","toLowerCase","apiTypes","apiCreator","CardFlow","renderDisplayType"],"mappings":"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AAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,QAAS,IACT,aAAc,IACd,gBAAiB,IACjB,WAAY,IACZ,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,KAIf,SAAS+xB,EAAeC,GACvB,IAAIpyB,EAAKqyB,EAAsBD,GAC/B,OAAOE,EAAoBtyB,GAE5B,SAASqyB,EAAsBD,GAC9B,GAAIE,EAAoBC,EAAEnyB,EAAKgyB,GAK/B,OAAOhyB,EAAIgyB,GAJV,IAAI7uB,EAAI,IAAIivB,MAAM,uBAAyBJ,EAAM,KAEjD,MADA7uB,EAAEwK,KAAO,mBACHxK,EAIR4uB,EAAe/3B,KAAO,WACrB,OAAOD,OAAOC,KAAKgG,IAEpB+xB,EAAel3B,QAAUo3B,GACzBnxB,EAAOC,QAAUgxB,GACFnyB,GAAK,M","file":"js/client_071c3e12.js","sourcesContent":["import React from 'react';\nimport LazyLoad from 'react-lazyload';\nimport styles from './index.less';\n\nclass ImageLoad extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isLoaded: false,\n            attempts: 0\n        };\n    }\n\n    render() {\n        const { src, className } = this.props;\n        return (\n            <div className={[styles.image, className].join(' ')}>\n                <LazyLoad once>\n                    <img src={src} alt='' crossOrigin='anonymous' />\n                </LazyLoad>\n            </div>\n        );\n    }\n}\n\nexport default ImageLoad;\n","import Cookie from 'js-cookie';\nimport uuid from 'uuid/v1';\n\n/**\n *  保存用户信息\n *  @param [object] userData [user 对象]\n */\nfunction saveUser(userData) {\n    if (typeof userData === 'object' && userData) {\n        userData = JSON.stringify(userData);\n        Cookie.set('USER', userData, { expires: 7 });\n    }\n}\n\nfunction getUser() {\n    if (typeof window === 'object' && Cookie.get('USER')) {\n        return JSON.parse(Cookie.get('USER'));\n    }\n    return false;\n}\n\n\n// 获得JWT\nfunction getJWT() {\n    if (typeof window === 'object' && Cookie.get('USER')) {\n        const user = JSON.parse(Cookie.get('USER'));\n        return 'Bearer ' + user.jwt;\n    }\n\n    return false;\n}\n\n\n// 退出登录\nfunction logout() {\n    if (typeof window === 'object') {\n        Cookie.remove('USER');\n        // window.location.href = window.location.pathname;\n    }    \n}\n\n\n// 获得deviceId\nfunction getDeviceId() {\n    if (typeof window !== 'object') return false;\n    if (Cookie.get('DEVICEID')) {\n        return Cookie.get('DEVICEID');\n    }\n    return createDeviceId();\n}\n\n\n// 创建DeviceId\nfunction createDeviceId() {\n    const deviceId = `WEB_${uuid()}`;\n    Cookie.set('DEVICEID', deviceId, { expires: 30 });\n    return deviceId;\n}\n\nexport default {\n    saveUser,\n    getUser,\n    getJWT,\n    logout,\n    getDeviceId,\n    createDeviceId\n};\n","// import { Modal } from 'antd';\nimport axios from 'axios';\nimport createHeaders from './createHeader';\n\nexport const callApi = (endpoint, method, data) => {\n    const bodyStream = data && method.toUpperCase() !== 'GET' ? JSON.stringify(data) : '';\n    endpoint = paramsForGetMethod(endpoint, method, data);\n\n    const headers = createHeaders(method, endpoint, bodyStream);\n    const { __X_FORWARDED_FOR__: xForwardedFor = '', logger } = global;\n\n    return new Promise((resolve, reject) => {\n        axios({\n            method: method || 'POST',\n            url: endpoint,\n            data: bodyStream,\n            timeout: 20000,\n            responseType: 'json',\n            headers: headers\n        }).then((res) => {\n            // 打印接口请求日志\n            logger && logger.log('fetch success:', xForwardedFor, res.config.method.toUpperCase(), `status ${res.status}`, endpoint);\n            resolve(res.data);\n        }).catch((err) => {\n            if (err.response) {\n                const error = err.response || {};\n                const { errorCode, errorMessage } = error.data || {};\n                if (errorCode) {\n                    // Modal.error({\n                    //     title: errorMessage\n                    // });\n                }\n\n                // 打印错误日志\n                logger && logger.error('fetch error:', xForwardedFor, error.config.method.toUpperCase(), `status ${error.status}`, endpoint);\n\n                return reject(error.data);\n            }\n\n            logger && logger(err);\n            return reject(err);\n        });\n    });\n};\n\n\n// 设置请求方法GET的参数\nfunction paramsForGetMethod(endpoint, method, data) {\n    if (method.toUpperCase() === 'GET' && data && typeof (data) == 'object') {\n        const paramsArr = [];\n        const keys = Object.keys(data);\n        keys.forEach(key => {\n            if (data[key] != undefined) {\n                paramsArr.push(`${key}=${data[key].toString()}`);\n            }\n        });\n        endpoint = paramsArr.length ? `${endpoint}?${paramsArr.join('&')}` : endpoint;\n    }\n\n    return endpoint;\n}\n","import MD5 from 'crypto-js/md5';\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\nimport userUtils from 'Utils/userUtils';\n\nfunction createHeaders(method, requestUrl, bodyStream) {\n    const { getUser, getJWT, getDeviceId } = userUtils;\n\n    const Timestamp = new Date().getTime();\n    let headers = {};\n\n    const key = '89541443007807288657755311869534';\n    const secret = 'dfkcY1c3sfuw0Cii9DWjOUO3iQy2hqlDxyvDXd1oVMxwYAJSgeB6phO8eW1dfuwX';\n\n    let md5 = '';\n    let contentMD5 = '';\n\n    if (bodyStream) {\n        md5 = MD5(bodyStream);\n        contentMD5 = Base64.stringify(md5);\n    }\n\n    const stringToSigned = `${method}\\n${requestUrl}\\n${Timestamp}\\n${contentMD5}`;\n\n    const sign = Base64.stringify(HmacSHA256(stringToSigned, secret));\n\n    headers = {\n        'Content-Type': 'application/json',\n        'X-ITOUCHTV-Ca-Timestamp': Timestamp,\n        'X-ITOUCHTV-Ca-Signature': sign,\n        'X-ITOUCHTV-Ca-Key': key,\n        'X-ITOUCHTV-CLIENT': 'WEB_PC',\n        'X-ITOUCHTV-DEVICE-ID': global.__DEVICEID__ || getDeviceId()\n    };\n\n    if (getJWT()) {\n        headers.Authorization = getJWT();\n    }\n\n    if (getUser() && getUser().pk) {\n        headers['X-ITOUCHTV-USER-PK'] = getUser().pk;\n    }\n\n    if (global.__X_FORWARDED_FOR__) {\n        headers['X-Forwarded-For'] = global.__X_FORWARDED_FOR__;\n    }\n    // console.log(headers);\n    return headers;\n}\n\nexport default createHeaders;\n","\nconst HTTPS = 'https://';\nconst HTTP = 'http://';\nconst isProd = process.env.NODE_ENV == 'production';\n\n// 测试环境只能访问http\nconst DEV = HTTP + 'dev-grtn-api.itouchtv.cn:8081';\nconst TEST = HTTP + 'test-grtn-api.itouchtv.cn:8081';\nconst PRO = HTTPS + 'gdtv-api.itouchtv.cn:7443';\nconst REAL = HTTPS + 'gdtv-api.gdtv.cn:7443';\n\nconst BASENAME = {\n    localhost: TEST,\n    'local-gdtv.itouchtv.cn': PRO,\n    'dev-gdtv.itouchtv.cn': DEV,\n    'test-gdtv.itouchtv.cn': TEST,\n    'gdtv.itouchtv.cn': REAL\n};\n\nlet mapBaseName = {};\n\nif (typeof window === 'object') {\n    const BaseName = BASENAME[window.location.hostname] || REAL;\n    mapBaseName = Object.assign({}, mapBaseName, {\n        api: BaseName + '/api'\n    });\n} else {\n    const getBaseName = () => (isProd ? REAL : TEST);\n    mapBaseName = Object.assign({}, mapBaseName, {\n        api: getBaseName() + '/api'\n    });\n}\n\nconst apiBaseName = mapBaseName;\n\nexport default apiBaseName;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\n// actions\nimport * as AccountActions from 'Global/account/actions';\nimport * as Actions from 'Global/actions';\nimport selectors from 'Global/selectors';\n\n// components \nimport Footer from 'Components/Footer';\nimport Header from 'Components/Header';\nimport HeaderBanner from 'Components/HeaderBanner';\n\nimport userUtils from 'Utils/userUtils';\nimport { getScreenRange } from 'Utils/tools';\n\n\n// css\nimport styles from './index.less';\n\n/**\n * PageName: 页面框架\n * \n * Author: zhuhuishao \n * use: [ 页面基础框架 ]\n * \n */\n@connect(selectors, {\n    setUserInfo: AccountActions.setUserInfo,\n    setScreenSize: Actions.setScreenSize,\n    getBannerFocus: Actions.getBannerFocus.request,\n    getCommonChannel: Actions.getCommonChannel.request,\n    getFriendlyLinks: Actions.getFriendlyLinks.request\n})\nclass Layout extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {};\n        this.scrollbars = undefined;\n    }\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getCommonChannel();\n            this.props.getFriendlyLinks();\n        }\n        this.props.getBannerFocus();\n        if (userUtils.getUser()) {\n            this.props.setUserInfo(userUtils.getUser());\n        }\n        this.handleOnResize();\n        window.addEventListener('resize', this.handleOnResize);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('resize', this.handleOnResize);\n    }\n\n    handleOnResize = () => {\n        const { screenSize } = this.props;\n        const range = getScreenRange();\n        const sizeStr = Object.keys(range).reduce((result, key) => (range[key] ? key : result), '');\n        if (screenSize != sizeStr) {\n            this.props.setScreenSize({ size: sizeStr });\n        }\n    }\n\n    render() {\n        const {\n            children,\n            history,\n            bannerList,\n            friendlyLinks,\n            channelList\n        } = this.props;\n        return (\n            <div className='global-page-layout'>\n                <div className={styles['page-layout']} style={{ minHeight: typeof window == 'object' ? window.innerHeight : 800 }}>\n                    {bannerList && <HeaderBanner history={history} bannerList={bannerList} />}\n                    <Header history={history} channelList={channelList} />\n                    <div className={styles['page-container']}>\n                        {children}\n                    </div>\n                    <Footer friendlyLinks={friendlyLinks} />\n                </div>\n            </div>\n\n        );\n    }\n}\n\nexport default Layout;\n","import React, { Component } from 'react';\nimport { Button, Popover } from 'antd';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport styles from './index.less';\n\nconst OUTLINE = [\n    { title: '主持人', url: 'http://mc.gdtv.cn/' },\n    { title: '报刊社', url: '/channels/140' },\n    { title: 'GRT学院', url: 'http://college.gdtv.cn/' },\n    { title: '信息公开', url: '/tvChannel/134' },\n    { title: '声明', url: '/tvChannel/135' },\n];\n\n/**\n * ModuleName: 通用Footer\n * \n * use: [ 页面通用Footer展示 ]\n * \n*/\nexport default class Footer extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    renderPopoverContent = (data) => (\n        <div className={styles['qrcode-popver']}>\n            <div className={styles['qrcode-img']}>\n                <img src={data.pictureUrl} alt={data.name} />\n            </div>\n            <div>扫码下载{data.name}</div>\n        </div>\n    );\n\n    render() {\n        const { friendlyLinks = {} } = this.props;\n        const { qrcodefriendlyLinkResponses = [] } = friendlyLinks;\n        return (\n            <div className={[styles.footer, responsiveStyles.layout].join(' ')} id='pageFooter'>\n                <div className='global-footer'>\n                    <div className={[styles['footer-wrap'], responsiveStyles.content].join(' ')}>\n                        <div className={styles['f-w1']}>\n                            <div className={styles['footer-left']}>\n                                <a href='/' title='荔枝网' className={styles.logo}></a>\n                            </div>\n                            <div className={styles['footer-right']}>\n                                {qrcodefriendlyLinkResponses.map((qrcode, i) => (\n                                    <Popover placement='top' content={this.renderPopoverContent(qrcode)} trigger='hover' key={i}>\n                                        <Button className={styles['qrcode-btn']} shape='round' icon='qrcode'>{qrcode.name}</Button>\n                                    </Popover>\n                                ))}\n                            </div>\n                        </div>\n                        <div className={styles['f-w3']}>\n                            {OUTLINE.map((item) => (\n                                <a href={item.url} target='_blank'>{item.title}</a>\n                            ))}\n                        </div>\n                        <div className={styles['f-w2']}>\n                            <div className={styles['footer-left']}>\n                                <dl className={styles.message}>\n                                    <dt>地址：中国广东省广州市环市东路331号广东电视中心</dt>\n                                    <dt>电话：0086-20-83355188(转) 邮编：510066</dt>\n                                    <dt>电子邮箱：gdtv@gdtv.cn</dt>\n                                    <dt>违法和不良信息举报电话：020-61293176</dt>\n                                </dl>\n                            </div>\n                            <div className={styles['footer-right']}>\n                                <div className={styles.links}>\n                                    {/* <a className={styles['links-1']} href='http://www.12377.cn' target='_blank' /> */}\n                                    <a className={styles['links-2']} href='http://www.12377.cn' target='_blank' title='国家网信办' />\n                                    <a className={styles['links-3']} href='http://bszs.conac.cn/sitename?method=show&id=1473A6A802047AD7E053012819ACED67' target='_blank' title='事业单位' />\n                                    <a className={styles['links-4']} href='http://gaj.gz.gov.cn/gsmpro/web/serviceitem/web_alert_view.html' target='_blank' title='网上报警' />\n                                </div>\n                                <dl className={styles['copy-right']}>\n                                    <dt>\n                                        <span>&#169;广东广播电视台</span> 丨\n                                        <a href='http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44010402000408' target='_blank' >\n                                            <div className={styles.beian}></div>\n                                            粤公网安备 44010402000408号\n                                        </a>\n                                    </dt>\n                                    <dt>\n                                        <a href='http://beian.miit.gov.cn/' target='_blank' >粤ICP备11108494号</a> 丨\n                                        信息网络传播视听节目许可证号：1905119\n                                    </dt>\n                                </dl>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___-6GYO\",\"textOverflow\":\"index__textOverflow___ea7Do\",\"dot\":\"index__dot___2GO7v\",\"navBarIconList\":\"index__navBarIconList___ihlq3\",\"menu-tv\":\"index__menu-tv___2daLh\",\"menu-radio\":\"index__menu-radio___2dGWc\",\"menu-programs\":\"index__menu-programs___rkJzZ\",\"menu-programs-all\":\"index__menu-programs-all___2ujzJ\",\"footer\":\"index__footer___OZdAV\",\"footer-wrap\":\"index__footer-wrap___1pKZv\",\"f-w1\":\"index__f-w1___1GIEG\",\"f-w2\":\"index__f-w2___2G27S\",\"f-w3\":\"index__f-w3___3SYbs\",\"footer-left\":\"index__footer-left___2dJwc\",\"footer-right\":\"index__footer-right___2sMSA\",\"logo\":\"index__logo___3H8Rv\",\"qrcode-btn\":\"index__qrcode-btn___3-a2F\",\"message\":\"index__message___2b4wh\",\"copy-right\":\"index__copy-right___1Ga0j\",\"beian\":\"index__beian___3Ahbx\",\"links\":\"index__links___1Dsmv\",\"links-1\":\"index__links-1___WO4qY\",\"links-2\":\"index__links-2___oPtQo\",\"links-3\":\"index__links-3___ka7rA\",\"links-4\":\"index__links-4___3BNSz\",\"qrcode-popver\":\"index__qrcode-popver___1Bk2f\",\"qrcode-img\":\"index__qrcode-img___1YiLk\"};","import React, { Component } from 'react';\nimport { Button, Icon } from 'antd';\n\nimport FastEntry from 'Components/FastEntry';\nimport SearchBox from 'Components/SearchBox';\nimport UserBox from 'Components/UserBox';\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport { menu } from 'Components/NavBar/constants';\nimport styles from './index.less';\n\n/**\n * ModuleName: 通用Header\n * \n * Author: xuchunhua \n * use: [ 页面通用Header展示 ]\n * \n */\nexport default class Header extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            qrCodeVisible: false,\n            loading: false,\n            fixed: false,\n            isIndex: false\n        };\n    }\n\n    componentDidMount() {\n        const { history } = this.props;\n        const { pathname } = history.location;\n        if (!pathname || pathname === '/' || pathname === '/index') {\n            this.setState({ isIndex: true });\n        }\n        window.addEventListener('scroll', this.fixedBar);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.fixedBar);\n    }\n\n    // 监听固定悬浮导航栏\n    fixedBar = () => {\n        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n        const fixed = scrollTop > 400;\n        this.setState({ fixed });\n    }\n\n    handleBackToTop = () => {\n        window.scrollTo(0, 0);\n    }\n\n    render() {\n        const { fixed, isIndex } = this.state;\n        const { channelList } = this.props;\n        // 吸附顶部或非首页时true\n        const fixedOrIndex = fixed || !isIndex;\n        return (\n            <div className={styles['header-container']}>\n                <div\n                    id='headerWarp'\n                    className={[\n                        styles['header-wrap'],\n                        responsiveStyles.layout,\n                        fixed && styles['header-fixed'] || '',\n                        fixedOrIndex && styles['header-white'] || ''\n                    ].join(' ')}\n                >\n                    <div className={[styles.header, responsiveStyles.content].join(' ')}>\n                        <div className={styles['header-logo']}>\n                            <a href='/' className={styles.logo} title='荔枝网'>荔枝网</a>\n                        </div>\n                        {fixedOrIndex &&\n                            <div className={styles['header-channel']}>\n                                <FastEntry title='分类' channelList={channelList} />\n                            </div>\n                        }\n                        {fixedOrIndex &&\n                            <div className={styles['header-nav']}>\n                                {menu.map((item, j) => (\n                                    <a key={j}\n                                        className={styles['nav-bar-icon']}\n                                        href={item.url}\n                                        target={item.newBlank ? '_blank' : ''}\n                                    >\n                                        <div className={[styles['nav-bar-icon-cover'], styles[item.className]].join(' ')}>\n                                            {item.name}\n                                        </div>\n                                    </a>\n                                ))}\n                            </div>\n                        }\n                        <div className={styles['header-right']}>\n                            <div className={styles['top-links-bar']}>\n                                <UserBox {...this.props} />\n                            </div>\n                        </div>\n                        <div className={styles['header-search']}>\n                            <SearchBox opaque={fixedOrIndex} />\n                        </div>\n                    </div>\n                </div>\n                {fixed &&\n                    <div className={styles['back-to-top']}>\n                        <Button className={styles.btn} icon='up' shape='circle' onClick={this.handleBackToTop} />\n                    </div>\n                }\n            </div >\n        );\n    }\n}\n","import React, { Component } from 'react';\nimport { Button, Icon, Popover } from 'antd';\n\nimport { getLocal } from 'Utils/localDataUtils';\nimport { gridArray } from 'Utils/tools';\nimport styles from './index.less';\n\n/**\n * ModuleName: 快捷入口\n * \n * Author: xuchunhua \n * use: [ Header ]\n * \n */\nexport default class FastEntry extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    componentDidMount() {\n    }\n\n    renderPopoverContent = () => {\n        const { channelList = [] } = this.props;\n        const list = gridArray(channelList, 6);\n        return (\n            <div className={styles.content}>\n                {list.map((column, i) => (\n                    <div className={styles['nav-col']} key={i}>\n                        {column.map((nav, j) => (\n                            <a\n                                className={styles.channel}\n                                href={`/${nav.target || 'channels'}/${nav.pk}`}\n                                target='_blank'\n                                key={j}\n                            >\n                                {nav.name}\n                            </a>\n                        ))}\n                    </div>\n                ))}\n            </div>\n        );\n    }\n\n    render() {\n        const { title } = this.props;\n        return (\n            <div className={styles['fast-entry']}>\n                <Popover\n                    placement='bottomLeft'\n                    content={this.renderPopoverContent()}\n                >\n                    <div className={styles.title}>\n                        <img src={require('../../statics/images/icon_channel.png')} />\n                        <span>&nbsp;&nbsp;{title}</span>\n                    </div>\n                </Popover>\n            </div >\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"fast-entry\":\"index__fast-entry___1u5wP\",\"title\":\"index__title___7irHV\",\"content\":\"index__content___3ae9K\",\"nav-col\":\"index__nav-col___30SV6\",\"channel\":\"index__channel___14CgH\"};","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABGklEQVQ4T5VTMU7DQBCcsRMaJBJ4ACUSIldiN3kAEqLkCfAGnsB/IiQeQBO3NkKi5AGOjUQBwbfobJ1lXWxzuep0Ozu3uzNLAPhaRNcV8SjgGSHvoeDhMEueTMye/GJ5GoTbCJA5wEJX0+Tk9eWDTTJXAtCCCUgocmNJ6uRge9UlNHetp8/8VFEq4MINEpIdpYky74WKbgEeuxgQOUsVfwM42AkC1SxdTxqCyzsgaCtssRQ9WIEBzdJ1nVSo+L7nA9N03jsDC/6PoJ6Bo8I5gHCcQAsYbFoVekvb43F3MHskG6hXC6WKpcNbEfJmzeY1RIeg5rJm85Kxj6AhkczLSKWKf7vqdNr58bLymN29lmls4VwVBtd5aOX/ADe1tePa0+i4AAAAAElFTkSuQmCC\"","import React, { Component } from 'react';\nimport { Input } from 'antd';\nimport { urlParams } from 'Utils/utils';\n\nimport styles from './index.less';\n\nconst { Search } = Input;\n\n/**\n * ModuleName: 首页搜索模块\n * \n * Author: xuchunhua \n * use: [ 首页搜索模块 ]\n */\nclass SearchBox extends Component {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            keyword: ''\n        };\n    }\n\n    componentDidMount() {\n        const { key } = urlParams();\n        if (key) {\n            this.setState({ keyword: decodeURIComponent(key) });\n        }\n    }\n\n    /** 点击按钮搜索 */\n    handleClickSearch = () => {\n        const { keyword } = this.state;\n        if (keyword) {\n            window.location.href = `/search/?key=${encodeURIComponent(keyword)}`;\n        }\n    }\n\n    /** 输入 */\n    handleOnChange = (e) => {\n        const { value } = e.target;\n        this.setState({ keyword: value.replace(/(^\\s*)|(\\s*$)/g, '') });\n    }\n\n    render() {\n        const { keyword = '' } = this.state;\n        const { opaque, placeholder = '' } = this.props;\n        const opaqueClassName = opaque ? styles.opaque : '';\n        return (\n            <div className={[styles['search-wrap'], opaqueClassName].join(' ')}>\n                <div className={styles['search-box']}>\n                    <Search\n                        ref='keyInput'\n                        className={styles.keywords}\n                        placeholder={placeholder}\n                        size='large'\n                        enterButton='搜索'\n                        value={keyword}\n                        maxLength={40}\n                        onChange={this.handleOnChange}\n                        onSearch={this.handleClickSearch}\n                    />\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default SearchBox;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"search-wrap\":\"index__search-wrap___14Aqg\",\"opaque\":\"index__opaque___3OAqO\",\"search-box\":\"index__search-box___1bP1N\",\"keywords\":\"index__keywords___2shDk\"};","import React, { Component } from 'react';\nimport { Button } from 'antd';\n\nimport Account from './components/Account';\nimport History from './components/History';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 用户登录\n * \n * Author: xuchunhua \n * use: [ 用户登录信息展示 ]\n */\nclass UserBox extends Component {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            visible: false\n        };\n    }\n\n    render() {\n        return (\n            <div className={styles['user-wrap']}>\n                <History />\n                <Account />\n            </div>\n        );\n    }\n}\n\nexport default UserBox;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport {\n    Popover, Button, Icon, Input, message\n} from 'antd';\nimport ImageUploader from 'Components/ImageUploader';\nimport * as AccountActions from 'Global/account/actions';\nimport AccountSelectors from 'Global/account/selectors';\nimport { COMPOSEOSS_TYPE } from 'Utils/token/createComposeOss';\n\nimport LoginBtn from '../LoginBtn';\n\nimport styles from './index.less';\n\nconst ButtonGroup = Button.Group;\n\n/** 登录后默认头像 */\nconst AVATAR_LOGIN_DEFAULT = require('Public/images/default_user_avatar.png');\n\n/** 未登录默认头像 */\nconst AVATAR_NO_LOGIN_DEFAULT = require('Public/images/default_user.png');\n\n@connect(AccountSelectors, {\n    logout: AccountActions.logout,\n    updateUserInfo: AccountActions.updateUserInfo.request\n})\nclass Account extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isEdit: false,\n            popoverVisible: undefined,\n            valName: undefined,\n            valAvatarUrl: undefined\n        };\n    }\n\n    /**\n     * 点击登录按钮时让Popover隐藏一下\n     * 此方法属于骚操作\n     * 因为登录按钮属于Popover子元素,正常点击弹窗后Popover不消失\n     * 于是利用Popover的visible属性先隐藏,再去掉visible属性\n     */\n    handleOnClickLogin = () => {\n        this.setState({ popoverVisible: false }, () => {\n            this.setState({ popoverVisible: undefined });\n        });\n    }\n\n    /** 开始编辑用户信息 */\n    handleStartEdit = () => {\n        const { userInfo } = this.props;\n        this.setState({ isEdit: true, valName: userInfo.nickName });\n    }\n\n    /** 结束编辑用户信息 */\n    handleFinishEdit = () => {\n        this.setState({ isEdit: false, valAvatarUrl: undefined });\n    }\n\n    /** 监听用户信息气泡卡片显示 */\n    handleOnVisibleChange = (visible) => {\n        if (!visible) {\n            setTimeout(() => {\n                this.handleFinishEdit();\n            }, 500);\n        }\n    }\n\n    /** 修改名称 */\n    handleInputName = (e) => {\n        this.setState({ valName: e.target.value });\n    }\n\n    /** 修改上传头像 */\n    handleChangeAvatarUrl = (url) => {\n        this.setState({ valAvatarUrl: url });\n    }\n\n    /** 修改用户信息 */\n    handleSaveUserInfo = async () => {\n        const { userInfo } = this.props;\n        const { valName, valAvatarUrl } = this.state;\n        const data = {\n            nickName: valName,\n            avatarUrl: valAvatarUrl || userInfo?.avatarUrl\n        };\n        try {\n            await new Promise((resolve, reject) => {\n                this.props.updateUserInfo(data, resolve, reject);\n            });\n            message.success('修改成功');\n            this.handleFinishEdit();\n        } catch (error) {\n            message.success('修改失败');\n        }\n    }\n\n    renderAccountPopover = () => {\n        const { isEdit, valName, valAvatarUrl } = this.state;\n        const { userInfo } = this.props;\n        return (\n            <div className={styles['user-account-popover']}>\n                {!isEdit &&\n                    <div className={styles.info}>\n                        <div className={styles['user-avatar-big']}>\n                            <img src={userInfo?.avatarUrl || AVATAR_LOGIN_DEFAULT} crossOrigin='anonymous' />\n                        </div>\n                        <div className={styles['user-name']}>{userInfo.nickName}</div>\n                        <a className={styles['btn-edit']} onClick={this.handleStartEdit}>\n                            <Icon type='edit' />修改资料\n                        </a>\n                        <Button\n                            className={styles['btn-logout']}\n                            onClick={this.props.logout}\n                            block\n                        >\n                            退出登录\n                        </Button>\n                    </div>\n                }\n                {isEdit &&\n                    <div className={styles.edit}>\n                        <div className={styles['user-avatar-big']}>\n                            <ImageUploader\n                                style={{\n                                    width: 72,\n                                    height: 72,\n                                    padding: 0,\n                                    borderRadius: 36\n                                }}\n                                value={valAvatarUrl || userInfo?.avatarUrl}\n                                aspectRatio={{ width: 72, height: 72 }}\n                                onChange={this.handleChangeAvatarUrl}\n                                composeOssOptions={{\n                                    type: COMPOSEOSS_TYPE.AVATAR\n                                }}\n                            />\n                        </div>\n                        <Input\n                            className={styles['input-name']}\n                            maxLength={20}\n                            value={valName}\n                            onChange={this.handleInputName}\n                        />\n                        <ButtonGroup className={styles['btn-edit-group']}>\n                            <Button onClick={this.handleFinishEdit}>取消</Button>\n                            <Button className={styles['btn-save']} onClick={this.handleSaveUserInfo}>保存</Button>\n                        </ButtonGroup>\n                    </div>\n                }\n            </div>\n        );\n    }\n\n    renderLoginPopover = () => (\n        <div className={styles['user-login-popover']}>\n            <div className={styles.text}>登录后使用更多功能</div>\n            <div className={styles['btn-open-login']}>\n                <LoginBtn onClick={this.handleOnClickLogin} />\n            </div>\n        </div>\n    );\n\n    render() {\n        const { isEdit, popoverVisible } = this.state;\n        const { userInfo } = this.props;\n        return (\n            <div className={styles['user-account']}>\n                <Popover\n                    trigger={isEdit ? 'click' : 'hover'}\n                    placement='bottomRight'\n                    content={userInfo?.pk ? this.renderAccountPopover() : this.renderLoginPopover()}\n                    onVisibleChange={this.handleOnVisibleChange}\n                    getPopupContainer={(e) => e.parentElement}\n                    {...(popoverVisible === undefined ? {} : { visible: popoverVisible })}\n                >\n                    <div className={styles['user-avatar-small']}>\n                        <img src={userInfo?.pk && (userInfo.avatarUrl || AVATAR_LOGIN_DEFAULT) || AVATAR_NO_LOGIN_DEFAULT} crossOrigin='anonymous' />\n                    </div>\n                </Popover>\n            </div>\n        );\n    }\n}\n\nexport default Account;\n","import React from 'react';\nimport * as R from 'ramda';\nimport { connect } from 'react-redux';\nimport {\n    Modal, Button, Icon, message\n} from 'antd';\n\nimport * as GlobalActions from 'Global/actions';\nimport GlobalSelectors from 'Global/selectors';\n\nimport createComposeOss, { COMPOSEOSS_TYPE } from 'Utils/token/createComposeOss';\nimport onComposeOssError from 'Utils/token/onComposeOssError';\nimport onComposeOssFileAdd from 'Utils/token/onComposeOssFileAdd';\nimport onComposeOssComplete from 'Utils/token/onComposeOssComplete';\n\nimport ButtonUpload from './ButtonUpload';\nimport TabContainer from './TabContainer';\nimport ImageItem from './ImageItem';\nimport Cropper from './Cropper';\nimport Footer from './Footer';\n\nimport { IMAGE_UPLOAD_STATUS, IMAGE_UPLOAD_TABKEY } from './constants';\n\nimport styles from './index.less';\n\n@connect(GlobalSelectors, {\n    getUploadToken: GlobalActions.getUploadToken.request\n})\nclass ItouchtvImageUploader extends React.PureComponent {\n    constructor(props) {\n        super(props);\n        this.state = {\n            visible: false,\n            dataStage: [],\n            data: [],\n            current: undefined,\n            status: IMAGE_UPLOAD_STATUS.CHOOSE,\n            isCropping: false,\n            tabKey: IMAGE_UPLOAD_TABKEY.CONTENT\n        };\n    }\n\n    async componentDidMount() {\n        await new Promise((resolve, reject) => {\n            this.props.getUploadToken({ type: 0 }, resolve, reject);\n        });\n        this.createComposeOss();\n    }\n\n    componentWillUnmount() {\n        this.destroyOss && this.destroyOss();\n    }\n\n    createComposeOss = async () => {\n        const { composeOssOptions, uploadToken } = this.props;\n        console.log('uploadToken', uploadToken);\n        const composeOssMethods = {\n            handleExpire: this.onOssExpire,\n            fileAdded: this.onOssFileAdded,\n            progress: this.onOssProgress,\n            error: this.onOssError,\n            complete: this.onOssComplete,\n            completeQueue: this.onOssCompleteQueue\n        };\n        const {\n            oss, upload, destroy, uploadBase64\n        } = createComposeOss({\n            token: uploadToken.token,\n            type: COMPOSEOSS_TYPE.IMAGE,\n            ...composeOssMethods,\n            ...composeOssOptions\n        });\n        this.oss = oss || {};\n        this.uploadBase64Oss = uploadBase64;\n        this.uploadOss = upload;\n        this.destroyOss = destroy;\n    }\n\n    // ------------------------------------------\n    onOssExpire = () => {\n        console.log('%cItouchtvImageUploader onOssExpired');\n    }\n\n    onOssFileAdded = (uploadList, uploader) => {\n        console.log('%cItouchtvImageUploader onOssFileAdded', uploadList, uploader);\n        const resultList = onComposeOssFileAdd(uploadList, uploader);\n        this.setState({\n            dataStage: this.state.dataStage.concat(resultList)\n        });\n    }\n\n    onOssProgress = (a, b) => {\n        console.log('%cItouchtvImageUploader onOssProgress', a, b);\n    }\n\n    onOssError = (err) => {\n        console.log('%cItouchtvImageUploader onOssError', err);\n        onComposeOssError(err);\n    }\n\n    onOssComplete = (res) => {\n        console.log('%cItouchtvImageUploader onOssComplete', res);\n\n        const result = onComposeOssComplete(res);\n\n        const { dataStage, data } = this.state;\n        const index = R.findIndex(R.propEq('key', result.key))(dataStage);\n        if (index < 0) return;\n        const done = dataStage.splice(index, 1);\n        this.setState({\n            dataStage,\n            data: data.concat(R.merge(done, result))\n        }, () => {\n            this.onOssChange();\n        });\n    }\n\n    onOssCompleteQueue = () => {\n        console.log('%cItouchtvImageUploader onOssCompleteQueue');\n    }\n\n    // ------------------------------------------\n    onButtonClick = () => {\n        this.setState({\n            visible: true\n        });\n    }\n\n    onModalCancel = () => {\n        this.setState({\n            visible: false\n        });\n    }\n\n    onOssUpload = () => {\n        this.uploadOss();\n    }\n\n    onOssChange = () => {\n        const { data } = this.state;\n        this.props.onDataChange && this.props.onDataChange(data?.map(v => v.sourceLink));\n    }\n\n    onTabChange = (tabKey) => {\n        this.setState({\n            tabKey\n        });\n    }\n\n    onItemClick = (value) => {\n        const { current } = this.state;\n        if (R.equals(current, value)) {\n            this.setState({\n                current: null\n            });\n            return;\n        }\n        this.setState({\n            current: value\n        });\n    }\n\n    onStatusChange = (status) => {\n        this.setState({\n            status\n        });\n    }\n\n    onCoverCrop = async () => {\n        const { onChange = () => null } = this.props;\n        try {\n            await this.setState({\n                isCropping: true\n            });\n            const { base64Data, value } = this.cropper.getCroppedCanvas();\n            if (R.isNil(base64Data)) {\n                this.setState({\n                    isCropping: false\n                });\n                message.error('截图失败');\n                return;\n            }\n            const res = await this.uploadBase64Oss(base64Data.toDataURL(), value);\n            this.setState({\n                isCropping: false,\n                visible: false,\n            }, () => {\n                this.setState({\n                    status: IMAGE_UPLOAD_STATUS.CHOOSE\n                });\n            });\n            onChange(res?.sourceLink);\n        } catch (e) {\n            this.setState({\n                isCropping: false\n            });\n            message.error('截图失败');\n            console.log(e);\n        }\n    }\n\n    // ------------------------------------------\n    render() {\n        const {\n            visible, data = [], dataStage = [], current, status, isCropping, tabKey\n        } = this.state;\n        const {\n            value, dataSource, aspectRatio, style\n        } = this.props;\n        const { width, height } = aspectRatio;\n        console.warn('%cItouchtvImageUploader', data, dataStage, value, dataSource);\n\n        return (\n            <React.Fragment>\n                <ButtonUpload\n                    aspectRatio={aspectRatio}\n                    style={style}\n                    onClick={this.onButtonClick}\n                    value={value}\n                />\n                <div className={styles['label-tips']}>\n                    <span>最小尺寸{width}*{height}</span>\n                    <span>请勿使用gif、带大量文字、卡通元素</span>\n                </div>\n                <Modal\n                    title='选择图片'\n                    visible={visible}\n                    width={750}\n                    onCancel={this.onModalCancel}\n                    footer={<Footer\n                        value={current}\n                        status={status}\n                        isCropping={isCropping}\n                        onChange={this.onStatusChange}\n                        onCancel={this.onModalCancel}\n                        onOk={this.onCoverCrop}\n                    />}\n                >\n                    {status === IMAGE_UPLOAD_STATUS.CHOOSE &&\n                        <TabContainer\n                            dataSource={dataSource}\n                            current={current}\n                            data={data}\n                            tabKey={tabKey}\n                            onTabChange={this.onTabChange}\n                            onItemClick={this.onItemClick}\n                            render={() => (\n                                <React.Fragment>\n                                    <Button\n                                        type='dashed'\n                                        onClick={this.onOssUpload}\n                                        className={[styles['image-warpper'], styles.button].join(' ')}\n                                    >\n                                        <Icon type='plus' />\n                                    </Button>\n                                    {data?.map(v => (\n                                        <ImageItem\n                                            selected={R.equals(current, v)}\n                                            key={v.key}\n                                            src={v.sourceLink}\n                                            onClick={() => this.onItemClick(v)}\n                                        />\n                                    ))}\n                                    {dataStage?.map(v => <ImageItem key={v.key} />)}\n                                </React.Fragment>\n                            )}\n                        />\n                    }\n                    {status === IMAGE_UPLOAD_STATUS.CROP &&\n                        <Cropper\n                            ref={c => { this.cropper = c; }}\n                            value={current?.sourceLink || current}\n                            aspectRatio={aspectRatio}\n                        />\n                    }\n                </Modal>\n            </React.Fragment>\n        );\n    }\n}\n\nexport default ItouchtvImageUploader;\n","import mime from 'mime-types';\n\nfunction _readAsX(method, file) {\n    return new Promise((res, rej) => {\n        const reader = new FileReader();\n        reader[method](file);\n        reader.onerror = function (error) {\n            rej(error);\n        };\n        reader.onload = function () {\n            res(reader.result);\n        };\n    });\n}\n\nlet VirtualFilesIndex = 0;\n\nexport default class VirtualFile {\n    constructor(file, filename) {\n        const now = +(new Date());\n        Object.defineProperty(this, '_file', {\n            enumerable: false,\n            configurable: false,\n            readonly: true,\n            value: file\n        });\n\n        Object.defineProperty(this, '_uid', {\n            enumerable: false,\n            configurable: false,\n            readonly: true,\n            // eslint-disable-next-line\n            value: `${now}-${++VirtualFilesIndex}`\n        });\n        this._mimeType = mime.lookup(filename);\n    }\n\n    get type() {\n        return this._mimeType;\n    }\n\n    readAsText = () => _readAsX('readAsText', this._file);\n\n    readAsArrayBuffer = () => _readAsX('readAsArrayBuffer', this._file);\n\n    readAsBinaryString = () => _readAsX('readAsBinaryString', this._file);\n\n    readAsDataUrl = () => _readAsX('readAsDataURL', this._file);\n}\n\n/**\n * base64 转 blob 对象，文件上传\n * @param dataURI\n * @returns {Blob}\n */\nexport function dataURItoBlob(dataURI) {\n    const byteString = atob(dataURI.split(',')[1]);\n    const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n    const ab = new ArrayBuffer(byteString.length);\n    const ia = new Uint8Array(ab);\n    for (let i = 0; i < byteString.length; i += 1) {\n        ia[i] = byteString.charCodeAt(i);\n    }\n    return new Blob([ab], { type: mimeString });\n}\n\nexport function virtualFileFromDataUrl(dataUrl, filename) {\n    const file = dataURItoBlob(dataUrl);\n    return new VirtualFile(file, filename);\n}\n","import { message } from 'antd';\n\nconst onComposeOssError = (err) => {\n    switch (err.code) {\n        case '-601': // unsupported file format\n        case -601:\n            message.error('不支持该格式文件');\n            break;\n        case '-600': // over the maximum size\n        case -600:\n            message.error('图片上传超过最大尺寸');\n            break;\n        default:\n            message.error('上传失败，请重新上传');\n            break;\n    }\n};\n\nexport default onComposeOssError;\n","const onComposeOssFileAdd = (uploadList, uploader) => {\n    console.warn('%ctoken onComposeOssFileAdd', uploadList, uploader);\n    const resultList = [];\n    for (let i = 0; i < uploadList.length; i += 1) {\n        const { file } = uploadList[i];\n        const {\n            file: fileFile, key, size, name\n        } = file;\n        const { name: localName } = fileFile;\n        const url = window.URL.createObjectURL(fileFile);\n        resultList.push({\n            url,\n            name,\n            localName,\n            key,\n            size,\n            file: fileFile\n        });\n    }\n    return resultList;\n};\n\nexport default onComposeOssFileAdd;\n","const R = require('ramda');\n\nconst onComposeOssComplete = (res) => R.pickAll(['hash', 'key', 'name', 'sourceLink'])(res);\n\nexport default onComposeOssComplete;\n","import React from 'react';\nimport { Button, Icon } from 'antd';\n\nimport styles from './index.less';\n\nexport default class ButtonUpload extends React.PureComponent {\n    render() {\n        const {\n            onClick, aspectRatio: aspectRatioRaw, value, style\n        } = this.props;\n        const { width, height } = aspectRatioRaw;\n        const aspectRatio = {\n            width: 286,\n            height: 286 * height / width\n        };\n        return !value\n            ? (\n                <Button\n                    onClick={onClick}\n                    type={'dashed'}\n                    className={styles['button-up']}\n                    style={{ ...aspectRatio, ...style }}\n                >\n                    <Icon className={styles.icon} type='plus' />\n                    <p className={styles.label}>上传图片</p>\n                </Button>\n            ) : (\n                <div\n                    className={styles['button-img']}\n                    style={{ ...aspectRatio, ...style, backgroundImage: `url('${value}')` }}\n                    onClick={onClick}\n                >\n                    <div className={styles['change-img']}>\n                        <span>更换图片</span>\n                    </div>\n                </div>\n            );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"button-img\":\"index__button-img___1nf6G\",\"button-up\":\"index__button-up___4AWAr\",\"label\":\"index__label___n8tzL\",\"icon\":\"index__icon___GEqD0\",\"change-img\":\"index__change-img___1obx6\"};","import React from 'react';\nimport * as R from 'ramda';\nimport { Tabs } from 'antd';\n\nimport { IMAGE_UPLOAD_TABKEY } from '../constants';\n\nconst { TabPane } = Tabs;\n\nexport default class TabContainer extends React.PureComponent {\n    render() {\n        const {\n            dataSource,\n            current,\n            render,\n            tabKey,\n            onTabChange,\n            onItemClick\n        } = this.props;\n\n        return dataSource\n            ? (\n                <Tabs onChange={onTabChange} activeKey={tabKey}>\n                    <TabPane tab='正文图片' key={IMAGE_UPLOAD_TABKEY.CONTENT}>\n                        {dataSource?.map(({ id, imgUrl }) => (\n                            <ImageItem\n                                selected={R.equals(current, imgUrl)}\n                                key={imgUrl}\n                                src={imgUrl}\n                                onClick={() => onItemClick(imgUrl)}\n                            />\n                        ))}\n                    </TabPane>\n                    <TabPane tab='本地上传' key={IMAGE_UPLOAD_TABKEY.UPLOAD}>\n                        {render()}\n                    </TabPane>\n                </Tabs>\n            ) : render();\n    }\n}\n","import React from 'react';\nimport { Icon } from 'antd';\n\nimport ImageLoad from 'Components/ImageLoad';\n\nimport styles from './index.less';\n\nexport default class ImageItem extends React.PureComponent {\n    render() {\n        const { src, onClick = () => null, selected } = this.props;\n        return (\n            <div\n                onClick={onClick}\n                className={[\n                    styles['image-container'],\n                    styles.img,\n                    styles[selected && 'selected' || '']\n                ].join(' ')}\n            >\n                {selected &&\n                    <div className={styles.masked}>\n                        <Icon className={styles['icon-check']} type='check' />\n                    </div>\n                }\n                <ImageLoad\n                    src={src}\n                    render={({ isFailed, isLoaded, query }) => {\n                        if (isFailed) {\n                            return <i className={styles['icon-transcode-error']} />;\n                        }\n                        if (!isLoaded) {\n                            return <i className={styles['icon-transcode']} />;\n                        }\n\n                        return <img src={src + query} />;\n                    }}\n                />\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___DR1-j\",\"textOverflow\":\"index__textOverflow___1-WGE\",\"dot\":\"index__dot___30es0\",\"navBarIconList\":\"index__navBarIconList___ZfjkE\",\"menu-tv\":\"index__menu-tv___5X7bZ\",\"menu-radio\":\"index__menu-radio___1mjwO\",\"menu-programs\":\"index__menu-programs___WGZGt\",\"menu-programs-all\":\"index__menu-programs-all___3u0_F\",\"image\":\"index__image___3Drdc\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"label-tips\":\"index__label-tips___cIntJ\",\"image-warpper\":\"index__image-warpper___L3dDg\",\"button\":\"index__button___3iiaf\",\"image-container\":\"index__image-container___1234w\",\"icon-transcode\":\"index__icon-transcode___3qoFz\",\"icon-transcode-error\":\"index__icon-transcode-error___3fHTs\",\"img\":\"index__img___3d8G2\",\"masked\":\"index__masked___ZoVmx\",\"icon-check\":\"index__icon-check___2wYRG\"};","import React from 'react';\nimport ReactCropper from 'react-cropper';\nimport styles from './index.less';\n\nclass Cropper extends React.Component {\n    consumeAspectRatio = (aspectRatio) => {\n        const { width, height } = aspectRatio;\n        return {\n            label: `${width}*${height}`,\n            ratio: width / height\n        };\n    }\n\n    getCroppedCanvas = () => ({ base64Data: this.cropper.getCroppedCanvas(), value: this.props.value })\n\n    render() {\n        const { aspectRatio, value } = this.props;\n        const { label, ratio } = this.consumeAspectRatio(aspectRatio);\n        return (\n            <React.Fragment>\n                <p className={styles['cropper-tips']}>最小尺寸{label}，封面避免使用gif、带大量文字、卡通元素</p>\n                <div className={styles['cropper-container']}>\n                    <ReactCropper\n                        zoomable={false}\n                        zoomOnWheel={false}\n                        zoomOnTouch={false}\n                        guides={false}\n                        viewMode={2}\n                        className={styles.cropper}\n                        aspectRatio={ratio}\n                        preview={`.${styles['cropper-preview-zone']}`}\n                        src={value}\n                        ref={c => { this.cropper = c; }}\n                    />\n                    <div className={styles['cropper-preview-container']}>\n                        <p>预览</p>\n                        <div className={styles['cropper-preview-zone']} />\n                    </div>\n                </div>\n            </React.Fragment>\n        );\n    }\n}\n\nexport default Cropper;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"cropper-tips\":\"index__cropper-tips___2b3_x\",\"cropper-preview-container\":\"index__cropper-preview-container___3tf5z\",\"cropper\":\"index__cropper___p7FIC\",\"cropper-preview-zone\":\"index__cropper-preview-zone___bMGuA\",\"cropper-container\":\"index__cropper-container___TYjOP\"};","import React from 'react';\nimport { Button } from 'antd';\n\nimport { IMAGE_UPLOAD_STATUS } from '../constants';\n\nexport default class Footer extends React.PureComponent {\n    render() {\n        const {\n            status,\n            value,\n            isCropping,\n            onCancel,\n            onOk,\n            onChange,\n        } = this.props;\n        switch (status) {\n            case IMAGE_UPLOAD_STATUS.CHOOSE:\n                return (\n                    <React.Fragment>\n                        <Button\n                            type='primary'\n                            disabled={!value}\n                            onClick={() => onChange(IMAGE_UPLOAD_STATUS.CROP)}\n                        >\n                            下一步\n                        </Button>\n                        <Button onClick={onCancel}>取消</Button>\n                    </React.Fragment>\n                );\n            case IMAGE_UPLOAD_STATUS.CROP:\n                return (\n                    <React.Fragment>\n                        <Button onClick={() => onChange(IMAGE_UPLOAD_STATUS.CHOOSE)} type='primary'>\n                            上一步\n                        </Button>\n                        <Button\n                            key={isCropping ? 'loading' : 'loaded'}\n                            loading={isCropping}\n                            onClick={onOk}\n                            type='primary'\n                        >\n                            确定\n                        </Button>\n                        <Button onClick={onCancel}>取消</Button>\n                    </React.Fragment>\n                );\n            default:\n                return null;\n        }\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"label-tips\":\"index__label-tips___9znn5\",\"image-warpper\":\"index__image-warpper___sNvgU\",\"button\":\"index__button___2Wj-j\"};","import React from 'react';\nimport {\n    Modal, Tabs, Form, Input, Checkbox, Button, message\n} from 'antd';\nimport { connect } from 'react-redux';\n\nimport * as AccountActions from 'Global/account/actions';\nimport AccountSelectors from 'Global/account/selectors';\nimport { KEY, THIRD_PARTY_LOGIN } from 'Global/account/constants';\n\nimport * as REG from 'Constants/reg';\nimport styles from './index.less';\n\nconst { TabPane } = Tabs;\nconst FormItem = Form.Item;\nconst TIME = 60;\nconst WINDOW_SPECS = 'width=800,height=400,scrollbars=no,resizable=no';\n\n@connect(AccountSelectors, {\n    loginByPassword: AccountActions.loginByPassword.request,\n    loginByCode: AccountActions.loginByCode.request,\n    loginByThirdParty: AccountActions.loginByThirdParty.request,\n    getVerificationCode: AccountActions.getVerificationCode.request\n})\n@Form.create({})\nclass LoginModal extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currentTab: 2,\n            count: 60\n        };\n        this.thirdPartyLogin = undefined;\n    }\n\n    componentDidMount() {\n        const { account, remember } = localStorage;\n        if (remember != undefined) {\n            this.props.form.setFieldsValue({\n                account,\n                remember: remember == 1\n            });\n        }\n        const redirectUri = 'https://2019.gdtv.cn/login';\n        this.setState({ redirectUri });\n        this.messageCallBack = window.addEventListener('message', e => {\n            const { code } = e.data;\n            console.log(e, code);\n            this.thirdPartyLoginCallBack(e.data.code);\n        });\n    }\n\n    componentWillUnmount() {\n        this.countInterval = clearInterval(this.countInterval);\n        if (this.thirdPartyLogin && this.thirdPartyLogin.close) {\n            this.thirdPartyLogin.close();\n        }\n        window.removeEventListener('message', this.messageCallBack);\n    }\n\n    /** 第三方登录回调 */\n    thirdPartyLoginCallBack = (code) => {\n        if (this) {\n            this.handleThirdPartyLogin(code);\n        }\n    }\n\n    /** 校验手机号 */\n    validatePhone = (rule, value, callback) => {\n        if (value) {\n            if (!new RegExp(REG.PHONE_NUMBER.pattern).test(value)) {\n                return callback(REG.PHONE_NUMBER.text);\n            }\n        }\n        return callback();\n    };\n\n    /** 切换tab */\n    handleChangeTab = (e) => {\n        this.setState({ currentTab: e });\n    }\n\n    /** 跳转注册 */\n    handleToRegister = () => {\n        this.props.onCancel();\n        this.props.onOpenRegister();\n    }\n\n    /** 跳转第三方登录 */\n    handleToThirdPartyLogin = (type) => {\n        const { redirectUri } = this.state;\n        this.setState({ thirdPartyType: KEY[type] });\n        const AppID = THIRD_PARTY_LOGIN[KEY[type]];\n        let authUrl;\n        const uri = encodeURIComponent(redirectUri);\n        switch (type) {\n            case 0:\n                // 微信\n                authUrl = `https://open.weixin.qq.com/connect/qrconnect?appid=${AppID}&redirect_uri=${uri}&response_type=code&scope=snsapi_login&state=#wechat_redirect`;\n                break;\n            case 1:\n                // QQ\n                authUrl = `https://graph.qq.com/oauth2.0/authorize?client_id=${AppID}&redirect_uri=${uri}&response_type=code&state=#qq_redirect`;\n                break;\n            case 2:\n                // 微博\n                authUrl = `https://api.weibo.com/oauth2/authorize?client_id=${AppID}&redirect_uri=${uri}&response_type=code&`;\n                break;\n            default:\n                break;\n        }\n        this.thirdPartyLogin = window.open(authUrl, 'thirdPartyLogin', WINDOW_SPECS);\n    }\n\n    /** 获取验证码 */\n    handleGetCode = async () => {\n        const formValues = this.props.form.getFieldsValue();\n        const { phone } = formValues;\n        if (!phone || !new RegExp(REG.PHONE_NUMBER.pattern).test(phone)) {\n            message.error(REG.PHONE_NUMBER.text);\n            return;\n        }\n\n        if (this.state.count == TIME) {\n            await new Promise((resolve, reject) => {\n                this.props.getVerificationCode({ mobileNumber: phone, type: 0 }, resolve, reject);\n            });\n            message.success('验证码已发送');\n        }\n        this.countInterval = setInterval(() => {\n            const { count } = this.state;\n            if (count == 0) {\n                this.countInterval = clearInterval(this.countInterval);\n                this.setState({ count: TIME });\n            } else {\n                this.setState({ count: count - 1 });\n            }\n        }, 1000);\n    }\n\n    /** 登录 */\n    handleLogin = () => {\n        const { currentTab } = this.state;\n        this.props.form.validateFields(async (err, values) => {\n            if (err) {\n                return;\n            }\n            if (currentTab == 1) {\n                const data = {\n                    account: values.account,\n                    password: values.password\n                };\n                if (values.remember) {\n                    localStorage.setItem('account', values.account);\n                    localStorage.setItem('remember', 1);\n                } else {\n                    localStorage.removeItem('account');\n                    localStorage.setItem('remember', 0);\n                }\n                await new Promise((resolve, reject) => {\n                    this.props.loginByPassword(data, resolve, reject);\n                });\n            } else if (currentTab == 2) {\n                const data = {\n                    account: values.phone,\n                    verificationCode: values.code\n                };\n                await new Promise((resolve, reject) => {\n                    this.props.loginByCode(data, resolve, reject);\n                });\n            }\n            message.success('登录成功');\n            this.props.onCancel();\n        });\n    }\n\n    /** 第三方登录 */\n    handleThirdPartyLogin = async (code) => {\n        const { thirdPartyType, redirectUri } = this.state;\n        const data = {\n            code,\n            redirectUri,\n            thirdPartyType,\n            os: 'pc_web'\n        };\n        try {\n            await new Promise((resolve, reject) => {\n                this.props.loginByThirdParty(data, resolve, reject);\n            });\n            message.success('登录成功');\n            this.props.onCancel();\n        } catch (error) {\n            message.error('登录失败');\n        }\n    }\n\n    render() {\n        const { count, currentTab } = this.state;\n        const { form, visible, isRequesting } = this.props;\n        const { getFieldDecorator } = form;\n        return (\n            <Modal\n                className={styles['login-modal']}\n                visible={visible}\n                width={440}\n                footer={null}\n                mask={false}\n                maskClosable={false}\n                onCancel={this.props.onCancel}\n            >\n                <Tabs className={styles['login-tabs']} onChange={this.handleChangeTab} animated={false}>\n                    <TabPane tab='短信登录' key='2'>\n                        {currentTab == 2 &&\n                            <Form>\n                                <FormItem>\n                                    {getFieldDecorator('phone', {\n                                        rules: [\n                                            { required: true, message: '请输入手机号码' },\n                                            { validator: this.validatePhone }\n                                        ],\n                                        validateTrigger: 'onBlur'\n                                    })(\n                                        <Input type='text' placeholder='手机号码' allowClear />\n                                    )}\n                                </FormItem>\n                                <FormItem className={styles['form-item']}>\n                                    {getFieldDecorator('code', {\n                                        rules: [{ required: true, message: '请输入验证码' }],\n                                    })(\n                                        <Input\n                                            className={styles['field-code']}\n                                            placeholder='验证码'\n                                            maxLength={6}\n                                            allowClear\n                                        />\n                                    )}\n                                    <Button\n                                        className={styles['btn-get-code']}\n                                        type='primary'\n                                        shape='round'\n                                        disabled={count < TIME}\n                                        onClick={this.handleGetCode}\n                                    >\n                                        {count < TIME ? `${count}s后重新获取` : '获取验证码'}\n                                    </Button>\n                                </FormItem>\n                            </Form>\n                        }\n                    </TabPane>\n                    <TabPane tab='账号登录' key='1'>\n                        <div className={styles['error-tip']}>\n                        </div>\n                        {currentTab == 1 &&\n                            <Form>\n                                <FormItem>\n                                    {getFieldDecorator('account', {\n                                        rules: [\n                                            { required: true, message: '请输入手机号码' },\n                                            { validator: this.validatePhone }\n                                        ],\n                                        preserve: true,\n                                        validateTrigger: 'onBlur'\n                                    })(\n                                        <Input type='text' placeholder='手机号码' allowClear />\n                                    )}\n                                </FormItem>\n                                <FormItem>\n                                    {getFieldDecorator('password', {\n                                        rules: [{ required: true, message: '请输入密码' }]\n                                    })(\n                                        <Input type='password' placeholder='密码' allowClear />\n                                    )}\n                                </FormItem>\n                                <FormItem className={styles['form-item']}>\n                                    {getFieldDecorator('remember', {\n                                        initialValue: true,\n                                        valuePropName: 'checked'\n                                    })(\n                                        <Checkbox>记住我</Checkbox>\n                                    )}\n                                </FormItem>\n                                {/* <a className={styles['btn-forget-pwd']}>忘记密码</a> */}\n                            </Form>\n                        }\n                    </TabPane>\n\n                </Tabs>\n                <Button\n                    className={styles['btn-login']}\n                    type='primary'\n                    shape='round'\n                    block\n                    onClick={this.handleLogin}\n                    loading={isRequesting}\n                >\n                    登录\n                </Button>\n                <div className={styles['other-ways']}>\n                    其他方式\n                    <div className={styles['third-part']}>\n                        <a onClick={() => { this.handleToThirdPartyLogin(0); }}>\n                            <img src={require('Public/images/web_login_wx_color.png')} />\n                        </a>\n                        <a onClick={() => { this.handleToThirdPartyLogin(1); }}>\n                            <img src={require('Public/images/web_login_qq_color.png')} />\n                        </a>\n                        {/* <a onClick={() => { this.handleToThirdPartyLogin(2); }}>\n                            <img src={require('Public/images/web_login_sina_color.png')} />\n                        </a> */}\n                    </div>\n                    <a className={styles['link-register']} onClick={this.handleToRegister}>立刻注册</a>\n                </div>\n            </Modal>\n        );\n    }\n}\n\nexport default LoginModal;\n","export const KEY = {\n    0: 'weixin',\n    1: 'qq',\n    2: 'weibo'\n};\n\nexport const THIRD_PARTY_LOGIN = {\n    [KEY[0]]: 'wxd7bd1275309388de',\n    [KEY[1]]: '101809854',\n    [KEY[2]]: ''\n};\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"login-modal\":\"index__login-modal___lf7RS\",\"login-tabs\":\"index__login-tabs___2Dnhl\",\"form-item\":\"index__form-item___3Ys0n\",\"field-code\":\"index__field-code____OdUy\",\"btn-get-code\":\"index__btn-get-code___kHZ1R\",\"btn-forget-pwd\":\"index__btn-forget-pwd___1LY60\",\"btn-login\":\"index__btn-login___168nc\",\"other-ways\":\"index__other-ways___jo56W\",\"third-part\":\"index__third-part___2Snmj\",\"link-register\":\"index__link-register___14MEE\"};","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAkCAYAAAAOwvOmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REJDNTU2RUE1QTU4MTFFNzg1QTdERDU5MjNFQzFGMzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REJDNTU2RUI1QTU4MTFFNzg1QTdERDU5MjNFQzFGMzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQkM1NTZFODVBNTgxMUU3ODVBN0RENTkyM0VDMUYzMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEQkM1NTZFOTVBNTgxMUU3ODVBN0RENTkyM0VDMUYzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvWJkWsAAAPCSURBVHja7JhpSFRRFMcdKxWtD5Zb9cWkhSwzgyg12oSKyqDSNiwCqYiiEizUIiwwySKKvoRRUJkaLVZC0UZEYh8qrYjIFqIUW8kllxhHp/+h/8Dt+Z7zZpxkgg78eDP33nn3vHPOPee8sdjtdh9vE18fLxSvVKp/aNW+Ptvs66Qcc0q5ce8hIAwEgRZQx6vnLGVijT9YAlLBDDBYM98JXoIr4DSo+ZtKSbytA7vBMGW8EXwErWAgiALjSBYoBpngs6cDPQLcAceo0CuQAcaCYBANJvP7IDATFIIOkAaegVmeVGoEqORGDWANNz9MN2nFCu6BDWA0uMmYuw4WeEIpeeobVKwKxIIzoMvk/T6AeeAIY7GEbu2VUmKNUeA5mA1q3XhQKRHbQBEf8oSr+VBdLFZZS3csB03KnAUkgzidewzg+kjN+Eamiykgwd3Tt5lKHgcvNOskNq6Cdh6CZmVuCzhI68Yo45K7FoMUUC0DZhK1JFhVqWReC3XW1lEhuf7UzL1jzL1WxkYytsbz9IoL68F9HoRWM5YaDsLBFx5nrTwBQ6mYVTN3SYzA/CVu2guSDPbLoJUP0bqtPSkVzmtPgd3kZC4P7GAIyMZloILW9eMpnA+mgVywlO59a6SUo3YFuXHa+oFSxo4NFJAGzTqJyXwQz7iNYX5LBO/1Tl8ts3EkS4crspMKtYE5IFtHIVUegKngLsOmiKe7m1LtNHUAWOiCQhLQu5ibVnAjMyKeWQY+0Z0pRnmqhNcsusSMbGKekqxfzrFUpoAYnfVSS68xbL6BPUpa0VXqFMtELHOWGVnE61FlTAr1RFpRK1JPp4NAfi9l2MSrYeOrKaxb+bmAfu9Jgti22JgyHJLDAl6m85sEFu1mpQ2qoWeijGrfZdY/P36OcNL8OeLRpozbDLoJke9Moqq0K+XKsHXZzpiQ3DWX/vc3yE1tLLqhbrZOgezNutR8paeUjS2uSDqzfCNbmkyelhCuqeC6lW4qtZ5hUMk9flf/kMd5elX/h8Y6dm0uYY0URS9KHWVw17ugUBjdHMz0cN5RkPUsJaZ8yqqfy6AVV66mIo94nFtY98rpvtusj2arQDEVkqx+wdmLQyd7IK0UEa2kU6EJjMVsrutwkt+SaOE0eqJX733dWiBucI7d6kkW51vgIa0awIKcyHbG0f4cYMH+Qyzu/MFh0KxJzK1inoo2eat8rjds8nor8nRnSRyzdxRPqpVH3hGP+zlv9dRruxmpdrTABiLvhGPAm75UyowYvt5b/v9p9i8r9UuAAQB85+kNxwTQyQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAlCAYAAAAqXEs9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REJDNTU2RTY1QTU4MTFFNzg1QTdERDU5MjNFQzFGMzMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REJDNTU2RTc1QTU4MTFFNzg1QTdERDU5MjNFQzFGMzMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEQkM1NTZFNDVBNTgxMUU3ODVBN0RENTkyM0VDMUYzMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEQkM1NTZFNTVBNTgxMUU3ODVBN0RENTkyM0VDMUYzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgrilVMAAAL9SURBVHjazJhJaBRBFIadMSYgKuYgyWhcUDES1ERCcFAwqAiCEjTqHAwR3DDRg4YcxEPcInrTg+i44UIuLqAgisENJODBgBclEkTBDLjviuIgaf8Hf0M5zKSruioxDz5ez0z363+qXle91xHP84YMJstTP5Qm/4+I7sYcggwsApaA1aAKFPH7t6ATXAbtwLMaIU1bAQ6A6Vl+GwNmgHXyx8FOcNUkeNTg3KHgBLhCMV2gGVRyhIp43MzfSnnuSV7rdIRkis6DOvARbAWXskzJO/AIHAYJcBRsAsNBvc4U6o5QE8VIjswDFwOCezxnAfjEa5tcTVkMtIJeJnG3wTQ/BrUUKDHGuhC0nUPeBjpCPAT3mUsSY5utoCjnXuyIxVJzkH5t0D2DBM3klPnJGtbk2jegGMyyEVRFfzvMIpeR5HczYoYSNJX+qYMdwo8xxUbQaPoPDgS9py+0ETSS/rsDQT/oR7jaOgbEogHbRQWPvzm411f6CsY2FrQQlIHX4JYDQfKk9jDmojCCttAfB2kHgtKsFsQaTQWNAzXgDzjtMEXOUJjELjERlGBpch28cihIVutrjJ0wEbSK/kI/PEht9Ct1BUmJEAe/wI1+ENTOJy6erRzJJqiG399UFjOXluZTG+W9AgXNob8DqkGDQzENjOlvtHGdmno2fYoJOIpTl7IUMx4kOeprMu7V5wjF6FspRmySg9EpUfay3Twu1hGUpyzxvs13IKhaOa6kL9ARlFL2nn08Xg/yLcTksx0S26Xsaz06gjaAvRwh8U/AZNBiIaiFMR4yFcrBHv7Rf3d09e1HjpcNMl33KH4zOGUoZiO71172aR19vWzQqYckoX+yZEgaTl0Br4nwXjvY/4dupReDcwwoe9oxrq4xbsDT2MP7tbc0kS+Zh1JlfgZn2WBKObyUO35tWEHLlWJKhOwnuWyuxqiV2YzQITCRQfyC/wv7NOnzX4Bn7Ch+M3FltCZwvSmkH8Yev4v1VWhBz8Eyg5x5YLtYRQbbO8a/AgwAW0yXt34TggwAAAAASUVORK5CYII=\"","import React from 'react';\nimport {\n    Modal, Form, Input, Checkbox, Button, message\n} from 'antd';\nimport { connect } from 'react-redux';\n\nimport * as AccountActions from 'Global/account/actions';\nimport AccountSelectors from 'Global/account/selectors';\n\nimport * as REG from 'Constants/reg';\nimport styles from './index.less';\n\nconst FormItem = Form.Item;\nconst TIME = 60;\n\n@connect(AccountSelectors, {\n    register: AccountActions.register.request,\n    getVerificationCode: AccountActions.getVerificationCode.request\n})\n@Form.create({})\nclass LoginModal extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currentTab: 1,\n            count: 60\n        };\n    }\n\n    componentWillUnmount() {\n        this.countInterval = clearInterval(this.countInterval);\n    }\n\n    /** 二次确认密码 */\n    validatePwdConfirm = (rule, value, callback) => {\n        if (value) {\n            const formValues = this.props.form.getFieldsValue();\n            if (formValues.password !== value) {\n                return callback('两次密码输入不一致');\n            }\n        }\n        return callback();\n    }\n\n    /** 跳转到登录 */\n    handleToLogin = () => {\n        this.props.onCancel();\n        this.props.onOpenLogin();\n    }\n\n    /** 获取短信验证码 */\n    handleGetCode = async () => {\n        const formValues = this.props.form.getFieldsValue();\n        const { phone } = formValues;\n        if (!phone || !new RegExp(REG.PHONE_NUMBER.pattern).test(phone)) {\n            message.error(REG.PHONE_NUMBER.text);\n            return;\n        }\n\n        if (this.state.count == TIME) {\n            await new Promise((resolve, reject) => {\n                this.props.getVerificationCode({ mobileNumber: phone, type: 1 }, resolve, reject);\n            });\n            message.success('验证码已发送');\n        }\n        this.countInterval = setInterval(() => {\n            const { count } = this.state;\n            if (count == 0) {\n                this.countInterval = clearInterval(this.countInterval);\n                this.setState({ count: TIME });\n            } else {\n                this.setState({ count: count - 1 });\n            }\n        }, 1000);\n    }\n\n    /** 注册 */\n    handleRegister = () => {\n        const { form } = this.props;\n        form.validateFields(async (err, values) => {\n            if (err) {\n                return;\n            }\n            // if (!values.agree) {\n            //     Modal.warn({ title: '请阅读并同意《用户协议》及《隐私政策》' });\n            //     return;\n            // }\n            const data = {\n                account: values.phone,\n                password: values.password,\n                verificationCode: values.code\n            };\n            await new Promise((resolve, reject) => {\n                this.props.register(data, resolve, reject);\n            });\n            message.success('注册成功');\n            this.handleToLogin();\n        });\n    }\n\n    render() {\n        const { count } = this.state;\n        const { form, visible, isRequesting } = this.props;\n        const { getFieldDecorator } = form;\n        return (\n            <Modal\n                className={styles['register-modal']}\n                visible={visible}\n                width={440}\n                footer={null}\n                mask={false}\n                maskClosable={false}\n                onCancel={this.props.onCancel}\n            >\n                <h4>账号注册</h4>\n                <Form>\n                    <FormItem>\n                        {getFieldDecorator('phone', {\n                            rules: [\n                                { required: true, message: '请输入手机号码' },\n                                { pattern: REG.PHONE_NUMBER.pattern, message: REG.PHONE_NUMBER.text }\n                            ],\n                            validateTrigger: 'onBlur'\n                        })(\n                            <Input type='text' placeholder='手机号码' allowClear />\n                        )}\n                    </FormItem>\n                    <FormItem>\n                        {getFieldDecorator('password', {\n                            rules: [\n                                { required: true, message: '请输入密码' },\n                                { pattern: REG.PASSWORD.pattern, message: REG.PASSWORD.text }\n                            ],\n                            validateTrigger: 'onBlur'\n                        })(\n                            <Input type='password' placeholder='密码' allowClear />\n                        )}\n                    </FormItem>\n                    <FormItem>\n                        {getFieldDecorator('password_confirm', {\n                            rules: [\n                                { required: true, message: '请再次输入密码' },\n                                { validator: this.validatePwdConfirm }\n                            ],\n                            validateTrigger: 'onBlur'\n                        })(\n                            <Input type='password' placeholder='密码确认' allowClear />\n                        )}\n                    </FormItem>\n                    <FormItem>\n                        {getFieldDecorator('code', {\n                            rules: [{ required: true, message: '请输入验证码' }]\n                        })(\n                            <Input\n                                className={styles['field-code']}\n                                placeholder='验证码'\n                                maxLength={6}\n                                allowClear\n                            />\n                        )}\n                        <Button\n                            className={styles['btn-get-code']}\n                            type='primary'\n                            shape='round'\n                            disabled={count < TIME}\n                            onClick={this.handleGetCode}\n                        >\n                            {count < TIME ? `${count}s后重新获取` : '获取验证码'}\n                        </Button>\n                    </FormItem>\n                    {/* <FormItem className={styles['form-item-agree']}>\n                        {getFieldDecorator('agree', {\n                            valuePropName: 'checked'\n                        })(\n                            <Checkbox className={styles['field-agree']}>我已阅读并同意</Checkbox>\n                        )}\n                        <a>《用户协议》</a>\n                        及\n                        <a>《隐私政策》</a>\n                    </FormItem> */}\n                </Form>\n                <Button\n                    className={styles['btn-register']}\n                    type='primary'\n                    shape='round'\n                    block\n                    onClick={this.handleRegister}\n                    loading={isRequesting}\n                >\n                    立即注册\n                </Button>\n                <a onClick={this.handleToLogin}>返回登录</a>\n            </Modal>\n        );\n    }\n}\n\nexport default LoginModal;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"register-modal\":\"index__register-modal___3qJU8\",\"field-code\":\"index__field-code___1yRxD\",\"form-item-agree\":\"index__form-item-agree___1EOk-\",\"btn-get-code\":\"index__btn-get-code___2dwcO\",\"btn-forget-pwd\":\"index__btn-forget-pwd___DVz9D\",\"btn-register\":\"index__btn-register___180s0\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"btn-login-warpper\":\"index__btn-login-warpper___3JYWB\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"user-account\":\"index__user-account___3SsAA\",\"btn-login\":\"index__btn-login___1Md-4\",\"user-avatar-small\":\"index__user-avatar-small___3SbbA\",\"user-login-popover\":\"index__user-login-popover___3yzxP\",\"text\":\"index__text___2IHuY\",\"btn-open-login\":\"index__btn-open-login___FT9eh\",\"user-account-popover\":\"index__user-account-popover___3ung9\",\"info\":\"index__info___YbaV4\",\"user-avatar-big\":\"index__user-avatar-big___agphm\",\"user-name\":\"index__user-name___3NBK4\",\"btn-edit\":\"index__btn-edit___C-A_4\",\"btn-logout\":\"index__btn-logout___I2k1e\",\"edit\":\"index__edit___tXiAm\",\"input-name\":\"index__input-name___2CrZ8\",\"btn-edit-group\":\"index__btn-edit-group___1NQhk\",\"btn-save\":\"index__btn-save___2a8Eo\"};","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import React from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport {\n    Popover, Button, Icon,\n} from 'antd';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport ContentElement from 'Components/ContentElement';\n\nimport * as AccountActions from 'Global/account/actions';\nimport AccountSelectors from 'Global/account/selectors';\n\nimport LoginBtn from '../LoginBtn';\n\nimport styles from './index.less';\n\n@connect(AccountSelectors, {\n    getBrowseHistory: AccountActions.getBrowseHistory.request\n})\nclass History extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            // 仅请求一次历史\n            historyOnce: false,\n            popoverVisible: undefined\n        };\n    }\n\n    /**\n     * 点击登录按钮时让Popover隐藏一下\n     * 此方法属于骚操作\n     * 因为登录按钮属于Popover子元素,正常点击弹窗后Popover不消失\n     * 于是利用Popover的visible属性先隐藏,再去掉visible属性\n     */\n    handleOnClickLogin = () => {\n        this.setState({ popoverVisible: false }, () => {\n            this.setState({ popoverVisible: undefined });\n        });\n    }\n\n    handleOnVisibleChange = (visible) => {\n        const { historyOnce } = this.state;\n        const { userInfo } = this.props;\n        if (userInfo?.pk && visible && !historyOnce) {\n            this.setState({ historyOnce: true }, () => {\n                this.props.getBrowseHistory();\n            });\n        }\n    }\n\n    /** 渲染历史记录卡片 */\n    renderHistoryPopover = () => {\n        const { dateList, historyByDate } = this.props;\n        const today = moment();\n        const dateStrings = {\n            [today.format('YYYY.MM.DD')]: '今天',\n            [today.subtract('day', 1).format('YYYY.MM.DD')]: '昨天',\n        };\n        return (\n            <div className={styles['user-history-popover']}>\n                <Scrollbars autoHide={true} autoHideTimeout={500}>\n                    {dateList?.map((date, i) => {\n                        const str = moment(date).format('YYYY.MM.DD');\n                        return (\n                            <div className={styles['history-date']} key={i}>\n                                <h4>{dateStrings[str] || str}</h4>\n                                {historyByDate[date]?.map((record, j) => (\n                                    <div className={styles.record} key={j}>\n                                        <ContentElement source={record} />\n                                    </div>\n                                ))}\n                            </div>\n                        );\n                    })}\n                </Scrollbars>\n            </div>\n        );\n    }\n\n    renderEmptyPopover = () => {\n        const { userInfo } = this.props;\n        return (\n            <div className={styles['empty-popover']}>\n                <img className={styles.bg} src={require('Public/images/default_view.png')} />\n                <div className={styles.text}>您还没有观看记录</div>\n                {!userInfo?.pk &&\n                    <div className={styles['btn-open-login']}>\n                        <LoginBtn onClick={this.handleOnClickLogin} />\n                    </div>\n                }\n            </div>\n        );\n    }\n\n    render() {\n        const { popoverVisible } = this.state;\n        const { dateList } = this.props;\n        return (\n            <div className={styles['user-history']}>\n                <Popover\n                    trigger='hover'\n                    placement='bottomRight'\n                    content={dateList?.length > 0 ? this.renderHistoryPopover() : this.renderEmptyPopover()}\n                    onVisibleChange={this.handleOnVisibleChange}\n                    getPopupContainer={(e) => e.parentElement}\n                    {...(popoverVisible === undefined ? {} : { visible: popoverVisible })}\n                >\n                    <Button className={styles['btn-history']} shape='round'>\n                        <Icon type='clock-circle' theme='filled' />看过\n                    </Button>\n                </Popover>\n            </div>\n        );\n    }\n}\n\nexport default History;\n","import React, { Component } from 'react';\nimport {\n    Row, Col, Button, Typography, Tag\n} from 'antd';\nimport { TOPIC_ROUTE } from 'Constants/type';\n\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/**\n * 剧集展示模块\n */\nexport default class extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    getSize = () => {\n        const { screenSize } = this.props;\n        switch (screenSize) {\n            case 'xs':\n                return 24;\n            default:\n                return 36;\n        }\n    }\n\n    handleOnExpand = () => { this.setState({ isExpand: true }); }\n\n    handleCloseExpand = () => { this.setState({ isExpand: false }); }\n\n    handleToSeriesVideoDetail = (news, i) => {\n        const { source } = this.props;\n        window.open(`/${TOPIC_ROUTE[0]}/${source.id}/${i + 1}`);\n    }\n\n    renderNewsList = () => {\n        const { source } = this.props;\n        const maxSize = this.getSize();\n        const { length } = source.newsList || [];\n        return (\n            <Row className={styles['news-list']} gutter={10}>\n                {source.newsList?.map((news, i) => (length > maxSize && i < maxSize - 1 || length <= maxSize) && (\n                    <Col {...{ xs: 3, xl: 2, xxl: 2 }} key={i}>\n                        <Button\n                            className={styles['btn-news']}\n                            onClick={() => { this.handleToSeriesVideoDetail(news, i); }}\n                            block\n                        >\n                            {i + 1}\n                        </Button>\n                    </Col>\n                ))}\n                {length > maxSize &&\n                    <Col {...{ xs: 3, xl: 2, xxl: 2 }}>\n                        <a href={`/${TOPIC_ROUTE[0]}/${source.id}`} target='_blank'>\n                            <Button className={styles['btn-news']} block>…</Button>\n                        </a>\n                    </Col>\n                }\n            </Row>\n        );\n    }\n\n    render() {\n        const { isExpand } = this.state;\n        const { source } = this.props;\n        return (\n            <div className={styles['el-series-video']}>\n                <div className={styles['cover-box']}>\n                    <a href={`/${TOPIC_ROUTE[0]}/${source.id}`} target='_blank'>\n                        <div\n                            className={styles.cover}\n                            style={source.coverUrl && {\n                                backgroundImage: `url(${source.coverUrl})`,\n                                backgroundSize: 'cover'\n                            } || {}}\n                        />\n                    </a>\n                </div>\n                <div className={styles.detail} >\n                    <h2>\n                        <a href={`/${TOPIC_ROUTE[0]}/${source.id}`} target='_blank'>\n                            <div dangerouslySetInnerHTML={{ __html: source.title }}></div>\n                        </a>\n                        <Tag>剧集</Tag>\n                    </h2>\n                    <div className={styles.from}>\n                        {source?.newsList?.length >= source?.memberNum\n                            ? `全${source?.memberNum}集`\n                            : `已更新至第${source?.newsList?.length || 0}集`}\n                    </div>\n                    <div className={styles.desc}>\n                        <h4>简介</h4>\n                        {!isExpand &&\n                            <Paragraph ellipsis={{ rows: 2, expandable: true, onExpand: this.handleOnExpand }}>\n                                {source.summary || '暂无简介'}\n                            </Paragraph>\n                        }\n                        {isExpand &&\n                            <div className={styles['desc-text']} onMouseLeave={this.handleCloseExpand}>\n                                {source.summary || '暂无简介'}\n                            </div>\n                        }\n                    </div>\n                    {!isExpand && this.renderNewsList()}\n                </div>\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2d_-I\",\"textOverflow\":\"index__textOverflow___gvfkD\",\"dot\":\"index__dot___2mDWK\",\"navBarIconList\":\"index__navBarIconList___193RX\",\"menu-tv\":\"index__menu-tv___yIAtc\",\"menu-radio\":\"index__menu-radio___2K0Ql\",\"menu-programs\":\"index__menu-programs___2RupT\",\"menu-programs-all\":\"index__menu-programs-all___2GZCx\",\"common-element\":\"index__common-element___JDwH3\",\"content-element\":\"index__content-element___3tEn5\",\"cover-url\":\"index__cover-url___2N-Ay\",\"cover\":\"index__cover___3qc-B\",\"tab-rb\":\"index__tab-rb___3Gale\",\"title\":\"index__title___gjjj8\",\"el-series-video\":\"index__el-series-video___2TvkE\",\"cover-box\":\"index__cover-box___2xAGM\",\"detail\":\"index__detail___BR9Ff\",\"from\":\"index__from___12hOB\",\"desc\":\"index__desc___BpYZz\",\"desc-text\":\"index__desc-text___3yqW2\",\"news-list\":\"index__news-list___dMxLI\",\"btn-news\":\"index__btn-news___2kDYg\"};","import React, { Component } from 'react';\nimport moment from 'moment';\nimport {\n    Row, Col, Button, Typography\n} from 'antd';\nimport { getDetailRoute } from 'Utils/utils';\n\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/**\n * 电视节目展示模块\n */\nexport default class extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    getSize = () => {\n        const { screenSize } = this.props;\n        switch (screenSize) {\n            case 'xs':\n                return 3;\n            default:\n                return 4;\n        }\n    }\n\n    handleOnExpand = () => { this.setState({ isExpand: true }); }\n\n    handleCloseExpand = () => { this.setState({ isExpand: false }); }\n\n    /** 跳转电视节目某集 */\n    handleToTvColumnDetail = (news) => {\n        const { id, contentType } = news;\n        const route = getDetailRoute({\n            source: news,\n            objectType: 0,\n            contentType,\n            sid: id\n        });\n        window.open(route);\n    }\n\n    renderNewsList = () => {\n        const { source } = this.props;\n        const maxSize = this.getSize();\n        const { length } = source.newsList || [];\n        return (\n            <Row className={styles['news-list']} gutter={10}>\n                {source.newsList?.map((news, i) => (length > maxSize && i < maxSize - 1 || length <= maxSize) && (\n                    <Col {...{ xs: 8, xl: 6, xxl: 6 }} key={i}>\n                        <Button\n                            className={styles['btn-news']}\n                            onClick={() => { this.handleToTvColumnDetail(news); }}\n                            block\n                        >\n                            {moment(news.releasedAt).format('YYYY-MM-DD')}期 {news.title}\n                        </Button>\n                    </Col>\n                ))}\n                {length > maxSize &&\n                    <Col {...{ xs: 8, xl: 6, xxl: 6 }}>\n                        <a href={`/tvColumn/${source.pk}`} target='_blank'>\n                            <Button className={styles['btn-news']} block>更多</Button>\n                        </a>\n                    </Col>\n                }\n            </Row>\n        );\n    }\n\n    render() {\n        const { isExpand } = this.state;\n        const { source } = this.props;\n        return (\n            <div className={styles['el-tv-column']}>\n                <div className={styles['cover-box']}>\n                    <a href={`/tvColumn/${source.pk}`} target='_blank'>\n                        <div\n                            className={styles.cover}\n                            style={source.coverUrl && {\n                                backgroundImage: `url(${source.coverUrl})`,\n                                backgroundSize: 'cover'\n                            } || {}}\n                        />\n                    </a>\n                </div>\n                <div className={styles.detail} >\n                    <h2>\n                        <a href={`/tvColumn/${source.pk}`} target='_blank'>\n                            <div dangerouslySetInnerHTML={{ __html: source.name }}></div>\n                        </a>\n                    </h2>\n                    <div className={styles.from}>\n                        <div>最近更新：<span>{moment(source.updateAt).format('YYYY-MM-DD')}</span></div>\n                        {source.tvChannelName &&\n                            <div>来源：<span>{source.tvChannelName}</span></div>\n                        }\n                    </div>\n                    <div className={styles.desc}>\n                        <b>简介</b>\n                        {!isExpand &&\n                            <Paragraph\n                                className={styles['desc-text']}\n                                ellipsis={{ rows: 1, expandable: true, onExpand: this.handleOnExpand }}\n                            >\n                                {source.desc || '暂无简介'}\n                            </Paragraph>\n                        }\n                        {isExpand &&\n                            <div className={styles['desc-text']} onMouseLeave={this.handleCloseExpand}>\n                                {source.desc || '暂无简介'}\n                            </div>\n                        }\n                    </div>\n                    {!isExpand && this.renderNewsList()}\n                </div>\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___bzMRE\",\"textOverflow\":\"index__textOverflow___1Ea87\",\"dot\":\"index__dot___19-dV\",\"navBarIconList\":\"index__navBarIconList___3d9rZ\",\"menu-tv\":\"index__menu-tv___Sg1S1\",\"menu-radio\":\"index__menu-radio___1Z-F4\",\"menu-programs\":\"index__menu-programs___1Nn8T\",\"menu-programs-all\":\"index__menu-programs-all___1p3VT\",\"common-element\":\"index__common-element___2nWyl\",\"content-element\":\"index__content-element___qKcax\",\"cover-url\":\"index__cover-url___1qm5p\",\"cover\":\"index__cover___23Rr5\",\"tab-rb\":\"index__tab-rb___1SQNz\",\"title\":\"index__title___3ID8B\",\"el-tv-column\":\"index__el-tv-column___1P6C3\",\"cover-box\":\"index__cover-box___1bOoM\",\"detail\":\"index__detail___HvyPB\",\"from\":\"index__from___YU-NK\",\"desc\":\"index__desc___2C3wl\",\"desc-text\":\"index__desc-text___3YJfU\",\"news-list\":\"index__news-list___13xuo\",\"btn-news\":\"index__btn-news___26JV1\"};","import React, { Component } from 'react';\nimport moment from 'moment';\nimport { renderOverlay } from 'Components/CardBox/tools';\n\nimport { getDetailRoute } from 'Utils/utils';\n\nimport styles from './index.less';\n\n/** 新闻内容类型文字 */\nconst NEWS_CONTENT_TYPE = {\n    undefined: '未知',\n    0: '图文',\n    1: '视频',\n    2: '图集',\n    // 电视节目下单个视频\n    3: '视频',\n    // 剧集下单个视频\n    4: '视频',\n    5: '外链'\n};\n\n/**\n * 新闻展示模块\n * [0图文|1视频|2图集|3电视节目|4剧集|5外链]\n */\nexport default class extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    handleClick = () => {\n        const { source } = this.props;\n        const route = getDetailRoute({\n            source,\n            objectType: 0,\n            contentType: source.contentType,\n            sid: source.id\n        });\n        window.open(route);\n    }\n\n    /** 显示角标 */\n    renderTagRb = () => {\n        const { source = {} } = this.props;\n        return renderOverlay(source);\n    }\n\n    render() {\n        const { source } = this.props;\n        return (\n            <div className={styles['el-news']}>\n                <div className={styles['cover-box']}>\n                    <a onClick={this.handleClick}>\n                        <div\n                            className={styles.cover}\n                            style={source.coverUrl && {\n                                backgroundImage: `url(${source.coverUrl})`,\n                                backgroundSize: 'cover'\n                            } || {}}\n                        />\n                    </a>\n                    {this.renderTagRb()}\n                </div>\n                <div className={styles.detail} >\n                    <h2>\n                        <a onClick={this.handleClick}>\n                            <div dangerouslySetInnerHTML={{ __html: source.title }}></div>\n                        </a>\n                    </h2>\n                    <div className={styles.from}>\n                        <div>最近更新：<span>{moment(source.releasedAt).format('YYYY-MM-DD')}</span></div>\n                        <div>类型：<span>{NEWS_CONTENT_TYPE[source.contentType]}</span></div>\n                    </div>\n                    <div className={styles['sub-title']}>\n                        {source.subTitle}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2x3lL\",\"textOverflow\":\"index__textOverflow___aWd3a\",\"dot\":\"index__dot___20J55\",\"navBarIconList\":\"index__navBarIconList___3tNw6\",\"menu-tv\":\"index__menu-tv___1xQBL\",\"menu-radio\":\"index__menu-radio___24fpq\",\"menu-programs\":\"index__menu-programs___g1ADb\",\"menu-programs-all\":\"index__menu-programs-all___1LJ-b\",\"common-element\":\"index__common-element___1iyHr\",\"content-element\":\"index__content-element___3nBSi\",\"cover-url\":\"index__cover-url___2Njse\",\"cover\":\"index__cover___3gTuH\",\"tab-rb\":\"index__tab-rb___1OWPK\",\"title\":\"index__title___Nh0cg\",\"el-news\":\"index__el-news___1oSzT\",\"cover-box\":\"index__cover-box___29S24\",\"detail\":\"index__detail___2PlKU\",\"from\":\"index__from___1Uu8v\",\"sub-title\":\"index__sub-title___315ac\"};","import React, { Component } from 'react';\nimport moment from 'moment';\nimport {\n    Row, Col, Button, Typography, Tag\n} from 'antd';\n\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/**\n * 专题展示模块\n */\nexport default class extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    handleOnExpand = () => { this.setState({ isExpand: true }); }\n\n    handleCloseExpand = () => { this.setState({ isExpand: false }); }\n\n    render() {\n        const { isExpand } = this.state;\n        const { source } = this.props;\n        return (\n            <div className={styles['el-topic']}>\n                <div className={styles['cover-box']}>\n                    <a href={`/topic/${source.id}`} target='_blank'>\n                        <div\n                            className={styles.cover}\n                            style={source.coverUrl && {\n                                backgroundImage: `url(${source.coverUrl})`,\n                                backgroundSize: 'cover'\n                            } || {}}\n                        />\n                    </a>\n                </div>\n                <div className={styles.detail} >\n                    <h2>\n                        <a href={`/topic/${source.id}`} target='_blank'>\n                            <div dangerouslySetInnerHTML={{ __html: source.title }}></div>\n                        </a>\n                        <Tag>专题</Tag>\n                    </h2>\n                    <div className={styles.from}>\n                        <div>最近更新：<span>{moment(source.updateAt).format('YYYY-MM-DD')}</span></div>\n                        {source.tvChannelName &&\n                            <div>来源：<span>{source.tvChannelName}</span></div>\n                        }\n                    </div>\n                    <div className={styles.desc}>\n                        <b>简介</b>\n                        {!isExpand &&\n                            <Paragraph\n                                className={styles['desc-text']}\n                                ellipsis={{ rows: 2, expandable: true, onExpand: this.handleOnExpand }}\n                            >\n                                {source.desc || '暂无简介'}\n                            </Paragraph>\n                        }\n                        {isExpand &&\n                            <div className={styles['desc-text']} onMouseLeave={this.handleCloseExpand}>\n                                {source.desc || '暂无简介'}\n                            </div>\n                        }\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___TJdNG\",\"textOverflow\":\"index__textOverflow___2tWWd\",\"dot\":\"index__dot___1hJJy\",\"navBarIconList\":\"index__navBarIconList___1YBEB\",\"menu-tv\":\"index__menu-tv___BLkPR\",\"menu-radio\":\"index__menu-radio___1a5CF\",\"menu-programs\":\"index__menu-programs___2WaMk\",\"menu-programs-all\":\"index__menu-programs-all___3BYGP\",\"common-element\":\"index__common-element___4_l0C\",\"content-element\":\"index__content-element___3mvsU\",\"cover-url\":\"index__cover-url___3oASd\",\"cover\":\"index__cover___3CN8n\",\"tab-rb\":\"index__tab-rb___3vzgZ\",\"title\":\"index__title___1hnPF\",\"el-topic\":\"index__el-topic___tzFC4\",\"cover-box\":\"index__cover-box___1_BQV\",\"detail\":\"index__detail___3em9c\",\"from\":\"index__from___3Amdt\",\"desc\":\"index__desc___UiINX\",\"desc-text\":\"index__desc-text___7H7Wg\",\"news-list\":\"index__news-list___kUjWx\",\"btn-news\":\"index__btn-news___1FJT_\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___zqchb\",\"textOverflow\":\"index__textOverflow___ocDFJ\",\"dot\":\"index__dot___3STNJ\",\"navBarIconList\":\"index__navBarIconList___eW0T1\",\"menu-tv\":\"index__menu-tv___3knlJ\",\"menu-radio\":\"index__menu-radio___wwjKO\",\"menu-programs\":\"index__menu-programs___20-X4\",\"menu-programs-all\":\"index__menu-programs-all___3jT8w\",\"common-element\":\"index__common-element___2it4s\",\"content-element\":\"index__content-element___1B7v0\",\"cover-url\":\"index__cover-url___6TyGu\",\"cover\":\"index__cover___2jBmu\",\"tab-rb\":\"index__tab-rb___3LV4S\",\"title\":\"index__title___1hisv\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"user-history\":\"index__user-history___3ij4e\",\"btn-history\":\"index__btn-history___JjHhF\",\"user-history-popover\":\"index__user-history-popover___2VRds\",\"history-date\":\"index__history-date___3oR3B\",\"record\":\"index__record___29mw3\",\"empty-popover\":\"index__empty-popover___1EWRL\",\"bg\":\"index__bg___12tKy\",\"text\":\"index__text___12645\",\"btn-open-login\":\"index__btn-open-login___2_a53\"};","module.exports = \"data:image/png;base64,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\"","// removed by extract-text-webpack-plugin\nmodule.exports = {\"user-wrap\":\"index__user-wrap___2sN0_\"};","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___BcKRc\",\"textOverflow\":\"index__textOverflow___136ZC\",\"dot\":\"index__dot___2-KZ7\",\"navBarIconList\":\"index__navBarIconList___1RwVh\",\"menu-tv\":\"index__menu-tv___2br9I\",\"menu-radio\":\"index__menu-radio___2-p0H\",\"menu-programs\":\"index__menu-programs___1qnTF\",\"menu-programs-all\":\"index__menu-programs-all___2xHN1\",\"header-container\":\"index__header-container___1pTAu\",\"header-wrap\":\"index__header-wrap___knF3V\",\"header-fixed\":\"index__header-fixed___1Pls3\",\"header-white\":\"index__header-white___1BGwN\",\"header\":\"index__header___34phD\",\"header-search\":\"index__header-search___1kgjA\",\"header-logo\":\"index__header-logo___3M9cB\",\"logo\":\"index__logo___2214i\",\"header-channel\":\"index__header-channel___2uLLO\",\"header-nav\":\"index__header-nav___27Wk2\",\"nav-bar-icon\":\"index__nav-bar-icon___16NQW\",\"nav-bar-icon-cover\":\"index__nav-bar-icon-cover___OIipC\",\"header-right\":\"index__header-right___14vpk\",\"top-links-bar\":\"index__top-links-bar___1SgFO\",\"back-to-top\":\"index__back-to-top___2235b\",\"btn\":\"index__btn___102vm\"};","import React, { Component } from 'react';\nimport { isMobile } from 'Utils/utils';\nimport { NEWS_ROUTE } from 'Constants/type';\nimport { DISPLAY_ROUTE } from './constants';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 通用banner\n * \n * Author: xuchunhua \n * use: [ 页面通用banner展示 ]\n * \n */\nexport default class HeaderBanner extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            displayMap: {},\n            timmer: []\n        };\n    }\n\n    componentDidMount() {\n        this.handleInitTimmer(this.props.bannerList);\n    }\n\n    componentWillUnmount() {\n        const { timmer } = this.state;\n        timmer.forEach(t => {\n            clearTimeout(t);\n        });\n    }\n\n    /** \n     * 给子元素设置定时器\n     * 没有延迟显示 show\n     * 延时显示 timeout show\n     * 显示后再延时隐藏 timeout hide\n     */\n    handleInitTimmer = (list = []) => {\n        list.forEach(item => {\n            this.handleShowBanner(item);\n        });\n    }\n\n    /** 定时显示banner */\n    handleShowBanner = (banner) => {\n        const { timmer, displayMap } = this.state;\n        const { appearOffset, disappearOffset, pk } = banner;\n        const t = setTimeout(() => {\n            if (this) {\n                displayMap[pk] = true;\n                this.setState({ displayMap });\n                if (disappearOffset) {\n                    this.handleHideBanner(banner);\n                }\n            }\n        }, appearOffset || 100);\n        timmer.push(t);\n        this.setState({ timmer });\n    }\n\n    /** 定时隐藏banner */\n    handleHideBanner = (banner) => {\n        const { timmer, displayMap } = this.state;\n        const { disappearOffset, pk } = banner;\n        const t = setTimeout(() => {\n            if (this) {\n                displayMap[pk] = false;\n                this.setState({ displayMap });\n            }\n        }, disappearOffset);\n        timmer.push(t);\n        this.setState({ timmer });\n    }\n\n    handleClick = (item) => {\n        const { target, targetType } = item;\n        switch (`${targetType}`) {\n            case '0':\n                window.open(target);\n                break;\n            case '1': {\n                try {\n                    const news = JSON.parse(target);\n                    const { newsPk, contentType } = news;\n                    window.open(`/${NEWS_ROUTE[contentType]}/${newsPk}`);\n                } catch (error) {\n                    console.log(error);\n                }\n                break;\n            }\n            case '2':\n                // 跳转分类\n                window.open(`/channels/${target}`);\n                break;\n            default:\n                break;\n        }\n    }\n\n    render() {\n        const { history, bannerList = [] } = this.props;\n        const { displayMap } = this.state;\n        const { pathname } = history?.location || {};\n        let show = false;\n        if (DISPLAY_ROUTE[0].includes(pathname)) {\n            show = true;\n        }\n        return (\n            <div className={styles['header-banner']}>\n                {show && bannerList.map(banner => displayMap[banner.pk] && (\n                    <div\n                        className={[\n                            styles.banner,\n                            typeof window == 'object' && isMobile() && styles['is-mobile'] || ''\n                        ].join(' ')}\n                        style={{ backgroundColor: banner.backgroundColor }}\n                        onClick={() => { this.handleClick(banner); }}\n                        title={banner.title}\n                        key={banner.pk}\n                    >\n                        <img src={banner.coverUrl} crossOrigin='anonymous' />\n                    </div>\n                ))}\n            </div>\n        );\n    }\n}\n","export const DISPLAY_ROUTE = {\n    0: ['/', '/index']\n};\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"header-banner\":\"index__header-banner___EI8N8\",\"banner\":\"index__banner___2CS-X\",\"hidden\":\"index__hidden___2HyCT\",\"is-mobile\":\"index__is-mobile___24x0l\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"page-layout\":\"index__page-layout___2Tqgb\",\"page-container\":\"index__page-container___rFuDx\"};","import React from 'react';\n\nclass ErrorBoundary extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = { hasError: false };\n    }\n\n    componentDidCatch(error, info) {\n        this.setState({ hasError: true });\n        console.log('componentDidCatch', error, info);\n        this.props.history.replace('/404');\n    }\n\n    render() {\n        return this.props.children;\n    }\n}\n\nexport default ErrorBoundary;\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'NEWS_DETAIL_PAGE';\n\nexport const { getNewsContent, GET_NEWS_CONTENT } = apiAction('GET_NEWS_CONTENT', Module);\n\nexport const { getChannelInfo, GET_CHANNEL_INFO } = apiAction('GET_CHANNEL_INFO', Module);\n\nexport const { getRecentlyNewsList, GET_RECENTLY_NEWS_LIST } = apiAction('GET_RECENTLY_NEWS_LIST', Module);\n\nexport const { getRecommendList, GET_RECOMMEND_LIST } = apiAction('GET_RECOMMEND_LIST', Module);\n\nexport const { getMoreList, GET_MORE_LIST } = apiAction('GET_MORE_LIST', Module);\n\nexport const { getColumnVideoList, GET_COLUMN_VIDEO_LIST } = apiAction('GET_COLUMN_VIDEO_LIST', Module);\n\nexport const { getMoreColumnVideoList, GET_MORE_COLUMN_VIDEO_LIST } = apiAction('GET_MORE_COLUMN_VIDEO_LIST', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { matchPath, Router } from 'react-router';\n\n// ensure we're using the exact code for default root match\nconst { computeMatch } = Router.prototype;\n\nconst matchRoutes = (routes = [], pathname, branch = []) => {\n    routes.some(route => {\n        let matchStr = computeMatch(pathname);\n        if (route.path) {\n            matchStr = matchPath(pathname, route);\n        } else if (branch.length) {\n            matchStr = branch[branch.length - 1].match;\n        }\n        if (matchStr) {\n            branch.push({ route, matchStr });\n            if (route.routes) {\n                matchRoutes(route.routes, pathname, branch);\n            }\n        }\n        return matchStr;\n    });\n    return branch;\n};\nexport default matchRoutes;\n","import React, { Component } from 'react';\nimport Swiper from 'swiper';\nimport ReactDom from 'react-dom';\n\nimport { NEWS_ROUTE } from 'Constants/type';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport '../../../../node_modules/swiper/dist/css/swiper.min.css';\nimport styles from './index.less';\n\n/**\n * ModuleName: 首页轮播图\n * \n * Author: xuchunhua \n * use: [ 首页轮播图展示 ]\n * \n*/\nclass SwiperBox extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {};\n        this.mySwiper = undefined;\n    }\n\n    componentDidMount() {\n        const mySwiper = new Swiper('.swiper-container', {\n            loop: false,\n            // effect: 'fade',\n            autoplay: true,\n            observer: true,\n            direction: 'horizontal',\n            pagination: {\n                el: '.swiper-pagination',\n                clickable: true,\n                renderBullet: this.renderBullet\n            }\n        });\n\n        // 鼠标覆盖停止自动切换\n        mySwiper.el.onmouseover = function () {\n            mySwiper.autoplay.stop();\n        };\n        // 鼠标移出启动自动切换\n        mySwiper.el.onmouseout = function () {\n            mySwiper.autoplay.start();\n        };\n        mySwiper.pagination.el.onmouseout = function () {\n            mySwiper.autoplay.start();\n        };\n        this.mySwiper = mySwiper;\n    }\n\n    /** 渐变图层 */\n    getGradientBg = (bgColor) => bgColor && ({\n        background: `linear-gradient(to right, ${bgColor}, rgba(0, 0, 0, 0))`\n    })\n\n    handleClick = (item) => {\n        const { target, targetType } = item;\n        switch (`${targetType}`) {\n            case '0':\n                window.open(target);\n                break;\n            case '1': {\n                try {\n                    const news = JSON.parse(target);\n                    const { newsPk, contentType } = news;\n                    window.open(`/${NEWS_ROUTE[contentType]}/${newsPk}`);\n                } catch (error) {\n                    console.log(error);\n                }\n                break;\n            }\n            case '2':\n                // 跳转分类\n                window.open(`/channels/${target}`);\n                break;\n            default:\n                break;\n        }\n    }\n\n    renderBullet = (i, className) => {\n        const { bannerData = [] } = this.props;\n        const item = bannerData[i];\n        return item &&\n            `<span class='${className}'>\n                <div class='${styles['swiper-tab-pane']}' >\n                    <div class='${styles['pane-title']}'>${item.title}</div>\n                    <div class='${styles['pane-sub-title']}'>${item.subTitle}</div>\n                </div>\n            </span>`\n            || '';\n    }\n\n    render() {\n        const { bannerData = [] } = this.props;\n        const list = bannerData.slice(0, 7);\n        return (\n            <div className={[styles['swiper-box'], responsiveStyles.layout].join(' ')}>\n                <div className={['swiper-container', styles.swiper].join(' ')}>\n                    <div className='swiper-wrapper'>\n                        {list.map((item, i) => (\n                            <div\n                                className='swiper-slide'\n                                style={{ background: item.backgroundColor }}\n                                key={i}\n                            >\n                                <div\n                                    className={styles['swiper-bg']}\n                                    style={{ backgroundImage: `url(${item.coverUrl})` }}\n                                    onClick={() => { this.handleClick(item); }}\n                                >\n                                    {/* <div\n                                        className={[styles['bg-gradient'], styles['bg-gradient-left']].join(' ')}\n                                        style={this.getGradientBg(item.backgroundColor)}\n                                    />\n                                    <div\n                                        className={[styles['bg-gradient'], styles['bg-gradient-right']].join(' ')}\n                                        style={this.getGradientBg(item.backgroundColor)}\n                                    /> */}\n                                </div>\n                            </div>\n                        ))}\n                    </div>\n                </div>\n                <div className={styles['pagination-container']}>\n                    <div\n                        className={[\n                            'swiper-pagination',\n                            responsiveStyles.content,\n                            list.length == 6 && styles['page-size-VI'] || ''\n                        ].join(' ')}\n                    >\n                        {list.map((item, i) => (\n                            <div className={['swiper-pagination-bullet', i === 0 && 'swiper-pagination-bullet-active'].join(' ')} key={i}>\n                                <div className={styles['swiper-tab-pane']}>\n                                    <div className={styles['pane-title']}>{item.title}</div>\n                                    <div className={styles['pane-sub-title']}>{item.subTitle}</div>\n                                </div>\n                            </div>\n                        ))}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default SwiperBox;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___12o_9\",\"textOverflow\":\"index__textOverflow___2Neym\",\"dot\":\"index__dot___1RQe9\",\"navBarIconList\":\"index__navBarIconList___nJOpK\",\"menu-tv\":\"index__menu-tv___2Oivb\",\"menu-radio\":\"index__menu-radio___3N0A1\",\"menu-programs\":\"index__menu-programs___ptBX2\",\"menu-programs-all\":\"index__menu-programs-all___ztEKv\",\"swiper-box\":\"index__swiper-box___1m8T5\",\"swiper\":\"index__swiper___3KT3k\",\"swiper-bg\":\"index__swiper-bg___2wBsu\",\"bg-gradient\":\"index__bg-gradient___3mmtv\",\"bg-gradient-left\":\"index__bg-gradient-left___1VwyC\",\"bg-gradient-right\":\"index__bg-gradient-right___1k5rI\",\"pagination-container\":\"index__pagination-container___xK0eH\",\"swiper-tab-pane\":\"index__swiper-tab-pane___1z6ZF\",\"pane-title\":\"index__pane-title___pJlIi\",\"pane-sub-title\":\"index__pane-sub-title___q_ohI\",\"page-size-VI\":\"index__page-size-VI___35KG7\"};","import React from 'react';\nimport { Row, Col } from 'antd';\n\nimport { gridArray } from 'Utils/tools';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport styles from './index.less';\nimport { menu } from './constants';\n\n/**\n * ModuleName: NavBar 导航栏\n * \n * use: [ 用于首页的导航 ]\n * \n */\nexport default class NavBar extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            showMore: false,\n            size: 0\n        };\n    }\n\n    handleOpenMore = (e) => {\n        e.stopPropagation();\n        this.setState({ showMore: true });\n    }\n\n    handleCloseMore = () => {\n        this.setState({ showMore: false });\n    }\n\n    handleComposeChannels = () => {\n        const size = this.getSize();\n        const { channelList = [] } = this.props;\n        let col = 0;\n        if (channelList.length > size) {\n            col = size / 2;\n        } else {\n            col = channelList.length / 2;\n        }\n        return gridArray(channelList, col || 0);\n    }\n\n    getSize = () => {\n        const { screenSize } = this.props;\n        switch (screenSize) {\n            case 'xs':\n                return 8;\n            case 'xl':\n                return 12;\n            default:\n                return 16;\n        }\n    }\n\n    renderNavChannel = (data) => (\n        <a\n            className={styles['nav-bar-channel']}\n            href={`/${data.target || 'channels'}/${data.pk}`}\n            target='_blank'\n            key={`${data.pk}-${data.name}`}\n        >\n            {data.name}\n        </a>\n    )\n\n    render() {\n        const size = this.getSize();\n        const { showMore } = this.state;\n        const { channelList = [] } = this.props;\n        const composeChannels = this.handleComposeChannels();\n        return (\n            <div className={[styles['nav-bar-container'], responsiveStyles.layout].join(' ')}>\n                <div className={[styles['nav-bar'], responsiveStyles.content].join(' ')}>\n                    <Row onClick={this.handleCloseMore}>\n                        <Col span={16}>\n                            <div\n                                className={[styles['nav-bar-channel-list'], showMore && styles['open-more']].join(' ')}\n                                onMouseLeave={this.handleCloseMore}\n                                tabIndex='0'\n                                hidefocus='true'\n                            >\n                                {composeChannels.map((channels, i) => (\n                                    <div className={styles['nav-bar-channel-group']} key={i}>\n                                        {channels.map((item, j) => (\n                                            (!showMore && channelList.length > size && i + 1 === size / 2 && j === 1) &&\n                                            <div\n                                                className={styles['nav-bar-channel']}\n                                                onMouseOver={this.handleOpenMore}\n                                                key={`${j}-更多`}\n                                            >\n                                                <a><div>更多&gt;&gt;</div></a>\n                                            </div>\n                                            || this.renderNavChannel(item)\n                                        ))}\n                                    </div>\n                                ))}\n                            </div>\n                        </Col>\n                        <Col span={8}>\n                            <Row className={styles['nav-bar-icon-list']} gutter={16} type='flex' justify='end'>\n                                {menu.map((item, j) => (\n                                    <Col span={6} key={j}>\n                                        <a key={j}\n                                            className={styles['nav-bar-icon']}\n                                            href={item.url}\n                                            target={item.newBlank ? '_blank' : ''}\n                                        >\n                                            <div className={[styles['nav-bar-icon-cover'], styles[item.className]].join(' ')} />\n                                            <span className={styles['nav-bar-icon-title']}>{item.name}</span>\n                                        </a>\n                                    </Col>\n                                ))}\n                            </Row>\n                        </Col>\n                    </Row>\n                </div>\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___ELi8P\",\"textOverflow\":\"index__textOverflow___2lKOS\",\"dot\":\"index__dot___JDRSV\",\"navBarIconList\":\"index__navBarIconList___2qz6f\",\"menu-tv\":\"index__menu-tv___cGNx3\",\"menu-radio\":\"index__menu-radio___PXKzq\",\"menu-programs\":\"index__menu-programs___24wIj\",\"menu-programs-all\":\"index__menu-programs-all___11IcI\",\"nav-bar-container\":\"index__nav-bar-container___2hg5v\",\"nav-bar\":\"index__nav-bar___1SO1M\",\"nav-bar-channel-list\":\"index__nav-bar-channel-list___3_jSv\",\"nav-bar-icon-list\":\"index__nav-bar-icon-list___3hvnM\",\"nav-bar-icon\":\"index__nav-bar-icon____mYmh\",\"nav-bar-icon-cover\":\"index__nav-bar-icon-cover___zOvpB\",\"open-more\":\"index__open-more___1FbsW\",\"nav-bar-channel-group\":\"index__nav-bar-channel-group___3CFBB\",\"nav-bar-channel\":\"index__nav-bar-channel___1k3--\",\"nav-bar-auto\":\"index__nav-bar-auto___1LMlF\"};","import React, { Component } from 'react';\nimport { Row, Col } from 'antd';\n\nimport { getLocal } from 'Utils/localDataUtils';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport styles from './index.less';\n\nconst colSpan = {\n    xs: 24, xl: 8, xxl: 8\n};\n\nconst ICON_CLASS = [\n    styles['icon-tv'],\n    styles['icon-radio'],\n    styles['icon-network']\n];\n\n/**\n * ModuleName: 友情链接\n * \n * use: [ 信息流友情链接模块 ]\n * \n*/\nclass FriendLinks extends Component {\n    render() {\n        const { friendlyLinks = {} } = this.props;\n        const { textFriendlyLinkResponse = [] } = friendlyLinks;\n        return (\n            <div className={styles['friendly-links-container']}>\n                <div className={styles['friendly-links']}>\n                    <Row gutter={24}>\n                        {textFriendlyLinkResponse &&\n                            textFriendlyLinkResponse.map(({ name, friendlyLinkResponse = [] }, i) => (\n                                <Col {...colSpan} key={i}>\n                                    <div className={styles['friendly-links-module']}>\n                                        <div className={[styles.title, ICON_CLASS[i]].join(' ')}>\n                                            {name}\n                                        </div>\n                                        <div className={styles.links}>\n                                            {friendlyLinkResponse.map((link, j) => (\n                                                <a href={link.linkUrl} target='_blank' key={j}>{link.name}</a>\n                                            ))}\n                                        </div>\n                                    </div>\n                                </Col>\n                            ))\n                        }\n                    </Row>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default FriendLinks;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"friendly-links-container\":\"index__friendly-links-container___atLQg\",\"friendly-links\":\"index__friendly-links___2A-h_\",\"friendly-links-module\":\"index__friendly-links-module___1KPYV\",\"title\":\"index__title___34Wk0\",\"icon-tv\":\"index__icon-tv___32loj\",\"icon-radio\":\"index__icon-radio___seCEd\",\"icon-network\":\"index__icon-network___1NNOZ\",\"links\":\"index__links___2W7eO\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Typography } from 'antd';\n\nimport { ENTITY_TYPE, getDetailRoute, getCompressCoverUrl } from 'Utils/utils';\nimport ImageLoad from 'Components/ImageLoad';\nimport RollingNews from 'Components/RollingNews';\nimport CardFlowDouble from 'Components/CardFlow/Double';\nimport { PRESET_STYLE } from './constants';\n\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/**\n * PageName: 热点新闻\n */\nclass HotNews extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {};\n    }\n\n    handleOpen = (news) => {\n        console.log(news);\n        const route = getDetailRoute({\n            source: news,\n            objectType: news.objectType,\n            contentType: news.contentType,\n            sid: news.id\n        });\n        window.open(route);\n    }\n\n    renderHeadCol = () => {\n        const { textNews = [] } = this.props;\n        return (\n            <div className={styles.warpper}>\n                <div className={styles['news-flow-box']}>\n                    {[textNews.slice(2, 7), textNews.slice(7, 12)].map((group, k) => (\n                        <div className={styles['news-flow']} key={k}>\n                            {group.map((newsGroup, i) => (\n                                <Row className={styles['news-col']} key={i}>\n                                    {newsGroup.map((news, j) => j < 2 && (\n                                        <Col span={24 / (newsGroup.length < 2 ? 1 : 2)} key={j}>\n                                            <a\n                                                className={styles['news-title']}\n                                                title={news.title}\n                                                style={{ ...PRESET_STYLE[news.titleStyle], color: news.titleColor }}\n                                                onClick={() => { this.handleOpen(news); }}\n                                            >\n                                                <Paragraph ellipsis={{ rows: (k == 0 && i == 0) ? 5 : 1 }}>\n                                                    {news.title}\n                                                </Paragraph>\n                                            </a>\n                                        </Col>\n                                    ))}\n                                </Row>\n                            ))}\n                        </div>\n                    ))}\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        const { textNews = [], pictrueNews = [], rollNews = [] } = this.props;\n        return (\n            <div className={styles['hot-news-container']}>\n                <Row className={styles['hot-news-header']} gutter={12}>\n                    <Col {...{ sm: 24, xl: 16, xxl: 15 }}>\n                        {textNews.slice(0, 2).map((newsGroup, i) => (\n                            <div className={styles['header-title-group']} key={i}>\n                                {newsGroup.map((news, j) => (\n                                    <a\n                                        className={styles['header-title']}\n                                        title={news.title}\n                                        style={{ ...PRESET_STYLE[news.titleStyle], color: news.titleColor }}\n                                        onClick={() => { this.handleOpen(news); }}\n                                        key={j}\n                                    >\n                                        {i == 0 && <span className={styles.tag}></span>}\n                                        {news.title}\n                                    </a>\n                                ))}\n                            </div>\n                        ))}\n                    </Col>\n                    <Col {...{ sm: 24, xl: 8, xxl: 6 }}>\n                        {pictrueNews.length > 0 &&\n                            <div className={styles['header-side']} onClick={() => { this.handleOpen(pictrueNews[0]); }}>\n                                <ImageLoad src={getCompressCoverUrl(pictrueNews[0].coverUrl, 436, 80)} />\n                            </div>\n                        }\n                    </Col>\n                </Row>\n                <div className={styles['hot-news']}>\n                    <CardFlowDouble\n                        flowData={pictrueNews.slice(1, 11)}\n                        renderHeadCol={this.renderHeadCol}\n                        extra={{ entityType: ENTITY_TYPE.DATA_JSON }}\n                    />\n                    {rollNews?.length > 0 &&\n                        <div className={styles['rolling-news']}>\n                            <RollingNews sourceData={rollNews} />\n                        </div>\n                    }\n                </div>\n            </div>\n        );\n    }\n}\nHotNews.propTypes = {\n    // 文字新闻\n    textNews: PropTypes.array.isRequired,\n    // 图片新闻\n    pictrueNews: PropTypes.array.isRequired,\n    // 滚动新闻\n    rollNews: PropTypes.array.isRequired\n\n};\n\nexport default HotNews;\n","import React from 'react';\nimport { NEWS_ROUTE, TOPIC_ROUTE } from 'Constants/type';\n\nimport styles from './index.less';\n\n/**\n * PageName: 滚动新闻\n */\nclass RollingNews extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            speed: 30\n        };\n        this.Marquee = undefined;\n    }\n\n    componentDidMount() {\n        this.handleMarqueeStart();\n    }\n\n    componentWillUnmount() {\n        this.handleMarqueeStop();\n    }\n\n    handleMarqueeStop = () => {\n        this.Marquee && clearInterval(this.Marquee);\n    }\n\n    handleMarqueeStart = () => {\n        const { speed } = this.state;\n        const { marquee, marqueeI, marqueeII } = this.refs;\n        if (marqueeI.clientWidth > marquee.clientWidth) {\n            this.Marquee && clearInterval(this.Marquee);\n            this.Marquee = setInterval(this.handleMarquee, speed);\n        } else {\n            marqueeII.style.display = 'none';\n        }\n    }\n\n    handleMarquee = () => {\n        const { marquee, marqueeII } = this.refs;\n        if (marquee.scrollLeft >= marqueeII.offsetWidth) {\n            marquee.scrollLeft = 0;\n        } else {\n            marquee.scrollLeft += 1;\n        }\n    }\n\n    handleOnClick = (news) => {\n        const { id, contentType, objectType } = news;\n        switch (`${objectType}`) {\n            case '0':\n                window.open(`/${NEWS_ROUTE[contentType]}/${id}`);\n                break;\n            case '1':\n                window.open(`/${TOPIC_ROUTE[contentType]}/${id}`);\n                break;\n            default:\n                break;\n        }\n    }\n\n    render() {\n        const { sourceData } = this.props;\n        return (\n            <div className={styles['rolling-news-container']}>\n                <div className={styles.title}>滚动新闻：</div>\n                <div\n                    className={styles.marquee}\n                    onMouseOver={this.handleMarqueeStop}\n                    onMouseOut={this.handleMarqueeStart}\n                    ref='marquee'\n                >\n                    <div className={styles['marquee-content']} ref='marqueeI'>\n                        {sourceData.map((item, i) => (\n                            <div className={styles['marquee-item']} key={i}>\n                                <a title={item.title} onClick={() => { this.handleOnClick(item); }}>{item.title}</a>\n                            </div>\n                        ))}\n                    </div>\n                    <div className={styles['marquee-content']} ref='marqueeII'>\n                        {sourceData.map((item, i) => (\n                            <div className={styles['marquee-item']} key={i}>\n                                <a title={item.title} onClick={() => { this.handleOnClick(item); }}>{item.title}</a>\n                            </div>\n                        ))}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default RollingNews;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2I0Pi\",\"textOverflow\":\"index__textOverflow___3tjsZ\",\"dot\":\"index__dot___83tNs\",\"navBarIconList\":\"index__navBarIconList___2HuGP\",\"menu-tv\":\"index__menu-tv___3HvoP\",\"menu-radio\":\"index__menu-radio___ilLcT\",\"menu-programs\":\"index__menu-programs___2miDu\",\"menu-programs-all\":\"index__menu-programs-all___3n7MH\",\"rolling-news-container\":\"index__rolling-news-container___2TIO_\",\"title\":\"index__title___2iJQk\",\"marquee\":\"index__marquee___fVBu2\",\"marquee-content\":\"index__marquee-content___McoYu\",\"marquee-item\":\"index__marquee-item___3CW6G\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"palceholder\":\"index__palceholder___3-jRc\",\"card-flow-double\":\"index__card-flow-double___uTOve\",\"flow-overview\":\"index__flow-overview___3pxNU\"};","/** 预设样式 */\nexport const PRESET_STYLE = {\n    0: {},\n    // 加粗\n    1: { fontWeight: 'bolder' },\n    // 下划线\n    2: { textDecoration: 'underline' }\n};\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2c6tG\",\"textOverflow\":\"index__textOverflow___KlhuI\",\"dot\":\"index__dot___141RJ\",\"navBarIconList\":\"index__navBarIconList___e6zXv\",\"menu-tv\":\"index__menu-tv___sglK8\",\"menu-radio\":\"index__menu-radio___2qkRn\",\"menu-programs\":\"index__menu-programs___ouQs_\",\"menu-programs-all\":\"index__menu-programs-all___2mqhR\",\"hot-news-container\":\"index__hot-news-container___1ztmb\",\"hot-news-header\":\"index__hot-news-header___3NPU-\",\"header-title-group\":\"index__header-title-group___2ZvFC\",\"header-title\":\"index__header-title___BXTDK\",\"tag\":\"index__tag___2I8TX\",\"header-side\":\"index__header-side___3dWHB\",\"hot-news\":\"index__hot-news___1NoG-\",\"head\":\"index__head___1rZEw\",\"warpper\":\"index__warpper___1Kms0\",\"news-flow-box\":\"index__news-flow-box___1Rh2i\",\"rolling-news\":\"index__rolling-news___3EA9-\",\"news-flow\":\"index__news-flow___1WMmK\",\"news-col\":\"index__news-col___6mi2R\",\"news-title\":\"index__news-title___30zeq\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'antd';\n\nimport CardBox from 'Components/CardBox';\nimport { colSpan } from 'Constants/antProps';\nimport { completionArray } from 'Utils/tools';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 卡片流\n * 每列1个,数量不限\n */\nclass CardFlowSingle extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    handleCompletionArray = () => {\n        const { flowData = [], isMulti } = this.props;\n        if (isMulti) return flowData;\n        return completionArray(flowData, 8);\n    }\n\n    render() {\n        const { cardSize, isMulti } = this.props;\n        const list = this.handleCompletionArray();\n        return (\n            <Row className={styles['card-flow-single']} gutter={12}>\n                {list.map((item, i) => (\n                    <Col {...colSpan} className={!isMulti && styles['flow-overview'] || ''} key={i}>\n                        <CardBox\n                            sourceData={item}\n                            bottom={isMulti}\n                            type={cardSize}\n                            onClick={this.props.onClickCard}\n                            extra={this.props.extra}\n                        />\n                    </Col>\n                ))}\n                {/* 占位置用的 */}\n                {list.length == 0 &&\n                    <Col {...colSpan} className={[styles['flow-overview'], styles.palceholder].join(' ')}>\n                        <CardBox\n                            sourceData={{}}\n                            bottom={isMulti}\n                            type={cardSize}\n                        />\n                    </Col>\n                }\n            </Row>\n        );\n    }\n}\n\nCardFlowSingle.propTypes = {\n    // 列表数据\n    flowData: PropTypes.array,\n    // 卡片尺寸\n    cardSize: PropTypes.string,\n    // 是否多行\n    isMulti: PropTypes.bool,\n    // 点击卡片事件\n    onClickCard: PropTypes.func,\n    // 额外参数\n    extra: PropTypes.object\n};\n\nexport default CardFlowSingle;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"palceholder\":\"index__palceholder___1bRnw\",\"card-flow-single\":\"index__card-flow-single___3Kvyw\",\"flow-overview\":\"index__flow-overview___1jWrU\"};","import {\n    put, call, fork\n} from 'redux-saga/effects';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nfunction* getSeoConfig(action) {\n    try {\n        const res = yield call(Api.getSeoConfig);\n        yield put(ActionTypes.getSeoConfig.success(action, res));\n\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.title, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.description\n        }));\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getSeoConfig.failure(action, error));\n    }\n}\n\n/** 获得频道焦点图 */\nfunction* getChannelFocus(action) {\n    try {\n        const res = yield call(Api.getChannelFocus, { channelPk: 0 });\n        yield put(ActionTypes.getChannelFocus.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getChannelFocus.failure(action, error));\n    }\n}\n\n/** 获得热点新闻列表 */\nfunction* getHotNews(args) {\n    try {\n        const res = yield call(Api.getHotNews);\n        yield put(ActionTypes.getHotNews.success(args, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getHotNews.failure(args, error));\n    }\n}\n\n/** 获得滚动新闻 */\nfunction* getRollNews(action) {\n    try {\n        const res = yield call(Api.getRollNews);\n        yield put(ActionTypes.getRollNews.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getRollNews.failure(action, error));\n    }\n}\n\n/** 获得首页显示的频道列表 */\nfunction* getHomeShowChannels(args) {\n    try {\n        const res = yield call(Api.getHomeShowChannels);\n        yield put(ActionTypes.getHomeShowChannels.success(args, res));\n        for (let i = 0; i < res.length; i += 1) {\n            const { pk, childChannels = [], displayType } = res[i];\n            const data = { beginScore: 0 };\n            if (childChannels.length > 0) {\n                const [child] = childChannels;\n                data.channelId = child.pk;\n                data.pageSize = DISPLAY_TYPE_COUNT[child.displayType];\n            } else {\n                data.channelId = pk;\n                data.pageSize = DISPLAY_TYPE_COUNT[displayType];\n            }\n            yield call(getChannelNews, { data });\n        }\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getHomeShowChannels.failure(args, error));\n    }\n}\n\n/** 获得频道新闻列表 */\nfunction* getChannelNews(action) {\n    try {\n        const res = yield call(Api.getChannelNews, action.data);\n        yield put(ActionTypes.getChannelNews.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nexport default function* HomePagePrefetch(args) {\n    yield fork(getSeoConfig, args);\n    yield fork(getHotNews, args);\n    yield fork(getRollNews, args);\n    yield fork(getHomeShowChannels, args);\n    yield fork(getChannelFocus, args);\n}\n","import { createSelector } from 'reselect';\n\nconst homeSelector = (state) => state.get('HomePage');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([homeSelector, globalSelector], (home, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n    screenSize: global.get('root').get('screenSize'),\n    friendlyLinks: global.get('root').get('friendlyLinks').toJS(),\n    channelList: global.get('root').get('channelList').toJS(),\n\n    homeChannels: home.get('homeChannels').toJS(),\n    hotNews: home.get('hotNews').toJS(),\n    focus: home.get('focus').toJS()\n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"page-index\":\"index__page-index___3o6SC\",\"page-content\":\"index__page-content___8o5oo\",\"module-list\":\"index__module-list___27usU\",\"module-mod\":\"index__module-mod___3M_Of\",\"channel-news\":\"index__channel-news___Q2-j2\",\"channel-title\":\"index__channel-title___2HvzR\",\"news-body\":\"index__news-body___2K8av\",\"tabs-no-child\":\"index__tabs-no-child___2eu2p\"};","import React from 'react';\nimport { Button } from 'antd';\n\nimport styles from './index.less';\n\nconst TYPE_TEXT = {\n    undefined: '内容',\n    0: '剧集',\n    1: '电视节目',\n    2: '专题',\n    3: '新闻'\n};\n\nexport default class extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isLoading: false,\n            pageNum: 1,\n        };\n    }\n\n    handleLoadMore = async () => {\n        const { pageNum } = this.state;\n        const { type, pageSize } = this.props;\n        this.setState({ isLoading: true });\n        await this.props.onLoad({ pageNum: pageNum + 1, type, pageSize });\n        this.setState({ pageNum: pageNum + 1, isLoading: false });\n    }\n\n    render() {\n        const { isLoading } = this.state;\n        const {\n            children, sources, total, type\n        } = this.props;\n        return total > 0 && (\n            <div className={styles['load-more']}>\n                {children}\n                {sources.length < total &&\n                    <Button\n                        className={styles['btn-load']}\n                        onClick={this.handleLoadMore}\n                        loading={isLoading}\n                        block\n                    >\n                        查看更多相关{TYPE_TEXT[type]}\n                    </Button>\n                }\n            </div>\n        );\n    }\n}\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"load-more\":\"index__load-more___2fRsD\",\"btn-load\":\"index__btn-load___17pBz\"};","import { urlParams } from 'Utils/utils';\nimport {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\n\n/**\n * 基于关键字搜索\n * @param {*} action \n */\nfunction* searchNews(action) {\n    try {\n        const res = yield call(Api.searchNews, action.data);\n        yield put(ActionTypes.searchNews.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.searchNews.failure(action, error));\n    }\n}\n\nexport default function* SearchPagePrefetch(args) {\n    const { pathName = '' } = args;\n    console.log('search', pathName);\n    const { key = '' } = urlParams(pathName);\n    yield fork(searchNews, { data: { key } });\n}\n","import { createSelector } from 'reselect';\n\nconst searchSelector = (state) => state.get('SearchPage');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector(\n    [searchSelector, globalSelector],\n    (search, global) => ({\n        screenSize: global.get('root').get('screenSize'),\n        isPrefetch: global.get('prefetch').get('isPrefetch'),\n        isRequesting: search.get('isRequesting'),\n        series: search.get('series'),\n        tvColumns: search.get('tvColumns'),\n        topics: search.get('topics'),\n        newsItems: search.get('newsItems'),\n        total: [\n            search.get('series'),\n            search.get('tvColumns'),\n            search.get('topics'),\n            search.get('newsItems')\n        ].reduce((count, item) => count + (item?.total || 0), 0)\n    })\n);\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"search-page\":\"index__search-page___V-O9A\",\"search-result-tips\":\"index__search-result-tips___1ryt8\",\"search-result\":\"index__search-result___2qrX3\",\"content\":\"index__content___1avOq\"};","import { put, call, fork } from 'redux-saga/effects';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\n/**\n * 获取频道信息\n * @param {*} action \n */\nfunction* getChannelInfo(action) {\n    try {\n        const { id } = action.data;\n        const res = yield call(Api.getChannelInfo, { channelPk: id });\n        yield put(ActionTypes.getChannelInfo.success(action, res));\n\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.name, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword && JSON.parse(res.keyword).join(','),\n            metaDescription: res.description\n        }));\n        yield call(getAllSubChannelNews, { data: { channelInfo: res } });\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        console.log(error);\n        yield put(ActionTypes.getChannelInfo.failure(action, error));\n    }\n}\n\n/** 获得子频道列表下的新闻 */\nfunction* getAllSubChannelNews(action) {\n    try {\n        const { channelInfo } = action.data;\n        const { childChannels = [], displayType } = channelInfo;\n        for (let i = 0; i < childChannels.length; i += 1) {\n            const child = childChannels[i];\n            const data = {\n                beginScore: 0,\n                channelId: child.pk,\n                pageSize: DISPLAY_TYPE_COUNT[displayType]\n            };\n            yield call(getChannelNews, { data });\n        }\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        console.log(error);\n    }\n}\n\nfunction* getChannelNews(action) {\n    try {\n        const res = yield call(Api.getChannelNews, action.data);\n        // 避免点击“换一批”后没数据显示，数据需要循环显示\n        if (res.list.length == 0 && action.data.beginScore != 0) {\n            yield call(getChannelNews, { data: { ...action.data, beginScore: 0 } });\n        } else {\n            yield put(ActionTypes.getChannelNews.success(action, res));\n        }\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nexport default function* ChannelsPagePrefetch(args) {\n    const { pathName = '' } = args;\n    const [, , id] = pathName.split('/');\n\n    yield fork(getChannelInfo, { data: { id } });\n}\n","import { createSelector } from 'reselect';\n\nconst channelsSelector = (state) => state.get('ChannelsPage');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([channelsSelector, globalSelector], (channels, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n    channelList: global.get('root').get('channelList').toJS(),\n\n    isRequesting: channels.get('isRequesting'),\n    channelRequesting: channels.get('channelRequesting'),\n    channelInfo: channels.get('channelInfo').toJS(),\n    channelNews: channels.get('channelNews').toJS(),\n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___1c-b5\",\"textOverflow\":\"index__textOverflow___19IzK\",\"dot\":\"index__dot___2visi\",\"navBarIconList\":\"index__navBarIconList___2ngUC\",\"menu-tv\":\"index__menu-tv___2orfm\",\"menu-radio\":\"index__menu-radio___3dsZi\",\"menu-programs\":\"index__menu-programs___1GWA4\",\"menu-programs-all\":\"index__menu-programs-all___1kwvS\",\"page-channels\":\"index__page-channels___1nHix\",\"nav\":\"index__nav___3QlRJ\",\"fixed\":\"index__fixed___27SC5\",\"nav-title\":\"index__nav-title___3JdUt\",\"nav-channels\":\"index__nav-channels___1pKoR\",\"channel\":\"index__channel___3c7x-\",\"sub-channels\":\"index__sub-channels___3F7VY\",\"sub-channel\":\"index__sub-channel___O1ceG\",\"anchor-point\":\"index__anchor-point___2iEBQ\",\"sub-channel-title\":\"index__sub-channel-title___YNasL\",\"sub-channel-content\":\"index__sub-channel-content___1shr2\",\"btn-refresh\":\"index__btn-refresh___AKfqe\"};","import {\n    put, call, fork\n} from 'redux-saga/effects';\nimport moment from 'moment';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nconst format = 'YYYY-MM-DD HH:mm:ss';\n\nfunction* getTvChannel(action) {\n    try {\n        const tvChannels = yield call(Api.getTvChannelList, { statusList: '1,2' });\n        yield put(ActionTypes.getTvChannel.success(action, tvChannels));\n        for (let i = 0; i < tvChannels.length; i += 1) {\n            const { pk } = tvChannels[i];\n            const data = {\n                tvChannelPk: pk,\n                beginAt: moment().startOf('day').format(format),\n                endAt: moment().endOf('day').format(format)\n            };\n            yield call(getTvColumn, { data });\n        }\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getTvChannel.failure(action, error));\n    }\n}\n\nfunction* getTvColumn(action) {\n    try {\n        const res = yield call(Api.getTvColumn, action.data);\n        yield put(ActionTypes.getTvColumn.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvColumn.failure(action, error));\n    }\n}\n\nexport default function* TvProgramsPrefetch(args) {\n    yield fork(getTvChannel, args);\n}\n","import { createSelector } from 'reselect';\n\nconst tvProgramsSelector = (state) => state.get('TvPrograms');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([tvProgramsSelector, globalSelector], (tvPrograms, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n    screenSize: global.get('root').get('screenSize'),\n\n    tvPrograms: tvPrograms.get('tvPrograms')\n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___BMY1d\",\"textOverflow\":\"index__textOverflow___xGhOD\",\"dot\":\"index__dot___Ko4c2\",\"navBarIconList\":\"index__navBarIconList___1KkLj\",\"menu-tv\":\"index__menu-tv___1F6DW\",\"menu-radio\":\"index__menu-radio___2cnS1\",\"menu-programs\":\"index__menu-programs___2Ddra\",\"menu-programs-all\":\"index__menu-programs-all___22qnH\",\"page-tv-programs\":\"index__page-tv-programs___uTbFP\",\"tv-programs-nav\":\"index__tv-programs-nav___EGHqI\",\"fixed\":\"index__fixed___9wlVL\",\"pack-up\":\"index__pack-up___24642\",\"nav-channels\":\"index__nav-channels___2dRQw\",\"pack-up-btn\":\"index__pack-up-btn___2G0vs\",\"nav-title\":\"index__nav-title___23rYv\",\"tv-programs\":\"index__tv-programs___2fzl-\",\"tv-menus\":\"index__tv-menus___2gF3J\",\"tv-menu\":\"index__tv-menu___2Isr8\",\"anchor-point\":\"index__anchor-point___WhEDW\",\"tv-menu-title\":\"index__tv-menu-title___29qBO\",\"tv-menu-content\":\"index__tv-menu-content___3kAVM\"};","import React, { Component } from 'react';\nimport ReactDom from 'react-dom';\n\nimport VideoPlayer from './VideoPlayer';\nimport AudioPlayer from './AudioPlayer';\nimport Vote from './Vote';\nimport ImgLink from './ImgLink';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 富文本渲染\n * \n * Author: zhuhuishao \n * use: [ Html富文本渲染组件 ]\n * \n*/\nclass HtmlParser extends Component {\n    constructor(props) {\n        super(props);\n        this.videoArr = [];\n        this.audioArr = [];\n        this.imgLinkArr = [];\n        this.voteElId = '';\n    }\n\n    componentDidMount() {\n        this.renderItems();\n    }\n\n\n    render() {\n        const { content } = this.props;\n\n        return (\n            <div\n                id='article-content'\n                className={styles['article-content']}\n                dangerouslySetInnerHTML={{ __html: this.handleFilterContent(content) }}\n            />\n        );\n    }\n\n\n    /**\n     * \n     * 播放视频 / 音频回调事件\n     * \n     * @param [string] currId [当前播放的media Id]\n     */\n    playMedia = (currId) => {\n        this.videoArr.forEach((item, i) => {\n            currId != `video${i}` && document.getElementById(`video${i}_html5_api`).pause();\n        });\n\n        this.audioArr.forEach((item, i) => {\n            currId != `audio${i}` && document.getElementById(`audio${i}`).pause();\n        });\n    }\n\n\n    // 渲染视频 / 音频 / 投票组件\n    renderItems = () => {\n        const { voteList = [], voteFunc, news } = this.props;\n\n        // 渲染视频组件\n        this.videoArr.forEach((item, i) => {\n            ReactDom.render(\n                <VideoPlayer\n                    id={`video${i}`}\n                    videoUrl={this.videoArr[i].videoUrl}\n                    poster={this.videoArr[i].posterUrl}\n                    playMedia={this.playMedia}\n                />,\n                document.getElementById(`videoEl-${i}`)\n            );\n        });\n\n        // 渲染音频组件\n        this.audioArr.forEach((item, i) => {\n            ReactDom.render(\n                <AudioPlayer\n                    id={`audio${i}`}\n                    playMedia={this.playMedia}\n                    audioUrl={this.audioArr[i].audioUrl}\n                    audioTitle={this.audioArr[i].audioTitle}\n                />,\n                document.getElementById(`audioEl-${i}`)\n            );\n        });\n        this.imgLinkArr.forEach((item, i) => {\n            ReactDom.render(\n                <ImgLink\n                    id={`imgLink${i}`}\n                    outLink={this.imgLinkArr[i].outLink}\n                    imgSrc={this.imgLinkArr[i].imgSrc}\n                />,\n                document.getElementById(`imgLinkEl-${i}`)\n            );\n        });\n\n        // 渲染投票组件\n        if (voteList.length) {\n            ReactDom.render(\n                <Vote\n                    vote={voteList[0]}\n                    voteFunc={voteFunc}\n                    news={news}\n                />,\n                document.getElementById(this.voteElId)\n            );\n        }\n    }\n\n\n    /**\n     * \n     * 清洗/过滤/替换Html文本 \n     * \n     * @param [string] content [html 原始文本]\n     */\n    handleFilterContent = (content) => {\n        this.videoArr = [];\n        this.audioArr = [];\n        this.imgLinkArr = [];\n\n        if (content) {\n            // 去段首空格, 去空行\n            content = content.replace(/<br\\s*\\/?>/gi, '')\n                .replace(/<strong>((\\s)|(&nbsp;))+<\\/strong>/ig, '')\n                .replace(/<p>((\\s)|(&nbsp;))+/ig, '<p>')\n                .replace(/<div>((\\s)|(&nbsp;))+/ig, '<div>')\n                .replace(/(<p><\\/p>)|(<div><\\/div>)/ig, '');\n\n            // 处理资源协议\n            content = content.replace(/src=\"https:\\/\\//gi, 'src=\"//').replace(/src=\"http:\\/\\//gi, 'src=\"//');\n\n            // 处理content行内style\n            // content = content.replace(/style=\"[^\"]*\"/gi, '').replace(/[\\r\\n]/g, '');\n\n            // 处理投票模块\n            content = content.replace(/\\[\\[vote\\]\\]/g, (a, b) => {\n                this.voteElId = 'voteEl';\n                return `<div id=${this.voteElId} class=\"vote-shell\"></div>`;\n            });\n\n            // 整理文章内的Video标签\n            const videoReg = /<p[^>]* class=\"video-play-area\"[^>]*>((?!<\\/p>).)*<\\/p>/g;\n            content = content.replace(videoReg, (match) => {\n                console.log(match.split('src=\"')[1], '第一个', match.split('src=\"')[2], '第er个', match.split('src=\"')[2], 'kkkkkk');\n                const data = {\n                    posterUrl: match.split('poster=\"')[1]?.split('\"')[0] || '',\n                    videoUrl: match.split('src=\"')[2]?.split('\"')[0] || ''\n                };\n                console.log(data.videoUrl, '视频地址');\n                this.videoArr.push(data);\n                return `<div id=\"videoEl-${this.videoArr.length - 1}\" class=\"${styles['video-shell']}\"></div>`;\n            });\n\n            // 整理文章内的Audio标签\n            const audioReg = /<p class=\"audio-play-area\"[^>]*><audio[^>]*title=['\"]([^'\"\"]+)?[^>]*src=['\"]([^'\"]+)?[^>]*><\\/audio><\\/p>/g;\n            content = content.replace(audioReg, (a, b, c) => {\n                const data = {\n                    audioTitle: b,\n                    audioUrl: c\n                };\n                this.audioArr.push(data);\n                return `<div id=\"audioEl-${this.audioArr.length - 1}\" class=\"${styles['audio-shell']}\"></div>`;\n            });\n\n            // 整理文章内的带外链的Img标签\n            const imgLinkReg = /<p[^>]*><a data=\"outlink\"[^>]*href=['\"]([^'\"\"]+)?[^>]*><img[^>]*><\\/a><\\/p>/g;\n            content = content.replace(imgLinkReg, (match) => {\n                const data = {\n                    outLink: match.split('href=\"')[1]?.split('\"')[0] || '',\n                    imgSrc: match.split('src=\"')[1]?.split('\"')[0] || ''\n                };\n                this.imgLinkArr.push(data);\n                return `<div id=\"imgLinkEl-${this.imgLinkArr.length - 1}\" class=\"${styles['img-link-shell']}\"></div>`;\n            });\n        }\n\n        return content;\n    }\n}\n\nexport default HtmlParser;\n","import React, { Component } from 'react';\n\nimport 'Public/css/theme/video-js.less';\nimport styles from './index.less';\n\n\n/**\n * ModuleName: 视频组件\n * \n * Author: zhuhuishao \n * use: [ Html富文本渲染视频组件 ]\n * \n*/\nclass VideoPlayer extends Component {\n    componentDidMount() {\n        const { playMedia, id } = this.props;\n\n        const videoJs = require('videojs');\n\n        videoJs.addLanguage('zh-CN', {\n            Play: '播放',\n            Pause: '暂停',\n            'Stream Type': '媒体流类型',\n            LIVE: '直播',\n            Loaded: '加载完毕',\n            Progress: '进度',\n            Fullscreen: '全屏',\n            'Non-Fullscreen': '退出全屏',\n            Mute: '静音',\n            Unmute: '取消静音',\n            'You aborted the media playback': '视频播放被终止',\n            'A network error caused the media download to fail part-way.': '网络错误导致视频下载中途失败。',\n            'The media could not be loaded, either because the server or network failed or because the format is not supported.': '视频因格式不支持或者服务器或网络的问题无法加载。',\n            'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.': '由于视频文件损坏或是该视频使用了你的浏览器不支持的功能，播放终止。',\n            'No compatible source was found for this media.': '无法找到此视频兼容的源。',\n            'The media is encrypted and we do not have the keys to decrypt it.': '视频已加密，无法解密。'\n        });\n\n        videoJs(id, {\n            controls: true,\n            language: 'zh-CN'\n        }, function () {\n            this.on('play', function () {\n                playMedia(id);\n            });\n        });\n    }\n\n\n    render() {\n        const { poster, videoUrl, id } = this.props;\n\n        return (\n            <div className={styles['video-play']}>\n                <video id={id} class='video-js vjs-big-play-centered' poster={poster} style={{ width: '100%', height: '100%' }} data-setup='{}'>\n                    <source src={videoUrl} type='video/mp4' />\n                </video>\n            </div>\n        );\n    }\n\n\n    // 播放视频\n    pauseVideo = () => {\n        document.getElementById(this.props.id).pause();\n    }\n}\n\nexport default VideoPlayer;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"video-play\":\"index__video-play___1Hub6\"};","import React, { Component } from 'react';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 音频组件\n * \n * Author: zhuhuishao \n * use: [ Html富文本渲染音频组件 ]\n * \n*/\nclass AudioPlayer extends Component {\n    constructor(props) {\n        super(props);\n\n        this.timer = null;\n        this.id = null;\n\n        this.state = {\n            isPlaying: false,\n            currTime: '00:00',\n            duration: '00:00',\n            buffered: '0%',\n            progress: '0%',\n            pointX: 0,\n            actualLeft: 0\n        };\n    }\n\n    componentDidMount() {\n        // 初始化播放时长，和播放器事件\n        this.getDuration();\n\n        // 初始化拖拽事件\n        this.initListenTouch();\n    }\n\n\n    render() {\n        const { audioUrl, id, audioTitle } = this.props;\n\n        return (\n            <section className={styles['audio-out-div']} ref={audio => { this.audioBox = audio; }}>\n                <section className={`${styles['audio-play-btn']} ${styles[this.state.isPlaying ? 'audio-playing' : 'audio-play']}`} onClick={this.playAudio}></section>\n                <section className={styles['audio-msg']}>\n                    <p className={styles['audio-title']}>{audioTitle}</p>\n                    <section className={styles['audio-time-slidebar']} onClick={this.clickSidebar} ref={slide => { this.slide = slide; }}>\n                        <section className={styles['audio-time-buffered']} style={{ width: this.state.buffered }}></section>\n                        <section className={styles['audio-time-progress']} style={{ width: this.state.progress }}>\n                            <section className={styles['audio-time-point']} ref={point => { this.audioPoint = point; }}></section>\n                        </section>\n                    </section>  \n                    <section className={styles['audio-time']}>\n                        <span className={styles['audio-js-curr-time']}>{this.state.currTime}</span>\n                        <span className={styles['audio-js-total-time']}>{this.state.duration}</span>\n                    </section>\n                </section>\n                <audio controls id={id} src={audioUrl} ref={audio => { this.audioEl = audio; }} />\n            </section>            \n        );\n    }\n\n\n    // 播放/停止音频\n    playAudio = () => { \n        if (this.state.isPlaying) {\n            this.audioEl.pause();\n        } else {\n            this.audioEl.play();\n        }\n    }\n\n\n    /**\n     * \n     * 改变当前播放器播放状态\n     * \n     * @param [boolean] value [设置播放状态]\n     */\n    playStatusChange = (value) => {\n        if (!value) {\n            clearInterval(this.timer);\n            this.setState(Object.assign({}, this.state, { \n                isPlaying: false\n            }));\n        } else {\n            this.timeUpdate();\n            this.setState(Object.assign({}, this.state, { \n                isPlaying: true, \n                progress: this.state.progress == '100%' ? '0%' : this.state.progress\n            }), () => {\n                this.audioEl.ontimeupdate = () => {\n                    if (this.audioEl.readyState == 4 && this.state.buffered != '100%') {\n                        this.setState(Object.assign({}, this.state, { \n                            buffered: Math.round(this.audioEl.buffered.end(0) / this.audioEl.duration * 100) + '%'\n                        }));\n                    }\n                };\n            });\n        }\n    }\n\n\n    // 初始化播放时长 / 播放器事件监听\n    getDuration = () => {\n        const getd = setInterval(() => {\n            const { duration } = this.audioEl;\n            if (!Number.isNaN(duration)) {\n                const durationNum = this.formatPlayTime(duration);\n\n                // 获得进度条到浏览器最左边的距离\n                const actualLeft = this.slideLeftDistance();                   \n                this.setState(Object.assign({}, this.state, { \n                    duration: durationNum,\n                    actualLeft: actualLeft\n                }));\n                clearInterval(getd);\n\n                this.audioPlayListener();\n            }\n        }, 10);\n    }\n\n\n    // 获得slide到浏览器左边的距离\n    slideLeftDistance = () => {\n        let actualLeft = this.slide.offsetLeft;\n        let current = this.slide.offsetParent;\n\n        while (current) {\n            actualLeft += current.offsetLeft;\n            current = current.offsetParent;\n        }\n\n        return actualLeft;\n    }\n\n\n    // 播放器事件监听\n    audioPlayListener = () => {\n        const { playMedia, id } = this.props;\n\n        this.audioEl.addEventListener('play', (event) => {\n            this.playStatusChange(true);\n            playMedia(id);\n        });\n\n        this.audioEl.addEventListener('pause', (event) => {\n            this.playStatusChange(false);\n        });\n\n        this.audioEl.addEventListener('ended', (event) => {\n            this.playStatusChange(false);\n        }, true);\n    }\n\n\n    /**\n     * \n     * 设置当前播放进度 / 和播放时间\n     * \n     * @param [number] currPercent [当前播放进度比例]\n     */\n    setCurrTime = (currPercent) => {\n        this.audioEl.currentTime = this.audioEl.duration * currPercent;\n        console.log(currPercent, this.audioEl.currentTime);\n        const currTime = this.formatPlayTime(this.audioEl.currentTime);\n\n        this.setState(Object.assign({}, this.state, { \n            currTime: currTime, \n            progress: (currPercent * 100) + '%'\n        }));\n    }\n\n\n    // 记录实时播放进度\n    timeUpdate = () => {\n        this.timer = setInterval(() => {\n            const { currentTime = 0, duration = 0 } = this.audioEl;\n\n            const currTime = this.formatPlayTime(currentTime); \n\n            this.setState(Object.assign({}, this.state, { \n                currTime: currTime, \n                progress: duration == 0 ? '0%' : currentTime / duration * 100 + '%'\n            }));\n\n            if (currentTime == duration || duration == 0) {\n                clearInterval(this.timer);\n            }        \n        }, 1000);\n    }\n\n    \n    /**\n     * \n     * 格式化播放时间\n     * \n     * @param [number] time [传入时间秒]\n     */\n    formatPlayTime = (time) => {\n        const minute = parseInt(time / 60, 10);\n        const second = parseInt(time % 60, 10);\n\n        const timeArr = [minute, second].map(item => (item < 10 ? '0' + item : item));\n        return timeArr.join(':');\n    };\n\n\n    /**\n     * \n     * 点击进度条修改播放进度\n     * \n     * @param [object] e [当前点击对象]\n     */\n    clickSidebar = (e) => {\n        const clickWidth = e.pageX - this.state.actualLeft;\n        const slideBarWidth = this.slide.offsetWidth;            \n        this.setCurrTime(clickWidth / slideBarWidth);     \n    }\n\n\n    // 监听拖动进度按下按钮事件\n    initListenTouch = () => {\n        this.audioPoint.addEventListener('mousedown', this.pointStart, false);\n    }\n    \n\n    /**\n     * \n     * 按下按钮\n     * \n     * @param [object] e [当前点击对象]\n     */\n    pointStart = (e) => {\n        e.preventDefault();\n        this.state.isPlaying && (this.id = this.props.id);\n        this.audioEl.pause();\n        // 为了更好的体验，在移动触点的时候我选择将音频暂停\n        this.setState(Object.assign({}, this.state, { \n            isPlaying: false, // 播放按钮变更\n            pointX: e.pageX // 进度触点在页面中的x坐标\n        }));\n\n        this.audioBox.addEventListener('mousemove', this.pointMove, false);\n        document.addEventListener('mouseup', this.pointEnd, false);\n    }\n    \n\n    /**\n     * \n     * 拖动按钮\n     * \n     * @param [object] e [当前点击对象]\n     */\n    pointMove = (e) => {\n        e.preventDefault();\n        const x = e.pageX - this.state.pointX; // 滑动的距离\n        const maxMove = this.slide.clientWidth; // 最大的移动距离不可超过进度条宽度\n    \n        // 下面是触点移动时会碰到的情况，分为正移动、负移动以及两端的极限移动。\n        if (e.pageX - this.state.actualLeft >= maxMove) {\n            this.setCurrTime(1);\n        } else if (e.pageX <= this.state.actualLeft) {\n            this.setCurrTime(0);\n        } else {\n            const moveWidth = e.pageX - this.state.actualLeft;\n            this.setCurrTime(moveWidth / maxMove);\n        }\n    }\n    \n\n    // 放开按钮\n    pointEnd = () => {\n        this.audioBox.removeEventListener('mousemove', this.pointMove, false);\n        this.audioBox.removeEventListener('mouseup', this.pointEnd, false);\n        if (this.id == this.props.id) {\n            this.audioEl.play();\n            this.id = null;\n        }        \n    }\n}\n\nexport default AudioPlayer;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"audio-out-div\":\"index__audio-out-div___36eB5\",\"audio-play-btn\":\"index__audio-play-btn___GkcjI\",\"audio-play\":\"index__audio-play___3druv\",\"audio-playing\":\"index__audio-playing___QzrBT\",\"audio-msg\":\"index__audio-msg___2pxS1\",\"audio-title\":\"index__audio-title___PViWC\",\"audio-time-slidebar\":\"index__audio-time-slidebar___3WRM5\",\"audio-time-buffered\":\"index__audio-time-buffered___eSyvZ\",\"audio-time-progress\":\"index__audio-time-progress___10Mxv\",\"audio-time-point\":\"index__audio-time-point___2hVHj\",\"audio-time\":\"index__audio-time___3G3b3\",\"audio-js-curr-time\":\"index__audio-js-curr-time___XUkM7\",\"audio-js-total-time\":\"index__audio-js-total-time___1ix1y\"};","import React, { Component } from 'react';\n\nimport userUtils from 'Utils/userUtils';\nimport { Modal } from 'antd';\n\nimport styles from './index.less';\n\n\n/**\n * ModuleName: 投票组件\n * \n * Author: zhuhuishao \n * use: [ Html富文本渲染投票组件 ]\n * \n*/\nclass Vote extends Component {\n    constructor(props) {\n        super(props);\n\n        this.state = {\n            selected: [],\n            loading: false\n        };\n    }\n\n\n    render() {\n        const { vote = {} } = this.props;\n        const {\n            voteOptions = [], title = '', type, youCanVote, endTime = 0\n        } = vote;\n\n        // 检测是否投票结束\n        const isEnd = Date.now() >= endTime;\n\n        // 获得总投票数\n        const voteCount = voteOptions.length ? voteOptions.reduce((count, item) => item.count + count, 0) : 0;\n\n        // 获得用户信息\n        const userinfo = userUtils.getUser();\n\n        // 投票按钮文案\n        const voteBotWords = this.state.loading ? '投票中...' : '投票';\n\n        return (\n            <div className={styles['vote-box']}>\n                <span className={styles['vote-title']}>\n                    <span>{title}</span>\n                    {youCanVote && <span>({type == '0' ? '单选' : '多选'})</span>}\n                    {isEnd && <span className={styles['vote-end']}>(投票已结束)</span>}\n                </span>\n                {youCanVote\n                    ? (\n                        <div className={styles['not-vote-box']}>\n                            {voteOptions.map((item, index) => {\n                                const activeClass = this.state.selected.indexOf(item) >= 0 ? styles['vote-active'] : '';\n                                return (\n                                    <span\n                                        key={`vote${index}`}\n                                        className={`${styles['vote-item']} ${activeClass}`}\n                                        onClick={() => this.chooseItem(item)}\n                                    >\n                                        {`${(index + 1)}.${item.content}`}\n                                    </span>\n                                );\n                            })}\n                            <a className={`${styles['vote-btn']} ${!userinfo.userId ? styles['vote-btn-disable'] : ''}`}\n                                onClick={this.handleVote}\n                                disable={!userinfo.userId || this.state.loading}\n                            >{!userinfo.userId ? '请登录' : voteBotWords}</a>\n                        </div>\n                    )\n                    : (\n                        <div className={styles['has-vote-box']}>\n                            {voteOptions.map((item, index) => {\n                                const percent = voteCount == 0 ? 0 : parseInt(item.count / voteCount * 100, 10);\n                                return (\n                                    <div key={`vote${index}`} className={styles['has-vote-item']}>\n                                        <div className={styles['vote-data']}>\n                                            <span>{item.content}</span>\n                                            <span>{percent}%</span>\n                                        </div>\n\n                                        <div className={styles['count-bar']}>\n                                            <div className={styles['count-bar-percent']}\n                                                style={{ width: percent + '%' }}\n                                            ></div>\n                                        </div>\n                                    </div>\n                                );\n                            })}\n                        </div>\n                    )\n                }\n            </div>\n        );\n    }\n\n\n    // 触发投票\n    handleVote = () => {\n        const { voteFunc, vote, news } = this.props;\n        const userinfo = userUtils.getUser();\n        const { votePk } = vote.voteOptions[0];\n\n        if (!userinfo.userId) {\n            Modal.info({\n                title: '投票失败',\n                content: '请先登录你的账号'\n            });\n        } else if (!this.state.selected.length) {\n            Modal.info({\n                title: '投票失败',\n                content: '请选择投票选项'\n            });\n        } else {\n            this.setState(Object.assign({}, this.state, { loading: true }));\n            voteFunc({\n                params: {\n                    userPk: userinfo.userId,\n                    objectType: 0,\n                    objectPk: news.sid,\n                    votePk: votePk,\n                    voteOptionPks: this.state.selected.map(item => item.voteOptionPk)\n                },\n                callback: this.voteCallback\n            });\n        }\n    }\n\n\n    /**\n     * \n     * 提交投票后的回调事件\n     * \n     * @param [object] obj [回调信息对象]\n     */\n    voteCallback = (obj) => {\n        this.setState(Object.assign({}, this.state, { loading: false }));\n        if (obj.success) {\n            window.location.reload();\n        } else {\n            Modal.info({\n                title: '操作失败',\n                content: obj.errorMessage || '',\n                onOk: () => {\n                    window.location.reload();\n                }\n            });\n        }\n    }\n\n\n    /**\n     * \n     * 选择投票选项\n     * \n     * @param [object] item [投票选项对象]\n     */\n    chooseItem = (item) => {\n        const { type = 0 } = this.props.vote;\n        const arr = type == 0 ? [item] : [...this.state.selected, item];\n        this.setState(Object.assign({}, this.state, { selected: arr }));\n    }\n}\n\nexport default Vote;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"vote-box\":\"index__vote-box___2Jdxs\",\"vote-title\":\"index__vote-title___2RJGB\",\"has-vote-box\":\"index__has-vote-box___vxpzB\",\"has-vote-item\":\"index__has-vote-item___1rQ7Q\",\"vote-data\":\"index__vote-data___2YsA7\",\"count-bar\":\"index__count-bar___9cu_D\",\"count-bar-percent\":\"index__count-bar-percent___12gmP\",\"vote-item\":\"index__vote-item___O0XXQ\",\"vote-active\":\"index__vote-active___13Exl\",\"vote-btn\":\"index__vote-btn___13yrJ\",\"vote-btn-disable\":\"index__vote-btn-disable____eyxb\",\"vote-end\":\"index__vote-end___2fV5g\"};","import React from 'react';\nimport { Icon } from 'antd';\n\nimport styles from './index.less';\n\n/**\n * \n */\nclass ImgLink extends React.Component {\n    constructor(props) {\n        super(props);\n\n        this.timer = null;\n        this.id = null;\n\n        this.state = {\n        };\n    }\n\n    render() {\n        const { outLink, imgSrc } = this.props;\n\n        return (\n            <section className={styles['img-link-section']}>\n                <a className={styles['insert-link']} href={outLink} target='_blank' data-link-type='image'>\n                    <div className={styles['img-warpper']}>\n                        <img src={imgSrc} crossOrigin='anonymous' />\n                        <div className={styles.href}>\n                            <Icon type='link' />网页链接\n                        </div>\n                    </div>\n                </a>\n            </section>\n        );\n    }\n}\n\nexport default ImgLink;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"img-link-section\":\"index__img-link-section___2jS6S\",\"insert-link\":\"index__insert-link___emX68\",\"img-warpper\":\"index__img-warpper___3cRKz\",\"href\":\"index__href___1w5Mv\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"article-content\":\"index__article-content___jxHa9\",\"audio-shell\":\"index__audio-shell____fi8D\",\"vote-shell\":\"index__vote-shell___33lp1\",\"video-shell\":\"index__video-shell___37Yh8\",\"img-link-shell\":\"index__img-link-shell___2Z5tF\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"article\":\"index__article___1t06n\",\"layout\":\"index__layout___RYm04\",\"article-detail\":\"index__article-detail___38eBT\",\"overspread\":\"index__overspread___3qhRD\",\"pre-sub-title\":\"index__pre-sub-title___3Ktjr\",\"title\":\"index__title___-aVwF\",\"sub-title\":\"index__sub-title___aDd8k\",\"media\":\"index__media___30SUR\",\"attaches\":\"index__attaches___38Mrz\",\"origin-link\":\"index__origin-link___2gmuq\",\"article-content\":\"index__article-content___Kln3Q\",\"more-box\":\"index__more-box___bY-1E\",\"more-detail\":\"index__more-detail___10w15\",\"text-more\":\"index__text-more___382dy\",\"flow-card\":\"index__flow-card___2KtHR\",\"news-title\":\"index__news-title___7gqkJ\",\"news-cover\":\"index__news-cover___2dbBR\",\"fixed\":\"index__fixed___1BpbG\",\"fixed-bottom\":\"index__fixed-bottom___lWOwm\"};","import React, { Component } from 'react';\n\nimport style from './index.less';\n\n/**\n * ModuleName: 内容loading\n * \n * Author: zhuhuishao \n * use: [ 信息流内容正在加载loading展示 ]\n * \n*/\nclass LoadingBox extends Component {\n    render() {\n        const { children, loading } = this.props;\n\n        return (\n            <div>\n                {children}\n                {loading && ( \n                    <div className={style['spinner-box']}>\n                        <div className={style['sk-three-bounce']}>\n                            <div className={style['sk-bounce1']} />\n                            <div className={style['sk-bounce2']} />\n                            <div className={style['sk-bounce3']} />\n                        </div>\n                    </div>\n                )}\n            </div>\n        );\n    }\n}\n\nexport default LoadingBox;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"spinner-box\":\"index__spinner-box___34csI\",\"sk-three-bounce\":\"index__sk-three-bounce___3UFnk\",\"sk-bouncedelay\":\"index__sk-bouncedelay___1yM8H\",\"sk-bounce1\":\"index__sk-bounce1___Uw68u\",\"sk-bounce2\":\"index__sk-bounce2___2Q-Sz\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___1XUx-\",\"textOverflow\":\"index__textOverflow___1_6Pe\",\"dot\":\"index__dot___ocuzn\",\"navBarIconList\":\"index__navBarIconList___1pqB8\",\"menu-tv\":\"index__menu-tv___1ppvw\",\"menu-radio\":\"index__menu-radio___3l8Fs\",\"menu-programs\":\"index__menu-programs___3iQyj\",\"menu-programs-all\":\"index__menu-programs-all___9ype_\",\"news-content\":\"index__news-content___n4lMU\",\"detail\":\"index__detail___19DJB\",\"from\":\"index__from___-F1AW\",\"gallery-box\":\"index__gallery-box___2wyw_\",\"arrow-left\":\"index__arrow-left___2gzGU\",\"arrow-right\":\"index__arrow-right___2T-Qg\",\"img-warpper\":\"index__img-warpper___ChA8M\",\"img-box\":\"index__img-box___1o4JL\",\"images-loading\":\"index__images-loading___2N5zV\",\"loading-box\":\"index__loading-box___1Eytk\",\"curr-img\":\"index__curr-img___3tS8E\",\"summery-box\":\"index__summery-box___3e20s\",\"origin-link\":\"index__origin-link___1-DnK\",\"small-img\":\"index__small-img___mxkKx\",\"color_arrow-left\":\"index__color_arrow-left___33vKz\",\"color_arrow-right\":\"index__color_arrow-right___1yhTL\",\"list-box\":\"index__list-box___1Tvne\",\"border-box\":\"index__border-box___1TR58\",\"next-gallery\":\"index__next-gallery___1Vtt0\",\"top-cover\":\"index__top-cover___23rMi\",\"text\":\"index__text___1QXfj\",\"recommend-box\":\"index__recommend-box___1qiGf\",\"title-text\":\"index__title-text___3N5cE\",\"handle-box\":\"index__handle-box___1x74W\",\"again-btn\":\"index__again-btn___3SjzD\",\"next-btn\":\"index__next-btn___CdOxv\",\"intro-text\":\"index__intro-text___9ACG2\",\"more-box\":\"index__more-box___23D93\",\"text-more\":\"index__text-more___YMBQU\"};","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAsCAYAAABhVUjwAAAAAXNSR0IArs4c6QAAAzNJREFUSA2tl89rE0EUx92NesjaS4MIOYok1wg9VVDEQrEJgYIREYIHIeKt9KD+De1BT94kSMCKKSL5UclBqhfxYBBziJCIHsSASA6lJEjzY/2+sDPMzu5kd5MGljfzduazb968785GO3FMv2QymQbqqWma41AodE87Di6gK+BUAT1NPE3TfuvzgtPp9EUwXjMo8SjquSJGpOfB+QjQOQJaP1PX9ZszR5zJZM4CVJOglIbNSqWye5I9JogF9Eyv19vDnAvSvK1qtfqEfIEjzuVyp/r9/i7mLolQLL8A6CPmCwTGsrVOp/MMdpUByGL5tWg0ehfWZP4Qa/ix9Xp9azwe35fGfo5EImv5fP6f6PddFaiADUT62DZZ076Hw+HlYrH4V/RT2xcY0FuAvhDHY9l/0F9GXn8QSP55piKVSl3DJNosXkGAHkK2KyirbzKQ9adGTKoajUYfEO0Cn6BpRwCvAfqO+dysMmJSFYD7uBaFiSagWSy/LPhcm67lNk1VgL50JUlOB5ipCpHaVAUBbAM6UZXEcO3awNNUVS6XH7oSFE4ORoS+VaVg2dx881SqMgwjWSgUbKqyERSdSbkFVZWCZXNrEMAN6P8VvLymvVRlIyg6OnJLOy1CSVXXVVJVcBxuvnmOO3M6dCx7Awz+HsUKFiDjt6S8edg6nU+Ab4oQwOlwrFkKFG/5bk/Krd1uf4rH4waAl4SZi4PB4GoikdhpNptHgt9Xk+eYlEXnljRric43UqTk9+xyMNJhWudWTZyFVaxa5xyvHPG+qu0YnM1mjW63+x4T5FN4G/vxQAWS/VzS7Eaj0Rggr2+Gw+E6fPxdTPmPxWIHtB9s7DTriJgNtsrN8fmElN32807mOWZAZkl5pECADpkPlgJ5bp2DgtvZVEbMhhIEadjDNflEJT89DA+9UiqVvrBxslVGzAZah+Yd9AOp0xNMD6CcIspA6nRUBYtUtkHV6Sti9pAg6gwERjp8q9OzKli0orU+EfbhU6rTd45FML3tvNQ5U8TsISp10p+bucD0ALcPR7h/Bdo8FqloSX3Y1HVc/DBAW58pxyKY2q1W6ydOoK9oXsZ1ALnn/gN2G5Yku63ouQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAsCAYAAABhVUjwAAAAAXNSR0IArs4c6QAAAzFJREFUSA2tV72LE0EUz270isRrLogQsRFJ2ghXnYWIwpHLBxxcRIRgIQauEwv1bzhBbUUkSEDFBJR8nKSQ00YsDEKKWERs1IBICpEEuXysvxf2LZPdnf3I3cAwM2/m/ebNm/fbN6tkMpnkZDJ5pCiKirpdr9drgUMo6nQ6fQycU5qmnUStpNPpi4eAG1ABNmUg9JdQX2Wz2bMsW7RVUW5BWWMAAC/DNW9SqdRpli3SqvBpBb4lcKMA/AQGzVwud9wQ+uwEaX232/0Yj8fDADwn6K+MRqMLiUTieafT2Rfknroqr6rVanfglhKP9XZ1OBxWCoXCUZPcdWgAwx1aNBq9jrYpauEU671e7wlaRZS79S2L8/l8uN/vv4PiqqiM09zDfdwWZU79mY/FBe12ewS/vh6Px5uQr/Ac+T8Wi/2h+2CZU2uxmBfr4fYBgBQhXDS46mqj0XjBAllr+Ni8AMrfgsFgEkB/hTky5KkXdkotZjACgdW7qEsso82w6flqtfqZZeZWajEvxIW9Rf8aqi92ugLTBuRTWOmLnZaoICC74pednizmjfyw0xcw3OGZna5RwdaKLb56xwaDwR5kUnZ69rEITF87N3YuZDFvImMnviuXDwRMG1AaQ8Z5DwIt84Zof/i6PEHRtXsgi51csbDFej5smr5+AWIo5dEjrmeyWaCH2y6mzpimd0D/hyTzbTHlP8qD0DXHcAmgd3kjX8A4tqLnv3UGoBbHb+r50vgC+iJIq9XawZNsWwRF/1MkEtkoFov/RLnnqEAE3ITFD+aUFeVrKBRaK5fLv0U59T0BA/QKQJ+J63H8XxivUQojIHNxdYWe3+iyjAgCKKWmSwirL2ZAHjtabEdXgO6jbugpi3EsrdRiYhWOv4dqvC2gTek/j+O7Ps5tw82JVQB1fVOQ+RZgZhUsnWMVPbEAOmOV5dw2gjlgJ1ZRvrPRl4oMYFjomVVSNGHCuDwZq8LhcKpUKs2xStCXdmfh5pdVUjRhQgEBtsD/l5AZMY2QcmSVoC/t0n/efRMosSopo6oUyTRBf6PGBaJPrNp0ekWa9KVDhKd6A7PfAfgTdcuNqlIk08R/CGaf3ZGqptgAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAAAXNSR0IArs4c6QAAAlJJREFUaAXtml1OAjEQx7tFlhC+L+AFvIUPJN7DFy/jm/HFe5h4DBMv4AX4WiAsAZz/wqybakKnpeuDnYRMSzrza//bge1CogzbbDY3u93u/nA4jJMkuSbfNYZcpJtwFgKk6/X6kfoP1Nb8fihfgE/QV/K3oUBm3mJlWGmdUEwiOV3T9zrkra5anzZS8GtahaKtaaVj8806+holUwfIZGDFQerUBJn92q8tTyCCWYngPkodXGIGRKlZieA+Sh1cYgZEqVmJ4D5KHVxiBkSpWYng/uoShCzL1Gq1Up1Op3jZ5PS+xoDitd/v1XK5tGEWY7zAdMosoExrt9vcPOudwXmeq9lsVgJarZbq9Xpl/1zDCbzdbtVkMilzN5tNNRwOy75NQwzGtQSUzlxFfq21Go1Gig5/NrxyjAgMGKCAwwADFHCpiSKm06mCzGyAQmYXswbP53NFjy1KxmAwUGmaln1pwxpchWIHS0rnt0lZgwFjwyRQwz5mDe73+6oKRw2jll3NGgwAarW6mbDDq5tNMgkR2Cwfs7yCgZHY/MAwP1Bs4aIVc1LIjRpmg9yocYk5gQFADaOW2bDTF4sFd896ZzAyo5a73e/HZJIS874DYTDfgZxd6mlAQncNx68Z24gLjfOS2mcOEeyjnig2Si2Sy2dwlNpHPVFslFokl8/gKLWPeqLYKLVILp/B/1BqOg9lPpK5xuKH60/XYJ84/FT/5pPANVY3Go0Xgh8f47hmcYjTdMr/oLhnh1ivkL/9yw1JndPJ7478U12y/3gOSOfcWv5W9QXZ4d+V+89neAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAAAXNSR0IArs4c6QAAAvVJREFUaAXtmj9oE1Ecx7/v0ktKbN0sTl2kdhBxEQIVF0Gxgh2EgiAi+F+DQ7KIOtgOKi7pIEEUERyculmwouIiFgouCg61uGSSOmlrSHtJnu934V5p4cj7c7nF91vuvXfv9/3cfS9fQsIxbKvVA4f2gTcvco5jHGwY4APbtiQyZZEKn5zM/vleq7A2rnHAi9Z7dQzBBF1dqs2LuzzSK9B23T5aoDtFilBiMnqmvN38moa9BIzKCz9IKTzTCBgdPfr0RpM0j14nMmkiOywRm97ktNut9DyvcRfgwHHOJL7urE7c0jhBZ3WcM4mvO6sTtzRO0Fkd50zi687qxC2NE3RWxzmT+HoiVueuX8LA+zlkz55WvkBrcPbKeeSuXoA3tAvZc2fSAfsTJ9BfvCxhwZt3ctxtYHzHmcJB9N+9LfWbC4tYn6nKebeBEdgb2YP8zEMwP/x5jdbSMurlW0Cr1Y0nz2uDmXiW+eoM2MCOUKT9cwX1Yhmo16WoykAPnM8LaAXe7qFQm6/9FdAS+MovFdaWPergTAb5ygNkRkc60KCJeukm2ss/tgiqTpTBufIN9I0VpG5j6h5ai5/lXHegDPbHj0rt4OMCgrl5OTcZKIOD+c2M+ofH4J8cN+HJHmXweuURKKtR9U/dAWXZtJTBlFHKKmWWijJMWaZMm5Q6mNRFVimzlF0qynKYaZFt3dIDC3XKbJhdkWEqyjRlGyLjOqUNJnHKLmWYiyxTUbYp4xBZVy0jMIlThhvT9yWHMp4rFeW828AYTMLBq9doVJ9Khn98M+tyMWbQ+XqJOamyvPHkOZiw2D81gY0XL1Vawj3s9/6C+OM2/bKy2uZyHdjGPa1eZ7WWXTabndU27mn1Oqu17LLZ7Ky2cU+r11mtZZfN5v/SarZmY5lpr8fAa6bNNn0eY3hrI2Da64H1PRNvobRNBUz7vMEvn75xD49NBUz7wjjt3DtcFpZ/MBUx6QvBbHZ2Y3B0eFy8WlRNy3b5dlN01Wm9VvUPtw+84U/a99wAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAAAXNSR0IArs4c6QAAAk9JREFUaAXtmktuwjAQhp1QQEB4XaBH6CG6qNR79AQcpLuKTU/CorfgAlyAVxACRNL509oyXiR2YjsbjxQ5Bmc++2fGZKJEp9MpZw4siqI0z/MNtatOp/Pd7/fXMiZyBX6ARFFG/eVgMFjQRK74zguYT4KgPwR/BzzmH/poSfrX8/n8CZbXFRdAkp1+8xevKwaYVh3f7/cP7+B/+FsrYAqu51bAJHfSChhyBzBU8GJBai8yAxKkDlI7UyAElzNpVcdBalURZ/0gtTNpVcetSf2kzqSsT5UlwzEcDlmSJGVDK78zWjGgWZaxNE2Lo9J7yQAjMJWYwhXgVPmJvumJEXg8HjOq7AVjv9+z67Wos8VnuidGYDidzWas2+0K/9vtlt1uN9HXPTEGU8HF5vM5i+O/S6kOYoDjtzcxYzCcAwo4JgEDFHBMQtdqgeEccgPODXLvdjverWxrg+G51+ux6XQqIJfLhR0OB9EvO2kEhmOkmBzpgOtYYzByWYbJkyibQCMwchi5zA3QyWTCu6VtbTCCCZHMDcGGHNe1WmA1fdT00oEbg9UNQ91QdKAYYwxGrspbJHJZ3kKdgI/H40MEI4eRy3XMaMXy3yBuBOS/SVO4EXg0GhX7NKBN70C8P73lyhitmF9kow1gGypq+QhSa8lkY1CQ2oaKWj6C1Foy2RgUpLahopaPILWWTDYGBaltqFjpg8qetBWpqf7atAKmFa+839ATtJ3XMSgAlvTkYO1ValotXrlZIPq8gCEvHV8ELd7zAdjoeTUu0DUClb5W9QuetMSgeW5DjwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAAAXNSR0IArs4c6QAAAuRJREFUaAXtmj2IE0EUx99sskmIues8rNLIeZVWQuDARlSMoN2BICL4jdEiaUQtPAtPbJJCgx+oYGNznQdG9LARDw5srrA4D5tUclZqXJJssuu8kZnk8Ajzkt1NM6+Z97Kz75f5b/5Flsd+7s35EEqwBgO/zhi8AxZ/NrH26Us/hoUH7mEYgOdb8GhyT7bEFhfbeMXqXQ4v45Ja4EHh93q95s/NJSIDyyP5Phz89bVexjoSqSVYALnszIrvi0TqfrCQ3e+cjxyMX4JLfmQ8YGDZsYD5mTNjAkfk4/4fl8zNiaUSoa9G6tAllgAjtVQi9NVIHbrEEmCklkqEvhqpQ5dYAozUUolt18Tpk5BZXoLklQvbXqd8SJI6ceYUWFM7IXn5HCQunaVw/ttLArtvl1WDVOEi2MfzqqYmJHCr8hA6K6uKkZq/BbHcflVTEhIYul1wSjegu74hGMyOQ7pyH6zp3RSm2EsD4y2OA06hBN73TdGAZXZAuloBxp89Jehg3t3f/MHhRfAbfwTL2jXF4fyPfjqtzR4KjN29jW/gFK+D73YELDYzDenyPYBYTAs+NBi7d1c/Q/POggLFZ3OQLF1T9aBkJDA2dl+/AffjimLY+cMqH5SMDLZPHAP7wKxiuLX3Kh+UjARGD6du31T90eOt8gNVD0qGBqN30cPoZQz0Nnocva4TQ4HRs8K73MMY6Gn0NnpcN+hg7lX0LHoXA70sPM29TQkamHsUvYqexUAPo5fR09QggZPFq4BeldGcvyu8LGvKSgLbRw+p3s3qU3CXaqqmJiRw++Ur8PizbD1+Du0nL6isLfsjf3sr6aQTy5uCWA04CBW1ehiptWQKYpOROggVtXoYqbVkCmKTkToIFbV6GKm1ZApik5E6CBU1erDGWKTGwZTxgPk0TORgnILBEZzIwTh6g3M/kYL5wNEHnPfBX18kYCGvBdWJmWxeDhn9e4GhYQD6lq1jVZM4VrXWewH7F6RCwN8zrxc5AAAAAElFTkSuQmCC\"","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2YpsM\",\"textOverflow\":\"index__textOverflow___2zILA\",\"dot\":\"index__dot___HSTWX\",\"navBarIconList\":\"index__navBarIconList___ohiSn\",\"menu-tv\":\"index__menu-tv___2gsIo\",\"menu-radio\":\"index__menu-radio___HMPrX\",\"menu-programs\":\"index__menu-programs___MQ-pp\",\"menu-programs-all\":\"index__menu-programs-all___3EJVl\",\"video-play\":\"index__video-play___oeU5i\",\"title\":\"index__title___1HCNP\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___3Zngl\",\"textOverflow\":\"index__textOverflow___3aDDN\",\"dot\":\"index__dot___3g-Oj\",\"navBarIconList\":\"index__navBarIconList___1oF8c\",\"menu-tv\":\"index__menu-tv___3CgMP\",\"menu-radio\":\"index__menu-radio___3CLTI\",\"menu-programs\":\"index__menu-programs___1_f0i\",\"menu-programs-all\":\"index__menu-programs-all____G6_v\",\"video-content\":\"index__video-content___sFFmo\",\"video-content-top\":\"index__video-content-top___2kgLi\",\"video-detail-box\":\"index__video-detail-box___2VqZL\",\"video-info\":\"index__video-info___ziRCB\",\"video-title\":\"index__video-title___2GMX5\",\"relative-video-box\":\"index__relative-video-box___1_Qb3\",\"fix-position\":\"index__fix-position___3cKYj\",\"img-box\":\"index__img-box___2yhjT\",\"text-box\":\"index__text-box___3_Ze4\",\"active\":\"index__active___23n4O\",\"more-box\":\"index__more-box___jFe6y\",\"text-more\":\"index__text-more___3qYto\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___1UrRI\",\"textOverflow\":\"index__textOverflow___yjB6o\",\"dot\":\"index__dot___25GTm\",\"navBarIconList\":\"index__navBarIconList___267Ph\",\"menu-tv\":\"index__menu-tv___-EISG\",\"menu-radio\":\"index__menu-radio___2cCPO\",\"menu-programs\":\"index__menu-programs___1eeIt\",\"menu-programs-all\":\"index__menu-programs-all___1sgjr\",\"tv-content\":\"index__tv-content___1PGw-\",\"tv-content-top\":\"index__tv-content-top___1Pnof\",\"tv-detail-box\":\"index__tv-detail-box___1cG40\",\"tv-info\":\"index__tv-info___1iDTU\",\"tv-title\":\"index__tv-title___1HSF-\",\"relative-tv-box\":\"index__relative-tv-box___2aCP7\",\"fix-position\":\"index__fix-position___2Ehee\",\"img-box\":\"index__img-box___2rcAQ\",\"text-box\":\"index__text-box___350Oy\",\"active\":\"index__active___zXDSQ\",\"more-box\":\"index__more-box___2_aGe\",\"text-more\":\"index__text-more___3mqED\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"series-video-content\":\"index__series-video-content___1rm-q\",\"video-content-top\":\"index__video-content-top___CU4Ez\",\"video-detail-box\":\"index__video-detail-box___3gX8E\",\"video-title\":\"index__video-title___3b3mf\",\"selections-box\":\"index__selections-box___2POmb\",\"selections-count\":\"index__selections-count___1DyOV\",\"list-box\":\"index__list-box___2FoIT\",\"curr-style\":\"index__curr-style___3cKge\",\"position-line\":\"index__position-line___P0q33\",\"withBg\":\"index__withBg___2-jOH\",\"number-box\":\"index__number-box___3P6M7\",\"icon-box\":\"index__icon-box___3QbZo\",\"text-box\":\"index__text-box___2lpI0\",\"more-box\":\"index__more-box___1Zufb\",\"text-more\":\"index__text-more___fJXGo\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___3CthB\",\"textOverflow\":\"index__textOverflow___3Ymwe\",\"dot\":\"index__dot___2Mc7F\",\"navBarIconList\":\"index__navBarIconList___h7kEt\",\"menu-tv\":\"index__menu-tv___3jQRH\",\"menu-radio\":\"index__menu-radio___3IJbJ\",\"menu-programs\":\"index__menu-programs___3FAPY\",\"menu-programs-all\":\"index__menu-programs-all___2CHuZ\",\"topic\":\"index__topic___1fzEo\",\"topic-bg\":\"index__topic-bg___235Io\",\"content\":\"index__content___gvlW-\",\"summary\":\"index__summary___31_lo\",\"video-box\":\"index__video-box___1ZY2B\",\"video-box-right\":\"index__video-box-right___221vB\",\"fix-position\":\"index__fix-position___4bWgc\",\"img-box\":\"index__img-box___2-MUn\",\"text-box\":\"index__text-box___L8cDC\",\"active\":\"index__active___1h2lf\",\"topic-column-list\":\"index__topic-column-list___1qvoq\",\"topic-column\":\"index__topic-column___35gPj\",\"btn-show-all\":\"index__btn-show-all___3lEhn\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport {\n    Select, Radio\n} from 'antd';\n\nimport styles from './index.less';\n\nconst { Option } = Select;\nconst YEARS = 2015;\nconst MONTH = 12;\n\n/**\n * 月份选择\n * 默认显示当前月\n */\nclass MonthRadioWithYear extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currnetYear: undefined,\n            currentMonth: undefined,\n            selectedYear: undefined,\n            selectedMonth: undefined\n        };\n    }\n\n    componentWillMount() {\n        const { beginScore } = this.props;\n        const [currnetYear, currentMonth] = moment(beginScore).format('YYYY-MM').split('-');\n        this.setState({\n            currnetYear,\n            currentMonth,\n            selectedYear: currnetYear,\n            // selectedMonth: currentMonth\n        });\n    }\n\n    handleSelectYear = (e) => {\n        const { onChangeTime = () => null } = this.props;\n        const { currnetYear, currentMonth } = this.state;\n        const month = currnetYear === e ? currentMonth : 12;\n        this.setState({\n            selectedYear: e,\n            selectedMonth: month\n        });\n        onChangeTime(\n            moment()\n                .year(e)\n                .month(month - 1)\n                .startOf('month')\n                .valueOf()\n        );\n    }\n\n    handleSelectMonth = (e) => {\n        const { onChangeTime = () => null } = this.props;\n        const { selectedYear } = this.state;\n        const { value } = e.target;\n        this.setState({ selectedMonth: value });\n        onChangeTime(\n            moment()\n                .year(selectedYear)\n                .month(value - 1)\n                .startOf('month')\n                .valueOf()\n        );\n    }\n\n    renderYearOption = () => {\n        const { currnetYear } = this.state;\n        const array = [];\n        if (currnetYear) {\n            for (let i = currnetYear; i >= YEARS; i -= 1) {\n                array.push(<Option value={i} key={i}>{i}</Option>);\n            }\n        }\n        return array;\n    }\n\n    renderMonthRadio = () => {\n        const { currnetYear, currentMonth, selectedYear } = this.state;\n        const month = currnetYear === selectedYear ? currentMonth : 12;\n        const array = [];\n        if (currnetYear) {\n            for (let i = month; i >= 1; i -= 1) {\n                array.push(\n                    <a key={i}>\n                        <Radio.Button className={styles.month} value={i}>{i}月</Radio.Button>\n                    </a>\n                );\n            }\n        }\n        return array;\n    }\n\n    render() {\n        const { selectedYear, selectedMonth } = this.state;\n        return (\n            <div className={styles['month-radio-with-year']}>\n                <Select\n                    className={styles['year-group']}\n                    value={selectedYear}\n                    onChange={this.handleSelectYear}\n                >\n                    {this.renderYearOption()}\n                </Select>\n                <Radio.Group\n                    className={styles['month-group']}\n                    buttonStyle='solid'\n                    value={selectedMonth}\n                    onChange={this.handleSelectMonth}\n                >\n                    {this.renderMonthRadio()}\n                </Radio.Group>\n\n            </div>\n        );\n    }\n}\n\nMonthRadioWithYear.propTypes = {\n    onChangeTime: PropTypes.func\n};\n\nexport default MonthRadioWithYear;\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"month-radio-with-year\":\"index__month-radio-with-year___1S3HC\",\"year-group\":\"index__year-group___1cbo5\",\"month-group\":\"index__month-group____eb7t\",\"month\":\"index__month___3tepx\"};","import {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nimport { PAGE_SIZE } from './constant';\n\n/**\n * 获取栏目信息\n * @param {*} action \n */\nfunction* getColumnInfo(action) {\n    try {\n        const res = yield call(Api.getColumnInfo, action.data);\n        yield put(ActionTypes.getColumnInfo.success(action, res));\n        yield call(getColumnVideoList, {\n            data: {\n                tvColumnPk: res.pk,\n                currentPage: 1,\n                searchByTime: false\n            }\n        });\n\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.name, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.desc\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getColumnInfo.failure(action, error));\n    }\n}\n\n/**\n * 获取栏目视频\n * @param {*} action \n */\nfunction* getColumnVideoList(action) {\n    try {\n        const data = {\n            pageSize: PAGE_SIZE,\n            ...action.data\n        };\n        const res = yield call(Api.getColumnVideoList, data);\n        yield put(ActionTypes.getColumnVideoList.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(action, error));\n    }\n}\n\n/**\n * 获取频道信息\n * @param {*} action \n */\nfunction* getChannelInfo(action) {\n    try {\n        const res = yield call(Api.getChannelInfo, action.data);\n        yield put(ActionTypes.getChannelInfo.success(action, res));\n        yield call(getChannelNews, {\n            data: {\n                channelId: res.pk,\n                currentPage: 1\n            }\n        });\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.name, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.desc\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getChannelInfo.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/**\n * 获取栏目视频\n * @param {*} action \n */\nfunction* getChannelNews(action) {\n    try {\n        const data = {\n            pageSize: PAGE_SIZE,\n            ...action.data\n        };\n        const res = yield call(Api.getChannelNews, data);\n        yield put(ActionTypes.getChannelNews.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nexport default function* TvColumnPrefetch(args) {\n    const { pathName = '' } = args;\n    const [, path, id] = pathName.split('/');\n    switch (path) {\n        case 'tvColumn':\n            yield fork(getColumnInfo, { data: { columnPk: id } });\n            break;\n        case 'tvChannel':\n            yield fork(getChannelInfo, { data: { channelId: id } });\n            break;\n        default:\n            break;\n    }\n}\n","import { createSelector } from 'reselect';\n\nconst columnSelector = (state) => state.get('TvColumn');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector(\n    [columnSelector, globalSelector],\n    (column, global) => ({\n        isPrefetch: global.get('prefetch').get('isPrefetch'),\n        isRequesting: column.get('isRequesting'),\n        hasMore: column.get('hasMore'),\n        columnInfo: column.get('columnInfo'),\n        columnVideoList: column.get('columnVideoList')\n    })\n);\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2k7kj\",\"textOverflow\":\"index__textOverflow___3-ZV6\",\"dot\":\"index__dot___1Jvtc\",\"navBarIconList\":\"index__navBarIconList___15orZ\",\"menu-tv\":\"index__menu-tv___1Ukl4\",\"menu-radio\":\"index__menu-radio___2xvEx\",\"menu-programs\":\"index__menu-programs___ma8wM\",\"menu-programs-all\":\"index__menu-programs-all___2hsIQ\",\"tv-column\":\"index__tv-column___2Zqzk\",\"info\":\"index__info___zvipa\",\"cover\":\"index__cover___3cdp2\",\"detail\":\"index__detail___3rVsx\",\"from\":\"index__from___2hTZA\",\"desc\":\"index__desc___2u6X1\",\"desc-text\":\"index__desc-text___3rHWO\",\"btn-group\":\"index__btn-group___1s1ZA\",\"content\":\"index__content___1KULO\",\"column-video-list\":\"index__column-video-list___37Gr6\",\"load-component\":\"index__load-component___133Gn\"};","import moment from 'moment';\nimport {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services/index';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\n// 获取视频详情\nfunction* getTvChannelDetail(args) {\n    try {\n        const res = yield call(Api.getTvChannelDetail, args.data);\n        yield put(ActionTypes.getTvChannelDetail.success(args, res));\n\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.name, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.slogan\n        }));\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getTvChannelDetail.failure(args, error));\n    }\n}\n\nfunction* getTvChannelList(args) { // 获取频道列表\n    try {\n        const res = yield call(Api.getTvChannelList);\n        yield put(ActionTypes.getTvChannelList.success(args, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getTvChannelList.failure(args, error));\n    }\n}\n\nfunction* getTvMenuList(args) { // 获取左侧展示列表\n    try {\n        const data = {\n            ...args.data,\n            endAt: moment().add(3, 'days').format('YYYY-MM-DD'),\n            beginAt: moment().subtract(3, 'days').format('YYYY-MM-DD'),\n        };\n        const res = yield call(Api.getTvMenuList, data);\n        yield put(ActionTypes.getTvMenuList.success(args, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getTvMenuList.failure(args, error));\n    }\n}\n\nfunction* getTvColumn(args) { // 获取更多精彩\n    try {\n        const res = yield call(Api.getTvColumn, args.data);\n        yield put(ActionTypes.getTvColumn.success(args, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getTvColumn.failure(args, error));\n    }\n}\n\nexport default function* TvChannelDetailPrefetch(args) {\n    const { pathName = '' } = args;\n    const [, , tvChannelPk] = pathName.split('/');\n\n    yield fork(getTvChannelDetail, { data: { tvChannelPk } });\n    yield fork(getTvChannelList);\n    yield fork(getTvMenuList, { data: { tvChannelPk } });\n    yield fork(getTvColumn, { data: { tvChannelPk } });\n}\n","import { createSelector } from 'reselect';\n\nconst TvChannelSelector = (state) => state.get('TvChannelDetail');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([TvChannelSelector, globalSelector], (TvChannel, global) => ({  \n    tvChannelDetail: TvChannel.get('tvChannelDetail'),\n    tvChannelList: TvChannel.get('tvChannelList'),\n    tvMenuList: TvChannel.get('tvMenuList'),\n    dateDataListWithLiveMenu: TvChannel.get('dateDataListWithLiveMenu'),\n    tvColumn: TvChannel.get('tvColumn'),\n    isPrefetch: global.get('prefetch').get('isPrefetch')\n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"tv-channel-content\":\"index__tv-channel-content___10ahF\",\"tv-channel-content-top\":\"index__tv-channel-content-top___2c7BJ\",\"tv-channel-detail-box\":\"index__tv-channel-detail-box___399av\",\"video-title\":\"index__video-title___1ckHb\",\"channel-live-box\":\"index__channel-live-box___3AO79\",\"fix-position\":\"index__fix-position___32r32\",\"channel-summery\":\"index__channel-summery___PrjV3\",\"head-img\":\"index__head-img___wQx80\",\"summery-text\":\"index__summery-text___i9NGN\",\"switch-btn-L\":\"index__switch-btn-L___1Aj0y\",\"switch-btn-R\":\"index__switch-btn-R___3b82S\",\"disabled\":\"index__disabled___LWfUv\",\"date-list\":\"index__date-list___3NMjr\",\"curr-style\":\"index__curr-style___1Xr2L\",\"text-day\":\"index__text-day___1_iND\",\"text-time\":\"index__text-time___20yI1\",\"position-line\":\"index__position-line___2KJYm\",\"live-list-box\":\"index__live-list-box___3-gQs\",\"time\":\"index__time___3YoKV\",\"title\":\"index__title___SkXhZ\",\"playing-sign\":\"index__playing-sign___2v5Mc\",\"playing-sign-image\":\"index__playing-sign-image___2Xj9T\",\"none-data\":\"index__none-data___1y_7h\",\"channel-list\":\"index__channel-list___3lGnc\",\"current-channel\":\"index__current-channel___329TQ\",\"more-box\":\"index__more-box___Sn_jL\",\"text-more\":\"index__text-more___vRutG\"};","import {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services/index';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nfunction* getColumnVideoList(args) {\n    try {\n        const res = yield call(Api.getColumnVideoList);\n        yield put(ActionTypes.getColumnVideoList.success(args, res));\n        yield call(getRecommendList, {\n            data: {\n                tvColumnPk: 1,\n                beginScore: res.lastScore\n            }\n        });\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(args, error));\n    }\n}\n\nfunction* getRecommendList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getRecommendList.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getRecommendList.failure(action, error));\n    }\n}\n\nexport default function* TvColumnDetailPrefetch(args) {\n    yield fork(getColumnVideoList, args);\n}\n","import { createSelector } from 'reselect';\n\nconst columnDetailSelector = (state) => state.get('TvColumnDetail');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([columnDetailSelector, globalSelector], (columnDetail, global) => ({  \n    columnVideoList: columnDetail.get('columnVideoList'),\n    relateNews: columnDetail.get('relateNews'),\n    beginScore: columnDetail.get('lastScore'),\n    videoDetail: columnDetail.get('videoDetail'),\n    nameText: columnDetail.get('nameText'),\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n    \n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___8Uzyh\",\"textOverflow\":\"index__textOverflow___1YIKZ\",\"dot\":\"index__dot___1NSgj\",\"navBarIconList\":\"index__navBarIconList___3Pd5e\",\"menu-tv\":\"index__menu-tv___MJCGu\",\"menu-radio\":\"index__menu-radio___3H08i\",\"menu-programs\":\"index__menu-programs___1x4No\",\"menu-programs-all\":\"index__menu-programs-all___2IX42\",\"column-video-content\":\"index__column-video-content___1GNrk\",\"video-content-top\":\"index__video-content-top___2MbXz\",\"video-detail-box\":\"index__video-detail-box___8Zhow\",\"video-title\":\"index__video-title___3lidG\",\"relative-video-box\":\"index__relative-video-box___39A6H\",\"fix-position\":\"index__fix-position___2VF8w\",\"img-box\":\"index__img-box___2f3Vz\",\"text-box\":\"index__text-box___3HEw5\",\"active\":\"index__active___v7etx\",\"more-box\":\"index__more-box___2eh1P\",\"text-more\":\"index__text-more___35Mxa\"};","import {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nfunction* getLive(action) {\n    try {\n        const { id } = action.data;\n        const res = yield call(Api.getLive, { id });\n        yield put(ActionTypes.getLive.success(action, res));\n        yield call(liveCount, {\n            id,\n            countType: 'readCount'\n        });\n\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.title, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.desc\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getLive.failure(action, error));\n    }\n}\n\nfunction* liveCount(action) {\n    try {\n        const res = yield call(Api.liveCount, action.data);\n        yield put(ActionTypes.liveCount.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.liveCount.failure(action, error));\n    }\n}\n\nexport default function* LiveRoomPrefetch(args) {\n    const { pathName = '' } = args;\n    const [, , id] = pathName.split('/');\n\n    yield fork(getLive, { data: { id } });\n}\n","import { createSelector } from 'reselect';\n\nconst LiveRoomSelector = (state) => state.get('LiveRoom');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([LiveRoomSelector, globalSelector], (LiveRoom, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n\n    liveDetail: LiveRoom.get('LiveRoom').get('liveDetail'),\n}));\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___1GQH4\",\"textOverflow\":\"index__textOverflow___JyIy7\",\"dot\":\"index__dot___1DWGK\",\"navBarIconList\":\"index__navBarIconList___1ahti\",\"menu-tv\":\"index__menu-tv___gTng6\",\"menu-radio\":\"index__menu-radio___3QuuG\",\"menu-programs\":\"index__menu-programs___3TeLw\",\"menu-programs-all\":\"index__menu-programs-all___142mx\",\"video-content\":\"index__video-content___2gw3m\",\"video-content-warpper\":\"index__video-content-warpper___34i1K\",\"video-detail-box\":\"index__video-detail-box___2WRSf\",\"video-title\":\"index__video-title___2VPAf\",\"relative-video-box\":\"index__relative-video-box___1HE-A\",\"fix-position\":\"index__fix-position___27hgx\",\"img-box\":\"index__img-box___3R0bp\",\"text-box\":\"index__text-box___xA9gY\",\"active\":\"index__active___3Luy8\",\"more-box\":\"index__more-box___Wvl6H\",\"text-more\":\"index__text-more___3TQO4\"};","// removed by extract-text-webpack-plugin\nmodule.exports = {\"erro-bg\":\"index__erro-bg___3PXEJ\",\"tips\":\"index__tips___1BqvS\"};","import { combineReducers } from 'redux-immutable';\nimport routesList from './routes';\n\nconst reducers = {};\nlet moduleList = [];\n\nfunction mapModules(routes) {\n    routes.map(item => {\n        const { moduleName } = item;\n        if (moduleName) {\n            moduleList.push(moduleName);\n        }\n\n        if (item.routes) {\n            mapModules(item.routes);\n        }\n        return null;\n    });\n}\n\nmapModules(routesList);\n\n// 引入模块去重\nmoduleList = Array.from(new Set(moduleList));\n\nmoduleList.map(item => {\n    const moduleReducer = require(`./containers/${item}/reducers`);\n    if (moduleReducer.default || moduleReducer) {\n        reducers[item] = moduleReducer.default ? moduleReducer.default : moduleReducer;\n    }\n    return null;\n});\n\n// 全局reducer\nconst globalReducer = require('./global/reducers');\nconst accountReducer = require('./global/account/reducers');\n\nreducers.global = globalReducer.default ? globalReducer.default : globalReducer;\nreducers.account = accountReducer.default ? accountReducer.default : accountReducer;\n\nexport default combineReducers(reducers);\n","var map = {\n\t\"./ChannelsPage/reducers\": 1397,\n\t\"./HomePage/reducers\": 1398,\n\t\"./LiveRoom/reducers\": 1399,\n\t\"./NewsDetail/reducers\": 1400,\n\t\"./SearchPage/reducers\": 1401,\n\t\"./TopicDetail/reducers\": 1402,\n\t\"./TvChannelDetail/reducers\": 1403,\n\t\"./TvColumn/reducers\": 1404,\n\t\"./TvColumnDetail/reducers\": 1405,\n\t\"./TvPrograms/reducers\": 1406\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1396;","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\nconst allChannelsInitialState = fromJS({\n    isRequesting: false,\n    // 频道详情\n    channelInfo: {},\n    // Map子频道信息流，pk为key\n    channelNews: {},\n    channelRequesting: {},\n});\n\nconst allChannels = (state = allChannelsInitialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_CHANNEL_INFO.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_CHANNEL_INFO.SUCCESS:\n            return state\n                .set('isRequesting', false)\n                .set('channelInfo', fromJS(action.response));\n        case ActionTypes.GET_CHANNEL_INFO.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_CHANNEL_NEWS.REQUEST:\n            return state\n                .setIn(['channelRequesting', action.data.channelId], true)\n                .set('isRequesting', true);\n        case ActionTypes.GET_CHANNEL_NEWS.SUCCESS: {\n            const { data, response } = action;\n            const { channelId } = data.data;\n            return state\n                .setIn(['channelNews', channelId], response)\n                .setIn(['channelRequesting', channelId], false)\n                .set('isRequesting', false);\n        }\n        case ActionTypes.GET_CHANNEL_NEWS.FAILURE:\n            return state\n                .setIn(['channelRequesting', action.data.data.channelId], false)\n                .set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nexport default allChannels;\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\nimport { getEntity } from 'Utils/utils';\n\nimport * as ActionTypes from './actions';\n\nconst homeChannelsInitialState = fromJS({\n    isRequesting: false,\n    channels: [],\n    // 首页频道信息流Map，pk为key\n    channelNews: {}\n});\n\nconst homeChannels = (state = homeChannelsInitialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_HOME_SHOW_CHANNELS.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_HOME_SHOW_CHANNELS.SUCCESS:\n            return state\n                .set('channels', action.response)\n                .set('isRequesting', false);\n        case ActionTypes.GET_HOME_SHOW_CHANNELS.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_CHANNEL_NEWS.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_CHANNEL_NEWS.SUCCESS: {\n            const { data, response } = action;\n            const { channelId } = data.data;\n            const list = response.list.map(cur => getEntity(cur));\n            return state\n                .setIn(['channelNews', channelId], list)\n                .set('isRequesting', false);\n        }\n        case ActionTypes.GET_CHANNEL_NEWS.FAILURE:\n            return state.set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nconst hotNewsInitialState = fromJS({\n    isRequesting: false,\n    // 图片新闻\n    pictrueNews: [],\n    // 文字新闻\n    textNews: [],\n    // 滚动新闻\n    rollNews: []\n});\n\nconst hotNews = (state = hotNewsInitialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_HOT_NEWS.SUCCESS: {\n            const { textNewsData = [], pictrueNewsData = [] } = action.response;\n            const textNews = textNewsData.map(cur => cur.map((item) => getEntity(item)));\n            const pictrueNews = pictrueNewsData.map(cur => getEntity(cur));\n            return state\n                .set('textNews', textNews)\n                .set('pictrueNews', pictrueNews);\n        }\n\n        case ActionTypes.GET_ROLL_NEWS.SUCCESS:\n            return state.set('rollNews', action.response);\n\n        default:\n            return state;\n    }\n};\n\nconst focusInitialState = fromJS({\n    isRequesting: false,\n    focusList: []\n});\n\nconst focus = (state = focusInitialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_CHANNEL_FOCUS.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_CHANNEL_FOCUS.SUCCESS:\n            return state\n                .set('focusList', action.response.channelFocusList)\n                .set('isRequesting', false);\n        case ActionTypes.GET_CHANNEL_FOCUS.FAILURE:\n            return state.set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nexport default combineReducers({\n    homeChannels,\n    hotNews,\n    focus\n});\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    liveDetail: {}\n});\n\nconst LiveRoom = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_LIVE.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_LIVE.SUCCESS:\n            return state\n                .set('liveDetail', action.response)\n                .set('isRequesting', false);\n        case ActionTypes.GET_LIVE.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport default combineReducers({\n    LiveRoom\n});\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    newsContent: {},\n    channelInfo: {},\n    classificationName: '',\n\n    relateNews: [],\n    moreRelateNews: {},\n\n    columnVideo: [],\n    moreColumnVideo: {},\n});\n\nconst NewsDetail = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_NEWS_CONTENT.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_NEWS_CONTENT.SUCCESS:\n            return state\n                .set('newsContent', fromJS(action.response))\n                .set('isRequesting', false);\n        case ActionTypes.GET_NEWS_CONTENT.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_CHANNEL_INFO.SUCCESS:\n            return state.set('channelInfo', fromJS(action.response));\n\n        case ActionTypes.GET_RECENTLY_NEWS_LIST.SUCCESS:\n            return state.set('relateNews', fromJS(action.response.responseList));\n\n        case ActionTypes.GET_RECOMMEND_LIST.SUCCESS:\n            return state\n                .set('relateNews', fromJS(action.response.list))\n                .set('classificationName', action.response.name);\n\n        case ActionTypes.GET_MORE_LIST.SUCCESS:\n            return state.set('moreRelateNews', fromJS(action.response));\n\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.SUCCESS:\n            return state\n                .set('columnVideo', fromJS(action.response.list))\n                .set('classificationName', action.response.name);\n\n        case ActionTypes.GET_MORE_COLUMN_VIDEO_LIST.SUCCESS:\n            return state.set('moreColumnVideo', fromJS(action.response));\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport default combineReducers({\n    NewsDetail\n});\n","import * as R from 'ramda';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\n/**\n * 合并两个对象的自身属性（不包括 prototype 属性）。\n * 如果某个 key 在两个对象中都存在：\n * 并且两个关联的值都是对象，则继续递归合并这两个值。\n * 否则，使用给定函数对该 key 和对应的两个值进行处理，并将返回值作为该 key 的新值。\n * @param {*} k \n * @param {*} l \n * @param {*} r \n */\nconst rule = (k, l, r) => (k === 'list' ? R.concat(l, r) : r);\nconst mergeWith = (l, r) => R.mergeDeepWithKey(rule, l, r);\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    // 剧集\n    series: {},\n    // 电视节目\n    tvColumns: {},\n    // 专题\n    topics: {},\n    // 新闻\n    newsItems: {}\n});\n\nconst SearchPage = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.SEARCH_NEWS.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.SEARCH_NEWS.SUCCESS: {\n            const {\n                series,\n                tvColumns,\n                topics,\n                newsItems\n            } = action.response;\n            return state\n                .set('isRequesting', false)\n                .set('series', mergeWith(state.get('series'), series || {}))\n                .set('tvColumns', mergeWith(state.get('tvColumns'), tvColumns || {}))\n                .set('topics', mergeWith(state.get('topics'), topics || {}))\n                .set('newsItems', mergeWith(state.get('newsItems'), newsItems || {}));\n        }\n        case ActionTypes.SEARCH_NEWS.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport default SearchPage;\n","import { fromJS } from 'immutable';\nimport * as R from 'ramda';\n\nimport * as ActionTypes from './actions';\n\n/**\n * 处理剧集列表数据\n */\nconst dataMenuFn = (list) => R.splitEvery(30)(list);\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    newsTopicDetail: {},\n    // 专题栏目\n    newsTopicColumn: [],\n    // 剧集总集数\n    total: 0,\n    topicMemberList: [],\n    // 剧集分集\n    newsTopicMemberList: [],\n    // 更多精彩数据\n    channelNewsList: [],\n    channelNewsIsRequesting: false,\n});\n\nconst TopicDetail = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_NEWS_TOPIC.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_NEWS_TOPIC.SUCCESS:\n            return state\n                .set('newsTopicDetail', action.response)\n                .set('isRequesting', false);\n        case ActionTypes.GET_NEWS_TOPIC.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_NEWS_TOPIC_COLUMN.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_NEWS_TOPIC_COLUMN.SUCCESS:\n            return state\n                .set('newsTopicColumn', action.response.filter(_ => _.memberList?.length > 0))\n                .set('isRequesting', false);\n        case ActionTypes.GET_NEWS_TOPIC_COLUMN.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_NEWS_TOPIC_MEMBER_LIST.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_NEWS_TOPIC_MEMBER_LIST.SUCCESS:\n            return state\n                .set('newsTopicMemberList', dataMenuFn(action.response))\n                .set('topicMemberList', action.response)\n                .set('total', action.response.length)\n                .set('isRequesting', false);\n        case ActionTypes.GET_NEWS_TOPIC_MEMBER_LIST.FAILURE:\n            return state.set('isRequesting', false);\n\n\n        case ActionTypes.GET_CHANNEL_NEWS_LIST.REQUEST:\n            return state.set('channelNewsIsRequesting', true);\n        case ActionTypes.GET_CHANNEL_NEWS_LIST.SUCCESS:\n            return state\n                .set('channelNewsList', action.response.list)\n                .set('channelNewsIsRequesting', false);\n        case ActionTypes.GET_CHANNEL_NEWS_LIST.FAILURE:\n            return state.set('channelNewsIsRequesting', false);\n\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport default TopicDetail;\n","import { fromJS } from 'immutable';\nimport moment from 'moment';\n\n\nimport { dateDataList } from './enum';\nimport * as ActionTypes from './actions';\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    tvChannelDetail: {},\n    tvChannelList: [],\n    tvMenuList: [],\n    tvColumn: [],\n    dateDataListWithLiveMenu: [],\n});\n\nconst TvChannelDetail = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_TV_CHANNEL_DETAIL.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_TV_CHANNEL_DETAIL.SUCCESS:\n            return state\n                .set('tvChannelDetail', action.response)\n                .set('isRequesting', false);\n        case ActionTypes.GET_TV_CHANNEL_DETAIL.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_TV_CHANNEL_LIST.SUCCESS:\n            return state\n                .set('tvChannelList', action.response);\n\n        case ActionTypes.GET_TV_MENU_LIST.SUCCESS:\n            return state\n                .set('tvMenuList', action.response)\n                .set('dateDataListWithLiveMenu', dateMenuFn(action.response, dateDataList));\n\n        case ActionTypes.GET_TV_COLUMN.SUCCESS:\n            return state\n                .set('tvColumn', action.response && action.response.tvColumnList);\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nconst dateMenuFn = (tvMenuList, dateList) => {\n    let dateDataListWithLiveMenu = [];\n    // const newDateList = JSON.stringify(dateList);\n    tvMenuList && tvMenuList.map(ele => {\n        const timestamp = moment(ele.dateAt).startOf('day');\n        // dateDataListWithLiveMenu = JSON.parse(newDateList).map(date => {\n        dateDataListWithLiveMenu = dateList.map(date => {\n            if (timestamp == date.timestamp) {\n                if (ele.tvMenus) {\n                    date.tvMenu = [...date.tvMenu, ...ele.tvMenus, ...[]];\n                }\n                return date;\n            }\n            return date;\n        });\n        return '';\n    });\n    console.log(dateList, tvMenuList);\n    console.log(dateDataListWithLiveMenu);\n    return dateDataListWithLiveMenu;\n};\nexport default TvChannelDetail;\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\nimport { PAGE_SIZE } from './constant';\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    // 还有更多\n    hasMore: true,\n    columnInfo: {},\n    columnVideoList: []\n});\n\nconst TvColumn = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_COLUMN_INFO.REQUEST:\n        case ActionTypes.GET_CHANNEL_INFO.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_COLUMN_INFO.SUCCESS:\n        case ActionTypes.GET_CHANNEL_INFO.SUCCESS:\n            return state\n                .set('isRequesting', false)\n                .set('columnInfo', action.response);\n        case ActionTypes.GET_COLUMN_INFO.FAILURE:\n        case ActionTypes.GET_CHANNEL_INFO.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.REQUEST:\n        case ActionTypes.GET_CHANNEL_NEWS.REQUEST:\n            if (action.data && action.data.currentPage == 1) {\n                return state\n                    .set('isRequesting', true)\n                    .set('columnVideoList', [])\n                    .set('hasMore', true);\n            }\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.SUCCESS:\n        case ActionTypes.GET_CHANNEL_NEWS.SUCCESS:\n            return state\n                .set('isRequesting', false)\n                .set('columnVideoList', [...state.get('columnVideoList'), ...action.response.list])\n                .set('hasMore', action.response.list && PAGE_SIZE <= action.response.list.length);\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.FAILURE:\n        case ActionTypes.GET_CHANNEL_NEWS.FAILURE:\n            return state.set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nexport default TvColumn;\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\nconst initialState = fromJS({\n    isPrefetch: false,\n    isRequesting: false,\n    videoDetail: {},\n    columnVideoList: [],\n    relativeIsRequesting: false,\n    relateNews: [],\n    beginScore: 0,\n    nameText: ''\n});\n\nconst TvColumnDetail = (state = initialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.SUCCESS: {\n            const { list = [] } = action.response;\n            let [{ data }] = list;\n            try {\n                data = JSON.parse(data);\n            } catch (error) {\n                data = {};\n            }\n            return state\n                .set('videoDetail', data)\n                .set('nameText', action.response.name)\n                .set('columnVideoList', list)\n                .set('beginScore', action.response.lastScore)\n                .set('isRequesting', false);\n        }\n        case ActionTypes.GET_COLUMN_VIDEO_LIST.FAILURE:\n            return state.set('isRequesting', false);\n\n\n        case ActionTypes.GET_RECOMMEND_LIST.REQUEST:\n            return state.set('relativeIsRequesting', true);\n        case ActionTypes.GET_RECOMMEND_LIST.SUCCESS:\n            return state\n                .set('relateNews', action.response.list)\n                .set('beginScore', action.response.lastScore)\n                .set('relativeIsRequesting', false);\n        case ActionTypes.GET_RECOMMEND_LIST.FAILURE:\n            return state.set('relativeIsRequesting', false);\n\n        case ActionTypes.SET_VIDEO_DETAIL:\n            return state.set('videoDetail', action.data);\n\n        case ActionTypes.LEAVE_PAGE:\n            return initialState;\n        default:\n            return state;\n    }\n};\n\nexport default TvColumnDetail;\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\n\nimport * as ActionTypes from './actions';\n\nconst tvProgramsInitialState = fromJS({\n    isRequesting: false,\n    // 电视频道\n    tvChannels: [],\n    // 电视频道下栏目Map\n    tvChannelsColumn: {}\n});\n\nconst tvPrograms = (state = tvProgramsInitialState, action) => {\n    switch (action.type) {\n        case ActionTypes.GET_TV_CHANNEL.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_TV_CHANNEL.SUCCESS:\n            return state\n                .set('tvChannels', fromJS(action.response))\n                .set('isRequesting', false);\n        case ActionTypes.GET_TV_CHANNEL.FAILURE:\n            return state.set('isRequesting', false);\n\n        case ActionTypes.GET_TV_COLUMN.REQUEST:\n            return state.set('isRequesting', true);\n        case ActionTypes.GET_TV_COLUMN.SUCCESS: {\n            const { data, response } = action;\n            const { tvChannelPk } = data.data;\n            return state\n                .setIn(['tvChannelsColumn', tvChannelPk], response.tvColumnList)\n                .set('isRequesting', false);\n        }\n        case ActionTypes.GET_TV_COLUMN.FAILURE:\n            return state.set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nexport default combineReducers({\n    tvPrograms\n});\n","import { combineReducers } from 'redux-immutable';\nimport { fromJS } from 'immutable';\nimport { SCREEN_SIZE } from 'Utils/tools';\nimport { CHANNEL_LIST } from 'Constants/hardCode';\n\nimport * as actionTypes from './actions';\n\nconst initialGlobalState = fromJS({\n    isRequesting: false,\n    // 屏幕尺寸\n    screenSize: SCREEN_SIZE[0],\n    // 友情链接\n    friendlyLinks: {},\n    // 所有频道\n    channelList: []\n});\nconst root = (state = initialGlobalState, action) => {\n    switch (action.type) {\n        case actionTypes.SET_SCREEN_SIZE:\n            return state.set('screenSize', action.size);\n\n        case actionTypes.GET_FRIENDLY_LINKS.SUCCESS:\n            return state.set('friendlyLinks', fromJS(action.response));\n\n        case actionTypes.GET_COMMON_CHANNEL.SUCCESS:\n            return state.set('channelList', fromJS(action.response));\n\n        default:\n            return state;\n    }\n};\n\nconst initialPrefetchState = fromJS({\n    isPrefetch: false,\n    use: false,\n    title: '',\n    metaTitle: '',\n    metaKeywords: '',\n    metaDescription: ''\n});\nconst prefetch = (state = initialPrefetchState, action) => {\n    switch (action.type) {\n        case actionTypes.PREFETCH_SET:\n            return state.set('isPrefetch', true);\n\n        case actionTypes.SEO_SET:\n            return state\n                .set('use', true)\n                .set('title', action.title)\n                .set('metaTitle', action.metaTitle)\n                .set('metaKeywords', action.metaKeywords)\n                .set('metaDescription', action.metaDescription);\n\n        default:\n            return state;\n    }\n};\n\nconst bannerInitialState = fromJS({\n    isRequesting: false,\n    bannerList: undefined\n});\n\nconst banner = (state = bannerInitialState, action) => {\n    switch (action.type) {\n        case actionTypes.GET_BANNER_FOCUS.REQUEST:\n            return state.set('isRequesting', true);\n        case actionTypes.GET_BANNER_FOCUS.SUCCESS:\n            return state\n                .set('bannerList', action.response.channelFocusList)\n                .set('isRequesting', false);\n        case actionTypes.GET_BANNER_FOCUS.FAILURE:\n            return state.set('isRequesting', false);\n\n        default:\n            return state;\n    }\n};\n\nconst initialUploadTokenState = fromJS({\n    isRequesting: false,\n    token: {}\n});\nconst uploadToken = (state = initialUploadTokenState, action) => {\n    switch (action.type) {\n        case actionTypes.GET_UPLOAD_TOKEN.REQUEST:\n            return state.set('isRequesting', true);\n        case actionTypes.GET_UPLOAD_TOKEN.SUCCESS:\n            return state\n                .set('token', action.response)\n                .set('isRequesting', true);\n        case actionTypes.GET_UPLOAD_TOKEN.FAILURE:\n            return state.set('isRequesting', true);\n        default:\n            return state;\n    }\n};\n\nexport default combineReducers({\n    root,\n    banner,\n    uploadToken,\n    prefetch\n});\n","// 首页导航\nexport const CHANNEL_LIST = [\n    { pk: 2, name: '新闻' },\n    { pk: 3, name: '资讯' },\n    { pk: 4, name: '综艺' },\n    { pk: 14, name: '娱乐' },\n    { pk: 32, name: '影视' },\n    { pk: 21, name: '体育' },\n    { pk: 18, name: '生活' },\n    { pk: 34, name: '话题观察' },\n    { pk: 36, name: '财经' },\n    { pk: 35, name: '少儿' },\n    { pk: 31, name: '纪录片' },\n    { pk: 121, name: '节目预告', target: 'tvChannel' },\n    { pk: 103, name: '好娱乐' },\n    { pk: 104, name: '教育' },\n    { pk: 105, name: '文化' }\n];\n","import { fromJS } from 'immutable';\nimport moment from 'moment';\nimport userUtils from 'Utils/userUtils';\nimport * as actionTypes from './actions';\n\nconst initialState = fromJS({\n    isRequesting: false,\n    userInfo: {},\n    // 有历史记录的日期\n    dateList: [],\n    // 所有历史记录已排序按天归类\n    historyByDate: {}\n});\n\nconst Account = (state = initialState, action) => {\n    switch (action.type) {\n        case actionTypes.SET_USER_INFO:\n            userUtils.saveUser(action.data);\n            return state.set('userInfo', { ...state.get('userInfo'), ...action.data });\n\n        case actionTypes.LOGOUT:\n            userUtils.logout();\n            return state\n                .set('dateList', [])\n                .set('historyByDate', {})\n                .set('userInfo', {});\n\n        case actionTypes.LOGIN_BY_PASSWORD.REQUEST:\n            return state.set('isRequesting', true);\n        case actionTypes.LOGIN_BY_PASSWORD.SUCCESS:\n            return state.set('isRequesting', false);\n        case actionTypes.LOGIN_BY_PASSWORD.FAILURE:\n            return state.set('isRequesting', false);\n\n        case actionTypes.LOGIN_BY_CODE.REQUEST:\n            return state.set('isRequesting', true);\n        case actionTypes.LOGIN_BY_CODE.SUCCESS:\n            return state.set('isRequesting', false);\n        case actionTypes.LOGIN_BY_CODE.FAILURE:\n            return state.set('isRequesting', false);\n\n        case actionTypes.LOGIN_BY_THIRD_PARTY.REQUEST:\n            return state.set('isRequesting', true);\n        case actionTypes.LOGIN_BY_THIRD_PARTY.SUCCESS:\n            return state.set('isRequesting', false);\n        case actionTypes.LOGIN_BY_THIRD_PARTY.FAILURE:\n            return state.set('isRequesting', false);\n\n        case actionTypes.GET_BROWSE_HISTORY.SUCCESS: {\n            const historyByDate = {};\n            const dateList = action.response.reduce((total, curr) => {\n                const date = moment(curr.recentVisitTime).startOf('date').valueOf();\n                if (!historyByDate[date]) {\n                    historyByDate[date] = [];\n                    total.push(date);\n                }\n                historyByDate[date].push(curr);\n                return total;\n            }, []);\n            return state\n                .set('dateList', dateList)\n                .set('historyByDate', historyByDate);\n        }\n\n        default:\n            return state;\n    }\n};\n\nexport default Account;\n","import { fork, all } from 'redux-saga/effects';\nimport routesList from './routes';\n\nconst sagas = [];\nlet moduleList = [];\n\nfunction mapModules(routes) {\n    routes.map(item => {   \n        const { moduleName } = item; \n        if (moduleName) {\n            moduleList.push(moduleName);\n        }\n        \n        if (item.routes) {\n            mapModules(item.routes);\n        } \n        return null;     \n    });\n}\n\nmapModules(routesList);\n\nmoduleList = Array.from(new Set(moduleList));\n\nmoduleList.map(item => {    \n    if (require(`./containers/${item}/sagas`).default) { \n        sagas.push(require(`./containers/${item}/sagas`).default);\n    }\n    \n    return null;\n});\n\n// 全局saga任务\nsagas.push(require('./global/sagas').default);\nsagas.push(require('./global/account/sagas').default);\n\nconst moduleSaga = sagas.map((item) => fork(item));\n\nexport default function* () {\n    yield all([\n        ...moduleSaga\n    ]);    \n}\n","import {\n    takeEvery, takeLatest, put, call, fork\n} from 'redux-saga/effects';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\n/**\n * 获取频道信息\n * @param {*} action \n */\nfunction* getChannelInfo(action) {\n    try {\n        const res = yield call(Api.getChannelInfo, action.data);\n        yield put(ActionTypes.getChannelInfo.success(action, res));\n        yield put(ActionTypes.getAllSubChannelNews.request({ channelInfo: res }));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getChannelInfo.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/** 获得子频道列表下的新闻 */\nfunction* getAllSubChannelNews(action) {\n    try {\n        const { channelInfo } = action.data;\n        const { pk, childChannels = [], displayType } = channelInfo;\n        if (childChannels && childChannels.length) {\n            for (let i = 0; i < childChannels.length; i += 1) {\n                const child = childChannels[i];\n                const data = {\n                    beginScore: 0,\n                    channelId: child.pk,\n                    pageSize: DISPLAY_TYPE_COUNT[displayType]\n                };\n                yield put(ActionTypes.getChannelNews.request(data));\n            }\n        } else {\n            const data = {\n                channelId: pk,\n                pageSize: DISPLAY_TYPE_COUNT[displayType]\n            };\n            yield put(ActionTypes.getChannelNews.request(data));\n        }\n    } catch (error) {\n        console.log(error);\n    }\n}\n\n/** 获得频道新闻列表 */\nfunction* getChannelNews(action) {\n    try {\n        const { beginScore = 0, channelId, pageSize = 8 } = action.data;\n        let res = yield call(Api.getChannelNews, { beginScore, channelId, pageSize });\n        const { list = [] } = res;\n        // 避免点击“换一批”后没数据显示，数据需要循环显示\n        if (list?.length == 0 && beginScore != 0) {\n            res = yield put(ActionTypes.getChannelNews.request({ beginScore: 0, channelId, pageSize }));\n        } else {\n            yield put(ActionTypes.getChannelNews.success(action, res));\n        }\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_CHANNEL_INFO.REQUEST, getChannelInfo);\n    yield takeLatest(ActionTypes.GET_ALL_SUB_CHANNEL_NEWS.REQUEST, getAllSubChannelNews);\n    yield takeEvery(ActionTypes.GET_CHANNEL_NEWS.REQUEST, getChannelNews);\n}\n\nexport default function* HomePage() {\n    yield fork(watchAll);\n}\n","import {\n    takeEvery, takeLatest, put, call, fork, cancel, race\n} from 'redux-saga/effects';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\nfunction* getSeoConfig(action) {\n    try {\n        const res = yield call(Api.getSeoConfig);\n        yield put(ActionTypes.getSeoConfig.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getSeoConfig.failure(action, error));\n    }\n}\n\n/** 获得频道焦点图 */\nfunction* getChannelFocus(action) {\n    try {\n        const res = yield call(Api.getChannelFocus, { channelPk: 0 });\n        yield put(ActionTypes.getChannelFocus.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getChannelFocus.failure(action, error));\n    }\n}\n\n/** 获得热点新闻列表 */\nfunction* getHotNews(action) {\n    try {\n        const res = yield call(Api.getHotNews);\n        yield put(ActionTypes.getHotNews.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getHotNews.failure(action, error));\n    }\n}\n\n/** 获得滚动新闻 */\nfunction* getRollNews(action) {\n    try {\n        const res = yield call(Api.getRollNews);\n        yield put(ActionTypes.getRollNews.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getRollNews.failure(action, error));\n    }\n}\n\n/** 获得首页显示的频道列表 */\nfunction* getHomeShowChannels(action) {\n    try {\n        const res = yield call(Api.getHomeShowChannels);\n        yield put(ActionTypes.getHomeShowChannels.success(action, res));\n        for (let i = 0; i < res.length; i += 1) {\n            const { pk, childChannels = [], displayType } = res[i];\n            const data = {\n                beginScore: 0,\n                pageSize: DISPLAY_TYPE_COUNT[displayType]\n            };\n            if (childChannels.length > 0) {\n                const [child] = childChannels;\n                data.channelId = child.pk;\n            } else {\n                data.channelId = pk;\n            }\n            yield put(ActionTypes.getChannelNews.request(data));\n        }\n    } catch (error) {\n        yield put(ActionTypes.getHomeShowChannels.failure(action, error));\n    }\n}\n\n/** 获得频道新闻列表 */\nfunction* getChannelNews(action) {\n    try {\n        const res = yield call(Api.getChannelNews, action.data);\n        yield put(ActionTypes.getChannelNews.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_SEO_CONFIG.REQUEST, getSeoConfig);\n    yield takeLatest(ActionTypes.GET_CHANNEL_FOCUS.REQUEST, getChannelFocus);\n    yield takeLatest(ActionTypes.GET_HOT_NEWS.REQUEST, getHotNews);\n    yield takeLatest(ActionTypes.GET_ROLL_NEWS.REQUEST, getRollNews);\n    yield takeLatest(ActionTypes.GET_HOME_SHOW_CHANNELS.REQUEST, getHomeShowChannels);\n    yield takeEvery(ActionTypes.GET_CHANNEL_NEWS.REQUEST, getChannelNews);\n}\n\nexport default function* HomePage() {\n    yield fork(watchAll);\n}\n","import {\n    takeLatest, put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\n/** 获取直播间信息 */\nfunction* getLive(action) {\n    try {\n        const { id } = action.data;\n        const res = yield call(Api.getLive, { id });\n        yield put(ActionTypes.getLive.success(action, res));\n        yield put(ActionTypes.liveCount.request({\n            id,\n            countType: 'readCount'\n        }));\n        switch (+res.status) {\n            case 5:\n            case 9:\n                yield put(ActionTypes.getRecentlyLive.request({\n                    beginScore: 0,\n                    pageSize: 10\n                }));\n                break;\n            case 6:\n                break;\n            default:\n                break;\n        }\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getLive.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/** 获取最新更新直播 */\nfunction* getRecentlyLive(action) {\n    try {\n        const res = yield call(Api.getRecentlyLive, action.data);\n        yield put(ActionTypes.getRecentlyLive.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getRecentlyLive.failure(action, error));\n    }\n}\n\n/** 增加直播统计量 */\nfunction* liveCount(action) {\n    try {\n        const res = yield call(Api.liveCount, action.data);\n        yield put(ActionTypes.liveCount.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.liveCount.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_LIVE.REQUEST, getLive);\n    yield takeLatest(ActionTypes.GET_RECENTLY_LIVE.REQUEST, getRecentlyLive);\n    yield takeLatest(ActionTypes.LIVE_COUNT.REQUEST, liveCount);\n}\n\nexport default function* LiveRoom() {\n    yield fork(watchAll);\n}\n","import {\n    takeLatest, put, call, fork\n} from 'redux-saga/effects';\n\nimport * as GlobalActions from 'Global/actions';\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\nfunction* getNewsContent(action) {\n    try {\n        const { sid } = action.data;\n        const res = yield call(Api.getNewsContent, { sid });\n        yield put(ActionTypes.getNewsContent.success(action, res));\n        const { contentType, channelPK } = res;\n        yield put(GlobalActions.addNewsCount.request({\n            id: sid,\n            countType: 'readCount'\n        }));\n        if (channelPK) {\n            yield put(ActionTypes.getChannelInfo.request({ channelPk: channelPK }));\n        }\n        // 获取更多精彩\n        switch (`${contentType}`) {\n            case '0': // 图文\n                yield put(ActionTypes.getRecentlyNewsList.request({\n                    id: sid,\n                    channelPk: res.channelPK || 1,\n                    beginScore: 0,\n                    pageSize: 6,\n                    contentType\n                }));\n                break;\n            case '2': // 图集\n                yield put(ActionTypes.getRecentlyNewsList.request({\n                    id: sid,\n                    channelPk: res.channelPK || 1,\n                    beginScore: 0,\n                    pageSize: 10,\n                    contentType\n                }));\n                break;\n            case '3': // 电视节目\n                yield put(ActionTypes.getColumnVideoList.request({\n                    id: sid,\n                    channelPk: res.channelPK || 1,\n                    tvColumnPk: res.tvColumnPk || 1,\n                    beginScore: 0,\n                    pageSize: 10,\n                }));\n                break;\n            case '1': // 视频\n            case '4': // 剧集\n                yield put(ActionTypes.getRecommendList.request({\n                    id: sid,\n                    channelPk: res.channelPK || 1,\n                    beginScore: 0,\n                    pageSize: 10,\n                }));\n                break;\n            default:\n                break;\n        }\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getNewsContent.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/** 获得新闻最新内容 */\nfunction* getRecentlyNewsList(action) {\n    try {\n        const res = yield call(Api.getRecentlyNewsList, action.data);\n        yield put(ActionTypes.getRecentlyNewsList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getRecentlyNewsList.failure(action, error));\n    }\n}\n\n/** 获取推荐内容 */\nfunction* getRecommendList(action) {\n    try {\n        const res = yield call(Api.getRelateNewsList, action.data);\n        yield put(ActionTypes.getRecommendList.success(action, res));\n        yield put(ActionTypes.getMoreList.request({\n            id: action.data.id,\n            channelPk: action.data.channelPk || 1,\n            beginScore: res.lastScore,\n            pageSize: 40,\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getRecommendList.failure(action, error));\n    }\n}\n\n/** 获取更多推荐内容 */\nfunction* getMoreList(action) {\n    try {\n        const res = yield call(Api.getRelateNewsList, action.data);\n        yield put(ActionTypes.getMoreList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getMoreList.failure(action, error));\n    }\n}\n\n/** 获取电视节目 */\nfunction* getColumnVideoList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getColumnVideoList.success(action, res));\n        yield put(ActionTypes.getMoreColumnVideoList.request({\n            id: action.data.id,\n            tvColumnPk: action.data.tvColumnPk,\n            beginScore: res.lastScore,\n            pageSize: 40\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(action, error));\n    }\n}\n\n/** 获取更多电视节目 */\nfunction* getMoreColumnVideoList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getMoreColumnVideoList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getMoreColumnVideoList.failure(action, error));\n    }\n}\n\n/**\n * 获取频道信息\n * @param {*} action \n */\nfunction* getChannelInfo(action) {\n    try {\n        const res = yield call(Api.getChannelInfo, action.data);\n        yield put(ActionTypes.getChannelInfo.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getChannelInfo.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_NEWS_CONTENT.REQUEST, getNewsContent);\n    yield takeLatest(ActionTypes.GET_CHANNEL_INFO.REQUEST, getChannelInfo);\n    yield takeLatest(ActionTypes.GET_RECENTLY_NEWS_LIST.REQUEST, getRecentlyNewsList);\n    yield takeLatest(ActionTypes.GET_RECOMMEND_LIST.REQUEST, getRecommendList);\n    yield takeLatest(ActionTypes.GET_MORE_LIST.REQUEST, getMoreList);\n    yield takeLatest(ActionTypes.GET_COLUMN_VIDEO_LIST.REQUEST, getColumnVideoList);\n    yield takeLatest(ActionTypes.GET_MORE_COLUMN_VIDEO_LIST.REQUEST, getMoreColumnVideoList);\n}\n\nexport default function* NewsDetail() {\n    yield fork(watchAll);\n}\n","import {\n    takeEvery, takeLatest, put, call, fork, cancel, race\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\n/**\n * 基于关键字搜索\n * @param {*} action \n */\nfunction* searchNews(action) {\n    try {\n        const res = yield call(Api.searchNews, action.data);\n        yield put(ActionTypes.searchNews.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.searchNews.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.SEARCH_NEWS.REQUEST, searchNews);\n}\n\nexport default function* SearchPage() {\n    yield fork(watchAll);\n}\n","import {\n    takeLatest, put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\nfunction* getNewsTopic(action) {\n    try {\n        const res = yield call(Api.getNewsTopic, action.data);\n        yield put(ActionTypes.getNewsTopic.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getNewsTopic.failure(action, error));\n    }\n}\n\nfunction* getNewsTopicColumn(action) {\n    try {\n        const res = yield call(Api.getNewsTopicColumn, action.data);\n        yield put(ActionTypes.getNewsTopicColumn.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getNewsTopicColumn.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\nfunction* getNewsTopicMemberList(action) {\n    try {\n        const res = yield call(Api.getNewsTopicMemberList, action.data);\n        yield put(ActionTypes.getNewsTopicMemberList.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getNewsTopicMemberList.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\nfunction* getChannelNewsList(action) {\n    try {\n        const res = yield call(Api.getChannelNews, action.data);\n        yield put(ActionTypes.getChannelNewsList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getChannelNewsList.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_NEWS_TOPIC.REQUEST, getNewsTopic);\n    yield takeLatest(ActionTypes.GET_NEWS_TOPIC_COLUMN.REQUEST, getNewsTopicColumn);\n    yield takeLatest(ActionTypes.GET_NEWS_TOPIC_MEMBER_LIST.REQUEST, getNewsTopicMemberList);\n    yield takeLatest(ActionTypes.GET_CHANNEL_NEWS_LIST.REQUEST, getChannelNewsList);\n}\n\nexport default function* TopicDetail() {\n    yield fork(watchAll);\n}\n","import {\n    takeLatest, put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\nfunction* getTvChannelDetail(action) { // 获取视频详情\n    try {\n        const res = yield call(Api.getTvChannelDetail, action.data);\n        yield put(ActionTypes.getTvChannelDetail.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvChannelDetail.failure(action, error));\n    }\n}\n\nfunction* getTvChannelList(action) { // 获取频道列表\n    try {\n        const res = yield call(Api.getTvChannelList, action.data);\n        yield put(ActionTypes.getTvChannelList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvChannelList.failure(action, error));\n    }\n}\n\nfunction* getTvMenuList(action) { // 获取左侧展示列表\n    try {\n        const res = yield call(Api.getTvMenuList, action.data);\n        yield put(ActionTypes.getTvMenuList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvMenuList.failure(action, error));\n    }\n}\n\nfunction* getTvColumn(action) { // 获取更多精彩\n    try {\n        const res = yield call(Api.getTvColumn, action.data);\n        yield put(ActionTypes.getTvColumn.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvColumn.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_TV_CHANNEL_DETAIL.REQUEST, getTvChannelDetail);\n    yield takeLatest(ActionTypes.GET_TV_CHANNEL_LIST.REQUEST, getTvChannelList);\n    yield takeLatest(ActionTypes.GET_TV_MENU_LIST.REQUEST, getTvMenuList);\n    yield takeLatest(ActionTypes.GET_TV_COLUMN.REQUEST, getTvColumn);\n}\n\nexport default function* TvChannelDetail() {\n    yield fork(watchAll);\n}\n","import {\n    takeEvery, takeLatest, put, call, fork, cancel, race\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\nimport { PAGE_SIZE } from './constant';\n\n/**\n * 获取栏目信息\n * @param {*} action \n */\nfunction* getColumnInfo(action) {\n    try {\n        const res = yield call(Api.getColumnInfo, action.data);\n        yield put(ActionTypes.getColumnInfo.success(action, res));\n        yield put(ActionTypes.getColumnVideoList.request({\n            tvColumnPk: res.pk,\n            currentPage: 1,\n            searchByTime: false\n        }));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getColumnInfo.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/**\n * 获取栏目视频\n * @param {*} action \n */\nfunction* getColumnVideoList(action) {\n    try {\n        const data = {\n            pageSize: PAGE_SIZE,\n            ...action.data\n        };\n        const res = yield call(Api.getColumnVideoList, data);\n        yield put(ActionTypes.getColumnVideoList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(action, error));\n    }\n}\n\n/**\n * 获取频道信息\n * @param {*} action \n */\nfunction* getChannelInfo(action) {\n    try {\n        const res = yield call(Api.getChannelInfo, action.data);\n        yield put(ActionTypes.getChannelInfo.success(action, res));\n        yield call(getChannelNews, {\n            data: {\n                channelId: res.pk,\n                currentPage: 1\n            }\n        });\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getChannelInfo.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\n/**\n * 获取频道视频\n * @param {*} action \n */\nfunction* getChannelNews(action) {\n    try {\n        const data = {\n            pageSize: PAGE_SIZE,\n            ...action.data\n        };\n        const res = yield call(Api.getChannelNews, data);\n        yield put(ActionTypes.getChannelNews.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getChannelNews.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_COLUMN_INFO.REQUEST, getColumnInfo);\n    yield takeLatest(ActionTypes.GET_COLUMN_VIDEO_LIST.REQUEST, getColumnVideoList);\n    yield takeLatest(ActionTypes.GET_CHANNEL_INFO.REQUEST, getChannelInfo);\n    yield takeLatest(ActionTypes.GET_CHANNEL_NEWS.REQUEST, getChannelNews);\n}\n\nexport default function* TvColumn() {\n    yield fork(watchAll);\n}\n","import {\n    takeLatest, put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\nfunction* getColumnVideoList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getColumnVideoList.success(action, res));\n        yield put(ActionTypes.getRecommendList.request({\n            tvColumnPk: action.data.tvColumnPk,\n            beginScore: res.lastScore,\n            pageSize: 24,\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(action, error));\n    }\n}\n\nfunction* getRecommendList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getRecommendList.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getRecommendList.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_COLUMN_VIDEO_LIST.REQUEST, getColumnVideoList);\n    yield takeLatest(ActionTypes.GET_RECOMMEND_LIST.REQUEST, getRecommendList);\n}\n\nexport default function* TvColumnDetail() {\n    yield fork(watchAll);\n}\n","import {\n    takeEvery, takeLatest, put, call, fork, cancel, race\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services';\nimport * as ActionTypes from './actions';\n\n/** 获取电视频道列表 */\nfunction* getTvChannel(action) {\n    try {\n        const tvChannels = yield call(Api.getTvChannelList, { statusList: '1,2' });\n        yield put(ActionTypes.getTvChannel.success(action, tvChannels));\n        for (let i = 0; i < tvChannels.length; i += 1) {\n            const { pk } = tvChannels[i];\n            const data = {\n                tvChannelPk: pk\n            };\n            yield put(ActionTypes.getTvColumn.request(data));\n        }\n    } catch (error) {\n        yield put(ActionTypes.getTvChannel.failure(action, error));\n    }\n}\n\n/** 获取电视栏目列表 */\nfunction* getTvColumn(action) {\n    try {\n        const res = yield call(Api.getTvColumn, action.data);\n        yield put(ActionTypes.getTvColumn.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getTvColumn.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_TV_CHANNEL.REQUEST, getTvChannel);\n    yield takeEvery(ActionTypes.GET_TV_COLUMN.REQUEST, getTvColumn);\n}\n\nexport default function* TvPrograms() {\n    yield fork(watchAll);\n}\n","import {\n    put, call, fork, takeLatest\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services/index';\nimport * as ActionTypes from './actions';\n\n/** 获取首页banner */\nfunction* getBannerFocus(action = {}) {\n    try {\n        const res = yield call(Api.getChannelFocus, { channelPk: -1 });\n\n        yield put(ActionTypes.getBannerFocus.success(action.data, res));\n    } catch (err) {\n        yield put(ActionTypes.getBannerFocus.failure(action.data, err));\n    }\n}\n\nfunction* getChannelFlow(action = {}) {\n    try {\n        const res = yield call(Api.getCommonChannel);\n\n        yield put(ActionTypes.getCommonChannel.success(action.data, res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.getCommonChannel.failure(action.data, err));\n        action.reject && action.reject(err);\n    }\n}\n\nfunction* getFriendlyLinks(action) {\n    try {\n        const res = yield call(Api.getFriendlyLinks);\n        yield put(ActionTypes.getFriendlyLinks.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getFriendlyLinks.failure(action, error));\n    }\n}\n\nfunction* addNewsCount(action) {\n    try {\n        const res = yield call(Api.addNewsCount, action.data);\n        yield put(ActionTypes.addNewsCount.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.addNewsCount.failure(action, error));\n    }\n}\n\nfunction* getUploadToken(action) {\n    try {\n        const res = yield call(Api.getUploadToken, action.data);\n        yield put(ActionTypes.getUploadToken.success(action, res));\n        action.resolve && action.resolve(res);\n    } catch (error) {\n        yield put(ActionTypes.getUploadToken.failure(action, error));\n        action.reject && action.reject(error);\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.GET_BANNER_FOCUS.REQUEST, getBannerFocus);\n    yield takeLatest(ActionTypes.GET_COMMON_CHANNEL.REQUEST, getChannelFlow);\n    yield takeLatest(ActionTypes.GET_FRIENDLY_LINKS.REQUEST, getFriendlyLinks);\n    yield takeLatest(ActionTypes.ADD_NEWS_COUNT.REQUEST, addNewsCount);\n    yield takeLatest(ActionTypes.GET_UPLOAD_TOKEN.REQUEST, getUploadToken);\n}\n\nexport default function* globalSaga() {\n    yield fork(watchAll);\n}\n","import {\n    put, call, fork, takeLatest\n} from 'redux-saga/effects';\n\nimport userUtils from 'Utils/userUtils';\nimport * as Api from 'Services/index';\nimport * as ActionTypes from './actions';\n\n/** 密码登录 */\nfunction* loginByPassword(action) {\n    try {\n        const res = yield call(Api.loginByPassword, action.data);\n        yield put(ActionTypes.loginByPassword.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.loginByPassword.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\n/** 验证码登录 */\nfunction* loginByCode(action) {\n    try {\n        const res = yield call(Api.loginByCode, action.data);\n        yield put(ActionTypes.loginByCode.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.loginByCode.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\n/** 注册 */\nfunction* register(action) {\n    try {\n        const res = yield call(Api.register, action.data);\n        yield put(ActionTypes.register.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.register.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\n/** 获取短信验证码 */\nfunction* getVerificationCode(action) {\n    try {\n        const res = yield call(Api.getVerificationCode, action.data);\n        yield put(ActionTypes.getVerificationCode.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.getVerificationCode.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\n/** 第三方登录 */\nfunction* loginByThirdParty(action) {\n    try {\n        const res = yield call(Api.loginByThirdParty, action.data);\n        yield put(ActionTypes.loginByThirdParty.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.loginByThirdParty.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\n\n/** 获取用户信息 */\nfunction* getUserInfo(action) {\n    try {\n        const { pk } = userUtils.getUser();\n        const data = { pk };\n        const res = yield call(Api.getUserInfo, data);\n        yield put(ActionTypes.getUserInfo.success(action, res));\n        yield put(ActionTypes.setUserInfo(res));\n    } catch (err) {\n        yield put(ActionTypes.getUserInfo.failure(action, err));\n    }\n}\n\n/** 修改用户信息 */\nfunction* updateUserInfo(action) {\n    try {\n        const { pk } = userUtils.getUser();\n        const data = {\n            pk,\n            ...action.data\n        };\n        const res = yield call(Api.updateUserInfo, data);\n        yield put(ActionTypes.updateUserInfo.success(action, res));\n        yield put(ActionTypes.setUserInfo(data));\n        action.resolve && action.resolve(res);\n    } catch (err) {\n        yield put(ActionTypes.updateUserInfo.failure(action, err));\n        action.reject && action.reject(err);\n    }\n}\n\nfunction* getBrowseHistory(action) {\n    try {\n        const res = yield call(Api.getBrowseHistory, action.data);\n        yield put(ActionTypes.getBrowseHistory.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getBrowseHistory.failure(action, error));\n    }\n}\n\nfunction* watchAll() {\n    yield takeLatest(ActionTypes.LOGIN_BY_PASSWORD.REQUEST, loginByPassword);\n    yield takeLatest(ActionTypes.LOGIN_BY_CODE.REQUEST, loginByCode);\n    yield takeLatest(ActionTypes.LOGIN_BY_THIRD_PARTY.REQUEST, loginByThirdParty);\n    yield takeLatest(ActionTypes.REGISTER.REQUEST, register);\n    yield takeLatest(ActionTypes.GET_VERIFICATION_CODE.REQUEST, getVerificationCode);\n    yield takeLatest(ActionTypes.GET_USER_INFO.REQUEST, getUserInfo);\n    yield takeLatest(ActionTypes.UPDATE_USER_INFO.REQUEST, updateUserInfo);\n    yield takeLatest(ActionTypes.GET_BROWSE_HISTORY.REQUEST, getBrowseHistory);\n}\n\nexport default function* accountSaga() {\n    yield fork(watchAll);\n}\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'ACCOUNT';\n\nexport const { loginByPassword, LOGIN_BY_PASSWORD } = apiAction('LOGIN_BY_PASSWORD', Module);\n\nexport const { loginByCode, LOGIN_BY_CODE } = apiAction('LOGIN_BY_CODE', Module);\n\nexport const { loginByThirdParty, LOGIN_BY_THIRD_PARTY } = apiAction('LOGIN_BY_THIRD_PARTY', Module);\n\nexport const { register, REGISTER } = apiAction('REGISTER', Module);\n\nexport const { getVerificationCode, GET_VERIFICATION_CODE } = apiAction('GET_VERIFICATION_CODE', Module);\n\nexport const { getUserInfo, GET_USER_INFO } = apiAction('GET_USER_INFO', Module);\n\nexport const { updateUserInfo, UPDATE_USER_INFO } = apiAction('UPDATE_USER_INFO', Module);\n\nexport const { getBrowseHistory, GET_BROWSE_HISTORY } = apiAction('GET_BROWSE_HISTORY', Module);\n\nexport const SET_USER_INFO = 'SET_USER_INFO';\nexport const setUserInfo = (data) => action(SET_USER_INFO, { data });\n\nexport const LOGOUT = 'LOGOUT';\nexport const logout = () => action(LOGOUT);\n","import React, { Component } from 'react';\n\nimport 'Public/css/theme/video-js.less';\nimport styles from './index.less';\n\n\n/**\n * ModuleName: 视频播放组件\n * \n * Author: zhuhuishao \n * use: [ 用于视频详情页视频播放，UI采用videoJs ]\n * \n*/\nclass VideoPlay extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isEnded: false\n        };\n        this.myPlayer = undefined;\n    }\n\n    componentDidMount() {\n        const {\n            videoUrl,\n            playTime\n        } = this.props;\n        const videoJs = require('videojs');\n        const _this = this;\n        videoJs.addLanguage('zh-CN', {\n            Play: '播放',\n            Pause: '暂停',\n            'Stream Type': '媒体流类型',\n            LIVE: '直播',\n            Loaded: '加载完毕',\n            Progress: '进度',\n            Fullscreen: '全屏',\n            'Non-Fullscreen': '退出全屏',\n            Mute: '静音',\n            Unmute: '取消静音',\n            'You aborted the media playback': '视频播放被终止',\n            'A network error caused the media download to fail part-way.': '网络错误导致视频下载中途失败。',\n            'The media could not be loaded, either because the server or network failed or because the format is not supported.': '视频因格式不支持或者服务器或网络的问题无法加载。',\n            'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.': '由于视频文件损坏或是该视频使用了你的浏览器不支持的功能，播放终止。',\n            'No compatible source was found for this media.': '无法找到此视频兼容的源。',\n            'The media is encrypted and we do not have the keys to decrypt it.': '视频已加密，无法解密。'\n        });\n        const myPlayer = videoJs('video', {\n            controls: true,\n            language: 'zh-CN',\n            autoplay: true\n        }, function () {\n            this.on('play', _this.handleOnPlay);\n            this.on('ended', _this.handleOnEnded);\n            const playPromise = this.play();\n            if (playPromise !== undefined) {\n                playPromise.then(() => {\n                    const time = playTime || localStorage.getItem(videoUrl);\n                    this.play();\n                    if (time) {\n                        this.currentTime(time);\n                    }\n                }).catch(() => {\n                    console.log('play failed');\n                });\n            }\n        });\n        this.myPlayer = myPlayer;\n        window.addEventListener('beforeunload', this.handleSaveTime);\n    }\n\n    /** 播放地址变更,记录旧地址的播放时长 */\n    componentDidUpdate = (oldProps) => {\n        const { poster, videoUrl, playTime } = this.props;\n        if (videoUrl && oldProps.videoUrl != videoUrl) {\n            if (!this.state.isEnded) {\n                localStorage.setItem(oldProps.videoUrl, this.myPlayer.currentTime());\n            }\n            this.myPlayer.src(videoUrl);\n            this.myPlayer.poster(poster);\n            const time = playTime || localStorage.getItem(videoUrl);\n            if (time) {\n                setTimeout(() => {\n                    this.myPlayer.currentTime(parseInt(time, 10));\n                }, 500);\n            }\n        }\n    }\n\n    componentWillUnmount() {\n        if (this.myPlayer) {\n            this.handleSaveTime();\n            this.myPlayer.dispose();\n        }\n    }\n\n    /** 离开页面保存播放时长 */\n    handleSaveTime = () => {\n        if (this.myPlayer) {\n            const { videoUrl } = this.props;\n            if (!this.state.isEnded) {\n                localStorage.setItem(videoUrl, this.myPlayer.currentTime());\n            }\n            window.removeEventListener('beforeunload', this.handleSaveTime);\n        }\n    }\n\n    handleOnPlay = () => {\n        this.setState({ isEnded: false });\n    }\n\n    /** 视频播放完毕 */\n    handleOnEnded = () => {\n        const { videoUrl, onEnd = _ => null } = this.props;\n        this.setState({ isEnded: true });\n        localStorage.removeItem(videoUrl);\n        onEnd();\n    }\n\n    render() {\n        const {\n            className,\n            title,\n            poster,\n            videoUrl,\n            loop = false,\n            onEnd = _ => null,\n            ...restProps\n        } = this.props;\n\n        const isHls = videoUrl.indexOf('.m3u8') >= 0;\n        return (\n            <div className={[styles['video-play'], className].join(' ')} {...restProps}>\n                <video\n                    id='video'\n                    className='video-js vjs-big-play-centered'\n                    poster={poster}\n                    autoPlay='autoplay'\n                    style={{ width: '100%', height: '100%' }}\n                    data-setup='{}'\n                    loop={loop}\n                >\n                    <source src={videoUrl} type={isHls ? 'application/x-mpegURL' : 'video/mp4'} />\n                </video>\n                {title &&\n                    <div className={styles.title}>{title}</div>\n                }\n            </div>\n        );\n    }\n}\n\nexport default VideoPlay;\n","/**\n * 将一维数组按顺序转化为二维数组\n * @param {*} array 原数组\n * @param {*} size 子节点容量\n */\nexport function composeArray(array = [], size = 2) {\n    const list = [];\n    let child = [];\n    for (let i = 0; i < array.length; i += 1) {\n        child.push(array[i]);\n        if (i + 1 === array.length) {\n            list.push(child);\n            break;\n        }\n        if ((i + 1) % size === 0) {\n            list.push(child);\n            child = [];\n        }\n    }\n    return list;\n}\n\n/**\n * 补全数组\n * @param {*} array 原数组\n * @param {*} size 容量\n */\nexport function completionArray(array = [], size = 0, on = false) {\n    if (!on || array.length >= size) return array;\n    const list = [];\n    for (let i = 0; i < size; i += 1) {\n        const e = array[i];\n        if (e) {\n            list.push(e);\n        } else {\n            list.push(undefined);\n        }\n    }\n    return list;\n}\n\nexport const SCREEN_SIZE = ['xxl', 'xl', 'xs'];\n\n/** 确定浏览器宽度范围 */\nexport function getScreenRange() {\n    const { innerWidth } = window;\n    return {\n        [SCREEN_SIZE[0]]: innerWidth >= 1600,\n        [SCREEN_SIZE[1]]: innerWidth >= 1200 && innerWidth < 1600,\n        [SCREEN_SIZE[2]]: innerWidth < 1200,\n    };\n}\n\n/**\n * 栅格化数组\n * @param {*} array 原数组\n * @param {*} col 列数\n */\nexport function gridArray(array = [], col) {\n    col = Math.ceil(col);\n    if (col <= 1) {\n        return [];\n    }\n    const list = [];\n    for (let i = 0; i < col; i += 1) {\n        list.push([]);\n    }\n    array.forEach((item, index) => {\n        const i = index % col;\n        list[i].push(item);\n    });\n    return list;\n}\n\n/**\n * 交换数组位置\n * @param {*} arr \n * @param {*} i1 \n * @param {*} i2 \n */\nexport const swapPoiArray = (arr, i1, i2) => {\n    const result = Array.from(arr);\n    const [removed] = result.splice(i1, 1);\n    result.splice(i2, 0, removed);\n    return result;\n};\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Helmet from 'react-helmet';\nimport { Tabs } from 'antd';\n\nimport SwiperBox from 'Components/SwiperBox';\nimport NavBar from 'Components/NavBar';\nimport FriendlyLinks from 'Components/FriendlyLinks';\nimport HotNews from 'Components/HotNews';\nimport CardFlow from 'Components/CardFlow';\n\nimport { OS, ENTITY_TYPE } from 'Utils/utils';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\n/**\n * PageName: 首页\n * \n * Author: xuchunhua\n * use: [ ]\n */\n@connect(selectors, {\n    getSeoConfig: Actions.getSeoConfig.request,\n    getChannelFocus: Actions.getChannelFocus.request,\n    getHotNews: Actions.getHotNews.request,\n    getRollNews: Actions.getRollNews.request,\n    getHomeShowChannels: Actions.getHomeShowChannels.request,\n    getChannelNews: Actions.getChannelNews.request\n})\nclass HomePage extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {};\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentWillMount() {\n        if (!this.props.isPrefetch && !OS().isPc) {\n            window.location.href = 'https://m.gdtv.cn/';\n        }\n    }\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getSeoConfig();\n            this.props.getHotNews();\n            this.props.getRollNews();\n            this.props.getChannelFocus();\n            this.props.getHomeShowChannels();\n        }\n    }\n\n    /** 切换子频道 */\n    handleTabChange = (e, parent) => {\n        const { channelNews } = this.props.homeChannels;\n        const { childChannels, displayType } = parent;\n        const [{ pk }] = childChannels.filter((child) => child.pk == e);\n        if (!channelNews[pk]) {\n            const data = {\n                beginScore: 0,\n                channelId: e,\n                pageSize: DISPLAY_TYPE_COUNT[displayType]\n            };\n            this.props.getChannelNews(data);\n        }\n    }\n\n    renderFirstTabPane = (data) => {\n        const { pk } = data;\n        const url = `/channels/${pk}`;\n        return (\n            <a href={url} target='_blank'>{data.name}</a>\n        );\n    }\n\n    /**\n     * 渲染信息流TAB\n     * 抽出来的目的是以防万一以后TAB之间需要插入一些奇奇怪怪的东西\n     */\n    renderChannelNews = (channel) => {\n        const { channelNews } = this.props.homeChannels;\n        const hasChild = channel?.childChannels?.length > 0;\n        return (\n            <div className={styles['news-body']}>\n                <Tabs\n                    className={hasChild ? '' : styles['tabs-no-child']}\n                    animated={false}\n                    onChange={(e) => { this.handleTabChange(e, channel); }}\n                >\n                    <Tabs.TabPane tab={this.renderFirstTabPane(channel)} key={channel.name} disabled={hasChild} >\n                        {!hasChild &&\n                            <CardFlow\n                                flowData={channelNews[channel.pk]}\n                                displayType={channel.displayType}\n                                extra={{ channelId: channel.pk, entityType: ENTITY_TYPE.DATA_JSON }}\n                            />\n                        }\n                    </Tabs.TabPane>\n                    {hasChild && channel.childChannels.slice(0, 4).map((child) => (\n                        <Tabs.TabPane tab={child.name} key={child.pk} animated={false}>\n                            <CardFlow\n                                flowData={channelNews[child.pk]}\n                                displayType={channel.displayType}\n                                extra={{ channelId: channel.pk, entityType: ENTITY_TYPE.DATA_JSON }}\n                            />\n                        </Tabs.TabPane>\n                    ))}\n                </Tabs>\n            </div>\n        );\n    }\n\n    render() {\n        const {\n            screenSize,\n            friendlyLinks,\n            channelList,\n            focus,\n            homeChannels,\n            hotNews\n        } = this.props;\n        return (\n            <div className={styles['page-index']}>\n                <SwiperBox bannerData={focus.focusList} />\n                <NavBar screenSize={screenSize} channelList={channelList} />\n                <div className={[styles['page-content'], responsiveStyles.layout].join(' ')}>\n                    <div className={[styles['module-list'], responsiveStyles.content].join(' ')}>\n                        <div className={styles['module-mod']}>\n                            <HotNews\n                                textNews={hotNews.textNews || []}\n                                pictrueNews={hotNews.pictrueNews || []}\n                                rollNews={hotNews.rollNews}\n                            />\n                        </div>\n                        {homeChannels?.channels?.map((channel) => channel?.childChannels?.length > 0 && (\n                            <div\n                                className={[styles['module-mod'], styles['channel-news']].join(' ')}\n                                key={channel.pk}\n                            >\n                                {this.renderChannelNews(channel)}\n                            </div>\n                        ))}\n                        <div className={[styles['module-mod']].join(' ')}>\n                            <FriendlyLinks friendlyLinks={friendlyLinks} />\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default HomePage;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { Spin, Button, Typography } from 'antd';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport MonthRadioWithYear from 'Components/MonthRadioWithYear';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\nimport { getDetailRoute } from 'Utils/utils';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\nimport { VOLUME, LOAD_POSITION } from './constant';\n\nconst { Paragraph } = Typography;\n\n/**\n * PageName: 电视栏目信息页/频道信息页\n * 除获取详情接口不同，其余逻辑一样\n * 如果后期两者逻辑有不一样，建议复制分开为两个组件\n */\n@connect(selectors, {\n    getColumnInfo: Actions.getColumnInfo.request,\n    getColumnVideoList: Actions.getColumnVideoList.request,\n    getChannelInfo: Actions.getChannelInfo.request,\n    getChannelNews: Actions.getChannelNews.request\n})\nclass TvColumn extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isExpand: false,\n            beginScore: undefined,\n            searchByTime: false,\n            currentPage: 1,\n            // 点击加载的次数\n            times: 1,\n            // 频道最近一条新闻\n            channelLastestNews: {}\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    async componentDidMount() {\n        if (!this.props.isPrefetch) {\n            const { columnPk, channelPk } = this.props.match.params;\n            if (columnPk) {\n                await new Promise((resolve, reject) => {\n                    this.props.getColumnInfo({ columnPk }, resolve, reject);\n                });\n            }\n            if (channelPk) {\n                await new Promise((resolve, reject) => {\n                    this.props.getChannelInfo({ channelPk }, resolve, reject);\n                });\n                const { columnVideoList } = this.props;\n                const [lastest] = columnVideoList;\n                this.setState({ channelLastestNews: lastest });\n            }\n        }\n        const { columnInfo } = this.props;\n        this.setState({\n            beginScore: moment(columnInfo.updateAt).startOf('month').valueOf()\n        });\n        window.addEventListener('scroll', this.handleScrollLoad);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.handleScrollLoad);\n    }\n\n    /** \n     * 滚动加载\n     * 每加载一定页数时停止，让用户点击加载更多\n     */\n    handleScrollLoad = () => {\n        const {\n            searchByTime,\n            currentPage,\n            beginScore,\n            times\n        } = this.state;\n        const { isRequesting, hasMore } = this.props;\n        // 非加载中 && 还有更多 && 当前页小于指定页数\n        if (searchByTime && !isRequesting && hasMore && currentPage < VOLUME * times) {\n            const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n            const { scrollHeight, clientHeight } = document.documentElement;\n            const scrollBottom = scrollHeight - clientHeight - scrollTop;\n            // 滚动超过指定位置\n            if (scrollBottom < LOAD_POSITION) {\n                this.setState({ currentPage: currentPage + 1 }, () => {\n                    this.handleGetColumnVideoList({ beginScore });\n                });\n            }\n        }\n    }\n\n    // 选择时间\n    handleGetTime = (time) => {\n        this.setState({\n            beginScore: time,\n            currentPage: 1,\n            times: 1,\n            searchByTime: true\n        }, () => {\n            this.handleGetColumnVideoList({ beginScore: time });\n        });\n    }\n\n    /** 立刻播放,跳转到最新的电视栏目拆条回顾 */\n    handleToDetail = () => {\n        const { columnPk, channelPk } = this.props.match.params;\n        if (columnPk) {\n            window.location.href = `/tvColumnDetail/${columnPk}`;\n        }\n        if (channelPk) {\n            const { channelLastestNews } = this.state;\n            const { data, type } = channelLastestNews;\n            let newsData;\n            try {\n                newsData = JSON.parse(data);\n            } catch (error) {\n                newsData = {};\n            }\n            const { id, contentType, serialsInfo } = newsData;\n            const route = getDetailRoute({\n                source: newsData,\n                objectType: type,\n                contentType,\n                sid: id,\n                channelId: channelPk\n            });\n            window.location.href = route;\n        }\n    }\n\n    /** 获取栏目视频 */\n    handleGetColumnVideoList = ({ beginScore }) => {\n        const { columnPk, channelPk } = this.props.match.params;\n        const { currentPage, searchByTime } = this.state;\n        const data = {\n            tvColumnPk: columnPk,\n            channelId: channelPk,\n            currentPage,\n            searchByTime,\n            ...searchByTime ? { beginScore } : {}\n        };\n        if (columnPk) {\n            this.props.getColumnVideoList(data);\n        } else if (channelPk) {\n            this.props.getChannelNews(data);\n        }\n    }\n\n    handleOnExpand = () => { this.setState({ isExpand: true }); }\n\n    handleCloseExpand = () => { this.setState({ isExpand: false }); }\n\n    /** 加载更多 */\n    handleLoadMore = () => {\n        const { times } = this.state;\n        this.setState({ times: times + 1 }, this.handleScrollLoad);\n    }\n\n    render() {\n        const {\n            beginScore,\n            currentPage,\n            times,\n            isExpand\n        } = this.state;\n        const {\n            isRequesting,\n            hasMore,\n            columnInfo,\n            columnVideoList\n        } = this.props;\n\n        const helmetData = {\n            title: [columnInfo.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords: columnInfo.keyword,\n            description: columnInfo.desc\n        };\n        return (\n            <div className={[styles['tv-column'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={[styles.info, responsiveStyles.content].join(' ')}>\n                    {columnInfo.coverUrl &&\n                        <div className={styles.cover}>\n                            <ImageLoad src={columnInfo.coverUrl} />\n                        </div>\n                    }\n                    <div className={styles.detail}>\n                        <h2>{columnInfo.name}</h2>\n                        <div className={styles.from}>\n                            <div>最近更新：<span>{moment(columnInfo.updateAt).format('YYYY-MM-DD')}</span></div>\n                            {columnInfo.source && <div>来源：<span>{columnInfo.source}</span></div>}\n                        </div>\n                        <div className={styles.desc}>\n                            <h4>简介</h4>\n                            {!isExpand &&\n                                <Paragraph ellipsis={{ rows: 3, expandable: true, onExpand: this.handleOnExpand }}>\n                                    {columnInfo.desc || '暂无简介'}\n                                </Paragraph>\n                            }\n                            {isExpand &&\n                                <div className={styles['desc-text']} onMouseLeave={this.handleCloseExpand}>\n                                    {columnInfo.desc || '暂无简介'}\n                                </div>\n                            }\n                        </div>\n                        {!isExpand &&\n                            <div className={styles['btn-group']}>\n                                <Button onClick={this.handleToDetail}>立即播放</Button>\n                            </div>\n                        }\n                    </div>\n                </div>\n                {beginScore &&\n                    <div className={[styles.content, responsiveStyles.content].join(' ')}>\n                        <div style={{ paddingBottom: 40 }} >\n                            <MonthRadioWithYear\n                                beginScore={beginScore}\n                                onChangeTime={this.handleGetTime}\n                            />\n                        </div>\n                        <Spin className={styles['column-video-list']} id='videoList' spinning={isRequesting} >\n                            {!isRequesting && !columnVideoList?.length > 0 && '当前时间段暂无节目内容，换个时间试试看~'}\n                            {columnVideoList?.length > 0 &&\n                                <CardFlow\n                                    flowData={columnVideoList}\n                                    displayType={0}\n                                    isMulti={true}\n                                    extra={{\n                                        channelId: this.props.newsContent?.channelPK,\n                                        blank: false\n                                    }}\n                                />\n                            }\n                        </Spin>\n                        <div className={styles['load-component']}>\n                            {!isRequesting && hasMore && currentPage == VOLUME * times &&\n                                <Button onClick={this.handleLoadMore}>点击加载更多~</Button>\n                            }\n                        </div>\n                    </div>\n                }\n            </div>\n        );\n    }\n}\n\nexport default TvColumn;\n","export const headColSpan = {\n    xs: 12, sm: 12, xl: 8, xxl: 6\n};\n\nexport const colSpan = {\n    xs: 6, sm: 6, xl: 4, xxl: 3\n};\n","import {\n    put, call, fork\n} from 'redux-saga/effects';\n\nimport * as Api from 'Services/index';\nimport * as GlobalActionTypes from 'Global/actions';\nimport { addNewsCount } from 'Global/prefetch';\nimport * as ActionTypes from './actions';\n\nfunction* getNewsContent(action) {\n    try {\n        const { sid } = action.data;\n        const res = yield call(Api.getNewsContent, { sid });\n        yield put(ActionTypes.getNewsContent.success(action, res));\n        const { contentType } = res;\n        yield call(addNewsCount, {\n            data: {\n                id: sid,\n                countType: 'readCount'\n            }\n        });\n        switch (`${contentType}`) {\n            case '0':\n                yield call(getRecentlyNewsList, {\n                    data: {\n                        id: sid,\n                        beginScore: 0,\n                        pageSize: 6,\n                        contentType\n                    }\n                });\n                break;\n            case '2':\n                yield call(getRecentlyNewsList, {\n                    data: {\n                        id: sid,\n                        beginScore: 0,\n                        pageSize: 10,\n                        contentType\n                    }\n                });\n                break;\n            case '3':\n                yield call(getColumnVideoList, {\n                    data: {\n                        tvColumnPk: res.tvColumnPk || 1,\n                        beginScore: 0,\n                        pageSize: 10\n                    }\n                });\n                break;\n            default:\n                yield call(getRecommendList, {\n                    data: {\n                        id: sid,\n                        channelPk: res.channelPK || 1,\n                        beginScore: 0,\n                        pageSize: 10\n                    }\n                });\n                break;\n        }\n        yield put(GlobalActionTypes.seoSet({\n            metaTitle: [res.title, '荔枝网'].filter(Boolean).join('-'),\n            metaKeywords: res.keyword,\n            metaDescription: res.summary\n        }));\n    } catch (error) {\n        yield put(ActionTypes.getNewsContent.failure(action, error));\n    }\n}\n\n/** 获得新闻最新内容 */\nfunction* getRecentlyNewsList(action) {\n    try {\n        const res = yield call(Api.getRecentlyNewsList, action.data);\n        yield put(ActionTypes.getRecentlyNewsList.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getRecentlyNewsList.failure(action, error));\n    }\n}\n\n/** 获取推荐内容 */\nfunction* getRecommendList(action) {\n    try {\n        const res = yield call(Api.getRelateNewsList, action.data);\n        yield put(ActionTypes.getRecommendList.success(action, res));\n        yield call(getMoreList, {\n            data: {\n                id: action.data.id,\n                channelPk: action.data.channelPk || 1,\n                beginScore: res.lastScore,\n                pageSize: 40\n            }\n        });\n    } catch (error) {\n        yield put(ActionTypes.getRecommendList.failure(action, error));\n    }\n}\n\n/** 获取更多推荐内容 */\nfunction* getMoreList(action) {\n    try {\n        const res = yield call(Api.getRelateNewsList, action.data);\n        yield put(ActionTypes.getMoreList.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getMoreList.failure(action, error));\n    }\n}\n\n/** 获取电视节目 */\nfunction* getColumnVideoList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getColumnVideoList.success(action, res));\n        yield call(getMoreColumnVideoList, {\n            data: {\n                tvColumnPk: action.data.tvColumnPk,\n                beginScore: res.lastScore,\n                pageSize: 40\n            }\n        });\n    } catch (error) {\n        yield put(ActionTypes.getColumnVideoList.failure(action, error));\n    }\n}\n\n/** 获取更多电视节目 */\nfunction* getMoreColumnVideoList(action) {\n    try {\n        const res = yield call(Api.getColumnVideoList, action.data);\n        yield put(ActionTypes.getMoreColumnVideoList.success(action, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getMoreColumnVideoList.failure(action, error));\n    }\n}\n\n\nexport default function* NewsDetailPrefetch(args) {\n    const { pathName = '' } = args;\n    const [, , sid] = pathName.split('/');\n\n    yield fork(getNewsContent, { data: { sid } });\n}\n","import { createSelector } from 'reselect';\n\nconst newsSelector = (state) => state.get('NewsDetail');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([newsSelector, globalSelector], (news, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n\n    newsContent: news.get('NewsDetail').get('newsContent').toJS(),\n    channelInfo: news.get('NewsDetail').get('channelInfo').toJS(),\n    classificationName: news.get('NewsDetail').get('classificationName'),\n    relateNews: news.get('NewsDetail').get('relateNews').toJS(),\n    moreRelateNews: news.get('NewsDetail').get('moreRelateNews').toJS(),\n    columnVideo: news.get('NewsDetail').get('columnVideo').toJS(),\n    moreColumnVideo: news.get('NewsDetail').get('moreColumnVideo').toJS()\n}));\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'TOPIC_DETAIL';\n\nexport const { getNewsTopic, GET_NEWS_TOPIC } = apiAction('GET_NEWS_TOPIC', Module);\n\nexport const { getNewsTopicColumn, GET_NEWS_TOPIC_COLUMN } = apiAction('GET_NEWS_TOPIC_COLUMN', Module);\n\nexport const { getNewsTopicMemberList, GET_NEWS_TOPIC_MEMBER_LIST } = apiAction('GET_NEWS_TOPIC_MEMBER_LIST', Module);\n\nexport const { getChannelNewsList, GET_CHANNEL_NEWS_LIST } = apiAction('GET_CHANNEL_NEWS_LIST', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { createSelector } from 'reselect';\n\nconst accountSelector = (state) => state.get('account');\n\nexport default createSelector(accountSelector, (account) => ({\n    isRequesting: account.get('isRequesting'),\n    userInfo: account.get('userInfo'),\n    dateList: account.get('dateList'),\n    historyByDate: account.get('historyByDate')\n}));\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'HOME_PAGE';\n\nexport const { getSeoConfig, GET_SEO_CONFIG } = apiAction('GET_SEO_CONFIG', Module);\n\nexport const { getHotNews, GET_HOT_NEWS } = apiAction('GET_HOT_NEWS', Module);\n\nexport const { getHomeShowChannels, GET_HOME_SHOW_CHANNELS } = apiAction('GET_HOME_SHOW_CHANNELS', Module);\n\nexport const { getChannelFocus, GET_CHANNEL_FOCUS } = apiAction('GET_CHANNEL_FOCUS', Module);\n\nexport const { getChannelNews, GET_CHANNEL_NEWS } = apiAction('GET_CHANNEL_NEWS', Module);\n\nexport const { getRollNews, GET_ROLL_NEWS } = apiAction('GET_ROLL_NEWS', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'SEARCH_PAGE';\n\nexport const { searchNews, SEARCH_NEWS } = apiAction('SEARCH_NEWS', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'ALL_CHANNEL_PAGE';\n\nexport const { getChannelInfo, GET_CHANNEL_INFO } = apiAction('GET_CHANNEL_INFO', Module);\n\nexport const { getAllSubChannelNews, GET_ALL_SUB_CHANNEL_NEWS } = apiAction('GET_ALL_SUB_CHANNEL_NEWS', Module);\n\nexport const { getChannelNews, GET_CHANNEL_NEWS } = apiAction('GET_CHANNEL_NEWS', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'TV_PROGRAMS_PAGE';\n\nexport const { getTvChannel, GET_TV_CHANNEL } = apiAction('GET_TV_CHANNEL', Module);\n\nexport const { getTvColumn, GET_TV_COLUMN } = apiAction('GET_TV_COLUMN', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'TV_COLUMN';\n\nexport const { getColumnInfo, GET_COLUMN_INFO } = apiAction('GET_COLUMN_INFO', Module);\n\nexport const { getColumnVideoList, GET_COLUMN_VIDEO_LIST } = apiAction('GET_COLUMN_VIDEO_LIST', Module);\n\nexport const { getChannelInfo, GET_CHANNEL_INFO } = apiAction('GET_CHANNEL_INFO', Module);\n\nexport const { getChannelNews, GET_CHANNEL_NEWS } = apiAction('GET_CHANNEL_NEWS', Module);\n","// 页面容量\nexport const PAGE_SIZE = 40;\n\n// 固定页数\nexport const VOLUME = 4;\n\n// 指定位置\nexport const LOAD_POSITION = 260;\n","import { apiAction, action } from 'Utils/actionUtils';\n\n\nconst Module = 'TV_CHANNEL_DETAIL';\n\nexport const { getTvChannelDetail, GET_TV_CHANNEL_DETAIL } = apiAction('GET_TV_CHANNEL_DETAIL', Module);\n\nexport const { getTvChannelList, GET_TV_CHANNEL_LIST } = apiAction('GET_TV_CHANNEL_LIST', Module);\nexport const { getTvMenuList, GET_TV_MENU_LIST } = apiAction('GET_TV_MENU_LIST', Module);\nexport const { getTvColumn, GET_TV_COLUMN } = apiAction('GET_TV_COLUMN', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'TV_COLUMN_DETAIL';\n\nexport const { getColumnVideoList, GET_COLUMN_VIDEO_LIST } = apiAction('GET_COLUMN_VIDEO_LIST', Module);\n\nexport const { getRecommendList, GET_RECOMMEND_LIST } = apiAction('GET_RECOMMEND_LIST', Module);\n\nexport const SET_VIDEO_DETAIL = 'SET_VIDEO_DETAIL';\nexport const setVideoDetail = (data) => action(SET_VIDEO_DETAIL, { data });\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'LIVE_ROOM';\n\nexport const { getLive, GET_LIVE } = apiAction('GET_LIVE', Module);\n\nexport const { getRecentlyLive, GET_RECENTLY_LIVE } = apiAction('GET_RECENTLY_LIVE', Module);\n\nexport const { liveCount, LIVE_COUNT } = apiAction('LIVE_COUNT', Module);\n\nexport const LEAVE_PAGE = 'LEAVE_PAGE';\nexport const leavePage = () => action(LEAVE_PAGE);\n","/**\n * 模块注册\n */\nimport React from 'react';\nimport Loadable from 'react-loadable';\nimport { VIDEOJS } from './dependences';\n\nconst getComponent = function (component, asyncComponent, isSsr = true) {\n    if (isSsr) {\n        asyncComponent.prefetch = component.prefetch;\n    }\n    console.log('component.displayName', component.displayName, isSsr);\n    return asyncComponent;\n};\n\nconst routes = [\n    {\n        path: '/login',\n        component: Loadable({\n            loader: () => import('../containers/LoginPage'),\n            loading: _ => null,\n            modules: ['../containers/LoginPage']\n        }),\n    },\n    {\n        path: '/',\n        component: getComponent(require('../containers/Root').default, Loadable({\n            loader: () => import('../containers/Root'),\n            loading: _ => null\n        })),\n        routes: [\n            {\n                path: '/',\n                component: getComponent(require('../containers/HomePage').default, Loadable({\n                    loader: () => import('../containers/HomePage'),\n                    loading: _ => null\n                })),\n                exact: true,\n                moduleName: 'HomePage'\n            },\n            {\n                path: '/index',\n                component: getComponent(require('../containers/HomePage').default, Loadable({\n                    loader: () => import('../containers/HomePage'),\n                    loading: _ => null\n                })),\n                exact: true,\n                moduleName: 'HomePage'\n            },\n            {\n                path: '/search',\n                component: getComponent(require('../containers/SearchPage').default, Loadable({\n                    loader: () => import('../containers/SearchPage'),\n                    loading: _ => null,\n                    modules: ['../containers/SearchPage']\n                })),\n                exact: true,\n                moduleName: 'SearchPage'\n            },\n            {\n                path: '/channels/:channelId',\n                component: getComponent(require('../containers/ChannelsPage').default, Loadable({\n                    loader: () => import('../containers/ChannelsPage'),\n                    loading: _ => null,\n                    modules: ['../containers/ChannelsPage']\n                })),\n                exact: true,\n                moduleName: 'ChannelsPage'\n            },\n            {\n                path: '/tvPrograms',\n                component: getComponent(require('../containers/TvPrograms').default, Loadable({\n                    loader: () => import('../containers/TvPrograms'),\n                    loading: _ => null,\n                    modules: ['../containers/TvPrograms']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'TvPrograms'\n            },\n            {\n                path: '/article/:id',\n                component: getComponent(require('../containers/NewsDetail/Articles').default, Loadable({\n                    loader: () => import('../containers/NewsDetail/Articles'),\n                    loading: _ => null,\n                    modules: ['../containers/NewsDetail/Articles']\n                })),\n                dependence: VIDEOJS,\n                exact: true,\n                moduleName: 'NewsDetail'\n            },\n            {\n                path: '/gallery/:id',\n                component: getComponent(require('../containers/NewsDetail/Gallery').default, Loadable({\n                    loader: () => import('../containers/NewsDetail/Gallery'),\n                    loading: _ => null,\n                    modules: ['../containers/NewsDetail/Gallery']\n                })),\n                exact: true,\n                moduleName: 'NewsDetail'\n            },\n            {\n                path: '/video/:id',\n                component: getComponent(require('../containers/NewsDetail/Video').default, Loadable({\n                    loader: () => import('../containers/NewsDetail/Video'),\n                    loading: _ => null,\n                    modules: ['../containers/NewsDetail/Video']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'NewsDetail'\n            },\n            {\n                path: '/tv/:id',\n                component: getComponent(require('../containers/NewsDetail/Tv').default, Loadable({\n                    loader: () => import('../containers/NewsDetail/Tv'),\n                    loading: _ => null,\n                    modules: ['../containers/NewsDetail/Tv']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'NewsDetail'\n            },\n            {\n                path: '/seriesVideo/:id/:episodeId?',\n                component: getComponent(require('../containers/TopicDetail/Series').default, Loadable({\n                    loader: () => import('../containers/TopicDetail/Series'),\n                    loading: _ => null,\n                    modules: ['../containers/TopicDetail/Series']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'TopicDetail'\n            },\n            {\n                path: '/outlink/:id',\n                component: getComponent(require('../containers/NewsDetail/OutLink').default, Loadable({\n                    loader: () => import('../containers/NewsDetail/OutLink'),\n                    loading: _ => null,\n                    modules: ['../containers/NewsDetail/OutLink']\n                })),\n                exact: true,\n                moduleName: 'NewsDetail'\n            },\n            {\n                path: '/topic/:id',\n                component: getComponent(require('../containers/TopicDetail/Topic').default, Loadable({\n                    loader: () => import('../containers/TopicDetail/Topic'),\n                    loading: _ => null,\n                    modules: ['../containers/TopicDetail/Topic']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'TopicDetail'\n            },\n            {\n                path: '/tvChannel/:channelPk',\n                component: getComponent(require('../containers/TvColumn').default, Loadable({\n                    loader: () => import('../containers/TvColumn'),\n                    loading: _ => null,\n                    modules: ['../containers/TvChannelDetail']\n                })),\n                exact: true,\n                moduleName: 'TvColumn'\n            },\n            {\n                path: '/tvChannelDetail/:id',\n                component: getComponent(require('../containers/TvChannelDetail').default, Loadable({\n                    loader: () => import('../containers/TvChannelDetail'),\n                    loading: _ => null,\n                    modules: ['../containers/TvChannelDetail']\n                }), false),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'TvChannelDetail'\n            },\n            {\n                path: '/tvColumn/:columnPk',\n                component: getComponent(require('../containers/TvColumn').default, Loadable({\n                    loader: () => import('../containers/TvColumn'),\n                    loading: _ => null,\n                    modules: ['../containers/TvColumn']\n                })),\n                exact: true,\n                moduleName: 'TvColumn'\n            },\n            {\n                path: '/tvColumnDetail/:id',\n                component: getComponent(require('../containers/TvColumnDetail').default, Loadable({\n                    loader: () => import('../containers/TvColumnDetail'),\n                    loading: _ => null,\n                    modules: ['../containers/TvColumnDetail']\n                })),\n                exact: true,\n                moduleName: 'TvColumnDetail'\n            },\n            {\n                path: '/live/:id',\n                component: getComponent(require('../containers/LiveRoom').default, Loadable({\n                    loader: () => import('../containers/LiveRoom'),\n                    loading: _ => null,\n                    modules: ['../containers/LiveRoom']\n                })),\n                exact: true,\n                dependence: VIDEOJS,\n                moduleName: 'LiveRoom'\n            },\n            {\n                path: '/404',\n                component: getComponent(require('../containers/ErrorPage').default, Loadable({\n                    loader: () => import('../containers/ErrorPage'),\n                    loading: _ => null,\n                    modules: ['../containers/ErrorPage']\n                })),\n                layout: {\n                    hasNav: false\n                },\n                exact: true\n            }\n        ]\n    }\n];\n\nexport default routes;\n","import React, { Component } from 'react';\nimport { Route } from 'react-router-dom';\nimport { Switch, Redirect } from 'react-router';\nimport { ConfigProvider } from 'antd';\nimport zhCN from 'antd/lib/locale-provider/zh_CN';\n\nimport prefetchSaga from 'Global/prefetch';\nimport Layout from 'Containers/Layout';\nimport ErrorBoundary from 'Components/ErrorBoundary';\n\nimport 'Public/css/theme/antd_modify.less';\nimport 'Public/css/global.less';\n// import 'cropperjs/src/css/cropper.scss'; // cropperjs\n\nimport matchRoutes from 'View/routes/matchRoutes';\n\n/**\n * 页面入口文件\n * PageName: 外层路由渲染\n * \n * Author: zhuhuishao \n * use: [ 外层路由展示 ]\n * \n */\nclass Root extends Component {\n    static prefetch = prefetchSaga;\n\n    render() {\n        const { route, location, history } = this.props;\n\n        let layout = {\n            hasNav: true,\n            hasHeader: true\n        };\n        const matchRoutesList = matchRoutes(this.props.route.routes, location.pathname);\n        if (matchRoutesList.length) {\n            layout = Object.assign(layout, matchRoutesList[matchRoutesList.length - 1].route.layout || {});\n        }\n\n        return (\n            <ConfigProvider locale={zhCN}>\n                <ErrorBoundary {...this.props}>\n                    <Layout {...this.props} layout={layout}>\n                        <Switch>\n                            {route.routes && route.routes.map(item => (\n                                <Route key={item.path} path={item.path} exact={item.exact} component={item.component}></Route>\n                            ))}\n                            <Redirect to='/404' />\n                        </Switch>\n                    </Layout>\n                </ErrorBoundary>\n            </ConfigProvider>\n        );\n    }\n}\n\nexport default Root;\n","export const IMAGE_UPLOAD_STATUS = {\n    CHOOSE: 'CHOOSE',\n    CROP: 'CROP'\n};\n\nexport const IMAGE_UPLOAD_TABKEY = {\n    UPLOAD: 'UPLOAD',\n    CONTENT: 'CONTENT'\n};\n","import React from 'react';\nimport { calVideoTime } from 'Utils/utils';\nimport { FLOW_TYPE } from 'Constants/type';\nimport { LIVE_STATUS } from './constants';\nimport styles from './index.less';\n\n/**\n * 渲染角标\n * @param {*} sourceData \n */\nexport const renderOverlay = (sourceData) => {\n    const { contentType, objectType } = sourceData;\n    let content = '';\n    switch (`${objectType}`) {\n        case `${FLOW_TYPE.NEWS}`: {\n            const { timeLength, imageCount } = sourceData;\n            switch (`${contentType}`) {\n                case '1': // 视频\n                case '3': // 电视节目\n                case '4': // 剧集\n                    content = timeLength ? (\n                        <span className={[styles['p-rb'], styles['p-bg']].join(' ')}>\n                            {calVideoTime(timeLength)}\n                        </span>\n                    ) : '';\n                    break;\n                case '2': // 图集\n                    content = imageCount ? (\n                        <span className={[styles['p-rb'], styles['p-bg']].join(' ')}>\n                            {imageCount}图\n                        </span>\n                    ) : '';\n                    break;\n                default:\n                    break;\n            }\n            break;\n        }\n\n        case `${FLOW_TYPE.TOPIC}`: {\n            switch (`${contentType}`) {\n                case '1': // 专题\n                    content = (<span className={[styles['p-rb'], styles['p-bg']].join(' ')}>专题</span>);\n                    break;\n                default:\n                    break;\n            }\n            break;\n        }\n\n        case `${FLOW_TYPE.OUTLINK}`:\n            break;\n\n        case `${FLOW_TYPE.LIVE}`:\n            content = (\n                <span className={[styles['p-rb'], styles['p-bg']].join(' ')}>\n                    {LIVE_STATUS[sourceData.status]}\n                </span>\n            );\n            break;\n\n        default:\n            break;\n    }\n    return (\n        <div className={styles.overlay}>\n            {content}\n        </div>\n    );\n};\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Spin } from 'antd';\nimport {\n    SeriesVideo, TvColumn, News, Topic\n} from 'Components/ContentElement';\nimport HelmetSEO from 'Components/HelmetSEO';\n\nimport { urlParams } from 'Utils/utils';\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport LoadMore from './components/LoadMore';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\n/**\n * PageName: 电视栏目信息详情页\n */\n@connect(selectors, {\n    searchNews: Actions.searchNews.request,\n    leavePage: Actions.leavePage\n})\nclass SearchPage extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {};\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            const { key = '' } = urlParams();\n            this.setState({\n                keyword: decodeURIComponent(key)\n            }, () => {\n                this.searchNews();\n            });\n        }\n    }\n\n    componentWillUnmount() {\n        this.props.leavePage();\n    }\n\n    searchNews = async (params = {}) => {\n        const { keyword } = this.state;\n        if (keyword) {\n            // ALL(-1), SERIES(0), TV_COLUMN(1), TOPIC(2), VIDEO(3), PICTURE(4), ARTICLE(5),TV_COLUMN_NEWS(6),SERIES_NEWS(7)\n            const { type = -1, pageNum = 1, pageSize = 15 } = params;\n            const data = {\n                keyword,\n                pageNum,\n                type,\n                pageSize\n            };\n            await new Promise((resolve, reject) => {\n                this.props.searchNews(data, resolve, reject);\n            });\n        }\n    }\n\n    /** 高亮关键字 */\n    renderHighlight = (str, keyword) => {\n        const regExp = new RegExp(keyword, 'g');\n        return str.replace(regExp, `<span style=\"color:#F12D37\">${keyword}</span>`);\n    }\n\n    render() {\n        const { screenSize } = this.props;\n        const { keyword = '' } = this.state;\n        const {\n            isRequesting,\n            total,\n            series,\n            tvColumns,\n            topics,\n            newsItems\n        } = this.props;\n\n        const helmetData = {\n            title: ['搜索', '荔枝网'].filter(Boolean).join('-')\n        };\n        return (\n            <div className={[responsiveStyles.layout, styles['search-page']].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={[responsiveStyles.content, styles.content].join(' ')}>\n                    <div className={styles['search-result-tips']}>\n                        为您找到与“<b>{keyword}</b>”相关的内容：<span>{total}</span>条\n                    </div>\n                    <Spin spinning={isRequesting}>\n                        {total > 0 &&\n                            <div className={styles['search-result']}>\n                                {/* 剧集 */}\n                                <LoadMore sources={series?.list} total={series?.total} type={0} onLoad={this.searchNews}>\n                                    {series?.list?.map((el) => (\n                                        <SeriesVideo\n                                            source={{ ...el, title: this.renderHighlight(el.title, keyword) }}\n                                            key={el.id}\n                                            screenSize={screenSize}\n                                        />\n                                    ))}\n                                </LoadMore>\n                                {/* 电视节目 */}\n                                <LoadMore sources={tvColumns?.list} total={tvColumns?.total} type={1} onLoad={this.searchNews} >\n                                    {tvColumns?.list?.map((el) => (\n                                        <TvColumn\n                                            source={{ ...el, name: this.renderHighlight(el.name, keyword) }}\n                                            key={el.pk}\n                                            screenSize={screenSize}\n                                        />\n                                    ))}\n                                </LoadMore>\n                                {/* 专题 */}\n                                <LoadMore sources={topics?.list} total={topics?.total} type={2} onLoad={this.searchNews} >\n                                    {topics?.list?.map((el) => (\n                                        <Topic\n                                            source={{ ...el, title: this.renderHighlight(el.title, keyword) }}\n                                            key={el.id}\n                                        />\n                                    ))}\n                                </LoadMore>\n                                {/* 新闻 */}\n                                <LoadMore sources={newsItems?.list} total={newsItems?.total} type={3} onLoad={this.searchNews}>\n                                    {newsItems?.list?.map((el) => (\n                                        <News\n                                            source={{ ...el, title: this.renderHighlight(el.title, keyword) }}\n                                            key={el.id}\n                                        />\n                                    ))}\n                                </LoadMore>\n                            </div>\n                        }\n                    </Spin>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default SearchPage;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n    Row, Col, Radio, Button\n} from 'antd';\n\nimport HelmetSEO from 'Components/HelmetSEO';\nimport CardFlow from 'Components/CardFlow';\nimport { DISPLAY_TYPE_COUNT } from 'Constants/type';\n\nimport { colSpan } from 'Constants/antProps';\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport * as GlobalActions from 'Global/actions';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\n/**\n * PageName: 全部分类\n * 推荐频道不能点击\n */\n@connect(selectors, {\n    getCommonChannel: GlobalActions.getCommonChannel.request,\n    getChannelInfo: Actions.getChannelInfo.request,\n    getAllSubChannelNews: Actions.getAllSubChannelNews.request,\n    getChannelNews: Actions.getChannelNews.request\n})\nclass ChannelsPage extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            fixed: false,\n            currentChannel: {},\n            checkChannel: undefined\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    async componentDidMount() {\n        if (!this.props.isPrefetch) {\n            const { channelId } = this.props.match.params;\n            await new Promise((resolve, reject) => {\n                this.props.getChannelInfo({ channelPk: channelId }, resolve, reject);\n            });\n        }\n        const { channelInfo } = this.props;\n        const { childChannels = [] } = channelInfo;\n        const [channel = {}] = childChannels;\n        this.setState({ checkChannel: channel.pk });\n        window.addEventListener('scroll', this.fixedBar);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.fixedBar);\n    }\n\n    // 监听固定悬浮导航栏\n    fixedBar = () => {\n        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n        const fixed = scrollTop > 400;\n        this.setState({ fixed });\n    }\n\n    handleCheckChannel = (e) => {\n        const { value } = e.target;\n        window.location.href = `#${value}`;\n        this.setState({ checkChannel: value });\n    }\n\n    /** 换一批 */\n    handleRefreshNews = (child) => {\n        const { channelNews, channelInfo } = this.props;\n        const { lastScore } = channelNews[child.pk] || {};\n        const data = {\n            beginScore: lastScore || 0,\n            channelId: child.pk,\n            pageSize: DISPLAY_TYPE_COUNT[channelInfo.displayType]\n        };\n        this.props.getChannelNews(data);\n    }\n\n    /** 渲染分类选择 */\n    renderRagioGroup = () => {\n        const { channelInfo } = this.props;\n        const { checkChannel } = this.state;\n        return (\n            <Radio.Group\n                className={styles['nav-channels']}\n                buttonStyle='solid'\n                value={checkChannel}\n                onChange={this.handleCheckChannel}\n            >\n                <Row gutter={24}>\n                    {channelInfo?.childChannels?.map((item, i) => item.name != '推荐' && (\n                        <Col {...colSpan} key={i}>\n                            <a title={item.name}>\n                                <Radio.Button\n                                    className={styles.channel}\n                                    value={item.pk}\n                                >\n                                    {item.name}\n                                </Radio.Button>\n                            </a>\n                        </Col>\n                    ))}\n                </Row>\n            </Radio.Group>\n        );\n    }\n\n    /** 渲染信息流 */\n    renderCardFlow = (data) => {\n        const { channelRequesting, channelNews, channelInfo } = this.props;\n        const { list } = channelNews[data.pk] || {};\n        const { displayType } = channelInfo;\n        if (data.name == '推荐' && !list?.length) {\n            return null;\n        }\n        return (\n            <div className={styles['sub-channel']} key={data.pk}>\n                <div className={styles['anchor-point']} id={data.pk}></div>\n                <div className={styles['sub-channel-title']}>\n                    {data.name == '推荐'\n                        ? data.name\n                        : <a href={data.tvColumnPk ? `/tvColumn/${data.tvColumnPk}` : `/tvChannel/${data.pk}`}>\n                            {data.name}\n                        </a>\n                    }\n                </div>\n                {list?.length > 0 &&\n                    <div className={styles['btn-refresh']}>\n                        <Button type='link' icon='sync' onClick={() => { this.handleRefreshNews(data); }}>换一批</Button>\n                    </div>\n                }\n                <div className={styles['sub-channel-content']}>\n                    <CardFlow\n                        flowData={channelRequesting[data.pk] ? [] : list}\n                        displayType={displayType}\n                    />\n                </div>\n            </div>\n        );\n    }\n\n    render() {\n        const { channelInfo } = this.props;\n        const { fixed } = this.state;\n\n        let keywords;\n        try {\n            keywords = JSON.parse(channelInfo.keyword).join(',');\n        } catch (error) {\n            keywords = '';\n        }\n        const helmetData = {\n            title: [channelInfo.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords,\n            description: channelInfo.description\n        };\n        return (\n            <div className={styles['page-channels']}>\n                <HelmetSEO {...helmetData} />\n                {fixed &&\n                    <div\n                        className={[\n                            responsiveStyles.layout,\n                            styles.nav,\n                            styles.fixed || ''\n                        ].join(' ')}\n                    >\n                        <div className={responsiveStyles.content}>\n                            {this.renderRagioGroup()}\n                        </div>\n                    </div>\n                }\n                <div className={responsiveStyles.layout}>\n                    <div className={responsiveStyles.content}>\n                        <div className={styles.nav}>\n                            <div className={styles['nav-title']}>{channelInfo.name}</div>\n                            {this.renderRagioGroup()}\n                        </div>\n                        <div className={styles['sub-channels']}>\n                            {channelInfo?.childChannels?.map((child) => this.renderCardFlow(child))}\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default ChannelsPage;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n    Row, Col, Radio, Icon\n} from 'antd';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport CardFlow from 'Components/CardFlow';\n\nimport { ENTITY_TYPE } from 'Utils/utils';\nimport { colSpan } from 'Constants/antProps';\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\nconst groupSize = {\n    xxl: 16,\n    xl: 12,\n    xs: 8\n};\n\n/**\n * PageName: 节目列表\n * \n * \n */\n@connect(selectors, {\n    getTvChannel: Actions.getTvChannel.request\n})\nclass TvPrograms extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            fixed: false,\n            packUp: true\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getTvChannel();\n        }\n        window.addEventListener('scroll', this.fixedBar);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.fixedBar);\n    }\n\n    // 监听固定悬浮导航栏\n    fixedBar = () => {\n        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n        const fixed = scrollTop > 400;\n        this.setState({ fixed });\n    }\n\n    handleCheckChannel = (value) => {\n        // handleCheckChannel = (e) => {\n        // const { value } = e.target;\n        // this.setState({ checkChannel: e.target.value });\n        window.location.href = `#${value}`;\n        this.setState({ checkChannel: value });\n    }\n\n    /** 解析链接 */\n    handleRenderLink = (programs) => `/tvColumn/${programs.pk}`;\n\n    /** 渲染分类选择 */\n    renderRagioGroup = () => {\n        const { checkChannel, packUp } = this.state;\n        const { tvPrograms, screenSize } = this.props;\n        const { tvChannels = [], tvChannelsColumn = {} } = tvPrograms.toJS();\n        const filterTvChannels = tvChannels.filter((item) => tvChannelsColumn[item.pk] && tvChannelsColumn[item.pk].length > 0);\n        return (\n            <div className={packUp && styles['pack-up']}>\n                <Radio.Group\n                    className={styles['nav-channels']}\n                    buttonStyle='solid'\n                    value={checkChannel}\n                >\n                    <Row gutter={24}>\n                        {filterTvChannels.map((item, i) => (\n                            <Col {...colSpan} key={i}>\n                                <a title={item.name}>\n                                    <Radio.Button className={styles['tv-programs']} value={item.pk} onClick={() => this.handleCheckChannel(item.pk)}>\n                                        {item.name}\n                                    </Radio.Button>\n                                </a>\n                            </Col>\n                        ))}\n                    </Row>\n                </Radio.Group>\n                {filterTvChannels.length > groupSize[screenSize] &&\n                    <Icon\n                        type='caret-up'\n                        className={styles['pack-up-btn']}\n                        onClick={() => { this.setState({ packUp: !packUp }); }}\n                    />\n                }\n            </div>\n        );\n    }\n\n    render() {\n        const { fixed } = this.state;\n        const { tvPrograms } = this.props;\n        const { tvChannels = [], tvChannelsColumn = {} } = tvPrograms.toJS();\n        const helmetData = {\n            title: ['节目一览', '荔枝网'].filter(Boolean).join('-')\n        };\n        return (\n            <div className={styles['page-tv-programs']}>\n                <HelmetSEO {...helmetData} />\n                {fixed &&\n                    <div\n                        className={[\n                            responsiveStyles.layout,\n                            styles['tv-programs-nav'],\n                            styles.fixed\n                        ].join(' ')}\n                    >\n                        <div className={responsiveStyles.content}>\n                            {this.renderRagioGroup()}\n                        </div>\n                    </div>\n                }\n                <div className={responsiveStyles.layout}>\n                    <div className={responsiveStyles.content}>\n                        <div className={styles['tv-programs-nav']}>\n                            <div className={styles['nav-title']}>节目一览</div>\n                            {this.renderRagioGroup()}\n                        </div>\n                        <div className={styles['tv-menus']}>\n                            {tvChannels.map((item) => tvChannelsColumn[item.pk] && tvChannelsColumn[item.pk].length > 0 && (\n                                <div className={styles['tv-menu']} key={item.pk}>\n                                    <div className={styles['anchor-point']} id={item.pk}></div>\n                                    <div className={styles['tv-menu-title']}>\n                                        {item.name}\n                                    </div>\n                                    <div className={styles['tv-menu-content']}>\n                                        <CardFlow\n                                            flowData={tvChannelsColumn[item.pk]}\n                                            displayType={0}\n                                            isMulti={true}\n                                            extra={{\n                                                entityType: ENTITY_TYPE.DATA_JSON,\n                                                customLink: this.handleRenderLink\n                                            }}\n                                        />\n                                    </div>\n                                </div>\n                            ))}\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default TvPrograms;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { Typography, Icon } from 'antd';\nimport { getDetailRoute } from 'Utils/utils';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport HtmlParser from 'Components/HtmlParser';\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport { saveAs } from 'file-saver';\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\nconst HEADER_FIXED_START = 400;\nconst HEADER_HEIGHT = 72;\nconst FOOTER_HEIGHT = 284;\nconst BOX_MAX_HEIGHT = 686;\n\n/**\n * PageName: 资讯详情页\n * \n * Author: xuchunhua\n * use: [ ]\n */\n@connect(selectors, {\n    getNewsContent: Actions.getNewsContent.request,\n})\nclass Articles extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            fixed: false,\n            fixedBottom: false\n        };\n        this.moreBox = undefined;\n        this.articleBox = undefined;\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getNewsContent({\n                sid: this.props.match.params.id\n            });\n        }\n        window.addEventListener('scroll', this.fixedBar);\n    }\n\n    componentWillUnmount() {\n        window.removeEventListener('scroll', this.fixedBar);\n    }\n\n    // 监听固定悬浮导航栏\n    fixedBar = () => {\n        if (!this.moreBox) {\n            this.moreBox = this.refs.moreBox;\n        }\n        if (!this.articleBox) {\n            this.articleBox = this.refs.articleBox;\n        }\n        // 文章dom比侧边栏dom高，则滑到底部时，侧边栏自动吸附到底部\n        if (this.moreBox && this.articleBox && this.articleBox.clientHeight > this.moreBox.clientHeight) {\n            const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n            const { scrollHeight, clientHeight } = document.documentElement;\n            // 滚动条到底部距离\n            const scrollBottom = scrollHeight - clientHeight - scrollTop;\n            // 刚好完全展示moreBox高度边界值\n            const bottomBoundary = HEADER_HEIGHT + 20 + this.moreBox.clientHeight + 120 + FOOTER_HEIGHT;\n            // 底线\n            const stopLine = bottomBoundary - clientHeight;\n\n            let fixed = false;\n            let fixedBottom = false;\n            if (scrollTop > HEADER_FIXED_START) {\n                fixed = scrollBottom > stopLine;\n                fixedBottom = !fixed;\n            }\n            this.setState({ fixed, fixedBottom });\n        }\n    }\n\n    /** 点击卡片 */\n    handleOnClickCard = (channelNews) => {\n        const { newsContent } = this.props;\n        const { id, contentType, objectType } = channelNews;\n        const route = getDetailRoute({\n            source: channelNews,\n            objectType,\n            contentType,\n            sid: id,\n            channelId: newsContent.channelPK\n        });\n        window.open(route);\n    }\n\n    handleDownload = async (url, name) => {\n        try {\n            await saveAs(url, name);\n        } catch (err) {\n            window.open(url);\n        }\n    }\n\n    render() {\n        const { fixed, fixedBottom } = this.state;\n        const { channelInfo = {}, newsContent, relateNews } = this.props;\n        const { attaches = [] } = newsContent;\n        const hasRelateNews = relateNews && relateNews.length > 0;\n\n        const helmetData = {\n            title: [newsContent.title, channelInfo.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsContent.keyword,\n            description: newsContent.summary\n        };\n        return (\n            <div\n                className={[responsiveStyles.layout, styles.article].join(' ')}\n                style={{ minHeight: (typeof window == 'object' ? window.innerHeight : 800) - 72 }}\n            >\n                <HelmetSEO {...helmetData} />\n                <div className={[responsiveStyles.content, styles.layout].join(' ')}>\n                    <div\n                        ref='articleBox'\n                        className={[\n                            styles['article-detail'],\n                            !hasRelateNews && styles.overspread\n                        ].join(' ')}\n                    >\n                        <div className={styles['pre-sub-title']}>{newsContent.preSubTitle}</div>\n                        <div className={styles.title}>{newsContent.title}</div>\n                        <div className={styles['sub-title']}>{newsContent.subTitle}</div>\n                        <div className={styles.media}>\n                            {newsContent.from &&\n                                <a href={newsContent.originLink || null} target='_blank'>\n                                    <span>{newsContent.from}</span>\n                                </a>\n                            }\n                            {newsContent.releasedAt && <span>{moment(newsContent.releasedAt).format('YYYY-MM-DD HH:mm')}</span>}\n                            {newsContent.author && <span>作者：{newsContent.author}</span>}\n                            {/* {newsContent.creator && <span>编辑：{newsContent.creator}</span>} */}\n                        </div>\n                        <hr />\n                        <div className={styles['article-content']}>\n                            {newsContent.summary &&\n                                <p className={styles.summary}>\n                                    摘要：{newsContent.summary}\n                                </p>\n                            }\n                            {newsContent.content && newsContent.content != '' && (\n                                <HtmlParser\n                                    content={newsContent.content}\n                                    voteList={newsContent.voteList}\n                                // voteFunc={this.props.vote}\n                                // news={thisNews}\n                                />\n                            )}\n                        </div>\n                        <div className={styles.attaches}>\n                            {attaches && attaches.map((item, i) => (\n                                <div key={i}>附件{i + 1}：<a onClick={() => this.handleDownload(item.url, item.name)}>{item.name} <Icon type='download' /></a></div>\n                            ))}\n                        </div>\n                        <hr />\n                        {/* {newsContent.from && newsContent.originLink &&\n                            <a className={styles['origin-link']} href={newsContent.originLink} target='_blank'>\n                                <Icon type='link' />原始链接：{newsContent.from}\n                            </a>\n                        } */}\n                    </div>\n                    {hasRelateNews &&\n                        <div\n                            ref='moreBox'\n                            className={[\n                                styles['more-box'],\n                                fixed && styles.fixed,\n                                fixedBottom && styles['fixed-bottom']\n                            ].join(' ')}\n                        >\n                            <div className={styles['more-detail']}>\n                                <p className={styles['text-more']}>更多精彩</p>\n                                {relateNews.slice(0, 6).map((item, i) => (\n                                    <div\n                                        className={styles['flow-card']}\n                                        onClick={() => { this.handleOnClickCard(item); }}\n                                        key={i}\n                                    >\n                                        <div className={styles['news-title']}>\n                                            <Paragraph ellipsis={{ rows: 2 }}>{item.title}</Paragraph>\n                                        </div>\n                                        <div\n                                            className={styles['news-cover']}\n                                            style={{ backgroundImage: `url(${item.coverUrl})` }}\n                                        />\n                                    </div>\n                                ))}\n                            </div>\n                        </div>\n                    }\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default Articles;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\n\nimport { Row, Col, Icon } from 'antd';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport LoadingBox from 'Components/LoadingBox';\nimport CardFlow from 'Components/CardFlow';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\n/**\n * PageName: 图集详情页\n * \n * Author: lishihua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    getNewsContent: Actions.getNewsContent.request,\n    getRecommendList: Actions.getRecommendList.request,\n})\nclass Gallery extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currPic: 0,\n            loadIndex: 0,\n            imgLoading: true,\n            showArrow: false,\n            isViewEnd: false,\n            slideImgWidth: 0\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getNewsContent({\n                sid: this.props.match.params.id\n            });\n        }\n    }\n\n    componentWillUnmount() {\n    }\n\n    render() {\n        const { channelInfo = {}, newsContent, relateNews } = this.props;\n        const { images = [] } = newsContent;\n        const { isViewEnd } = this.state;\n        const nexGallery = this.props.relateNews && this.props.relateNews[0];\n        const nexGalleryTile = nexGallery && nexGallery.title;\n        const nexGalleryCoverUrl = nexGallery && nexGallery.coverUrl;\n        const currPicItem = images && images.length ? images[this.state.currPic] : {};\n\n        const helmetData = {\n            title: [newsContent.title, channelInfo.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsContent.keyword,\n            description: newsContent.summary\n        };\n        return (\n            <div className={[styles['news-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={[styles.detail, responsiveStyles.content].join(' ')}>\n                    <Row>\n                        <Col span={24}>\n                            <h3>{newsContent.title}</h3>\n                            <p className={styles.from}>\n                                {newsContent.from && <span>来源：{newsContent.from}</span>}\n                                <span>{moment(newsContent.releasedAt).format('YYYY-MM-DD HH:mm:ss')}</span>\n                                {newsContent.author && <span>作者：{newsContent.author}</span>}\n                            </p>\n                        </Col>\n                    </Row>\n\n                    <Row>\n                        <Col span={24} type=\"flex\" justify=\"center\" align=\"middle\">\n                            {!isViewEnd && <div className={styles['gallery-box']}>\n                                <div\n                                    style={{ position: 'relative' }}\n                                    onMouseEnter={() => this.showArrow(true)}\n                                    onMouseLeave={() => this.showArrow(false)}>\n\n                                    {this.state.showArrow &&\n                                        <img\n                                            className={styles['arrow-left']}\n                                            src={require('../../../statics/images/arrow_right_.png')}\n                                            onClick={() => this.changePicIndex('sub', this.state.currPic)}\n                                        />\n                                    }\n                                    {this.state.showArrow &&\n                                        <img\n                                            className={styles['arrow-right']}\n                                            src={require('../../../statics/images/arrow_left_.png')}\n                                            onClick={() => this.changePicIndex('add', this.state.currPic)}\n                                        />\n                                    }\n                                    <Row>\n                                        <Col span={3} type=\"flex\" justify=\"center\" align=\"middle\">\n\n                                        </Col>\n                                        <Col span={18} type=\"flex\" justify=\"center\" align=\"middle\">\n                                            <div className={styles['img-warpper']}>\n                                                <div className={styles['img-box']}>\n                                                    {this.state.imgLoading && (\n                                                        <div className={styles['images-loading']}>\n                                                            <div className={styles['loading-box']}>\n                                                                <LoadingBox loading={this.state.imgLoading} />\n                                                            </div>\n                                                        </div>\n                                                    )}\n                                                    <div\n                                                        className={styles['curr-img']}\n                                                        style={{\n                                                            backgroundImage: `url(${currPicItem.imgUrl})`\n                                                        }}\n                                                    />\n                                                    <img\n                                                        style={{ display: 'none' }}\n                                                        src={currPicItem && currPicItem.imgUrl ? currPicItem.imgUrl : ''}\n                                                        onLoad={(e) => {\n                                                            this.state.currPic == 0 && this.changePicIndex('add', -1);\n                                                        }}\n                                                    />\n                                                </div>\n                                            </div>\n                                        </Col>\n                                        <Col span={3} type=\"flex\" justify=\"center\" align=\"middle\">\n\n                                        </Col>\n                                    </Row>\n                                </div>\n\n                                <div className={styles['summery-box']}>\n                                    {images && <span>\n                                        <i>{this.state.currPic + 1}</i>/<i>{images.length}</i>\n                                    </span>}\n                                    <p>{currPicItem.desc || newsContent.title}</p>\n                                    {newsContent.originLink &&\n                                        <a className={styles['origin-link']} href={newsContent.originLink} target='_blank'>\n                                            <Icon type='link' />原始链接：{newsContent.originLink}\n                                        </a>\n                                    }\n                                </div>\n                                {images && <div className={styles['small-img']}>\n                                    {this.state.currPic == 0 &&\n                                        <img\n                                            className={styles['color_arrow-left']}\n                                            src={require('../../../statics/images/arrow_left_gray.png')}\n                                        // onClick={() => this.changePicIndex('sub', this.state.currPic)}\n                                        />\n                                    }\n                                    {this.state.currPic != 0 &&\n                                        <img\n                                            className={styles['color_arrow-left']}\n                                            src={require('../../../statics/images/arrow_left_red.png')}\n                                            onClick={() => this.changePicIndex('sub', this.state.currPic)}\n                                        />\n                                    }\n                                    {this.state.currPic + 1 == images.length &&\n                                        <img\n                                            className={styles['color_arrow-right']}\n                                            src={require('../../../statics/images/arrow_right_gray.png')}\n                                        // onClick={() => this.changePicIndex('add', this.state.currPic)}\n                                        />\n                                    }\n                                    {this.state.currPic + 1 != images.length &&\n                                        <img\n                                            className={styles['color_arrow-right']}\n                                            src={require('../../../statics/images/arrow_right_red.png')}\n                                            onClick={() => this.changePicIndex('add', this.state.currPic)}\n                                        />\n                                    }\n                                    <div className={styles['list-box']} id='parent-box'>\n                                        <ul>\n                                            {images.map((ele, index) => (\n                                                <li id={`nav-${index}`}\n                                                    onClick={() => this.changePicIndex('skip', index)}\n                                                    key={index}\n                                                >\n                                                    <img src={ele.imgUrl} alt=\"\" />\n                                                    {this.state.currPic == index &&\n                                                        <span className={styles['border-box']}></span>\n                                                    }\n                                                </li>\n                                            ))}\n                                            {/* <li className={styles['next-gallery']}>\n                                                <img src={nexGalleryCoverUrl} alt=\"\"/>\n                                                {<span className={styles['top-cover']}></span>}\n                                                <div className={styles.text}>\n                                                    <span>下一图集</span>\n                                                    <p>{nexGalleryTile && nexGalleryTile.length > 12 ? (`${(nexGalleryTile).slice(0, 12)}...`) : nexGalleryTile}</p>\n                                                </div>\n                                            </li> */}\n                                        </ul>\n                                    </div>\n                                </div>}\n                            </div>}\n                        </Col>\n                    </Row>\n                </div>\n\n                {relateNews && relateNews.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>更多精彩</p>\n                        <Row>\n                            <Col span={24} type=\"flex\">\n                                <CardFlow\n                                    flowData={relateNews}\n                                    displayType={0}\n                                    isMulti={true}\n                                    extra={{\n                                        channelId: this.props.newsContent?.channelPK,\n                                        blank: false\n                                    }}\n                                />\n                            </Col>\n                        </Row>\n                    </div>\n                }\n            </div>\n        );\n    }\n\n\n    /**\n     * \n     * 切换图片\n     * \n     * @params [string] type [切换类型： add - 下一张 | sub 上一张] | skip 点击小图定位\n     * @params [number] index [当前下标]\n     */\n    changePicIndex = (type, index) => {\n        const { newsContent } = this.props;\n        const galleryList = newsContent.images || [];\n\n        let _loadIndex = this.state.loadIndex;\n\n        this.setState(Object.assign({}, this.state, { isViewEnd: false }));\n\n        if (type == 'add') {\n            if (index + 1 < galleryList.length) {\n                if (_loadIndex < index + 1) {\n                    _loadIndex = index + 1;\n                    this.setState(Object.assign({}, this.state, {\n                        imgLoading: this.state.loadIndex < index + 1,\n                        loadIndex: _loadIndex\n                    }));\n                }\n\n                let img = new Image();\n                // img.src = newsContent.images[index + 1].imgUrl;\n                img.src = galleryList[index + 1].imgUrl;\n                img.onload = (e) => {\n                    this.setState(Object.assign({}, this.state, {\n                        currPic: index + 1,\n                        imgLoading: false,\n                    }));\n                };\n                img = null;\n            } else {\n                // this.setState(Object.assign({}, this.state, { isViewEnd: true }));\n            }\n        } else if (type == 'skip') {\n            // this.setState(Object.assign({}, this.state, { currPic: index }));\n            if (this.state.currPic !== index) {\n                this.setState(Object.assign({}, this.state, {\n                    imgLoading: true,\n                }));\n            }\n\n            let img = new Image();\n            // img.src = newsContent.images[index + 1].imgUrl;\n            img.src = galleryList[index].imgUrl;\n            img.onload = (e) => {\n                this.setState(Object.assign({}, this.state, {\n                    currPic: index,\n                    imgLoading: false,\n                }));\n            };\n            img = null;\n        } else if (index > 0) {\n            this.setState(Object.assign({}, this.state, { currPic: index - 1 }));\n            console.log(this.state.currPic);\n        }\n\n        const current = document.getElementById(`nav-${this.state.currPic}`);\n        this.scrollToView(current);\n    }\n\n    /**\n     * \n     * 显示 / 隐藏切换图片按钮\n     * \n     * @params [boolean] value [是否显示： true - 显示 | false - 隐藏]\n     */\n    showArrow = (value) => {\n        this.setState(Object.assign({}, this.state, { showArrow: value }));\n    }\n\n\n    /**\n     * \n     * 滚动效果\n     */\n    scrollToView(el) {\n        if (!el) {\n            return;\n        }\n        console.log('to');\n        const parent = document.getElementById('parent-box');\n        const p = (el.offsetLeft - parent.scrollLeft) + 300;\n        const delta = p - (document.documentElement.clientWidth / 2);\n        parent.scrollLeft += delta;\n    }\n\n    /** 下一个图集 */\n    handleNextGallery() {\n        const nexGalleryId = this.props.relateNews[0].id;\n        console.log(this.props);\n        // window.open(`/gallery/${nexGalleryId}`);\n        // window.open('/gallery/2fa5acdfac6c5e79a89d66b65399c475');\n        // this.props.history.push(`/gallery/${nexGalleryId}`);\n        window.location.href = `/gallery/${nexGalleryId}`;\n        // this.props.history.push('/gallery/2fa5acdfac6c5e79a89d66b65399c475');\n        // window.location.reload();\n    }\n}\n\nexport default Gallery;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Row, Col } from 'antd';\nimport moment from 'moment';\nimport { Scrollbars } from 'react-custom-scrollbars';\n\nimport HelmetSEO from 'Components/HelmetSEO';\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport {\n    safeLens, urlJSON, getDetailRoute, ENTITY_TYPE\n} from 'Utils/utils';\n\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\n/**\n * PageName: 视频播放详情页\n * \n * Author: lishihua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    getNewsContent: Actions.getNewsContent.request,\n    getRecommendList: Actions.getRecommendList.request,\n})\nclass Video extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getNewsContent({\n                sid: this.props.match.params.id\n            });\n        }\n    }\n\n    handleChangeNews(ele) {\n        const { newsContent } = this.props;\n        const { id, objectType, contentType } = ele;\n        const route = getDetailRoute({\n            source: ele,\n            objectType,\n            contentType,\n            sid: id,\n            channelId: newsContent.channelPK\n        });\n        this.props.history.push(route);\n        switch (`${objectType}`) {\n            case '0':\n                if (contentType == 1 && this.props.match.params.id != id) {\n                    this.props.getNewsContent({\n                        sid: id\n                    });\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    /** 视频播放结束 */\n    onEnd = () => {\n        console.log('end');\n    }\n\n\n    render() {\n        const {\n            channelInfo = {},\n            newsContent,\n            classificationName,\n            relateNews,\n            moreRelateNews\n        } = this.props;\n        const { coverUrl } = newsContent;\n        const videoUrl = urlJSON(safeLens(newsContent, ['video', 'playUrl']));\n\n        const helmetData = {\n            title: [newsContent.title, channelInfo.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsContent.keyword,\n            description: newsContent.summary\n        };\n        return (\n            <div className={[styles['video-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={styles['video-content-top']}>\n                    <div id={'video-detail'} className={[styles['video-detail-box'], responsiveStyles.content].join(' ')} >\n                        <div className={responsiveStyles['video-box']}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                {videoUrl && typeof window === 'object' &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={coverUrl}\n                                        videoUrl={videoUrl}\n                                        onEnd={this.onEnd}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['relative-video-box']].join(' ')} >\n                                <div className={styles['fix-position']}>\n                                    <h3>{classificationName}</h3>\n                                </div>\n                                <Scrollbars autoHide={true} autoHideTimeout={500}>\n                                    <ul>\n                                        {relateNews.map((ele, i) => (\n                                            <li onClick={() => this.handleChangeNews(ele)} key={i}>\n                                                <div className={styles['img-box']}>\n                                                    <ImageLoad src={ele.coverUrl} />\n                                                </div>\n                                                <div\n                                                    className={[\n                                                        styles['text-box'],\n                                                        ele.id == this.props.match.params.id && styles.active\n                                                    ].join(' ')}\n                                                >\n                                                    <p>{ele.title}</p>\n                                                    <p>{moment(ele.releasedAt).format('YYYY-MM-DD HH:mm')}</p>\n                                                </div>\n                                            </li>\n                                        ))}\n                                    </ul>\n                                </Scrollbars>\n                            </div>\n                        </div>\n                        <div className={styles['video-info']}>\n                            <div className={styles['video-title']}>{newsContent.title}</div>\n                            <div>{moment(newsContent.releasedAt).format('YYYY-MM-DD HH:mm')}</div>\n                        </div>\n                    </div>\n                </div>\n\n                {moreRelateNews?.list?.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>更多精彩</p>\n                        <Row>\n                            <Col span={24} type=\"flex\">\n                                <CardFlow\n                                    flowData={moreRelateNews.list}\n                                    displayType={moreRelateNews.displayType}\n                                    isMulti={true}\n                                    extra={{\n                                        entityType: ENTITY_TYPE.DATA_JSON,\n                                        channelId: this.props.newsContent?.channelPK,\n                                        blank: false\n                                    }}\n                                />\n                            </Col>\n                        </Row>\n                    </div>\n                }\n            </div>\n        );\n    }\n}\nexport default Video;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\n\nimport { Row, Col } from 'antd';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\n\nimport { NEWS_ROUTE } from 'Constants/type';\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport { safeLens, urlJSON } from 'Utils/utils';\n\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\n/**\n * PageName: 新闻详情-电视节目播放页\n * \n * Author: lishihua \n * use: [ ]\n * \n */\n@connect(selectors, {\n    getNewsContent: Actions.getNewsContent.request,\n    getRecommendList: Actions.getRecommendList.request\n})\nclass Tv extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getNewsContent({\n                sid: this.props.match.params.id\n            });\n        }\n    }\n\n    render() {\n        const {\n            newsContent, classificationName, columnVideo, moreColumnVideo\n        } = this.props;\n        const poster = newsContent.coverUrl;\n        const videoUrl = urlJSON(safeLens(newsContent, ['video', 'playUrl']));\n\n        const helmetData = {\n            title: [newsContent.title, classificationName, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsContent.keyword,\n            description: newsContent.summary\n        };\n        return (\n            <div className={[styles['tv-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={styles['tv-content-top']}>\n                    <div id={'tv-detail'} className={[responsiveStyles.content, styles['tv-detail-box']].join(' ')} >\n                        <div className={responsiveStyles['video-box']}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                {videoUrl && typeof window === 'object' &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={poster}\n                                        videoUrl={videoUrl}\n                                        onEnd={this.onEnd}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['relative-tv-box']].join(' ')} >\n                                <div className={styles['fix-position']}>\n                                    <h3>\n                                        <a href={`/tvColumn/${newsContent.tvColumnPk}`}>{classificationName}</a>\n                                    </h3>\n                                </div>\n                                <Scrollbars autoHide={true} autoHideTimeout={500}>\n                                    <ul>\n                                        {columnVideo.map((ele, i) => {\n                                            const data = ele.data ? JSON.parse(ele.data) : {};\n                                            return (\n                                                <li onClick={() => this.handleChangeNews(data)} key={i}>\n                                                    <div className={styles['img-box']}>\n                                                        <ImageLoad src={data.coverUrl} />\n                                                    </div>\n                                                    <div\n                                                        className={[\n                                                            styles['text-box'],\n                                                            data.id == this.props.match.params.id && styles.active\n                                                        ].join(' ')}\n                                                    >\n                                                        <p>{data.title}</p>\n                                                        <p>{moment(data.releasedAt).format('YYYY-MM-DD HH:mm')}</p>\n                                                    </div>\n                                                </li>\n                                            );\n                                        })}\n                                    </ul>\n                                </Scrollbars>\n                            </div>\n                        </div>\n                        <div className={styles['tv-info']}>\n                            <div className={styles['tv-title']}>{newsContent.title}</div>\n                            <div>{moment(newsContent.releasedAt).format('YYYY-MM-DD HH:mm')}</div>\n                        </div>\n                    </div>\n                </div>\n\n                {moreColumnVideo?.list?.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>更多精彩</p>\n                        <Row>\n                            <Col span={24} type=\"flex\">\n                                <CardFlow\n                                    flowData={moreColumnVideo.list}\n                                    displayType={moreColumnVideo.displayType}\n                                    isMulti={true}\n                                    extra={{ blank: false }}\n                                />\n                            </Col>\n                        </Row>\n                    </div>\n                }\n            </div>\n        );\n    }\n\n    handleChangeNews(ele) {\n        console.log('columnVideo', ele);\n        const { contentType, id } = ele;\n        this.props.history.push(`/${NEWS_ROUTE[contentType]}/${id}`);\n        if (contentType == 3 && this.props.match.params.id != id) {\n            this.props.getNewsContent({\n                sid: id\n            });\n        }\n    }\n\n    /** 视频播放结束 */\n    onEnd = () => {\n        console.log('end');\n    }\n}\nexport default Tv;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Row, Icon } from 'antd';\nimport * as R from 'ramda';\n\nimport {\n    safeLens, urlJSON, urlParams, getDetailRoute\n} from 'Utils/utils';\nimport CardFlow from 'Components/CardFlow';\nimport HelmetSEO from 'Components/HelmetSEO';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport VideoPlay from 'Components/VideoPlay';\n\nimport * as GlobalActions from 'Global/actions';\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\nconst PAGE_SIZE = 30;\n\n/**\n * PageName: 专题剧集播放详情页\n * \n * Author: lishihua \n * use: [ ]\n * \n */\n@connect(selectors, {\n    addNewsCount: GlobalActions.addNewsCount.request,\n    getNewsTopic: Actions.getNewsTopic.request,\n    getNewsTopicMemberList: Actions.getNewsTopicMemberList.request,\n    getChannelNewsList: Actions.getChannelNewsList.request\n})\nclass SeriesVideo extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currentIndex: 0,\n            currentVideoIndex: 0,\n            currentVideoDetail: {}\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount = async () => {\n        const { params } = this.props.match;\n        if (!this.props.isPrefetch) {\n            this.props.getNewsTopic({\n                topicId: params.id\n            });\n            await new Promise((resolve, reject) => {\n                this.props.getNewsTopicMemberList({\n                    topicId: params.id\n                }, resolve, reject);\n            });\n\n            const { channelId } = urlParams();\n            if (channelId) {\n                this.props.getChannelNewsList({\n                    channelId,\n                    beginScore: 0,\n                    pageSize: 7\n                });\n            }\n        }\n        this.handleInitSeries();\n    }\n\n    shouldComponentUpdate(nextProps, nextState) {\n        /** 选集切换时记录浏览量 */\n        const oldDetail = this.state.currentVideoDetail;\n        const nextDetail = nextState.currentVideoDetail;\n        if (oldDetail && nextDetail && oldDetail.id != nextDetail.id) {\n            this.props.addNewsCount({\n                id: nextState.currentVideoDetail.id,\n                countType: 'readCount'\n            });\n        }\n        return true;\n    }\n\n    /** \n     * 初始化播放\n     * episodeId [支持选集播放]\n     */\n    handleInitSeries = () => {\n        const { videoId } = urlParams();\n        let episodeId = 1;\n        if (videoId) {\n            const { topicMemberList } = this.props;\n            episodeId = topicMemberList.findIndex(_ => _.id == videoId) + 1;\n        } else {\n            const { params } = this.props.match;\n            episodeId = params.episodeId || 1;\n        }\n        const { newsTopicMemberList = [], total } = this.props;\n        if (episodeId > total) {\n            episodeId = 1;\n        }\n        const section = Math.ceil(episodeId / PAGE_SIZE - 1);\n        const sectionList = newsTopicMemberList[section];\n        const i = episodeId % PAGE_SIZE - 1;\n        this.handleChangeSeries(section);\n        this.handleChangeVideo(sectionList[i], episodeId - 1);\n    }\n\n    /** 滚动效果 */\n    scrollToView = (el) => {\n        if (!el) {\n            return;\n        }\n        console.log('to');\n        const parent = document.getElementById('parent-box');\n        const p = (el.offsetLeft - 130);\n        console.log(p);\n        if (p > 0) {\n            parent.scrollLeft = p;\n            return;\n        }\n        parent.scrollLeft = 0;\n    }\n\n    /**\n     * 切换选集分段列表\n     * @param {*} index \n     */\n    handleChangeSeries = (index) => {\n        this.setState({\n            currentIndex: index, // 当前的选集分段位置\n        });\n        const current = document.getElementById(`nav-${index}`);\n        this.scrollToView(current);\n    }\n\n    /**\n     * \n     * 切换播放视频（选集）\n     */\n    handleChangeVideo = (ele = {}, index) => {\n        const { channelId } = urlParams();\n        const { params } = this.props.match;\n        this.setState({\n            currentVideoIndex: index,\n            currentVideoDetail: ele\n        }, () => {\n            const path = getDetailRoute({\n                objectType: 1,\n                contentType: 0,\n                sid: params.id,\n                episodeId: index + 1,\n                channelId\n            });\n            this.props.history.replace(path);\n        });\n    }\n\n    render() {\n        const { currentVideoDetail } = this.state;\n        const {\n            newsTopicDetail = {}, newsTopicMemberList = [], channelNewsList = []\n        } = this.props;\n        const { currentIndex, currentVideoIndex } = this.state;\n        const videoUrl = urlJSON(safeLens(currentVideoDetail, ['videoUrl']));\n\n        const helmetData = {\n            title: [newsTopicDetail.title, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsTopicDetail.keywords,\n            description: newsTopicDetail.summary\n        };\n        return (\n            <div className={[styles['series-video-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={styles['video-content-top']}>\n                    <div className={[styles['video-detail-box'], responsiveStyles.content].join(' ')} >\n                        <div className={[responsiveStyles['video-box'], styles['video-box']].join(' ')} >\n                            <div className={responsiveStyles['video-box-left']}>\n                                {videoUrl &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={currentVideoDetail?.coverUrl}\n                                        videoUrl={videoUrl}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['selections-box']].join(' ')} >\n                                <h3>{newsTopicDetail.title}</h3>\n                                <p className={styles['selections-count']}>\n                                    {R.flatten(newsTopicMemberList).length >= newsTopicDetail.memberNum\n                                        ? `${newsTopicDetail.memberNum}集全`\n                                        : `已更新至第${R.flatten(newsTopicMemberList).length}集`\n                                    }\n                                </p>\n                                {/* 选集分段 */}\n                                <div className={styles['list-box']} id='parent-box'>\n                                    <ul key={1}>\n                                        {newsTopicMemberList.map((ele, index) => (\n                                            <li\n                                                id={`nav-${index}`}\n                                                key={index}\n                                                onClick={() => this.handleChangeSeries(index)}\n                                                className={currentIndex == index && styles['curr-style'] || ''}\n                                            >\n                                                {`${index > 0 ? index * PAGE_SIZE + 1 : 1}\n                                                -\n                                                ${index * PAGE_SIZE + (ele.length < PAGE_SIZE ? ele.length : 30)}`}\n                                                {currentIndex == index &&\n                                                    <span className={styles['position-line']}></span>\n                                                }\n                                            </li>\n                                        ))}\n                                    </ul>\n                                </div>\n                                {/* 选集 */}\n                                <ul style={{ marginLeft: 4 }} key={2}>\n                                    {newsTopicMemberList && newsTopicMemberList[currentIndex]?.map((ele, i) => {\n                                        const index = currentIndex * PAGE_SIZE + i;\n                                        return (\n                                            <li\n                                                className={styles['number-box']}\n                                                key={i}\n                                                style={{\n                                                    backgroundColor: currentVideoIndex == index ? 'rgba(0,0,0,1)' : ''\n                                                }}\n                                            >\n                                                {currentVideoIndex != index &&\n                                                    <div\n                                                        className={styles['text-box']}\n                                                        onClick={() => this.handleChangeVideo(ele, index)}\n                                                    >\n                                                        {index + 1}\n                                                    </div>\n                                                }\n                                                {currentVideoIndex == index &&\n                                                    <div className={styles['icon-box']}>\n                                                        <Icon type='caret-left' theme='filled' style={{ color: '#F12D37' }} />\n                                                    </div>\n                                                }\n                                            </li>\n                                        );\n                                    })}\n                                </ul>\n                            </div>\n                        </div>\n                        <div className={styles['video-title']}>\n                            {currentVideoDetail && currentVideoDetail.title || newsTopicDetail.summary}\n                        </div>\n                    </div>\n                </div>\n\n                {channelNewsList?.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>更多精彩</p>\n                        <CardFlow\n                            flowData={channelNewsList}\n                            displayType={1}\n                            isMulti={true}\n                            extra={{ blank: false }}\n                        />\n                    </div>\n                }\n            </div>\n        );\n    }\n}\n\nexport default SeriesVideo;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\n\n/**\n * PageName: 外链跳转页\n * 在管理后台【新建发布】那里发布的外链\n * 目的是跟文章、视频一样去记录历史\n * Author: xuchunhua\n * use: [ ]\n */\n@connect(selectors, {\n    getNewsContent: Actions.getNewsContent.request,\n})\nclass Articles extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            fixed: false,\n            fixedBottom: false\n        };\n        this.moreBox = undefined;\n        this.articleBox = undefined;\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentWillMount() {\n        document.getElementById('root').style.display = 'none';\n    }\n\n    async componentDidMount() {\n        if (!this.props.isPrefetch) {\n            await new Promise((resolve, reject) => {\n                this.props.getNewsContent({\n                    sid: this.props.match.params.id\n                }, resolve, reject);\n            });\n        }\n        const { newsContent } = this.props;\n        const { crawlUrl = '/' } = newsContent;\n        window.location.replace(crawlUrl);\n    }\n\n    render() {\n        return (\n            <div></div>\n        );\n    }\n}\n\nexport default Articles;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport moment from 'moment';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\n\nimport * as GlobalActions from 'Global/actions';\nimport prefetchSaga from '../prefetch';\nimport selectors from '../selectors';\nimport * as Actions from '../actions';\nimport styles from './index.less';\n\n/**\n * PageName: 专题播放详情页\n * Author: xuchunhua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    addNewsCount: GlobalActions.addNewsCount.request,\n    getNewsTopic: Actions.getNewsTopic.request,\n    getNewsTopicColumn: Actions.getNewsTopicColumn.request\n})\nclass Topic extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            // 当前播放的视频栏目\n            columnWithPlay: {},\n            // 当前播放的视频\n            currentVideo: {},\n            // 查看全部\n            showAll: {}\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount = async () => {\n        const { id } = this.props.match.params;\n        if (!this.props.isPrefetch) {\n            this.props.getNewsTopic({ topicId: id });\n            await new Promise((resolve, reject) => {\n                this.props.getNewsTopicColumn({ topicId: id }, resolve, reject);\n            });\n        }\n        const { newsTopicColumn } = this.props;\n        const [columnWithPlay] = newsTopicColumn.filter((item) => item.type == 3);\n        const [currentVideo = {}] = columnWithPlay?.memberList || [];\n        this.setState({ currentVideo, columnWithPlay });\n    }\n\n    shouldComponentUpdate(nextProps, nextState) {\n        /** 切换视频时记录浏览量 */\n        const oldDetail = this.state.currentVideo;\n        const nextDetail = nextState.currentVideo;\n        if (oldDetail && nextDetail && oldDetail.id != nextDetail.id) {\n            this.props.addNewsCount({\n                id: nextState.currentVideo.id,\n                countType: 'readCount'\n            });\n        }\n        return true;\n    }\n\n    getSize = () => {\n        const { screenSize } = this.props;\n        switch (screenSize) {\n            case 'xs':\n                return 8;\n            case 'xl':\n                return 12;\n            default:\n                return 14;\n        }\n    }\n\n    /** 右侧栏切换视频 */\n    handleChangeVideo = (data, i) => {\n        const { currentVideo } = this.state;\n        if (currentVideo.id == data.id) {\n            return;\n        }\n        this.setState({ currentVideo: data });\n    }\n\n    /** 解析视频地址 */\n    handleAnalysisVideoUrl = () => {\n        const { currentVideo } = this.state;\n        const { videoUrl } = currentVideo;\n        try {\n            const { sd, hd, ud } = JSON.parse(videoUrl);\n            return ud || hd || sd;\n        } catch (error) {\n            return undefined;\n        }\n    }\n\n    handlePlayEnd = () => {\n        const { columnWithPlay, currentVideo } = this.state;\n        const index = columnWithPlay?.memberList?.findIndex(_ => _.id == currentVideo.id);\n        const nextIndex = columnWithPlay?.memberList?.length == index + 1 ? 0 : index + 1;\n        this.setState({ currentVideo: columnWithPlay?.memberList[nextIndex] });\n    }\n\n    /** 查看全部 */\n    handleToggleShowAll = (id) => {\n        const { showAll } = this.state;\n        this.setState({ showAll: { ...showAll, [id]: !showAll[id] } });\n    }\n\n    render() {\n        const {\n            columnWithPlay, currentVideo, showAll\n        } = this.state;\n        const size = this.getSize();\n        const {\n            newsTopicDetail, newsTopicColumn\n        } = this.props;\n        const videoUrl = this.handleAnalysisVideoUrl();\n        const helmetData = {\n            title: [newsTopicDetail.title, '荔枝网'].filter(Boolean).join('-'),\n            keywords: newsTopicDetail.keywords,\n            description: newsTopicDetail.summary\n        };\n        return (\n            <div className={[responsiveStyles.layout, styles.topic].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div\n                    className={styles['topic-bg']}\n                    style={newsTopicDetail?.backgroundUrl && {\n                        backgroundImage: `url(${newsTopicDetail?.backgroundUrl})`,\n                        backgroundSize: 'cover'\n                    }}\n                >\n                </div>\n                <div className={[responsiveStyles.content, styles.content].join(' ')} >\n                    {newsTopicDetail?.summary &&\n                        <div className={styles.summary}>{newsTopicDetail.summary}</div>\n                    }\n                    {columnWithPlay?.memberList?.length > 0 &&\n                        <div className={[responsiveStyles['video-box'], styles['video-box']].join(' ')}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                <div className={responsiveStyles.video}></div>\n                                {videoUrl &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={currentVideo.coverUrl}\n                                        videoUrl={videoUrl}\n                                        title={currentVideo.title}\n                                        onEnd={this.handlePlayEnd}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['video-box-right']].join(' ')}>\n                                <div className={styles['fix-position']}>\n                                    <h3>{columnWithPlay?.title}</h3>\n                                </div>\n                                <Scrollbars autoHide={true} autoHideTimeout={500}>\n                                    <ul>\n                                        {columnWithPlay?.memberList?.map((ele, i) => (\n                                            <li onClick={() => { this.handleChangeVideo(ele); }} key={i}>\n                                                <div className={styles['bg-color']}></div>\n                                                <div className={styles['img-box']}>\n                                                    <ImageLoad src={ele.coverUrl} />\n                                                </div>\n                                                <div\n                                                    className={[\n                                                        styles['text-box'],\n                                                        ele.id == currentVideo.id && styles.active\n                                                    ].join(' ')}\n                                                >\n                                                    <p>{ele.title}</p>\n                                                    <p>{moment(ele.releasedAt).format('YYYY-MM-DD HH:mm:ss')}</p>\n                                                </div>\n                                            </li>\n                                        ))}\n                                    </ul>\n                                </Scrollbars>\n                            </div>\n                        </div>\n                    }\n                    <div className={styles['topic-column-list']}>\n                        {newsTopicColumn?.map((column, i) => column.id != columnWithPlay?.id && (\n                            <div className={styles['topic-column']} key={i}>\n                                {newsTopicColumn.length > 1 && <h3>{column.title}</h3>}\n                                {newsTopicColumn.length > 1 && !showAll[column.id] && column.memberList.length > size &&\n                                    <div\n                                        className={styles['btn-show-all']}\n                                        onClick={() => { this.handleToggleShowAll(column.id); }}\n                                    >\n                                        查看全部\n                                    </div>\n                                }\n                                <CardFlow\n                                    flowData={(newsTopicColumn.length == 1 || showAll[column.id]) ? column.memberList : column.memberList.slice(0, size)}\n                                    displayType={0}\n                                    isMulti={true}\n                                />\n                            </div>\n                        ))}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default Topic;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Row, Col, Icon } from 'antd';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport HelmetSEO from 'Components/HelmetSEO';\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\nimport moment from 'moment';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport { colSpan } from 'Constants/antProps';\n\nimport { urlJSON, ENTITY_TYPE } from 'Utils/utils';\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\nimport { weekday } from './enum';\n\n/**\n * PageName: 看电视直播\n * \n * Author: lishihua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    getTvChannelDetail: Actions.getTvChannelDetail.request,\n    getTvChannelList: Actions.getTvChannelList.request,\n    getTvMenuList: Actions.getTvMenuList.request,\n    getTvColumn: Actions.getTvColumn.request,\n})\nclass TvChannelDetail extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            currentIndex: 3,\n            currentVideoIndex: 0,\n            endAt: moment().add(3, 'days').format('YYYY-MM-DD'),\n            beginAt: moment().subtract(3, 'days').format('YYYY-MM-DD'),\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount = async () => {\n        if (!this.props.isPrefetch) {\n            this.props.getTvChannelDetail({ // 获取电视频道详情\n                tvChannelPk: this.props.match.params.id\n            });\n            this.props.getTvChannelList(); // 获取电视频道列表\n\n            await this.props.getTvMenuList({ // 获取电视节目菜单\n                tvChannelPk: this.props.match.params.id,\n                beginAt: this.state.beginAt,\n                endAt: this.state.endAt,\n            });\n            this.props.getTvColumn({ // 获取更多精彩\n                tvChannelPk: this.props.match.params.id\n            });\n        }\n\n        setTimeout(() => {\n            // 日期定位到今天\n            this.handleChangeDate(this.state.currentIndex);\n            // 定位正在播放的位置\n\n            if (this.refs.scrollBox && this.refs.isPlaying) {\n                this.refs.scrollBox.scrollTop = this.refs.isPlaying.offsetTop - 130;\n            }\n        }, 500);\n    }\n\n    imageJSON(str) {\n        if (typeof str == 'string') {\n            try {\n                const { logo, clogo } = JSON.parse(str);\n                return logo || clogo;\n            } catch (e) {\n                // console.log(e);\n                return str;\n            }\n        }\n        return '';\n    }\n\n    render() {\n        const {\n            tvChannelDetail, tvChannelList, tvColumn, dateDataListWithLiveMenu\n        } = this.props;\n\n        const currentTime = moment().valueOf();\n        const { currentIndex } = this.state;\n        const currentMenu = dateDataListWithLiveMenu[currentIndex] && dateDataListWithLiveMenu[currentIndex].tvMenu;\n\n        const currentChannel = this.props.match.params.id;\n\n        const playUrl = tvChannelDetail.playUrl && urlJSON(tvChannelDetail.playUrl);\n        const avatarUrl = tvChannelDetail.avatarUrl && this.imageJSON(tvChannelDetail.avatarUrl);\n\n        const helmetData = {\n            title: [tvChannelDetail.name, '荔枝网'].filter(Boolean).join('-'),\n            keywords: tvChannelDetail.keyword,\n            description: tvChannelDetail.slogan\n        };\n        return (\n            <div className={[styles['tv-channel-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={styles['tv-channel-content-top']}>\n                    <div className={[styles['tv-channel-detail-box'], responsiveStyles.content].join(' ')} >\n                        <div className={responsiveStyles['video-box']}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                {typeof window == 'object' && playUrl &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={tvChannelDetail.coverUrl}\n                                        videoUrl={playUrl}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['channel-live-box']].join(' ')} >\n                                <div className={styles['fix-position']}>\n                                    {/* 电视详情 */}\n                                    <div className={styles['channel-summery']}>\n                                        <span className={styles['head-img']}>\n                                            <ImageLoad src={avatarUrl} />\n                                        </span>\n                                        <div className={styles['summery-text']}>\n                                            <p>{tvChannelDetail.name}</p>\n                                            <p>{tvChannelDetail.slogan}</p>\n                                        </div>\n                                    </div>\n                                    {/* 节目单时间 */}\n                                    <div style={{ position: 'relative' }}>\n                                        <span\n                                            className={[\n                                                styles['switch-btn-L'],\n                                                currentIndex == 0 && styles.disabled\n                                            ].join(' ')}\n                                            onClick={() => this.handleChangeDate(currentIndex, 'pre')}\n                                        />\n                                        <span\n                                            className={[\n                                                styles['switch-btn-R'],\n                                                currentIndex == dateDataListWithLiveMenu.length - 1 && styles.disabled\n                                            ].join(' ')}\n                                            onClick={() => this.handleChangeDate(currentIndex, 'next')}\n                                        />\n                                        <div className={styles['date-list']} id='parent-box' ref=\"parentBox\">\n                                            <ul>\n                                                {dateDataListWithLiveMenu.map((ele, index) => (\n                                                    <li\n                                                        id={`nav-${index}`}\n                                                        ref={`nav${index}`}\n                                                        onClick={() => this.handleChangeDate(index)}\n                                                        className={currentIndex == index && styles['curr-style'] || ''}\n                                                        key={`nav-${index}`}\n                                                    >\n                                                        <span\n                                                            className={styles['text-day']}\n                                                            style={{ fontSize: index == 3 ? '14px' : '12px' }}\n                                                        >\n                                                            {index != 3 ? weekday[ele.day] : ele.day}\n                                                        </span>\n                                                        <br></br>\n                                                        {(index != 3) &&\n                                                            <span className={styles['text-time']}>\n                                                                {ele.dateTime}\n                                                            </span>\n                                                        }\n                                                        {currentIndex == index &&\n                                                            <span className={styles['position-line']}></span>\n                                                        }\n                                                    </li>\n                                                ))}\n                                            </ul>\n                                        </div>\n                                    </div>\n                                </div>\n                                <Scrollbars\n                                    ref='scrollBox'\n                                    autoHide={true}\n                                    autoHideTimeout={500}\n                                >\n                                    <ul className={styles['live-list-box']}>\n                                        {currentMenu?.length > 0\n                                            ? currentMenu.map((ele, index) => {\n                                                const isPlaying = ele.beginAt <= currentTime && currentTime < ele.endAt;\n                                                return (\n                                                    <li\n                                                        className={currentTime < ele.beginAt && styles.disabled || ''}\n                                                        ref={isPlaying ? 'isPlaying' : ''}\n                                                        key={index}\n                                                    >\n                                                        <div className={styles.time}>{moment(ele.beginAt).format('HH:mm')}</div>\n                                                        <div className={styles.title}>{ele.name}</div>\n                                                        {isPlaying &&\n                                                            <div className={styles['playing-sign']}>\n                                                                正在播出\n                                                            </div>\n                                                        }\n                                                    </li>\n                                                );\n                                            })\n                                            : <div className={styles['none-data']}>暂无数据</div>\n                                        }\n                                    </ul>\n                                </Scrollbars>\n                            </div>\n                        </div>\n                        <div className={styles['channel-list']}>\n                            <ul>\n                                <Row gutter={24}>\n                                    {tvChannelList.map((ele, index) => (\n                                        <Col {...colSpan} key={index}>\n                                            <li\n                                                className={currentChannel == ele.pk ? styles['current-channel'] : ''}\n                                                onClick={() => this.handleChangeId(ele)}\n                                            >\n                                                {ele.name}\n                                            </li>\n                                        </Col>\n                                    ))}\n                                </Row>\n                            </ul>\n                        </div>\n                    </div>\n                </div>\n                {tvColumn && tvColumn.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>精彩回顾</p>\n                        <CardFlow\n                            flowData={tvColumn}\n                            displayType={0}\n                            isMulti={true}\n                            extra={{\n                                entityType: ENTITY_TYPE.DATA_JSON,\n                                customLink: this.handleRenderLink\n                            }}\n                        />\n                    </div>\n                }\n            </div>\n        );\n    }\n\n    /**\n     * 切换日期列表\n     * @param {*} index \n     */\n    handleChangeDate(index, type) {\n        const { dateDataListWithLiveMenu } = this.props;\n        if (index == 0 && type == 'pre' || index == dateDataListWithLiveMenu.length - 1 && type == 'next') {\n            return;\n        }\n        const nexIndex = type == 'next' ? index + 1 : index - 1;\n        this.setState({\n            currentIndex: type ? nexIndex : index\n        });\n        const current = type ? this.refs[`nav${nexIndex}`] : this.refs[`nav${index}`];\n        console.log(current);\n        this.scrollToView(current);\n        // 日期切换时，始终保持节目清单滚动位置为0，或者为正在播放的清单位置\n        if (index == 3) {\n            setTimeout(() => {\n                if (this.refs.scrollBox && this.refs.isPlaying) {\n                    this.refs.scrollBox.scrollToTop(this.refs.isPlaying.offsetTop - 145);\n                }\n            }, 100);\n            return;\n        }\n        this.refs.scrollBox.scrollToTop();\n    }\n\n    /**\n     * \n     * 滚动效果\n     */\n    scrollToView(el) {\n        if (!el) {\n            return;\n        }\n        const parent = this.refs.parentBox;\n        console.log(el.offsetLeft, parent.offsetWidth, parent);\n        const p = (el.offsetLeft - parent.scrollLeft - 88);\n        console.log(p);\n        if (el.offsetLeft > 0) {\n            parent.scrollLeft += p;\n            return;\n        }\n        parent.scrollLeft = 0;\n    }\n\n    /**\n     * \n     * 切换播放视频（选集）\n     */\n    handleChangeVideo(index) {\n        this.setState({\n            currentVideoIndex: index\n        });\n    }\n\n\n    /**\n     * \n     * 切换频道（选集）\n     */\n    handleChangeId(ele) {\n        // window.open(`/tvChannelDetail/${ele.pk}`);\n        window.location.href = (`/tvChannelDetail/${ele.pk}`);\n        // this.props.history.push(`/tvChannelDetail/${ele.pk}`);\n    }\n\n    /** 解析链接 */\n    handleRenderLink = (channelNews) => `/tvColumnDetail/${channelNews.pk}`;\n}\n\nexport default TvChannelDetail;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Row, Col } from 'antd';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport moment from 'moment';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport { urlJSON, safeLens } from 'Utils/utils';\n\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\nimport ImageLoad from 'Components/ImageLoad';\n\nimport * as GlobalActions from 'Global/actions';\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\n/**\n * PageName: 电视栏目拆条回顾\n * \n * Author: lishihua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    addNewsCount: GlobalActions.addNewsCount.request,\n    getColumnVideoList: Actions.getColumnVideoList.request,\n    setVideoDetail: Actions.setVideoDetail\n})\nclass TvColumnDetail extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            videoDetail: {}\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    async componentDidMount() {\n        if (!this.props.isPrefetch) {\n            const res = this.props.getColumnVideoList({\n                tvColumnPk: this.props.match.params.id,\n                // beginScore: this.props.beginScore\n                beginScore: 0,\n                pageSize: 10\n            });\n        }\n    }\n\n    shouldComponentUpdate(nextProps) {\n        /** 选集切换时记录浏览量 */\n        const oldDetail = this.props.videoDetail;\n        const nextDetail = nextProps.videoDetail;\n        if (oldDetail && nextDetail && oldDetail.id != nextDetail.id) {\n            this.props.addNewsCount({\n                id: nextProps.videoDetail.id,\n                countType: 'readCount'\n            });\n        }\n        return true;\n    }\n\n    render() {\n        const {\n            columnVideoList, relateNews, videoDetail, nameText\n        } = this.props;\n        const videoUrl = urlJSON(safeLens(videoDetail, ['videoUrl']));\n        const poster = videoDetail.coverUrl;\n        return (\n            <div className={[styles['column-video-content'], responsiveStyles.layout].join(' ')}>\n                <div className={styles['video-content-top']}>\n                    <div id={'video-detail'} className={[styles['video-detail-box'], responsiveStyles.content].join(' ')} >\n                        <div className={responsiveStyles['video-box']}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                {videoUrl && typeof window === 'object' &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={poster}\n                                        videoUrl={videoUrl}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['relative-video-box']].join(' ')} >\n                                <div className={styles['fix-position']}>\n                                    <h3>\n                                        <a href={`/tvColumn/${this.props.match.params.id}`}>{nameText || videoDetail.title}</a>\n                                    </h3>\n                                </div>\n                                <Scrollbars autoHide={true} autoHideTimeout={500}>\n                                    <ul>\n                                        {columnVideoList && columnVideoList.map((ele, i) => {\n                                            const video = ele.data ? JSON.parse(ele.data) : '';\n                                            return (\n                                                <li onClick={() => this.handleChangeNews(video)} key={i}>\n                                                    <div className={styles['img-box']}>\n                                                        <ImageLoad src={video.coverUrl} />\n                                                    </div>\n                                                    <div\n                                                        className={[\n                                                            styles['text-box'],\n                                                            video.id == videoDetail.id && styles.active\n                                                        ].join(' ')}\n                                                    >\n                                                        <p>{video.title}</p>\n                                                        <p>{moment(video.releasedAt).format('YYYY-MM-DD HH:mm:ss')}</p>\n                                                    </div>\n                                                </li>\n                                            );\n                                        })}\n                                    </ul>\n                                </Scrollbars>\n                            </div>\n                        </div>\n                        <div className={styles['video-title']}>{videoDetail.title || videoDetail.preSubTitle}</div>\n                    </div>\n                </div>\n                {relateNews && relateNews.length > 0 &&\n                    <div className={[styles['more-box'], responsiveStyles.content].join(' ')}>\n                        <p className={styles['text-more']}>更多精彩</p>\n                        <Row>\n                            <Col span={24} type=\"flex\">\n                                <CardFlow\n                                    flowData={relateNews}\n                                    displayType={0}\n                                    isMulti={true}\n                                    extra={{ blank: false }}\n                                />\n                            </Col>\n                        </Row>\n                    </div>\n                }\n            </div>\n        );\n    }\n\n    handleChangeNews(data) {\n        this.props.setVideoDetail(data);\n    }\n}\n\nexport default TvColumnDetail;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Row, Col } from 'antd';\nimport moment from 'moment';\nimport { Scrollbars } from 'react-custom-scrollbars';\n\nimport responsiveStyles from 'Constants/style/responsive.less';\nimport { safeLens, urlJSON, ENTITY_TYPE } from 'Utils/utils';\n\nimport HelmetSEO from 'Components/HelmetSEO';\nimport VideoPlay from 'Components/VideoPlay';\nimport CardFlow from 'Components/CardFlow';\n\nimport prefetchSaga from './prefetch';\nimport selectors from './selectors';\nimport * as Actions from './actions';\nimport styles from './index.less';\n\n// 直播状态\nconst LIVE_STATUS = {\n    5: '直播预告',\n    6: '直播中',\n    7: '直播暂停',\n    8: '直播结束',\n    9: '回顾'\n};\n/**\n * PageName: 视频播放详情页\n * \n * Author: lishihua \n * use: [ ]\n * \n*/\n@connect(selectors, {\n    getLive: Actions.getLive.request\n})\nclass LiveRoom extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    static prefetch = prefetchSaga;\n\n    componentDidMount() {\n        if (!this.props.isPrefetch) {\n            this.props.getLive({\n                id: this.props.match.params.id\n            });\n        }\n    }\n\n    handleChangeNews(ele) {\n    }\n\n    /** 点击卡片 */\n    handleOnClickCard = (channelNews) => {\n    }\n\n    /** 视频播放结束 */\n    onEnd = () => {\n        console.log('end');\n    }\n\n    handleGetPlayUrl = () => {\n        const { status, playUrl = {} } = this.props.liveDetail;\n        const {\n            rtmp, flv, m3u8, mp4\n        } = playUrl;\n        switch (`${status}`) {\n            case '6':\n                return m3u8 || flv || rtmp;\n            case '9':\n                return mp4;\n            default:\n                return undefined;\n        }\n    }\n\n    render() {\n        const {\n            liveDetail\n        } = this.props;\n        const { status, coverUrl } = liveDetail;\n        const playUrl = this.handleGetPlayUrl();\n        const helmetData = {\n            title: [liveDetail.title, '荔枝网'].filter(Boolean).join('-'),\n            keywords: liveDetail.keyword,\n            description: liveDetail.desc\n        };\n        return (\n            <div className={[styles['video-content'], responsiveStyles.layout].join(' ')}>\n                <HelmetSEO {...helmetData} />\n                <div className={styles['video-content-warpper']}>\n                    <div id={'video-detail'} className={[styles['video-detail-box'], responsiveStyles.content].join(' ')} >\n                        <div className={responsiveStyles['video-box']}>\n                            <div className={responsiveStyles['video-box-left']}>\n                                {(status == 6 || status == 9) && playUrl && typeof window === 'object' &&\n                                    <VideoPlay\n                                        className={responsiveStyles.video}\n                                        poster={coverUrl}\n                                        videoUrl={playUrl}\n                                        onEnd={this.onEnd}\n                                    />\n                                }\n                            </div>\n                            <div className={[responsiveStyles['video-box-right'], styles['relative-video-box']].join(' ')} >\n                                <div className={styles['fix-position']}>\n                                    <h3>{liveDetail.title}</h3>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default LiveRoom;\n","import React from 'react';\nimport Helmet from 'react-helmet';\n\nimport styles from './index.less';\n\n/**\n * PageName: 404\n * \n * Author: zhuhuishao \n * use: [ 错误访问跳转页面 ]\n * \n*/\nclass ErrorPage extends React.Component {\n    componentDidMount() {\n        document.body.style.backgroundColor = '#fff';\n    }\n\n    render() {\n        return (\n            <div>\n                <Helmet>\n                    <title>404</title>\n                </Helmet>\n                <div className={styles['erro-bg']}></div>\n                <p className={styles.tips}>糟糕！页面飘走了~<a href=\"/\">返回首页</a></p>\n            </div>\n        );\n    }\n}\n\nexport default ErrorPage;\n","import {\n    FLOW_TYPE, NEWS_ROUTE, TOPIC_ROUTE, LIVE_ROUTE\n} from 'Constants/type';\n\nconst R = require('ramda');\n\nexport const OS = () => {\n    const ua = navigator.userAgent;\n    const isWindowsPhone = /(?:Windows Phone)/.test(ua);\n    const isSymbian = /(?:SymbianOS)/.test(ua) || isWindowsPhone;\n    const isAndroid = /(?:Android)/.test(ua);\n    const isFireFox = /(?:Firefox)/.test(ua);\n    const isChrome = /(?:Chrome|CriOS)/.test(ua);\n    const isTablet = /(?:iPad|PlayBook)/.test(ua) || (isAndroid && !/(?:Mobile)/.test(ua)) || (isFireFox && /(?:Tablet)/.test(ua));\n    const isPhone = /(?:iPhone)/.test(ua) && !isTablet;\n    const isPc = !isPhone && !isAndroid && !isSymbian && !isTablet;\n    return {\n        isTablet,\n        isPhone,\n        isAndroid,\n        isPc\n    };\n};\n\n/**\n * 异步加载js\n * @param {string} url script标签的属性 \n */\nexport const loadScript = (url) => new Promise(resolve => {\n    let script = document.createElement('script');\n    script.setAttribute('type', 'text/javascript');\n    script.onload = function () {\n        script = null;\n        resolve();\n    };\n    script.setAttribute('src', url);\n    document.body.appendChild(script);\n});\n\n/**\n * 计算视频长度\n * \n * @param [number] timeLength [时间长度]\n*/\nexport function calVideoTime(timeLength) {\n    let timeL = '';\n    const h = parseInt(timeLength / 3600, 10);\n    const m = parseInt((timeLength % 3600) / 60, 10);\n    const s = parseInt((timeLength % 3600) % 60, 10);\n    if (h > 0) {\n        timeL = h >= 10 ? (h + ':') : ('0' + h + ':');\n    }\n\n    timeL += m >= 10 ? (m + ':') : ('0' + m + ':');\n    timeL += s >= 10 ? s : '0' + s;\n\n    return timeL;\n}\n\n\n/**\n * 格式化阅读数\n * \n * @param [number] nums [阅读数]\n */\nexport function formatNum(nums) {\n    const _nums = nums.toString();\n    const _splitNum = 3;\n\n    if (_nums.length <= _splitNum) return nums;\n\n    let _result = '';\n\n    const _first = _nums.slice(0, _nums.length % _splitNum);\n    const _after = _nums.slice(_nums.length % _splitNum);\n\n    for (let i = 0, j = 1; i < _after.length; i += 1) {\n        _result += _after[i];\n        if (j % _splitNum == 0) _result += ',';\n        j += 1;\n    }\n\n    _result = _result.slice(0, -1);\n    return _first + ',' + _result;\n}\n\n\n/**\n * 获得视频Url\n * \n * @param [string] videoUrl [url json 字符串]\n * @param [string] quality [输出视频质量： hd | sd]\n*/\nexport function getVideoUrl(videoUrl, quality) {\n    const video = videoUrl && videoUrl != '' ? JSON.parse(videoUrl) : {};\n\n    let videoSourceUrl = '';\n\n    if (video.source && video.source.hd && video.source.sd) {\n        videoSourceUrl = quality == 'sd' ? video.source.sd : video.source.hd;\n    }\n\n    return videoSourceUrl;\n}\n\n\n/**\n * 获得字符串长度\n * \n * @param  [syring] str [目标字符串]\n */\nexport function getStrLength(str) {\n    var len = 0;\n    for (let i = 0; i < str.length; i += 1) {\n        const c = str.substr(i, 1);\n        const ts = escape(c);\n        if (ts.substring(0, 2) == '%u') {\n            len += 2;\n        } else {\n            len += 1;\n        }\n    }\n    return len;\n}\n\n\n/**\n * 裁剪字符串\n * \n * @param [string] str [需要裁剪的字符串]\n * @param [object] cfg [配置参数 example: {len: 裁剪长度,默认10; stuff: 裁剪后的后缀，默认没有}]\n */\nexport function cutStr(str, cfg) {\n    if (!str) return false;\n    const _len = str.length;\n    const len = (cfg && cfg.len) || 10;\n    const stuff = (cfg && cfg.stuff) || '';\n    return str.slice(0, len < _len ? len : _len) + (len < _len ? stuff : '');\n}\n\n\n/**\n * 高亮关键字\n * \n * @param [string] str [目标字符串]\n * @param [string] key [需要高亮的关键字]\n */\nexport function hightLight(str, key) {\n    if (!str || !str.length || !key) return false;\n    const reg = new RegExp(`([${key}]{2,})`, 'g');\n    const res = str.replace(reg, \"<font color='red'>$1</font>\");\n    return res;\n}\n\n\n// 判断是否为移动端\nexport function isMobile() {\n    if (typeof window == 'object') {\n        const ua = navigator.userAgent;\n        if ((ua.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {\n            return -1;\n        }\n    }\n    return 0;\n}\n\n\n/**\n * 格式化时间\n * \n * @param [number] time [时间戳]\n * @param [string] type [格式化类型]\n *\n */\nexport const timeFormat = (time, type) => {\n    if (!time) { return ''; }\n\n    const nowDate = new Date();\n    const dateInfo = new Date(time);\n\n    const fmtObj = {\n        year: dateInfo.getFullYear(),\n        month: dateInfo.getMonth() + 1,\n        date: dateInfo.getDate(),\n        hour: dateInfo.getHours(),\n        minute: dateInfo.getMinutes(),\n        second: dateInfo.getSeconds()\n    };\n\n    const keys = Object.keys(fmtObj);\n\n    keys.forEach(key => {\n        fmtObj[key] = fmtObj[key] < 10 ? '0' + fmtObj[key] : fmtObj[key];\n    });\n\n    const {\n        year, month, date, hour, minute, second\n    } = fmtObj;\n    let dateData = [year, month, date].join('-');\n    const timeData = [hour, minute, second].join(':');\n\n    let timeAfter = parseInt(Math.abs(nowDate - dateInfo) / 1000 / 60, 10);\n    if (timeAfter < 60) {\n        timeAfter = (timeAfter <= 0 ? 1 : timeAfter) + '分钟';\n    } else if (timeAfter >= 60 && timeAfter < 24 * 60) {\n        timeAfter = parseInt(timeAfter / 60, 10) + '小时';\n    } else {\n        timeAfter = parseInt(timeAfter / 60 / 24, 10) + '天';\n    }\n\n\n    switch (type) {\n        case 'date-after': return timeAfter;\n        case 'yyyy-MM-dd':\n            dateData = [year, month, date].join('-');\n            return dateData;\n        case 'yyyy/MM/dd':\n            dateData = [year, month, date].join('/');\n            return dateData;\n        case 'yyyyMMdd':\n            dateData = [year, month, date].join('');\n            return dateData;\n        case 'yyyy-MM-dd hh:mm:ss':\n            dateData = [year, month, date].join('-');\n            return dateData + ' ' + timeData;\n        case 'yyyy/MM/dd hh:mm:ss':\n            dateData = [year, month, date].join('/');\n            return dateData + ' ' + timeData;\n        default: return dateData + ' ' + timeData;\n    }\n};\n\n\n/**\n *  全局获取URL参数方法\n * \n *  @param [string] testParam [测试参数字符串]\n *  @param [bool] preview [是否预览]\n*/\nexport const urlParams = (path) => {\n    const paramObj = {};\n    const url = path || typeof window === 'object' && window.location.href || '';\n    if (url.split('?')[1]) {\n        const paramList = url.split('?')[1].split('&');\n        paramList.forEach(item => {\n            const [name, value] = item.split('=');\n            paramObj[name] = value;\n        });\n    }\n\n    return paramObj;\n};\n\n/**\n * 安全地深路径取值, 避免多层 undifined 判断\n * @param {object|array} value - 要 len 取值的对象或数组\n * @param {array} lens - 取值路径数组\n */\nexport const safeLens = (value, lens) => R.view(R.lensPath(lens), value);\n\n\n/**\n * @param {string} str - 视频地址字符串\n */\nexport const urlJSON = (str) => {\n    if (typeof str == 'string') {\n        try {\n            const obj = JSON.parse(str);\n            const [key] = Object.keys(obj).filter(k => obj[k]);\n            return obj[key];\n        } catch (e) {\n            console.log(str, 'is a string');\n            return str;\n        }\n    }\n    return '';\n};\n\nexport const IMG_OSS_RESIZE = {\n    undefined: [],\n    small: [237, 134],\n    big: [487, 275],\n    vertical: [237, 355]\n};\n\n/**\n * 压缩图片\n * @param {*} coverUrl \n */\nexport const getCompressCoverUrl = (coverUrl, width = '237', height = '134') => {\n    coverUrl = coverUrl || '';\n    try {\n        const temp = JSON.parse(coverUrl);\n        const [key] = Object.keys(temp).filter(k => temp[k][0]);\n        [coverUrl] = temp[key];\n    } catch (error) {\n        // console.log('only url string');\n    }\n    if (coverUrl.indexOf('img.grtn.cn') != -1) {\n        const [a, b] = coverUrl.split('/img/');\n        return `${a}/img/${width}x/${b}`;\n    }\n    return `${coverUrl}?x-oss-process=image/resize,m_fill,w_${width},h_${height}`;\n};\n\n/** 接口实体类型 */\nexport const ENTITY_TYPE = {\n    DATA_JSON: 0,\n    DATA_JSON_STR: 1\n};\n\n/** \n * 获取实体\n * 以data类型区分\n * 多处使用\n */\nexport const getEntity = (sourceData, extra = {}) => {\n    const { entityType = ENTITY_TYPE.DATA_JSON_STR } = extra;\n    let news = {};\n    try {\n        switch (entityType) {\n            case ENTITY_TYPE.DATA_JSON:\n                news = sourceData;\n                news.title = sourceData.title || sourceData.name;\n                break;\n            case ENTITY_TYPE.DATA_JSON_STR:\n                news = JSON.parse(sourceData.data);\n                news.objectType = sourceData.type;\n                break;\n            default:\n                news = sourceData;\n                break;\n        }\n    } catch (error) {\n        news = sourceData;\n    }\n    return news;\n};\n\n\n/**\n * 解析成详情页面路径\n * @param {*} params \n */\nexport const getDetailRoute = (params) => {\n    const {\n        // 源数据\n        source = {},\n        objectType = 0,\n        contentType = 0,\n        // 加密id\n        sid,\n\n        // 以下参数由extra解构传入\n        // 剧集第几集,起始位1\n        episodeId = 1,\n        // 频道id\n        channelId\n    } = params;\n    switch (`${objectType}`) {\n        case `${FLOW_TYPE.NEWS}`: {\n            switch (`${contentType}`) {\n                case '0': // 图文\n                case '1': // 视频\n                case '2': // 图集\n                case '3': // 电视节目\n                case '5': // 外链\n                    return `/${NEWS_ROUTE[contentType]}/${sid}`;\n                case '4': {\n                    // 剧集某集,跳转剧集播放页\n                    const searchParams = { videoId: sid };\n                    const search = Object.keys(searchParams).map(key => (\n                        searchParams[key] ? `${key}=${searchParams[key]}` : ''\n                    )).join('&');\n                    // 剧集id\n                    const serialsId = source?.serialsInfo?.sid;\n                    return `/${NEWS_ROUTE[contentType]}/${serialsId}?${search}`;\n                }\n                default:\n                    break;\n            }\n            break;\n        }\n\n        case `${FLOW_TYPE.TOPIC}`: {\n            switch (`${contentType}`) {\n                case '0': {\n                    // 剧集\n                    const searchParams = { channelId };\n                    const search = Object.keys(searchParams).map(key => (\n                        searchParams[key] ? `${key}=${searchParams[key]}` : ''\n                    )).join('&');\n                    return `/${TOPIC_ROUTE[contentType]}/${sid}/${episodeId}?${search}`;\n                }\n                case '1': // 专题\n                    return `/${TOPIC_ROUTE[contentType]}/${sid}`;\n                default:\n                    break;\n            }\n            break;\n        }\n\n        case `${FLOW_TYPE.OUTLINK}`: {\n            const { externalUrl } = source;\n            return externalUrl;\n        }\n\n        case `${FLOW_TYPE.LIVE}`: {\n            return `/${LIVE_ROUTE[0]}/${sid}`;\n        }\n\n        default:\n            break;\n    }\n    return '';\n};\n","import { callApi } from './callApi';\nimport apiBaseName from './baseName';\n\n// token获取\nexport const getUploadToken = (data) => callApi(apiBaseName.api + '/upload/v1/uploadToken', 'GET', data);\n\n// 密码登录\nexport const loginByPassword = (data) => callApi(apiBaseName.api + '/v1/loginByPassword', 'POST', data);\n\n// 验证码登录\nexport const loginByCode = (data) => callApi(apiBaseName.api + '/v1/loginByVerificationCode', 'POST', data);\n\n// 用户注册\nexport const register = (data) => callApi(apiBaseName.api + '/v1/register', 'POST', data);\n\n// 接受验证码\nexport const getVerificationCode = (data) => callApi(apiBaseName.api + '/v1/verificationCode', 'POST', data);\n\n// 第三方登录\nexport const loginByThirdParty = (data) => callApi(apiBaseName.api + '/v1/thirdPartyAccount/login', 'POST', data);\n\n// 获取用户信息\nexport const getUserInfo = (data) => callApi(apiBaseName.api + '/v1/user', 'GET', data);\n\n// 修改用户信息\nexport const updateUserInfo = (data) => callApi(apiBaseName.api + '/v1/user', 'PUT', data);\n\n// 基于关键字搜索\nexport const searchNews = (data) => callApi(apiBaseName.api + '/search/v1/news', 'POST', data);\n\n// 获得频道列表\nexport const getCommonChannel = () => callApi(apiBaseName.api + '/channel/v2/commonChannel', 'GET');\n\n// 获得首页SEO\nexport const getSeoConfig = () => callApi(apiBaseName.api + '/v1/seoConfig', 'GET');\n\n// 获得首页显示的频道列表\nexport const getHomeShowChannels = () => callApi(apiBaseName.api + '/channel/v2/commonChannel/home', 'GET');\n\n// 获得频道新闻列表\nexport const getChannelNews = (data) => callApi(apiBaseName.api + '/channel/v1/news', 'GET', data);\n\n// 获得友情链接列表\nexport const getFriendlyLinks = () => callApi(apiBaseName.api + '/friendlylink/v1/qrCodeAndTextLinks', 'GET');\n\n// 获得频道焦点图\nexport const getChannelFocus = (data) => callApi(apiBaseName.api + '/channelFocus/v1/channelFocus', 'GET', data);\n\n// 获得热点新闻列表\nexport const getHotNews = () => callApi(apiBaseName.api + '/hotnews/v3/hotnews', 'GET');\n\n// 获得滚动新闻\nexport const getRollNews = () => callApi(apiBaseName.api + '/news/v1/rollNews', 'GET');\n\n// 获得新闻详情内容\nexport const getNewsContent = (data) => callApi(apiBaseName.api + `/news/v1/news/${data.sid}`, 'GET');\n\n// 获得新闻最新内容列表\nexport const getRecentlyNewsList = (data) => callApi(apiBaseName.api + '/news/v1/recentlyNews', 'GET', data);\n\n// 获得新闻相关推荐\nexport const getRelateNewsList = (data) => callApi(apiBaseName.api + '/news/v1/relateNews', 'GET', data);\n\n// 增加新闻统计量\nexport const addNewsCount = (data) => callApi(apiBaseName.api + `/news/v1/newsCount/${data.id}/${data.countType}`, 'PUT');\n\n// 获取用户新闻浏览历史\nexport const getBrowseHistory = (data) => callApi(apiBaseName.api + '/news/v1/userBrowseHistory', 'GET', data);\n\n// 获取电视详情数据\nexport const getTvChannelDetail = (data) => callApi(apiBaseName.api + `/tv/v1/tvChannel/${data.tvChannelPk}`, 'GET');\n\n// 获取电视频道列表\nexport const getTvChannelList = (data) => callApi(apiBaseName.api + '/tv/v1/tvChannel', 'GET', data);\n\n// 获取电视节目菜单\nexport const getTvMenuList = (data) => callApi(apiBaseName.api + '/tv/v1/tvMenu', 'GET', data);\n\n// 获取电视栏目列表\nexport const getTvColumn = (data) => callApi(apiBaseName.api + `/tvColumn/v1/tvColumn/${data.tvChannelPk}`, 'GET');\n\n// 获取专题详情\nexport const getNewsTopic = (data) => callApi(apiBaseName.api + '/v1/newsTopic', 'GET', data);\n\n// 获取专题栏目及成员列表\nexport const getNewsTopicColumn = (data) => callApi(apiBaseName.api + '/v1/newsTopic/column', 'GET', data);\n\n// 获取剧集成员列表\nexport const getNewsTopicMemberList = (data) => callApi(apiBaseName.api + '/v1/newsTopic/memberList', 'GET', data);\n\n// 电视栏目回顾列表\nexport const getColumnVideoList = (data) => callApi(apiBaseName.api + '/tvColumn/v1/news', 'GET', data);\n\n// 电视栏目详情\nexport const getColumnInfo = (data) => callApi(apiBaseName.api + `/tvColumn/v1/column/${data.columnPk}`, 'GET');\n\n// 频道详情\nexport const getChannelInfo = (data) => callApi(apiBaseName.api + `/channel/v1/channel/${data.channelPk}`, 'GET');\n\n// 获取直播间信息\nexport const getLive = (data) => callApi(apiBaseName.api + '/live/v1/get', 'GET', data);\n\n// 获取最新更新直播\nexport const getRecentlyLive = (data) => callApi(apiBaseName.api + '/live/v1/recentlyLive', 'GET', data);\n\n// 增加直播统计量\nexport const liveCount = (data) => callApi(apiBaseName.api + `/live/v1/liveCount/${data.id}/${data.countType}`, 'PUT');\n","import { apiAction, action } from 'Utils/actionUtils';\n\nconst Module = 'GLOBAL';\n\nexport const { getBannerFocus, GET_BANNER_FOCUS } = apiAction('GET_BANNER_FOCUS', Module);\n\nexport const { getCommonChannel, GET_COMMON_CHANNEL } = apiAction('GET_COMMON_CHANNEL', Module);\n\nexport const { getFriendlyLinks, GET_FRIENDLY_LINKS } = apiAction('GET_FRIENDLY_LINKS', Module);\n\nexport const { addNewsCount, ADD_NEWS_COUNT } = apiAction('ADD_NEWS_COUNT', Module);\n\nexport const { getUploadToken, GET_UPLOAD_TOKEN } = apiAction('GET_UPLOAD_TOKEN', Module);\n\nexport const SET_SCREEN_SIZE = 'SET_SCREEN_SIZE';\nexport const setScreenSize = (data) => action(SET_SCREEN_SIZE, data);\n\nexport const PREFETCH_SET = 'PREFETCH_SET';\nexport const prefetchSet = () => action(PREFETCH_SET);\n\nexport const SEO_SET = 'SEO_SET';\nexport const seoSet = (seoData) => action(SEO_SET, seoData);\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"layout\":\"responsive__layout___34PbW\",\"content\":\"responsive__content___1ynpN\",\"video-box\":\"responsive__video-box___LDNQK\",\"video-box-left\":\"responsive__video-box-left___2q1QQ\",\"video\":\"responsive__video___216HX\",\"video-box-right\":\"responsive__video-box-right___2LC85\"};","import {\n    call, put, fork, takeLatest\n} from 'redux-saga/effects';\nimport * as Api from 'Services/index';\nimport * as ActionTypes from './actions';\n\nfunction* getChannelFlow(action) {\n    try {\n        const res = yield call(Api.getCommonChannel);\n        yield put(ActionTypes.getCommonChannel.success(action, res));\n    } catch (err) {\n        yield put(ActionTypes.getCommonChannel.failure(action, err));\n    }\n}\n\nfunction* getFriendlyLinks(action) {\n    try {\n        const res = yield call(Api.getFriendlyLinks);\n        yield put(ActionTypes.getFriendlyLinks.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.getFriendlyLinks.failure(action, error));\n    }\n}\n\nexport function* addNewsCount(action) {\n    try {\n        const res = yield call(Api.addNewsCount, action.data);\n        yield put(ActionTypes.addNewsCount.success(action, res));\n    } catch (error) {\n        yield put(ActionTypes.addNewsCount.failure(action, error));\n    }\n}\n\nexport default function* globalSaga(args) {\n    yield fork(getChannelFlow, args);\n    yield fork(getFriendlyLinks, args);\n}\n","import { createSelector } from 'reselect';\n\nconst globalSelector = (state) => state.get('global');\nconst accountSelector = (state) => state.get('account');\nconst homeSelector = (state) => state.get('HomePage');\n\nexport default createSelector(\n    [globalSelector, accountSelector, homeSelector],\n    (global, account, home) => ({\n        isPrefetch: global.get('prefetch').get('isPrefetch'),\n        root: global.get('root'),\n\n        screenSize: global.get('root').get('screenSize'),\n        friendlyLinks: global.get('root').get('friendlyLinks').toJS(),\n        channelList: global.get('root').get('channelList').toJS(),\n        bannerList: global.get('banner').get('bannerList'),\n        uploadToken: global.get('uploadToken').toJS(),\n\n        userInfo: account.get('userInfo'),\n    })\n);\n","import Cookie from 'js-cookie';\n\n/**\n * 本地存储\n */\nexport function saveLocal(key, data) {\n    Cookie.set(key, data, { expires: 7 });\n    if (typeof window === 'object') {\n        const str = typeof data === 'object' ? JSON.stringify(data) : data;\n        localStorage.setItem(key, str);\n    }\n}\n\n/**\n * 取本地\n */\nexport function getLocal(key) {\n    const data = typeof window === 'object' && localStorage.getItem(key) || Cookie.get(key);\n    try {\n        return data ? JSON.parse(data) : undefined;\n    } catch (error) {\n        return data;\n    }\n}\n","import { virtualFileFromDataUrl } from './VirtualFile';\nimport { loadScript } from '../utils';\n\nlet composeOssIndex = 0;\n\nexport const COMPOSEOSS_TYPE = {\n    AVATAR: 'AVATAR',\n    IMAGE: 'IMAGE',\n    VIDEO: 'VIDEO',\n    FILE: 'FILE'\n};\n\nconst appendComposeOssElementToBody = () => {\n    composeOssIndex += 1;\n\n    const containerId = `composeoss-container-${composeOssIndex}`;\n    const containerElement = document.createElement('div');\n    containerElement.setAttribute('id', containerId);\n\n    const uploadButtonId = `composeoss-button-${composeOssIndex}`;\n    const uploadButtonElement = document.createElement('div');\n    uploadButtonElement.setAttribute('id', uploadButtonId);\n\n    containerElement.appendChild(uploadButtonElement);\n    containerElement.style.cssText = `\n        position: fixed;\n        top: -100;\n        left: -100;\n        width: 0;\n        height: 0;\n        opacity: 0\n    `;\n\n    document.body.appendChild(containerElement);\n\n    return {\n        container: containerElement,\n        containerId: containerId,\n        uploadButton: uploadButtonElement,\n        uploadButtonId: uploadButtonId,\n    };\n};\n\nconst generateTokenHost = (tokenRaw = {}, type) => {\n    const {\n        accessKeyId,\n        accessKeySecret,\n        securityToken,\n    } = tokenRaw || {};\n    let position = '';\n    switch (type) {\n        case COMPOSEOSS_TYPE.AVATAR:\n            position = 'avatarPosition';\n            break;\n        case COMPOSEOSS_TYPE.IMAGE:\n            position = 'imagePosition';\n            break;\n        case COMPOSEOSS_TYPE.VIDEO:\n            position = 'videoPosition';\n            break;\n        case COMPOSEOSS_TYPE.FILE:\n            position = 'attachPosition';\n            break;\n        default:\n            break;\n    }\n    const { bucket, directory, visitHost } = tokenRaw[position] || {};\n    return {\n        token: {\n            AccessKeyId: accessKeyId,\n            AccessKeySecret: accessKeySecret,\n            SecurityToken: securityToken,\n            dir: directory,\n            bucket: bucket,\n            region: 'oss-cn-shenzhen'\n        },\n        host: visitHost\n    };\n};\n\nconst generateDefaultOptions = (options, type) => {\n    let uploadTypeDefault = 'direct';\n    let multipleDefault = false;\n    let maxSizeDefault = 5;\n    const uploadImmediatelyDefault = true;\n    let typesDefault = [];\n    switch (type) {\n        case COMPOSEOSS_TYPE.IMAGE:\n            uploadTypeDefault = 'direct';\n            maxSizeDefault = 5;\n            multipleDefault = true;\n            typesDefault = [\n                'image/jpeg',\n                'image/jpg',\n                'image/png'\n            ];\n            break;\n        case COMPOSEOSS_TYPE.VIDEO:\n            uploadTypeDefault = 'multipart';\n            maxSizeDefault = 2048;\n            typesDefault = [\n                '.flv',\n                '.mpg',\n                '.mpeg',\n                '.avi',\n                '.wmv',\n                '.mov',\n                '.asf',\n                '.rm',\n                '.rmvb',\n                '.mkv',\n                '.m4v',\n                '.mp4'\n            ];\n            break;\n        case COMPOSEOSS_TYPE.FILE:\n            uploadTypeDefault = 'direct';\n            maxSizeDefault = 2048;\n            typesDefault = [\n                '.doc',\n                '.docx',\n                '.xls',\n                '.xlsx',\n                '.zip',\n                '.rar'\n            ];\n            break;\n        default:\n            break;\n    }\n\n    const {\n        uploadType = uploadTypeDefault,\n        multiple = multipleDefault,\n        maxSize = maxSizeDefault,\n        uploadImmediately = uploadImmediatelyDefault,\n        types = typesDefault\n    } = options;\n    return {\n        uploadType,\n        multiple,\n        maxSize,\n        uploadImmediately,\n        types\n    };\n};\n\nconst newComposeOssInstance = async (options = {}, { uploadButtonId, containerId }) => {\n    if (!window.ComposeOss) {\n        await loadScript('//img2-cloud.itouchtv.cn/sitecdn/utils/composeOss_sdk_2679614e.js');\n    }\n    const { ComposeOss } = window;\n    const {\n        // -----------------------------------\n        ossType = 'OSS',\n        // -----------------------------------\n        type,\n        token: tokenRaw,\n        // -----------------------------------\n        handleExpire = () => { },\n        fileAdded = (uploadList, uploader) => { },\n        progress = (a, b) => { },\n        error = (err) => { },\n        complete = (res) => { },\n        completeQueue = () => { },\n        // -----------------------------------\n    } = options || {};\n    const {\n        uploadType,\n        multiple,\n        maxSize,\n        uploadImmediately,\n        types,\n    } = generateDefaultOptions(options || {}, type);\n    const { token, host } = generateTokenHost(tokenRaw, type);\n    console.warn('%ccreateComposeOss generateTokenHost', token, host, tokenRaw);\n    return new ComposeOss({\n        /** {@link} http://192.168.31.49:3000/zhuhuishao/m-compose-oss */\n        ossType, // 存储商: OSS (阿里云) / QINIU (七牛云) / COS (腾讯云) / VOD (腾讯云)\n        uploadType, // 上传类型: direct (直传) / multipart (断点分片)\n        multiple, // 是否允许多选\n        maxSize, // 文件大小限制\n        uploadImmediately, // 是否立刻上传\n        token, // 上传token\n        host, // 上传host\n        types, // 文件上传类型\n        upload_button: uploadButtonId, // 上传触发元素id\n        container: containerId, // upload_button父元素\n        handleExpire, // token认证错误\n        fileAdded, // 文件添加回调\n        progress, // 进度事件\n        error, // 错误回调\n        complete, // 完成回调\n        completeQueue, // 队列完成回调\n    });\n};\n\nconst generatorRandomNumber = (() => {\n    let randomIndex = 1;\n    return () => {\n        randomIndex += 1;\n        return '' + Math.random() + randomIndex;\n    };\n})();\n\n\nconst createComposeOss = (options) => {\n    const {\n        container,\n        containerId,\n        uploadButton,\n        uploadButtonId,\n    } = appendComposeOssElementToBody();\n    const oss = newComposeOssInstance(options, { uploadButtonId, containerId });\n\n    return {\n        oss,\n        upload() {\n            uploadButton.click();\n        },\n        async uploadBase64(base64Data, name) {\n            const uploadPromise = new Promise((res, rej) => {\n                const { _file: file } = virtualFileFromDataUrl(base64Data, name);\n                const fileNameList = name?.split('/') || '';\n                const fileName = fileNameList[fileNameList.length - 1];\n                const { token: { dir = '' } = {} } = oss;\n                console.warn('uploadBase64', oss, fileName);\n                const uploadOptions = {\n                    file,\n                    fileName: dir + generatorRandomNumber() + fileName,\n                    token: oss.token,\n                    host: oss.host,\n                    ossType: oss.type,\n                    ...oss.restOptions,\n                    complete(data) {\n                        res(data);\n                    }\n                };\n                // eslint-disable-next-line\n                const task = new oss.uploader(uploadOptions);\n                task.start(() => { }, rej);\n            });\n\n            return uploadPromise;\n        },\n        destroy() {\n            document.body.removeChild(container);\n        },\n    };\n};\n\nexport default createComposeOss;\n","import React from 'react';\nimport { Button } from 'antd';\n\nimport LoginModal from 'Components/LoginModal';\nimport RegisterModal from 'Components/RegisterModal';\n\nimport styles from './index.less';\n\nexport default class extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            loginModalVisible: false,\n            registerModalVisible: false\n        };\n    }\n\n    /** 打开登录模态框 */\n    handleOpenLoginModal = () => {\n        const { onClick = () => null } = this.props;\n        onClick();\n        this.setState({ loginModalVisible: true });\n    }\n\n    /** 打开注册模态框 */\n    handleOpenRegisterModal = () => {\n        this.setState({ registerModalVisible: true });\n    }\n\n    render() {\n        const { loginModalVisible, registerModalVisible } = this.state;\n        return (\n            <div className={styles['btn-login-warpper']}>\n                <Button\n                    type='primary'\n                    shape='round'\n                    block\n                    onClick={this.handleOpenLoginModal}\n                >\n                    登录/注册\n                </Button>\n\n                {loginModalVisible &&\n                    <LoginModal\n                        visible={loginModalVisible}\n                        onCancel={() => { this.setState({ loginModalVisible: false }); }}\n                        onOpenRegister={this.handleOpenRegisterModal}\n                    />\n                }\n                {registerModalVisible &&\n                    <RegisterModal\n                        visible={registerModalVisible}\n                        onCancel={() => { this.setState({ registerModalVisible: false }); }}\n                        onOpenLogin={this.handleOpenLoginModal}\n                    />\n                }\n            </div>\n        );\n    }\n}\n","/** 手机号码 */\nexport const PHONE_NUMBER = {\n    pattern: /^(1(3[0-9]|4[57]|5[0-9]|7[0-9]|8[0-9])\\d{8}$)|(^1705\\d{7}$)/i,\n    text: '手机号码格式不正确，请重新输入'\n};\n\n/** 注册验证码： 6位数字 */\nexport const SIGNUP_VALIDCODE = {\n    pattern: /^\\d{6}$/,\n    text: '验证码应为6为数字'\n};\n\n/** 密码： 至少6位，最多20位 */\nexport const PASSWORD_NUM = {\n    pattern: /^[\\s\\S]{6,20}$/,\n    text: '密码必须为6-20位'\n};\n\n/** 密码： 必须包含字母和数字 */\nexport const PASSWORD_RULES = {\n    pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)(?![\\s])[\\S]{6,20}$/,\n    text: '密码必须包含字母和数字'\n};\n\n/** 密码： 至少6位，最多20位，必须包含字母和数字 */\nexport const PASSWORD = {\n    pattern: /^(?![0-9]+$)(?![a-zA-Z]+$)(?![\\s])[\\S]{6,20}$/,\n    text: '密码必须为6-20位，不能为纯数字、纯字母或纯字符'\n};\n\n/** 真实姓名 */\nexport const REAL_NAME = {\n    pattern: /^[\\u4e00-\\u9fa5]{2,8}$/,\n    text: '姓名应为2-8位中文'\n};\n\n/** 身份证号码 */\nexport const ID_NUMBER = {\n    pattern: /^[0-9a-zA-Z]{18}$/,\n    text: '请输入合法身份证号码'\n};\n\n/** 首尾的空格 */\nexport const TRIM = {\n    pattern: /(^\\s*)|(\\s*$)/g\n};\n\n/** 邮箱不能为空 */\nexport const EMAIL_REQUIRE = {\n    require: true,\n    text: '邮箱地址不能为空'\n};\n\n/** 手机号码不能为空 */\nexport const PHONE_NUMBER_REQUIRE = {\n    require: true,\n    text: '手机号码不能为空'\n};\n\n/** *\n * [获得字符串长度]\n * @param  {[string]} str  [传入字符串]\n * @return {[type]} name  [description]\n  */\nexport const getStrLength = (str) => {\n    let len = 0;\n\n    if (!str) {\n        return len;\n    }\n\n    for (let i = 0; i < str.length; i += 1) {\n        const c = str.substr(i, 1);\n        const ts = escape(c);\n        if (ts.substring(0, 2) == '%u') {\n            len += 2;\n        } else {\n            len += 1;\n        }\n    }\n    return len;\n};\n","import React from 'react';\nimport { Row, Col, Typography } from 'antd';\n\nimport ImageLoad from 'Components/ImageLoad';\nimport { renderOverlay } from 'Components/CardBox/tools';\nimport { getEntity, getDetailRoute } from 'Utils/utils';\n\nimport SeriesVideoBlock from './SeriesVideo';\nimport TvColumnBlock from './TvColumn';\nimport NewsBlock from './News';\nimport TopicBlock from './Topic';\n\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/** 剧集 */\nexport const SeriesVideo = SeriesVideoBlock;\n/** 电视节目 */\nexport const TvColumn = TvColumnBlock;\n/** 新闻 */\nexport const News = NewsBlock;\n/** 专题 */\nexport const Topic = TopicBlock;\n\nexport default class extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    handleRenderLink = (newsData) => {\n        const { id, contentType, objectType } = newsData;\n        const route = getDetailRoute({\n            source: newsData,\n            objectType,\n            contentType,\n            sid: id\n        });\n        return route;\n    }\n\n    /** 显示角标 */\n    renderTagRb = (newsData) => renderOverlay(newsData);\n\n    render() {\n        const { source } = this.props;\n        const newsData = getEntity(source);\n        return (\n            <a className={styles['content-element']} href={this.handleRenderLink(newsData)}>\n                <Row gutter={8}>\n                    <Col span={12}>\n                        <div className={styles['cover-url']}>\n                            <ImageLoad className={styles.cover} src={newsData.coverUrl} />\n                            {this.renderTagRb(newsData)}\n                        </div>\n                    </Col>\n                    <Col span={12}>\n                        <Paragraph className={styles.title} ellipsis={{ rows: 3 }}>{newsData.title}</Paragraph>\n                    </Col>\n                </Row>\n            </a>\n        );\n    }\n}\n","export const CLASS_TYPE = {\n    // 小尺寸\n    small: 'card-small',\n    // 大尺寸\n    big: 'card-big',\n    // 竖形尺寸\n    vertical: 'card-vertical'\n};\n\n// 直播状态\nexport const LIVE_STATUS = {\n    5: '直播预告',\n    6: '直播中',\n    7: '直播暂停',\n    8: '直播结束',\n    9: '回顾'\n};\n","// removed by extract-text-webpack-plugin\nmodule.exports = {\"defaultBackground\":\"index__defaultBackground___2lcPM\",\"textOverflow\":\"index__textOverflow___3Ahaj\",\"dot\":\"index__dot___SQ6r6\",\"navBarIconList\":\"index__navBarIconList___3SYw3\",\"menu-tv\":\"index__menu-tv___17Yd4\",\"menu-radio\":\"index__menu-radio___o4fTA\",\"menu-programs\":\"index__menu-programs___WTRVV\",\"menu-programs-all\":\"index__menu-programs-all___32qU1\",\"card-box\":\"index__card-box___2Angp\",\"card-cover\":\"index__card-cover___2bl3L\",\"cover\":\"index__cover___1KRSh\",\"card-bg\":\"index__card-bg___JYyir\",\"card-info\":\"index__card-info___maq75\",\"card-title-container\":\"index__card-title-container___1VsgE\",\"card-title\":\"index__card-title___1ZasM\",\"card-box-bottom\":\"index__card-box-bottom___2wir8\",\"card-vertical\":\"index__card-vertical___2QHt0\",\"card-big\":\"index__card-big___1iNK9\",\"overlay\":\"index__overlay___3-d8s\",\"p-lt\":\"index__p-lt___2_JSD\",\"p-lb\":\"index__p-lb___1PSLi\",\"p-rt\":\"index__p-rt___2Fw-x\",\"p-rb\":\"index__p-rb___29V1n\",\"p-bg\":\"index__p-bg___1PwB8\"};","export const menu = [\n    {\n        name: '看电视',\n        className: 'menu-tv',\n        icon: require('../../statics/images/menu_tv.png'),\n        url: '/tvChannelDetail/43',\n        newBlank: true\n    },\n    {\n        name: '听广播',\n        className: 'menu-radio',\n        url: '/tvChannelDetail/85',\n        icon: require('../../statics/images/menu_radio.png'),\n        newBlank: true\n    },\n    {\n        name: '节目库',\n        className: 'menu-programs-all',\n        icon: require('../../statics/images/menu_programs_all.png'),\n        url: '/tvPrograms',\n        newBlank: true\n    },\n    {\n        name: '节目表',\n        className: 'menu-programs',\n        icon: require('../../statics/images/menu_programs.png'),\n        url: 'http://epg.gdtv.cn',\n        newBlank: true\n    }\n];\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'antd';\n\nimport CardBox from 'Components/CardBox';\n\nimport { headColSpan, colSpan } from 'Constants/antProps';\nimport { composeArray, completionArray } from 'Utils/tools';\n\nimport styles from './index.less';\n\n/**\n * ModuleName: 卡片流\n * \n * 首位卡片占位2行2列,首位卡片支持定制\n * 其余每列2个,最多6列\n * \n * [use:首页热点,频道内容展示]\n */\nclass CardFlowDouble extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    handleComposeArray = () => {\n        const { flowData = [], renderHeadCol } = this.props;\n        const flow = renderHeadCol ? flowData.slice(0, 12) : flowData.slice(1, 13);\n        const arr = completionArray(flow, 12);\n        return composeArray(arr);\n    }\n\n    renderDefaultHeadCol = () => {\n        const { flowData = [{}] } = this.props;\n        return (\n            <CardBox\n                sourceData={flowData[0]}\n                type='big'\n                onClick={this.props.onClickCard}\n            />\n        );\n    }\n\n    render() {\n        const {\n            flowData = [], renderHeadCol = this.renderDefaultHeadCol\n        } = this.props;\n        const list = this.handleComposeArray();\n        return (\n            <Row className={styles['card-flow-double']} gutter={12}>\n                {flowData.length > 0 &&\n                    <Col {...headColSpan}>\n                        {renderHeadCol()}\n                    </Col>\n                }\n                {list.map(([item1, item2], i) => (\n                    <Col {...colSpan} className={styles['flow-overview']} key={i}>\n                        {item1 &&\n                            <CardBox\n                                sourceData={item1}\n                                bottom={true}\n                                onClick={this.props.onClickCard}\n                                extra={this.props.extra}\n                            />\n                        }\n                        {item2 &&\n                            <CardBox\n                                sourceData={item2}\n                                onClick={this.props.onClickCard}\n                                extra={this.props.extra}\n                            />\n                        }\n                    </Col>\n                ))}\n                {list.length == 0 &&\n                    <Col {...colSpan} className={[styles['flow-overview'], styles.palceholder].join(' ')}>\n                        <CardBox\n                            sourceData={{}}\n                            bottom={true}\n                            onClick={this.props.onClickCard}\n                            extra={this.props.extra}\n                        />\n                        <CardBox\n                            sourceData={{}}\n                            onClick={this.props.onClickCard}\n                            extra={this.props.extra}\n                        />\n                    </Col>\n                }\n            </Row>\n        );\n    }\n}\n\nCardFlowDouble.propTypes = {\n    // 列表数据\n    flowData: PropTypes.array,\n    // 首位组件\n    renderHeadCol: PropTypes.any,\n    // 点击卡片事件\n    onClickCard: PropTypes.func,\n    // 额外参数\n    extra: PropTypes.object\n};\n\nexport default CardFlowDouble;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography } from 'antd';\nimport ImageLoad from 'Components/ImageLoad';\nimport {\n    getEntity, getDetailRoute, getCompressCoverUrl, IMG_OSS_RESIZE\n} from 'Utils/utils';\nimport { renderOverlay } from './tools';\nimport { CLASS_TYPE } from './constants';\nimport styles from './index.less';\n\nconst { Paragraph } = Typography;\n\n/**\n * ModuleName: 卡片模块\n * \n */\nclass CardBox extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            layoutStyle: []\n        };\n    }\n\n    componentDidMount() {\n        const { layoutStyle } = this.state;\n        const { bottom, type = 'small' } = this.props;\n        bottom && layoutStyle.push(styles['card-box-bottom']);\n        type && layoutStyle.push(styles[CLASS_TYPE[type]]);\n        this.setState({ layoutStyle });\n    }\n\n    /** 点击事件 */\n    handleOnClick = () => {\n        const { sourceData = {}, onClick = () => null } = this.props;\n        console.log(sourceData);\n        onClick(sourceData);\n    }\n\n    /** 解析跳转链接 */\n    handleRenderLink = () => {\n        const { sourceData = {}, extra = {} } = this.props;\n        const { customLink } = extra;\n        // 使用自定义链接\n        if (customLink) {\n            if (customLink instanceof Function) {\n                return customLink(sourceData);\n            }\n            return customLink;\n        }\n        const news = getEntity(sourceData, extra);\n        const { id, contentType, objectType } = news;\n        const route = getDetailRoute({\n            source: news,\n            objectType,\n            contentType,\n            sid: id,\n            ...extra\n        });\n        return route;\n    }\n\n    render() {\n        const { layoutStyle } = this.state;\n        const { sourceData = {}, extra = {}, type = 'small' } = this.props;\n        const { blank = true } = extra;\n        const newsData = getEntity(sourceData, extra);\n        const { coverUrl = '', title } = newsData;\n        return (\n            <div className={[styles['card-box'], ...layoutStyle].join(' ')}>\n                <div className={styles['card-cover']}>\n                    <a href={this.handleRenderLink()} title={title} target={blank && '_blank' || ''}>\n                        <ImageLoad\n                            className={styles.cover}\n                            src={getCompressCoverUrl(coverUrl, IMG_OSS_RESIZE[type][0], IMG_OSS_RESIZE[type][1])}\n                        />\n                        <div className={styles['card-bg']} />\n                        {renderOverlay(newsData)}\n                    </a>\n                </div>\n                <div className={styles['card-info']}>\n                    <div className={styles['card-title-container']}>\n                        <a\n                            className={styles['card-title']}\n                            href={this.handleRenderLink()}\n                            title={title}\n                            target={blank && '_blank' || ''}\n                        >\n                            <Paragraph ellipsis={{ rows: 2 }}>\n                                {title || '...'}\n                            </Paragraph>\n                        </a>\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nCardBox.propTypes = {\n    sourceData: PropTypes.object.isRequired,\n    // 卡片尺寸类型 [CLASS_TYPE]\n    type: PropTypes.string,\n    // 控制样式margin-bottom\n    bottom: PropTypes.bool,\n    // 点击卡片事件\n    onClick: PropTypes.func,\n    // 额外参数\n    extra: PropTypes.shape({\n        // 实体类型\n        entityType: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        // 自定义链接\n        customLink: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n        // 新开窗口\n        blank: PropTypes.bool,\n        // 剧集第几集,起始位1\n        episodeId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        // 频道id\n        channelId: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n    })\n};\n\nexport default CardBox;\n","module.exports = videojs;","import {\n    put, call, fork \n} from 'redux-saga/effects';\n\nimport * as Api from 'Services/index';\nimport * as GlobalActionTypes from 'Global/actions';\nimport * as ActionTypes from './actions';\n\nfunction* getNewsTopic(args) {\n    try {\n        const res = yield call(Api.getNewsContent);\n        yield put(ActionTypes.getNewsTopic.success(args, res));\n\n        // 设置访问为SSR\n        yield put(GlobalActionTypes.prefetchSet());\n    } catch (error) {\n        yield put(ActionTypes.getNewsTopic.failure(args, error));\n    }\n}\n\n\nexport default function* TopicDetailPrefetch(args) {\n    yield fork(getNewsTopic, args);\n}\n","import { createSelector } from 'reselect';\n\nconst topicSelector = (state) => state.get('TopicDetail');\nconst globalSelector = (state) => state.get('global');\n\nexport default createSelector([topicSelector, globalSelector], (topic, global) => ({\n    isPrefetch: global.get('prefetch').get('isPrefetch'),\n    screenSize: global.get('root').get('screenSize'),\n    newsTopicDetail: topic.get('newsTopicDetail'),\n    newsTopicColumn: topic.get('newsTopicColumn'),\n    total: topic.get('total'),\n    topicMemberList: topic.get('topicMemberList'),\n    newsTopicMemberList: topic.get('newsTopicMemberList'),\n    currentVideoDetail: topic.get('currentVideoDetail'),\n    channelNewsList: topic.get('channelNewsList')\n}));\n","\nimport moment from 'moment';\n\nexport const weekday = {\n    0: '星期日',\n    1: '星期一',\n    2: '星期二',\n    3: '星期三',\n    4: '星期四',\n    5: '星期五',\n    6: '星期六',\n};\nconst today = moment().startOf('day');\nconst dayTimeArr = [\n    moment().subtract(3, 'days').startOf('day'),\n    moment().subtract(2, 'days').startOf('day'),\n    moment().subtract(1, 'days').startOf('day'),\n    moment().startOf('day'),\n    moment().add(1, 'days').startOf('day'),\n    moment().add(2, 'days').startOf('day'),\n    moment().add(3, 'days').startOf('day'),\n];\nexport const dateDataList = dayTimeArr.map((dayTime, i) => ({\n    day: i == 3 ? '今日' : dayTime.get('day'),\n    dateTime: dayTime.format('YYYY.MM.DD'),\n    timestamp: dayTime.valueOf(),\n    tvMenu: [],\n}));\n","var map = {\n\t\"./ChannelsPage/sagas\": 1411,\n\t\"./HomePage/sagas\": 1412,\n\t\"./LiveRoom/sagas\": 1413,\n\t\"./NewsDetail/sagas\": 1414,\n\t\"./SearchPage/sagas\": 1415,\n\t\"./TopicDetail/sagas\": 1416,\n\t\"./TvChannelDetail/sagas\": 1417,\n\t\"./TvColumn/sagas\": 1418,\n\t\"./TvColumnDetail/sagas\": 1419,\n\t\"./TvPrograms/sagas\": 1420\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 650;","/** 信息流展现形式所对应的记录条数 */\nexport const DISPLAY_TYPE_COUNT = {\n    // 横小图\n    0: 7,\n    // 1竖小图\n    1: 7,\n    // 2第一个横大图混合横小图\n    2: 11\n};\n\n/** 信息流类型 */\nexport const FLOW_TYPE = {\n    // 新闻\n    NEWS: 0,\n    // 专题\n    TOPIC: 1,\n    // 普通外链\n    OUTLINK: 2,\n    // 直播\n    LIVE: 3\n};\n\n/** 新闻内容类型 */\nexport const NEWS_CONTENT_TYPE = {\n    undefined: '未知',\n    0: '图文',\n    1: '视频',\n    2: '图集',\n    3: '电视节目',\n    4: '剧集',\n    5: '外链', // 内容外链\n};\n\n/** 新闻内容类型对应的路由 */\nexport const NEWS_ROUTE = {\n    0: 'article',\n    1: 'video',\n    2: 'gallery',\n    3: 'tv',\n    4: 'seriesVideo',\n    5: 'outlink'\n};\n\n/** 专题内容类型 */\nexport const TOPIC_CONTENT_TYPE = {\n    undefined: '未知',\n    0: '剧集',\n    1: '专题',\n};\n\n/** 专题对应的路由 */\nexport const TOPIC_ROUTE = {\n    0: 'seriesVideo',\n    1: 'topic'\n};\n\n/** 直播内容类型 */\nexport const LIVE_CONTENT_TYPE = {\n    undefined: '未知',\n    0: '直播',\n};\n\n/** 直播对应的路由 */\nexport const LIVE_ROUTE = {\n    0: 'live'\n};\n","import React from 'react';\nimport { hydrate } from 'react-dom';\n// import { loadableReady } from '@loadable/component';\nimport Loadable from 'react-loadable';\n\nimport '@babel/polyfill';\n\nimport { Provider } from 'react-redux';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport { Router } from 'react-router-dom';\nimport createSagaMiddleware from 'redux-saga';\nimport { fromJS } from 'immutable';\nimport logger from 'redux-logger';\n\nimport renderRoutes from 'View/routes/renderRoutes';\nimport reducers from 'View/rootReducers';\nimport sagas from 'View/rootSagas';\n\nconst initialState = fromJS(window.__PRELOADED_STATE__);\nconst createHistory = require('history').createBrowserHistory;\n\nconst history = createHistory();\n\nconst sagaMiddleware = createSagaMiddleware();\n\nconst middlewares = [\n    sagaMiddleware\n];\n\n// 开发环境加入redux-logger\nif (process.env.NODE_ENV !== 'production') {\n    middlewares.push(logger);\n}\n\nconst enhancers = [\n    applyMiddleware(...middlewares)\n];\n\n// If Redux DevTools Extension is installed use it, otherwise use Redux compose\n/* eslint-disable no-underscore-dangle */\nconst composeEnhancers = process.env.NODE_ENV !== 'production'\n    && typeof window === 'object'\n    && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose;\n\nconst store = createStore(reducers, initialState, composeEnhancers(...enhancers));\n\nstore.runSaga = sagaMiddleware.run;\nstore.runSaga(sagas);\n\nstore.injectedReducers = {};\nstore.injectedSagas = {};\n\nif (module.hot) {\n    module.hot.accept('View/rootReducers', () => {\n        const nextReducer = require('View/rootReducers');\n        store.replaceReducer(nextReducer);\n    });\n}\nLoadable.preloadReady().then(() => hydrate(\n    <Provider store={store}>\n        <Router history={history}>\n            {renderRoutes()}\n        </Router>\n    </Provider>,\n    document.getElementById('root')\n));\n","import React from 'react';\nimport { Route } from 'react-router-dom';\nimport { Switch, Redirect } from 'react-router';\n\nimport routes from './index';\n\n\nexport default function renderRoutes() {\n    return (\n        <Switch>\n            {routes.map((route, index) => {\n                const {\n                    exact,\n                    path,\n                    component\n                } = route;\n\n                return (\n                    <Route \n                        key={path || index}\n                        exact={exact} \n                        path={path}\n                        render={props => <route.component {...props} route={route} />}\n                    />\n                );\n            })}\n\n            <Redirect to=\"/404\" />\n        </Switch>\n    );\n}\n","export const VIDEOJS = '<link href=\"//img2-cloud.itouchtv.cn/sitecdn/cdn-lib/videojs/video-js.min.css\" rel=\"stylesheet\">'\n+ '<script src=\"//img2-cloud.itouchtv.cn/sitecdn/cdn-lib/videojs/video.min.js\"></script>'\n+ '<script src=\"//img2-cloud.itouchtv.cn/sitecdn/cdn-lib/videojs/videojs-contrib-hls.js\"></script>';\n","// 字符串全大写下划线分割转驼峰\nfunction camelString(Upper) {\n    const _tmpString = Upper.split('_');\n    const camelStringArr = [];\n\n    _tmpString.map((item, i) => {\n        let newItem = item.toLowerCase();\n        if (i) {\n            newItem = newItem.substring(0, 1).toUpperCase() + newItem.substring(1, newItem.length);\n        }\n        camelStringArr.push(newItem);\n        return undefined;\n    });\n    return camelStringArr.join('');\n}\n\n// 构造对象action\nexport function action(type, payload = {}) {\n    return { type, ...payload };\n}\n\n// 构造异步三个action的types\nexport function apiTypes(namespace) {\n    return {\n        REQUEST: namespace + '_REQUEST',\n        SUCCESS: namespace + '_SUCCESS',\n        FAILURE: namespace + '_FAILURE'\n    };\n}\n\n// 构造异步action creator\nexport function apiCreator(types) {\n    const { REQUEST, SUCCESS, FAILURE } = types;\n    return {\n        request: (data, resolve, reject) => action(REQUEST, { data, resolve, reject }),\n        success: (data, response) => action(SUCCESS, { data, response }),\n        failure: (data, error) => action(FAILURE, { data, error })\n    };\n}\n\n// 返回三个action以及三个action creator\n// 输入为全大写下划线分割，\n// 输出一个action对象全大写，另一个是驼峰\nexport function apiAction(namespace, moduleName) {\n    const camel = camelString(namespace);\n    const obj = {};\n    let name = null;\n    if (moduleName) {\n        name = moduleName + '_' + namespace;\n    } else {\n        name = namespace;\n    }\n    obj[namespace] = apiTypes(name);\n    obj[camel] = apiCreator(obj[namespace]);\n\n    return obj;\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport CardFlowSingle from 'Components/CardFlow/Single';\nimport CardFlowDouble from 'Components/CardFlow/Double';\n\n/**\n * ModuleName: 卡片信息流\n */\nclass CardFlow extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n        };\n    }\n\n    componentDidMount() {\n    }\n\n    renderDisplayType = () => {\n        const {\n            flowData, displayType = 0, isMulti\n        } = this.props;\n        switch (`${displayType}`) {\n            case '0':\n                return (\n                    <CardFlowSingle\n                        flowData={flowData || []}\n                        isMulti={isMulti}\n                        onClickCard={this.props.onClickCard}\n                        extra={this.props.extra}\n                    />\n                );\n\n            case '1':\n                return (\n                    <CardFlowSingle\n                        flowData={flowData || []}\n                        cardSize='vertical'\n                        isMulti={isMulti}\n                        onClickCard={this.props.onClickCard}\n                        extra={this.props.extra}\n                    />\n                );\n\n            case '2':\n                return (\n                    <CardFlowDouble\n                        flowData={flowData || []}\n                        onClickCard={this.props.onClickCard}\n                        extra={this.props.extra}\n                    />\n                );\n\n            default:\n                return (<div></div>);\n        }\n    }\n\n    render() {\n        return this.renderDisplayType();\n    }\n}\n\nCardFlow.propTypes = {\n    // 列表数据\n    flowData: PropTypes.array,\n    // 展现形式[后台数据决定]\n    displayType: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number\n    ]),\n    // 是否多行,仅 displayType = 0|1 生效\n    isMulti: PropTypes.bool,\n    // 点击卡片事件\n    onClickCard: PropTypes.func,\n    // 额外参数\n    extra: PropTypes.object\n};\nexport default CardFlow;\n","import React from 'react';\nimport Helmet from 'react-helmet';\n\nclass HelmetSEO extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = { hasError: false };\n    }\n\n    render() {\n        const {\n            title,\n            keywords,\n            description\n        } = this.props;\n\n        return (\n            <Helmet>\n                <title>{title}</title>\n                <meta name='title' content={title} />\n                <meta name='keywords' content={keywords} />\n                <meta name='description' content={description} />\n            </Helmet>\n        );\n    }\n}\n\nexport default HelmetSEO;\n","var map = {\n\t\"./af\": 427,\n\t\"./af.js\": 427,\n\t\"./ar\": 428,\n\t\"./ar-dz\": 429,\n\t\"./ar-dz.js\": 429,\n\t\"./ar-kw\": 430,\n\t\"./ar-kw.js\": 430,\n\t\"./ar-ly\": 431,\n\t\"./ar-ly.js\": 431,\n\t\"./ar-ma\": 432,\n\t\"./ar-ma.js\": 432,\n\t\"./ar-sa\": 433,\n\t\"./ar-sa.js\": 433,\n\t\"./ar-tn\": 434,\n\t\"./ar-tn.js\": 434,\n\t\"./ar.js\": 428,\n\t\"./az\": 435,\n\t\"./az.js\": 435,\n\t\"./be\": 436,\n\t\"./be.js\": 436,\n\t\"./bg\": 437,\n\t\"./bg.js\": 437,\n\t\"./bm\": 438,\n\t\"./bm.js\": 438,\n\t\"./bn\": 439,\n\t\"./bn.js\": 439,\n\t\"./bo\": 440,\n\t\"./bo.js\": 440,\n\t\"./br\": 441,\n\t\"./br.js\": 441,\n\t\"./bs\": 442,\n\t\"./bs.js\": 442,\n\t\"./ca\": 443,\n\t\"./ca.js\": 443,\n\t\"./cs\": 444,\n\t\"./cs.js\": 444,\n\t\"./cv\": 445,\n\t\"./cv.js\": 445,\n\t\"./cy\": 446,\n\t\"./cy.js\": 446,\n\t\"./da\": 447,\n\t\"./da.js\": 447,\n\t\"./de\": 448,\n\t\"./de-at\": 449,\n\t\"./de-at.js\": 449,\n\t\"./de-ch\": 450,\n\t\"./de-ch.js\": 450,\n\t\"./de.js\": 448,\n\t\"./dv\": 451,\n\t\"./dv.js\": 451,\n\t\"./el\": 452,\n\t\"./el.js\": 452,\n\t\"./en-SG\": 453,\n\t\"./en-SG.js\": 453,\n\t\"./en-au\": 454,\n\t\"./en-au.js\": 454,\n\t\"./en-ca\": 455,\n\t\"./en-ca.js\": 455,\n\t\"./en-gb\": 456,\n\t\"./en-gb.js\": 456,\n\t\"./en-ie\": 457,\n\t\"./en-ie.js\": 457,\n\t\"./en-il\": 458,\n\t\"./en-il.js\": 458,\n\t\"./en-nz\": 459,\n\t\"./en-nz.js\": 459,\n\t\"./eo\": 460,\n\t\"./eo.js\": 460,\n\t\"./es\": 461,\n\t\"./es-do\": 462,\n\t\"./es-do.js\": 462,\n\t\"./es-us\": 463,\n\t\"./es-us.js\": 463,\n\t\"./es.js\": 461,\n\t\"./et\": 464,\n\t\"./et.js\": 464,\n\t\"./eu\": 465,\n\t\"./eu.js\": 465,\n\t\"./fa\": 466,\n\t\"./fa.js\": 466,\n\t\"./fi\": 467,\n\t\"./fi.js\": 467,\n\t\"./fo\": 468,\n\t\"./fo.js\": 468,\n\t\"./fr\": 469,\n\t\"./fr-ca\": 470,\n\t\"./fr-ca.js\": 470,\n\t\"./fr-ch\": 471,\n\t\"./fr-ch.js\": 471,\n\t\"./fr.js\": 469,\n\t\"./fy\": 472,\n\t\"./fy.js\": 472,\n\t\"./ga\": 473,\n\t\"./ga.js\": 473,\n\t\"./gd\": 474,\n\t\"./gd.js\": 474,\n\t\"./gl\": 475,\n\t\"./gl.js\": 475,\n\t\"./gom-latn\": 476,\n\t\"./gom-latn.js\": 476,\n\t\"./gu\": 477,\n\t\"./gu.js\": 477,\n\t\"./he\": 478,\n\t\"./he.js\": 478,\n\t\"./hi\": 479,\n\t\"./hi.js\": 479,\n\t\"./hr\": 480,\n\t\"./hr.js\": 480,\n\t\"./hu\": 481,\n\t\"./hu.js\": 481,\n\t\"./hy-am\": 482,\n\t\"./hy-am.js\": 482,\n\t\"./id\": 483,\n\t\"./id.js\": 483,\n\t\"./is\": 484,\n\t\"./is.js\": 484,\n\t\"./it\": 485,\n\t\"./it-ch\": 486,\n\t\"./it-ch.js\": 486,\n\t\"./it.js\": 485,\n\t\"./ja\": 487,\n\t\"./ja.js\": 487,\n\t\"./jv\": 488,\n\t\"./jv.js\": 488,\n\t\"./ka\": 489,\n\t\"./ka.js\": 489,\n\t\"./kk\": 490,\n\t\"./kk.js\": 490,\n\t\"./km\": 491,\n\t\"./km.js\": 491,\n\t\"./kn\": 492,\n\t\"./kn.js\": 492,\n\t\"./ko\": 493,\n\t\"./ko.js\": 493,\n\t\"./ku\": 494,\n\t\"./ku.js\": 494,\n\t\"./ky\": 495,\n\t\"./ky.js\": 495,\n\t\"./lb\": 496,\n\t\"./lb.js\": 496,\n\t\"./lo\": 497,\n\t\"./lo.js\": 497,\n\t\"./lt\": 498,\n\t\"./lt.js\": 498,\n\t\"./lv\": 499,\n\t\"./lv.js\": 499,\n\t\"./me\": 500,\n\t\"./me.js\": 500,\n\t\"./mi\": 501,\n\t\"./mi.js\": 501,\n\t\"./mk\": 502,\n\t\"./mk.js\": 502,\n\t\"./ml\": 503,\n\t\"./ml.js\": 503,\n\t\"./mn\": 504,\n\t\"./mn.js\": 504,\n\t\"./mr\": 505,\n\t\"./mr.js\": 505,\n\t\"./ms\": 506,\n\t\"./ms-my\": 507,\n\t\"./ms-my.js\": 507,\n\t\"./ms.js\": 506,\n\t\"./mt\": 508,\n\t\"./mt.js\": 508,\n\t\"./my\": 509,\n\t\"./my.js\": 509,\n\t\"./nb\": 510,\n\t\"./nb.js\": 510,\n\t\"./ne\": 511,\n\t\"./ne.js\": 511,\n\t\"./nl\": 512,\n\t\"./nl-be\": 513,\n\t\"./nl-be.js\": 513,\n\t\"./nl.js\": 512,\n\t\"./nn\": 514,\n\t\"./nn.js\": 514,\n\t\"./pa-in\": 515,\n\t\"./pa-in.js\": 515,\n\t\"./pl\": 516,\n\t\"./pl.js\": 516,\n\t\"./pt\": 517,\n\t\"./pt-br\": 518,\n\t\"./pt-br.js\": 518,\n\t\"./pt.js\": 517,\n\t\"./ro\": 519,\n\t\"./ro.js\": 519,\n\t\"./ru\": 520,\n\t\"./ru.js\": 520,\n\t\"./sd\": 521,\n\t\"./sd.js\": 521,\n\t\"./se\": 522,\n\t\"./se.js\": 522,\n\t\"./si\": 523,\n\t\"./si.js\": 523,\n\t\"./sk\": 524,\n\t\"./sk.js\": 524,\n\t\"./sl\": 525,\n\t\"./sl.js\": 525,\n\t\"./sq\": 526,\n\t\"./sq.js\": 526,\n\t\"./sr\": 527,\n\t\"./sr-cyrl\": 528,\n\t\"./sr-cyrl.js\": 528,\n\t\"./sr.js\": 527,\n\t\"./ss\": 529,\n\t\"./ss.js\": 529,\n\t\"./sv\": 530,\n\t\"./sv.js\": 530,\n\t\"./sw\": 531,\n\t\"./sw.js\": 531,\n\t\"./ta\": 532,\n\t\"./ta.js\": 532,\n\t\"./te\": 533,\n\t\"./te.js\": 533,\n\t\"./tet\": 534,\n\t\"./tet.js\": 534,\n\t\"./tg\": 535,\n\t\"./tg.js\": 535,\n\t\"./th\": 536,\n\t\"./th.js\": 536,\n\t\"./tl-ph\": 537,\n\t\"./tl-ph.js\": 537,\n\t\"./tlh\": 538,\n\t\"./tlh.js\": 538,\n\t\"./tr\": 539,\n\t\"./tr.js\": 539,\n\t\"./tzl\": 540,\n\t\"./tzl.js\": 540,\n\t\"./tzm\": 541,\n\t\"./tzm-latn\": 542,\n\t\"./tzm-latn.js\": 542,\n\t\"./tzm.js\": 541,\n\t\"./ug-cn\": 543,\n\t\"./ug-cn.js\": 543,\n\t\"./uk\": 544,\n\t\"./uk.js\": 544,\n\t\"./ur\": 545,\n\t\"./ur.js\": 545,\n\t\"./uz\": 546,\n\t\"./uz-latn\": 547,\n\t\"./uz-latn.js\": 547,\n\t\"./uz.js\": 546,\n\t\"./vi\": 548,\n\t\"./vi.js\": 548,\n\t\"./x-pseudo\": 549,\n\t\"./x-pseudo.js\": 549,\n\t\"./yo\": 550,\n\t\"./yo.js\": 550,\n\t\"./zh-cn\": 551,\n\t\"./zh-cn.js\": 551,\n\t\"./zh-hk\": 552,\n\t\"./zh-hk.js\": 552,\n\t\"./zh-tw\": 553,\n\t\"./zh-tw.js\": 553\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 923;"],"sourceRoot":""}