{"version":3,"sources":["webpack://_N_E/./components/new/usedcar-card/index.tsx","webpack://_N_E/./new/used-car/list/components/helper.ts","webpack://_N_E/./server/common/utils.ts","webpack://_N_E/./components/new/usedcar-card/index.module.scss"],"names":["src","isVideo","recall_type","sku_id","seriesId","title","sub_title","cityName","tips","price","office_price","pv_text","sh_city_name","transfer_cnt","tag_text","onClick","includes","className","style","href","target","Cookies","rit_city","width","height","alt","hoverTransition","autoPixelRatio","layout","errorImg","logoLoadingRect","cusDefaultImg","position","left","top","transform","slice","map","tip","index","color","text_color","backgroundColor","background_color","logo","text","length","getSeries","params","req","url","getUrl","serializeObject","fetch","res","status","data","logger","message","buildQuery","query","dcar_score","Object","keys","reduce","prev","key","currentKey","val","param","getCars","limit","queryString","ip","getClientIP","method","headers","body","rawRes","json","fontStyleString","asgwFontLoader","toStyleString","fetchSeriesInfo","then","ctx","indexOf","ips","split","rIsLocal","test","isObject","socket","remoteAddress","replace","value","type","module","exports"],"mappings":"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","file":"static/chunks/888-06e1f6628ea40feb10a2.js","sourcesContent":["import * as React from 'react'\nimport { Image, logoLoadingRect } from 'Components/view-image'\nimport style from './index.module.scss'\nimport { ITag } from 'New/used-car/detail/services/getSimilarCarDetail'\nimport Cookies from '@arsenal/arsenal/modules/Cookies'\n\ninterface IProps {\n src?: string\n isVideo?: boolean\n recall_type?: number\n seriesId?: number\n sku_id?: number\n title?: string\n sub_title?: string\n cityName?: string\n tips?: ITag[]\n price?: string\n office_price?: string\n pv_text?: string\n sh_city_name?: string\n transfer_cnt?: number\n onClick?(): void\n}\n\nconst UsedcarCard: React.FC = ({\n src,\n isVideo,\n recall_type = 1,\n seriesId,\n sku_id,\n title,\n sub_title,\n cityName,\n tips,\n price,\n office_price,\n pv_text,\n sh_city_name,\n transfer_cnt = -1,\n onClick,\n}) => {\n const tag_text =\n recall_type === 2\n ? '相似车源'\n : [4, 5, 6, 7].includes(recall_type)\n ? '同品牌车源'\n : ''\n return (\n \n {\n if (!sh_city_name) return\n Cookies({ rit_city: sh_city_name })\n }}\n >\n
\n \n {isVideo ? (\n \n ) : null}\n {tag_text && (\n \n \n \n

\n {tag_text}\n \n

\n
\n \n )}\n {pv_text && (\n \n
\n \n {pv_text}\n
\n \n )}\n \n
\n \n

\n {title}\n

\n \n \n {sub_title}\n {cityName ? ` | ${cityName}` : ''}\n \n \n {tips?.slice(0, 3)?.map((tip, index) => {\n return (\n \n {!!tip?.logo && (\n \n )}\n {tip?.text}\n \n )\n })}\n {(tips?.length || 0) < 3 && transfer_cnt >= 0 && (\n \n {`过户${transfer_cnt || 0}次`}\n \n )}\n \n \n {`${price}`}\n \n {`新车指导价: ${office_price}`}\n \n \n
\n \n
\n )\n}\n\nexport default UsedcarCard\n","import getUrl from 'lib/url'\nimport { ISelectedOptions } from './reducer'\nimport fetch from 'lib/decorated-fetch'\nimport serializeObject from '@arsenal/arsenal/modules/serializeObject'\nimport { getClientIP } from '../../../../server/common/utils'\nimport { logger } from 'lib/slardar-utils'\nimport asgwFontLoader from '@byted/asgw-font-loader'\ninterface IGetSeriesParams {\n brand_id?: string\n sh_city_name?: string\n}\nexport interface IShSeriesData {\n series_id: number\n series_name: string\n image_url: string\n}\n\nexport const getSeries = async (params: IGetSeriesParams, req?: any) => {\n try {\n const url = getUrl(\n `/motor/pc/sh/sh_series_list?${serializeObject(params)}`,\n 'motor.pc_sh.api'\n )\n const res = await fetch(url, { req })\n if (res?.status === 0 && res.data) {\n return res.data\n }\n } catch (err) {\n logger.error(\n `[/motor/pc/sh/sh_series_list onError] error message: ${\n (err as any)?.message\n }, params:${serializeObject(params)}`\n )\n }\n}\n\nexport interface ICardTag {\n text?: string // 文案\n logo?: string // 图标\n text_color?: string // 文字颜色\n background_color?: string // 背景颜色\n}\nexport interface ISearchSHSkuInfo {\n sku_id?: number // 车源ID\n shop_id?: string // 店铺ID\n series_id?: number // 车系ID\n series_name?: string // 车系名称\n brand_id?: number // 品牌ID\n brand_name?: string // 品牌名称\n car_id?: number // 车款ID\n car_name?: string // 车款名称\n car_year?: number // 年款\n status?: number // 上下架状态\n car_source_city_name?: string // 车源所在地\n brand_source_city_name?: string // 品牌所在地\n spu_id?: number // spu id\n platform_type?: number // 车源平台(0-自营 1-58)\n group_id?: number // 关联gid\n group_id_str?: string // 关联gid str\n image?: string // 图片\n sh_price: string // 二手车价格\n official_price?: string // 官方指导价\n tags?: ICardTag[] // 标签列表\n related_video_thumb?: string // 视频缩略图(没有缩略图显示图片)\n car_age?: string // 车龄\n car_mileage?: string // 里程\n title?: string // 卡片标题\n sub_title?: string // 卡片子标题\n is_video?: boolean // 是否有视频\n car_source_type?: string\n authentication_method?: string\n transfer_cnt?: number\n}\nexport interface ISearchSHSkuListData {\n search_sh_sku_info_list?: ISearchSHSkuInfo[]\n has_more?: boolean\n total?: number\n}\nexport interface SearchSHSkuListResp {\n prompts: string\n status: number\n message: string\n data: ISearchSHSkuListData\n}\n\nfunction buildQuery(query: any) {\n delete query.dcar_score\n return Object.keys(query)?.reduce((prev: string, key: string) => {\n let currentKey = key\n let val = query[key]\n if (!val) return prev\n if (typeof query[key] === 'object') {\n if (key === 'tab') {\n val = '1'\n currentKey = query[key][0].key\n } else {\n val = query[key][0].param\n }\n }\n return `${prev}&${currentKey}=${val}`\n }, '')\n}\nexport const getCars = async (query: any, limit: number, req?: any) => {\n query.limit = limit\n const queryString = buildQuery(query)\n try {\n let ip = ''\n if (req) {\n ip = getClientIP(req)\n }\n const res = await fetch(\n getUrl('/motor/pc/sh/sh_sku_list', 'motor.pc_sh.api'),\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'x-forwarded-for': ip,\n },\n body: queryString,\n req,\n rawRes: true,\n }\n )\n const json = await res.json()\n const fontStyleString = asgwFontLoader\n ?.parseHeaders(res?.headers)\n ?.toStyleString()\n if (json?.status === 0 && json.data) {\n return { ...json.data, fontStyleString }\n }\n return {}\n } catch (err) {\n logger.error(\n `[/motor/pc/sh/sh_sku_list onError]error message: ${\n (err as any)?.message\n }, params:${queryString} `\n )\n return {}\n }\n}\n\nexport const getParamsFromState = (state: ISelectedOptions) => {\n return Object.entries(state)\n .filter(([, value]) => !!value && value.length > 0)\n .map(([key, value]) => {\n if (!value) {\n return ''\n }\n return `${key}=${value?.map((item) => item.param).join(',')} `\n })\n .join('&')\n}\n\nexport const fetchSeriesInfo = (seriesId: string, req?: any) => {\n return fetch(\n getUrl(\n `/motor/pc/car/series/get_series_info?series_id=${seriesId}`,\n 'motor.pc_car.api'\n ),\n { req }\n ).then((data) => data)\n}\n","import * as Koa from 'koa'\n\nexport function getClientIP(ctx: Koa.Context) {\n let ip = ctx.headers['ali-cdn-real-ip'] || ctx.headers['x-real-ip']\n if (ip) {\n return ip\n }\n\n ip = ctx.headers['x-forwarded-for']\n if (ip) {\n if (ip.indexOf(',') === -1) {\n return ip\n }\n const ips = (ip as string).split(/,\\s*/)\n const rIsLocal = /^(10|192\\.168)\\./\n if (ips.length > 1 && rIsLocal.test(ips[0]) && !rIsLocal.test(ips[1])) {\n return ips[1]\n }\n return ips[0]\n }\n\n if (isObject(ctx) && isObject(ctx.req)) {\n // koa\n ip = ctx.req && ctx.req.socket.remoteAddress\n } else {\n // express\n ip = ctx.socket.remoteAddress\n }\n\n if (!ip) {\n return '255.255.255.255'\n }\n if (ip === '::1') {\n return '127.0.0.1'\n }\n\n return ip.replace(/^:.*:/, '')\n}\n\nexport function isObject(value: any) {\n const type = typeof value\n return value != null && (type === 'object' || type === 'function')\n}\n\nconst SPIDER_UA = [\n 'Baiduspider-image',\n 'Baiduspider-video',\n 'Baiduspider-news',\n 'Baiduspider-image',\n 'Baiduspider-render',\n 'Baiduspider',\n 'Googlebot-Image',\n 'Googlebot',\n '360Spider',\n 'Sogou Pic Spider',\n 'Sogou News Spider',\n 'Sogou Video Spider',\n 'Sogou web spider',\n 'SogouSpider',\n 'YisouSpider',\n 'bingbot',\n 'msnbot',\n 'msnbot-media',\n 'Yahoo! Slurp China',\n 'Yahoo!',\n 'Bytespider',\n]\n\nexport const getSpider = (ua: string) => {\n return SPIDER_UA.find((spiderKey) => {\n if (-1 !== (ua || '').indexOf(spiderKey)) {\n return true\n }\n return false\n })\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"usedcar-card_card__3vUrx\",\"tag\":\"usedcar-card_tag__2YOZg\",\"card-top\":\"usedcar-card_card-top__7HCn3\",\"card-bottom\":\"usedcar-card_card-bottom__3OMb_\",\"tag-box\":\"usedcar-card_tag-box__1jkc1\"};"],"sourceRoot":""}