\n {new Array(5).fill(undefined).map((item, index) => {\n return (\n
= 4,\n '2xl:tw-block': index >= 4,\n })}\n />\n )\n })}\n \n
\n )\n }\n\n return (\n
\n
\n {\n sendTeaCommEvent('clk_event', {\n event_id: 'dscore_module_title',\n module_id: 'dscore_module',\n })\n }}\n />\n \n \n \n
\n
\n {swiperCarList.length ? renderSwiper() : renderBg()}\n
\n \n
\n )\n})\n","/* eslint-disable no-unused-expressions */\n/* eslint-disable @typescript-eslint/class-name-casing */\n/* eslint-disable @typescript-eslint/interface-name-prefix */\nimport React, { useEffect, useState } from 'react'\nimport Link from 'next/link'\nimport { useInView } from 'react-intersection-observer'\nimport { sendTeaCommEvent } from 'lib/tea-analyze'\nimport SeriesDetailLink from 'Components/links/series-detail'\nimport classnames from 'classnames'\nimport { useResponsive } from 'Components/hooks/use-responsive'\nimport getUrl from 'lib/url'\nimport fetch from 'lib/decorated-fetch'\nimport SwiperButton from 'Components/swiper-button'\nimport { Image } from 'Components/view-image'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport SwiperCore, { Navigation } from 'swiper'\nimport serializeObject from '@arsenal/arsenal/modules/serializeObject'\nimport { logger } from 'lib/slardar-utils'\nimport TryCatchRender from 'Components/try-catch-render'\n\nSwiperCore.use([Navigation])\n\nexport interface IPanoramicCar {\n ns_cover_url: string\n panoramic_url: string\n series_name: string\n series_id: number\n}\n\ninterface ICarData {\n value: number | string\n text: string\n link: string\n}\n\nexport interface ISeriesData {\n series_id: number\n series_name: string\n cover_url: string\n series_type: number //车系类型 0 轿车 1 suv 2 mvp\n is_new_energy: boolean // 是否是新能源\n}\ninterface IConfig {\n [key: string]: {\n page: number\n types: number[]\n }\n}\n\n// - 4列(1920):4列*2行*6切=48个内容(最大值)\n// - 3列(1680/1440/1280/1024):3列*2行*8切=48个内容(最大值)\n\n// - 1)4列(1920): 每一组数据8个(轿车2、suv2、mpv 2、新能源2);排序(轿车>suv>mpv>新能源); 点击后跳转车系首页\n// - 2) 3列(1680/1440/1280/1024):每一组数据6个(轿车2、suv2、mpv1、新能源1);排序(轿车>suv>mpv>新能源);点击后跳转车系首页\n\nconst pageConfig: IConfig = {\n 8: {\n page: 6,\n types: [2, 2, 2, 2],\n },\n 6: {\n page: 8,\n types: [2, 2, 1, 1],\n },\n}\n\nconst smNum = 6\nconst lgNum = 8\n\nexport const getCarAtlasData = async (req: any) => {\n const params = {\n limousine_pic_num: 16,\n suv_pic_num: 16,\n mpv_pic_num: 12,\n energy_pic_num: 12,\n panoramic_pic_num: 2,\n total_pic_num: 58,\n }\n const url = getUrl(`/motor/pc/car/rcm_picture?${serializeObject(params)}`)\n const json = await fetch(url, {\n req,\n }).catch((err) => {\n logger.warn(`[fetch] carAtlasData error. err=${err.message}`)\n return {}\n })\n const data = json?.data || {}\n return data\n}\n\nfunction CarAtlas() {\n const [frameTimes, setFrameTimes] = useState(pageConfig?.[smNum]?.['page'])\n\n const carList = [\n {\n value: 0,\n text: '轿车',\n link: 'key=series_type¶m=0&text=轿车',\n },\n {\n value: 1,\n text: 'SUV',\n link: 'key=series_type¶m=1&text=SUV',\n },\n {\n value: 2,\n text: 'MPV',\n link: 'key=series_type¶m=2&text=MPV',\n },\n {\n value: 4,\n text: '跑车',\n link: 'key=series_type¶m=4&text=跑车',\n },\n {\n value: 'xxx', // 等待添加参数\n text: '新能源',\n link: 'key=new_energy¶m=1&text=新能源',\n },\n {\n value: 3,\n text: '皮卡',\n link: 'key=series_type¶m=3&text=皮卡',\n },\n {\n value: 7,\n text: '微面',\n link: 'key=series_type¶m=7&text=微面',\n },\n {\n value: 8,\n text: '微卡',\n link: 'key=series_type¶m=8&text=微卡',\n },\n {\n value: 6,\n text: '轻客',\n link: 'key=series_type¶m=6&text=轻客',\n },\n ]\n\n const [picNum, setPicNum] = useState
(smNum)\n const [swiperCarList, setSwiperCarList] = useState([])\n const responsive = useResponsive()\n\n const navigationPrevRef = React.useRef(null)\n const navigationNextRef = React.useRef(null)\n\n const computedCarList = (num: number, seriesList: ISeriesData[]) => {\n const typeList: ISeriesData[][] = [[], [], []]\n const newEnergy: ISeriesData[] = []\n seriesList?.forEach((item) => {\n if (item?.is_new_energy) {\n newEnergy?.push(item)\n } else {\n if (typeList?.[item.series_type]) {\n typeList[item.series_type].push(item)\n }\n }\n })\n typeList?.push(newEnergy)\n let result: ISeriesData[] = []\n let isContinue = true\n let times = 0\n const currentPageConfig = pageConfig?.[num]\n while (isContinue) {\n let isAdd = true // 必须遍历添加完整的一组数组\n let tmp: ISeriesData[] = []\n currentPageConfig?.types?.forEach((value, index) => {\n if (typeList?.[index]?.length < value) {\n isAdd = false\n return\n }\n tmp = tmp.concat(typeList?.[index]?.splice(0, value))\n })\n if (isAdd) {\n result = result?.concat(tmp)\n times++\n } else {\n isContinue = false\n }\n if (result?.length >= currentPageConfig?.page * num) {\n isContinue = false\n }\n }\n setFrameTimes(times)\n setSwiperCarList(result)\n setPicNum(num)\n }\n\n const [seriesList, setSeriesList] = useState([])\n const [panoramicCarList, setPanoramicCarList] = useState([])\n useEffect(() => {\n let num = smNum\n if (responsive['2xl']) {\n num = lgNum\n }\n computedCarList(num, seriesList)\n }, [seriesList, panoramicCarList, responsive?.['2xl']])\n\n const [ref, inView] = useInView({\n threshold: 0,\n })\n\n useEffect(() => {\n async function init() {\n try {\n const data = await getCarAtlasData(null)\n setSeriesList(data?.nice_series_list || [])\n setPanoramicCarList(data?.panoramic_car_list || [])\n } catch (error) {\n logger.warn(`[fetch] carAtlasData error. err=${error.message}`)\n }\n }\n init()\n }, [])\n useEffect(() => {\n if (inView) {\n // - 精美车图 series_pic_module\n sendTeaCommEvent('show_event', {\n event_id: 'common_conponent_module',\n module_id: 'series_pic_module',\n })\n }\n }, [inView])\n /* 渲染车型的分类 */\n function renderCar(param: ICarData, index: number) {\n return (\n \n {\n sendTeaCommEvent('clk_event', {\n event_id: 'series_pic_module_keywords',\n module_id: 'series_pic_module',\n button_name: param.text,\n })\n }}\n >\n {param.text}\n \n \n \n )\n }\n\n function textLink(\n item: any,\n index: number,\n id: string,\n type: string,\n button_name?: string\n ) {\n return (\n \n {\n sendTeaCommEvent('clk_event', {\n event_id: id,\n car_series_id: `${item?.series_id}`,\n car_series_name: button_name || item?.series_name,\n rank: index,\n module_id: 'series_pic_module',\n button_name: button_name || '',\n })\n }}\n >\n {button_name || item?.series_name}\n \n \n \n )\n }\n\n /* 底部文字 */\n function renderTextLine(item: any, index: number) {\n return (\n \n
\n {textLink(item, index, 'series_pic_module_series_text', '')}\n
\n
\n {textLink(item, index, 'series_pic_module_pic_btn', 'wg', '外观')}|\n {textLink(item, index, 'series_pic_module_pic_btn', 'ns', '内饰')}|\n {textLink(item, index, 'series_pic_module_pic_btn', 'kj', '空间')}\n
\n \n
\n )\n }\n\n return (\n \n
\n
\n
\n
\n {swiperCarList?.length ? (\n
{\n sendTeaCommEvent('clk_event', {\n event_id: 'series_pic_module_change',\n module_id: 'series_pic_module',\n })\n }}\n >\n {new Array(frameTimes)\n .fill(undefined)\n .map((noItem: number, index: number) => {\n const currentIndex = index * picNum\n const currectList = swiperCarList.slice(\n currentIndex,\n currentIndex + picNum\n )\n const seriesBig = swiperCarList[currentIndex]\n return (\n \n \n {currectList?.map((item, i) => (\n
\n
\n {\n sendTeaCommEvent('clk_event', {\n event_id: 'series_pic_module_pic',\n car_series_id: `${item?.series_id}`,\n car_series_name: item?.series_name,\n rank: `${index}`,\n material_url: item?.cover_url,\n module_id: 'series_pic_module',\n })\n }}\n >\n \n \n {renderTextLine(item, index)}\n
\n
\n ))}\n
\n \n )\n })}\n \n \n \n ) : (\n
\n {new Array(8).fill(undefined).map((item, i) => (\n
\n
= 6,\n '2xl:tw-block': i >= 6,\n }\n )}\n >\n

\n
\n
\n ))}\n
\n )}\n
\n
\n
\n
\n
\n
{\n sendTeaCommEvent('clk_event', {\n event_id: '360_view_module_title',\n module_title: '360度看车',\n module_id: '360_view_module',\n })\n }}\n >\n 360度看车\n
\n
\n {panoramicCarList?.length ? (\n panoramicCarList?.map(\n (panoramicCar: IPanoramicCar, index: number) => {\n return (\n
\n
{\n sendTeaCommEvent('clk_event', {\n event_id: '360_view_module_item',\n car_series_id: `${panoramicCar?.series_id}`,\n car_series_name: panoramicCar?.series_name,\n rank: `${index}`,\n module_id: '360_view_module',\n })\n }}\n target=\"_blank\"\n >\n \n
\n
\n
\n
\n {panoramicCar?.series_name} - 360°全景内饰\n
\n
\n
\n \n \n )\n }\n )\n ) : (\n <>\n
\n
\n >\n )}\n
\n \n
\n )\n}\n\nexport default TryCatchRender(CarAtlas)\n","import React from 'react'\nimport { Image } from 'Components/view-image'\nimport imageStyles from 'Components/view-image/style'\ninterface ISlide {\n className?: string\n items: IItem[]\n onClick?: (\n pic_size: 'small' | 'big',\n target_url: string,\n item_rank: 0 | 1 | undefined\n ) => void\n}\n\ninterface IItem {\n type: 1101 | 1102 | 1103\n gid: string\n img_url: string\n title: string\n is_ugc: boolean\n}\n\nconst Slide = (props: ISlide) => {\n const { className, items = [], onClick } = props\n\n if (items.length === 0) {\n return (\n \n )\n }\n const item1 = items.find((e) => e.type === 1101)\n const item2 = items.find((e) => e.type === 1102)\n const item3 = items.find((e) => e.type === 1103)\n return (\n \n )\n}\n\nexport default Slide\n","import React, { useEffect, useMemo, useRef } from 'react'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport SwiperCore, {\n Navigation,\n Pagination,\n Autoplay,\n EffectFade,\n} from 'swiper'\nimport Slide from './slide'\nimport { sendTeaCommEvent } from 'lib/tea-analyze'\nimport { BANNER } from './constant/module-id'\nimport { useInView } from 'react-intersection-observer'\n\nSwiperCore.use([Navigation, Pagination, Autoplay, EffectFade])\n\ninterface IListItem {\n group_id: string\n img_url: string\n title: string\n is_ugc: boolean\n}\n\nexport type PicList = {\n pic_type: 1101 | 1102 | 1103\n pic_list: IListItem[]\n}[]\n\ninterface IBanner {\n className?: string\n focus_pic: PicList\n}\n\nconst Banner = (props: IBanner) => {\n const { className, focus_pic: list = [] } = props\n const [ref, inView] = useInView({\n threshold: 0,\n })\n const inViewRef = useRef(false)\n useEffect(() => {\n inViewRef.current = inView\n }, [inView])\n const reformedList = useMemo(() => {\n if (list.length === 0) {\n return []\n }\n const rl = []\n const min = list.reduce((acc, cur) => {\n if (cur?.pic_list?.length < acc) {\n return cur.pic_list.length\n } else {\n return acc\n }\n }, list?.[0]?.pic_list?.length || 0)\n for (let i = 0; i < min; i++) {\n const item = []\n for (let j = 0; j < list.length; j++) {\n item.push({\n type: list[j]?.pic_type,\n gid: list[j]?.pic_list?.[i]?.group_id,\n img_url: list[j]?.pic_list?.[i]?.img_url,\n title: list[j]?.pic_list?.[i]?.title,\n is_ugc: list[j]?.pic_list?.[i]?.is_ugc,\n })\n }\n item.sort((a, b) => a.type - b.type)\n rl.push(item)\n }\n return rl\n }, [list])\n\n return (\n \n {reformedList.length > 1 ? (\n
{\n if (inViewRef.current) {\n sendTeaCommEvent('show_event', {\n event_id: 'pic_banner_module_item',\n rank: swiper.realIndex,\n module_id: BANNER,\n })\n }\n }}\n >\n {reformedList.map((imgs, index) => (\n \n {\n sendTeaCommEvent('clk_event', {\n event_id: 'pic_banner_module_item_pic',\n rank: index,\n pic_size,\n target_url,\n item_rank,\n })\n }}\n />\n \n ))}\n {\n sendTeaCommEvent('clk_event', {\n event_id: 'pic_banner_module_change',\n module_id: BANNER,\n })\n }}\n />\n
{\n sendTeaCommEvent('clk_event', {\n event_id: 'pic_banner_module_change',\n module_id: BANNER,\n })\n }}\n />\n \n ) : (\n
{\n sendTeaCommEvent('clk_event', {\n event_id: 'pic_banner_module_item_pic',\n rank: 0,\n pic_size,\n target_url,\n item_rank,\n })\n }}\n />\n )}\n {reformedList.length > 1 && (\n {\n if (eve.target !== eve.currentTarget) {\n let i\n for (i = 0; i < eve.currentTarget.children.length; i++) {\n if (eve.currentTarget.children[i] === eve.target) {\n break\n }\n }\n sendTeaCommEvent('clk_event', {\n event_id: 'pic_banner_module_pagination',\n module_id: BANNER,\n rank: i,\n })\n }\n }}\n />\n )}\n\n \n
\n )\n}\n\nexport default Banner\n","export const BANNER = 'banner'\n","import React, { RefObject, useEffect, useRef, useState } from 'react'\nimport { ResizeObserver } from '@juggle/resize-observer'\nimport { getTextWidth } from 'lib/get-text-width'\nimport { sendTeaCommEvent } from 'lib/tea-analyze'\nimport { TODAY_NEWS } from './constants/module-id'\n\nconst default_icon = require('static/today-news-default.png')\nconst video_orange_icon = require('static/video-red.svg')\nconst video_red_icon = require('static/video-hot.svg')\nconst video_black_icon = require('static/video-gray.svg')\nexport interface MisData {\n gid: string\n gid_str: string\n title: string\n url: string\n hot: number\n is_video: boolean\n}\n\ninterface IProps {\n todayNews: MisData[]\n bannerRef?: RefObject\n}\n\nconst _sliceNews = (\n news: MisData[],\n maxWidth: number,\n font = '16px PingFang SC',\n maxNum = 5,\n splitterWidth = 1,\n videoIconWidth = 20,\n margin = 12\n) => {\n const cur: {\n value: number\n indices: number[]\n } = {\n value: 0,\n indices: [],\n }\n for (let i = 0; i < news.length; i++) {\n const width = getTextWidth(news[i].title, font)\n if (i === 0) {\n cur.value += width + (news[i].is_video ? videoIconWidth : 0)\n cur.indices.push(i)\n continue\n }\n if (\n cur.value +\n width +\n splitterWidth +\n margin * 2 +\n (news[i].is_video ? videoIconWidth : 0) <=\n maxWidth\n ) {\n cur.value +=\n width +\n splitterWidth +\n margin * 2 +\n (news[i].is_video ? videoIconWidth : 0)\n cur.indices.push(i)\n }\n if (cur.indices.length === maxNum) {\n // TODO:\n break\n }\n }\n\n const result = []\n for (const index of cur.indices.reverse()) {\n result.unshift(...news.splice(index, 1))\n }\n\n return result\n}\n\nconst groupByWidth = (news: MisData[], max: number) => {\n const result = []\n\n const firstLine = _sliceNews(news, max, '18px PingFang SC')\n result.push(firstLine)\n while (news.length > 0) {\n const row = _sliceNews(news, max)\n result.push(row)\n }\n return result\n}\n\nexport default function TodayNews({ todayNews }: IProps) {\n const [handledNews, setHandledNews] = useState([])\n const boxRef = useRef(null)\n const [show, setShow] = useState(false)\n const [marginTop, setMarginTop] = useState(8)\n const ref = useRef(null)\n useEffect(() => {\n // @ts-ignore\n if (!todayNews?.length) {\n return\n }\n const resizeObserver = new ResizeObserver(\n // @ts-ignore\n (entries: ResizeObserverEntry[]) => {\n window.requestAnimationFrame(() => {\n for (const entry of entries) {\n const { width } = entry.contentRect\n const rows = groupByWidth([...todayNews], width) || []\n setHandledNews(rows)\n const height = ref.current?.clientHeight || 0\n const rowQuantity =\n Math.floor((height - 24) / 32) >= rows.length - 1\n ? rows.length - 1\n : Math.floor((height - 24) / 32)\n setMarginTop((height - 24) / rowQuantity - 24)\n setShow(true)\n }\n })\n }\n )\n if (boxRef.current) {\n resizeObserver.observe(boxRef.current)\n }\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [todayNews])\n\n return (\n \n
\n
\n\n {handledNews?.slice?.(1)?.map((row, index) => (\n
\n ))}\n
\n \n
\n )\n}\n","export const TODAY_NEWS = 'today_news'\n","import React, { useEffect } from 'react'\nimport HomeOriginal from './components/home-original'\nimport HomeVideo from './components/home-video'\nimport HomeLive from './components/home-live'\nimport HomeFeed from './components/home-feed'\nimport { IFriendshipLinkData } from './components/friendship-link'\nimport Head from 'next/head'\nimport ChooseCar from './components/choose-car'\nimport DongCheFen from './components/dong-che-fen'\nimport CarAtlas from './components/car-atlas'\nimport { getNewCarData } from './components/choose-car/new-car'\nimport { getPopularModels } from './components/choose-car/popular-model'\n\nimport {\n getHomeOriginal,\n ICommonVideoData,\n getTodayNews,\n getFocusPic,\n getPGCVideoRank,\n getPGCArticleRank,\n ICommonContentRankItem,\n} from './services/home'\nimport Banner, { PicList } from './components/banner'\nimport TodayNews, { MisData } from './components/today-news'\n\ninterface IProps {\n homeOriginal: {\n video_list: ICommonVideoData[]\n column_tab: { column_id: number; name: string }[]\n }\n friendshipLinkData: IFriendshipLinkData[]\n categoryListOriginalData: string[]\n todayNews: MisData[]\n focusPic: PicList\n videoPGCRankData: ICommonContentRankItem[]\n [key: string]: any\n}\n\nexport default function Home(data: IProps) {\n // usePageLeave()\n useEffect(() => {\n window.onbeforeunload = function () {\n window.scrollTo(0, 0)\n }\n return () => {\n window.onbeforeunload = null\n }\n })\n\n return (\n \n \n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n \n
\n )\n}\n\nHome.getInitialProps = async ({ req }: any): Promise => {\n const data = await Promise.all([\n getHomeOriginal(req),\n Promise.resolve(),\n Promise.resolve(),\n getNewCarData(req),\n getPopularModels(req),\n getTodayNews(req),\n getFocusPic(req),\n getPGCVideoRank(req),\n getPGCArticleRank(req),\n ])\n return {\n _pageType: 'new',\n homeOriginal: data?.[0],\n friendshipLinkData: null!,\n categoryListOriginalData: null!,\n newCarData: data?.[3],\n popularModels: data?.[4],\n todayNews: data?.[5],\n focusPic: data?.[6],\n videoPGCRankData: data?.[7],\n articlePGCRankData: data?.[8],\n }\n}\n","import Home from 'New/home'\n\nexport default Home\n","import * as React from 'react'\nimport classNames from 'classnames'\n\ninterface IProps {\n type?: 'prev' | 'next'\n className?: string\n clkTeaParams?: string\n buttonStyle?: React.CSSProperties\n onClick?: () => void\n theme?: 'light' | 'gray'\n}\nconst SwiperButton = React.forwardRef(\n (\n {\n type = 'prev',\n className = '',\n buttonStyle = {},\n onClick,\n clkTeaParams,\n theme = 'light',\n },\n ref\n ) => {\n return (\n \n onClick?.()}\n className={classNames('button-wrapper', className, type)}\n style={buttonStyle}\n data-log-click={clkTeaParams}\n >\n \n \n \n \n )\n }\n)\n\nexport default SwiperButton\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport $ from '../../utils/dom';\nimport { extend, bindModuleMethods } from '../../utils/utils';\nvar Navigation = {\n toggleEl: function toggleEl($el, disabled) {\n $el[disabled ? 'addClass' : 'removeClass'](this.params.navigation.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n },\n update: function update() {\n // Update Navigation Buttons\n var swiper = this;\n var params = swiper.params.navigation;\n var toggleEl = swiper.navigation.toggleEl;\n if (swiper.params.loop) return;\n var _swiper$navigation = swiper.navigation,\n $nextEl = _swiper$navigation.$nextEl,\n $prevEl = _swiper$navigation.$prevEl;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n toggleEl($prevEl, true);\n } else {\n toggleEl($prevEl, false);\n }\n\n $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n toggleEl($nextEl, true);\n } else {\n toggleEl($nextEl, false);\n }\n\n $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n },\n onPrevClick: function onPrevClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop) return;\n swiper.slidePrev();\n },\n onNextClick: function onNextClick(e) {\n var swiper = this;\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop) return;\n swiper.slideNext();\n },\n init: function init() {\n var swiper = this;\n var params = swiper.params.navigation;\n if (!(params.nextEl || params.prevEl)) return;\n var $nextEl;\n var $prevEl;\n\n if (params.nextEl) {\n $nextEl = $(params.nextEl);\n\n if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {\n $nextEl = swiper.$el.find(params.nextEl);\n }\n }\n\n if (params.prevEl) {\n $prevEl = $(params.prevEl);\n\n if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {\n $prevEl = swiper.$el.find(params.prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', swiper.navigation.onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', swiper.navigation.onPrevClick);\n }\n\n extend(swiper.navigation, {\n $nextEl: $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl: $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n },\n destroy: function destroy() {\n var swiper = this;\n var _swiper$navigation2 = swiper.navigation,\n $nextEl = _swiper$navigation2.$nextEl,\n $prevEl = _swiper$navigation2.$prevEl;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', swiper.navigation.onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', swiper.navigation.onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n};\nexport default {\n name: 'navigation',\n params: {\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock'\n }\n },\n create: function create() {\n var swiper = this;\n bindModuleMethods(swiper, {\n navigation: _extends({}, Navigation)\n });\n },\n on: {\n init: function init(swiper) {\n swiper.navigation.init();\n swiper.navigation.update();\n },\n toEdge: function toEdge(swiper) {\n swiper.navigation.update();\n },\n fromEdge: function fromEdge(swiper) {\n swiper.navigation.update();\n },\n destroy: function destroy(swiper) {\n swiper.navigation.destroy();\n },\n click: function click(swiper, e) {\n var _swiper$navigation3 = swiper.navigation,\n $nextEl = _swiper$navigation3.$nextEl,\n $prevEl = _swiper$navigation3.$prevEl;\n var targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n var isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n swiper.emit('navigationShow');\n } else {\n swiper.emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n }\n }\n};","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","module.exports = \"data:image/png;base64,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\"","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/6-87dd555fb969eae8ac52c492ae5a09c7.png\";","import React, {\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport Router from 'next/router'\nimport 'xgplayer'\nimport FlvPlayer from 'xgplayer-flv'\nimport XgLiveLogger from '@byted/xgplayer-live-logger'\n\nexport default (\n url: string,\n id: string,\n onPlay?: () => void,\n onEnded?: () => void,\n onError?: (err: any) => void\n) => {\n const _player = new FlvPlayer({\n id,\n url: url.replace('http://', 'https://'),\n isLive: true,\n playsinline: true,\n fluid: true,\n autoplay: true,\n crossOrigin: true,\n autoplayMuted: true,\n closePlayVideoFocus: true,\n closeFocusVideoFocus: true,\n ignores: [\n 'time',\n 'definition',\n 'error',\n 'fullscreen',\n 'i18n',\n 'loading',\n 'mobile',\n 'play',\n 'poster',\n 'progress',\n 'replay',\n 'volume',\n ],\n controls: false,\n closeVideoClick: true,\n })\n _player.on('play', () => {\n onPlay && onPlay()\n console.log('play')\n })\n _player.on('error', (err: any) => {\n onError && onError(err)\n console.log(err, 'ffffff')\n })\n _player.on('ended', () => {\n onEnded && onEnded()\n console.log('ened')\n })\n\n try {\n const logger = new XgLiveLogger({\n player: _player, // xgplayer播放器实例(必传)\n aid: '1839', // 应用id(必传)请在https://appcloud.bytedance.net/上申请\n project_key: 'auto_web_pc', //项目名称(必传)\n app_name: 'auto_web_pc', // app名称(必传)\n ext: {\n home_live: 1,\n },\n onReport: (event_key: string, data: Record) => {\n console.log(event_key)\n },\n })\n } catch (e) {\n //qq浏览器mac 报错\n }\n\n return _player\n}\n","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/7-4eeca61724ad0b49eafa5d03a5a151f3.png\";","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/0-a8169f673dce3d9f6749fa8876b89a82.png\";","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/new-car-bg-aa366d4dbb4eabd50b336391df15dc2e.png\";","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/yellow-star-4c3f8a8599bc35406d4039b07b1d2b39.png\";","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/score-bg-4064bbedc64a292a4cf073a8be22a52b.png\";","module.exports = \"https://sf6-scmcdn2-tos.pstatp.com/motor/pc/_next/static/images/3-181403962caf61f4700534834a46d9fc.png\";","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n"],"sourceRoot":""}