{"version":3,"sources":["webpack:///../utils/compareVersion.ts","webpack:///../libs/ad.ts","webpack:///../services/pageControl.ts","webpack:///../utils/cache.ts","webpack:///../components/common/image/index.tsx","webpack:///../components/swipeout-page/index.scss?e8f9","webpack:///../components/swipeout-page/index.scss","webpack:///../utils/ad.ts","webpack:///../components/common/popup/index.tsx","webpack:///../utils/ab.ts","webpack:///../services/coupon/type.ts","webpack:///../utils/helper.ts","webpack:///../components/common/modal/index.tsx","webpack:///../components/coupon/reducer.ts","webpack:///../node_modules/compare-versions/index.js","webpack:///../components/notice/base/notice.svg","webpack:///../components/notice/base/error.svg","webpack:///../components/notice/base/index.tsx","webpack:///../services/coupon/get-coupon-list.ts","webpack:///../utils/common-func.ts","webpack:///../node_modules/core-js/modules/es.parse-int.js","webpack:///../node_modules/core-js/modules/es.array.from.js","webpack:///../types/campaign.ts","webpack:///../node_modules/core-js/internals/number-parse-int.js","webpack:///../components/common/modal/index.scss?83f1","webpack:///../components/common/modal/index.scss","webpack:///../components/common/image/index.scss?45ea","webpack:///../components/common/image/index.scss","webpack:///../components/common/image/img/img-bg.png","webpack:///../node_modules/redux-logger/dist/redux-logger.js","webpack:///../components/common/popup/index.scss?5283","webpack:///../components/common/popup/index.scss","webpack:///../node_modules/core-js/internals/array-from.js","webpack:///../libs/get-coupn-id.ts","webpack:///../services/coupon/compute-coupon-discount.ts","webpack:///../node_modules/core-js/modules/es.array.sort.js","webpack:///../components/notice/base/index.scss?7e0e","webpack:///../components/notice/base/index.scss","webpack:///../utils/openlink-then-close-self.ts","webpack:///../services/product/tecEvent.ts","webpack:///../libs/send-log.ts","webpack:///../services/coupon/map-coupon-data.ts","webpack:///../services/coupon/coupon-for-goods-list.ts","webpack:///../node_modules/core-js/modules/es.object.values.js","webpack:///../utils/stylePrefix.ts","webpack:///../utils/risk-control.ts","webpack:///../services/coupon/classify-coupon-by-shop.ts","webpack:///../services/campaign/compute-full-discount.ts","webpack:///../components/pay/middlewares/order.ts","webpack:///../services/campaign/index.ts","webpack:///../services/campaign/differ-multi-campaign.ts","webpack:///../node_modules/core-js/modules/es.number.max-safe-integer.js","webpack:///../config/coupon.ts","webpack:///../services/cart/compute-cart-price.ts","webpack:///../services/coupon/get-maximum-coupon.ts","webpack:///../hooks/use-block-route.ts","webpack:///../services/coupon/change-coupon-status.ts","webpack:///./product/buynow/store/send-legalcode-middleware.ts","webpack:///../components/address/reducer.ts","webpack:///../components/swipeout-page/index.tsx","webpack:///../node_modules/core-js/modules/es.array.reverse.js","webpack:///../node_modules/big.js/big.js","webpack:///./product/buynow/store/prefetch-action.ts","webpack:///../services/goods/update-num.ts","webpack:///./product/buynow/store/base-reducer.ts"],"names":["compareVersion","pre","next","preVer","String","split","nextVer","maxL","Math","max","length","i","preVal","Number","nextVal","getAdInfoFromBridge","Promise","resolve","reject","query","getAdInfoLocal","json","JSON","parse","localStorage","getItem","Error","setTimeout","all","getContext","bridge","call","then","res","catch","err","a","result","context","ad","cid","ad_extra_data","entranceInfo","safeParse","decodeURIComponent","entrance_info","creative_id","log_extra","finally","extraQuery","useWebTitle","isAd","isAdPage","buynowUrl","id","comboId","comboNum","hideCustomTitleBar","joinExtraQuery","commonParams","reduce","acc","cur","webUrl","env","isInToutiao","compare","appVersion","getAbTestParams","timeout","flutterUrl","getSuffix","getAdInfoJson","encodeURIComponent","stringify","cartUrl","detailUrl","openProductDetail","extraParams","enterFrom","authorId","secAuthorId","options","ecomEntranceForm","v3EventsAdditions","webLink","openLink","title","hideBar","bounceDisable","isInAweme","kol_id","sec_author_id","qs","promotion_id","source_page","request_additions","enter_from","meta_params","product_type","schema","isInMobile","get","key","defaultValue","value","returnValue","Date","now","set","setValue","expires","data","__exp__","setItem","console","error","ImageComponent","src","className","size","useState","url","setUrl","loaded","setLoad","formatedImage","useMemo","imageSize","getClientImage","useEffect","image","Image","onLoad","removeAllListener","onError","removeEventListener","addEventListener","cx","data-src","style","backgroundImage","backgroundSize","backgroundPosition","content","module","transform","undefined","locals","exports","push","urlParams","page_id","origin_type","useRef","React","Popup","props","ref","showModal","setModal","el","current","show","classList","add","remove","clearTimeout","timerId","styleSet","modalStyleSet","clickModal","onModalClick","modalClassSet","children","platform","cache","abParamsInfo","API_EC","response","checkResponse","temai_ui","getValue","counter","tags","msg","message","getCouponType","coupon","type","straightReducedCoupon","indexOf","couponTypeConst","straightReduced","fullDiscountCoupon","fullDiscount","discountCoupon","discount","getCouponScope","platformCoupon","couponScopeConst","shopCoupon","shop","noop","back","supports","history","getMicroAppParams","entranceInfoString","openId","open_id","appId","app_id","getLiveEventParams","liveEvent","live_author_id","anchor_id","live_room_id","room_id","live_video_id","group_id","live_enter_from_merge","enter_from_merge","live_enter_method","enter_method","live_request_id","request_id","raw","Modal","modalRef","inTransition","setInTransition","onTransitionEnd","e","target","propertyName","onClick","GET_COUPON_LIST","REQUEST","SUCCESS","FAILURE","FETCH_CART_COUPON_LIST","UPDATE_COUPON_SELECT_CHANGE","cartCouponDataInit","plat_coupon","map","mapAppliedCoupons","shop_coupon","initCartCouponList","couponList","list","selected","restrictIds","priceInfo","goods","shopSet","Set","forEach","items","goodsItem","cartId","shopId","supplyId","item","supplyStatus","payType","goodsId","campaign","initComputeCartPrice","selectedCoupon","sortCoupon","available","goodsCoupon","selfCoupon","getSelfShopCoupon","Array","from","unAvailable","getUnavailableCoupon","getAvailableCoupon","classifyCoupon","classifyCouponByShop","Object","keys","getShopCoupon","filter","getPlatformCoupon","changeMultiShopStatus","otherCoupon","getOtherShopCoupon","maxDiscount","initCouponState","factors","sortedList","computeMaximumCouponForGoodsList","state","allCoupons","bestSelectedIds","selectedIds","availableIds","action","failure","payload","prototype","doPointObj","getCouponIdObj","sendEvent","assign","changeCouponStatus","price","selectObj","classifySelectedCouponByShop","isSingle","concat","requestCouponInfo","apiActionWrapper","product_id","requestCartCouponInfo","ids","updateCouponSelectChange","updateConponSelect","updateCouponByBase","cartCouponInit","setCartBestCoupon","setAvailableIds","semver","v","str","q","c","replace","patchIndex","arr","substring","tryParse","isNaN","validate","version","TypeError","test","compareVersions","v1","v2","s1","s2","n1","parseInt","n2","sp1","sp2","p1","p2","allowedOperators","operatorResMap","operator","op","join","validateOperator","styles","width","height","xmlns","d","fill","fillRule","Notice","text","canUseCouponInTime","getTime","startTime","canUseCouponInPrice","amount","couponType","threshold","canUseFullReducedCoupon","productId","isArray","liveEventParams","unavailableReason","explain","kol_scope_tag","kolUid","platformSubType","typeDetail","availableShopList","union","window","floor","availableProductList","canUseCoupon","isPre","goodsList","newGoodsList","len","j","isLimit","FDReducer","base","computeShopCouponBaseAmount","shopIds","shopLen","flag","computePlatformCouponBaseAmount","recheckPlatformCoupon","baseAmount","index","findIndex","splice","genGetURL","params","copyUrl","val","isZeroOrNul","greaterZero","$","parseIntImplementation","global","forced","stat","checkCorrectnessOfIteration","iterable","ECampaignType","trim","whitespaces","$parseInt","hex","FORCED","string","radix","S","___CSS_LOADER_URL___0___","urlEscape","t","super_","create","constructor","enumerable","writable","configurable","r","defineProperty","this","n","o","f","slice","apply","u","N","toString","l","s","p","g","prefilter","normalize","h","y","b","lhs","hasOwnProperty","m","rhs","w","x","kind","path","F","color","groupCollapsed","group","log","P","groupEnd","logger","actionTransformer","titleFormatter","timestamp","duration","toFixed","collapsed","colors","level","diff","started","startedTime","prevState","took","nextState","k","D","E","A","O","C","L","T","M","_","arguments","stateTransformer","errorTransformer","predicate","logErrors","diffPredicate","getState","dispatch","getHours","getMinutes","getSeconds","getMilliseconds","performance","Symbol","iterator","DeepDiff","defineProperties","observableDiff","applyDiff","applyChange","revertChange","isConflict","noConflict","transformer","defaults","createLogger","default","bind","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","toLength","createProperty","getIteratorMethod","arrayLike","step","argumentsLength","mapfn","mapping","iteratorMethod","done","pv_for","couponIdArr","coupon_id","getSelectedIdString","sort","computeCouponDiscount","couponDiscount","ceil","Big","mul","sub","div","maxDiscountLimit","getDiscountCouponAmount","credit","getStraightReducedCouponAmount","getFullReducedCouponAmount","aFunction","fails","arrayMethodIsStrict","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","proto","comparefn","config","openGap","douyin","appName","openConfig","closeAndOpen","isInVideo","document","visibilityState","close","includes","nativeReplace","reactId","location","href","baseSendEventAction","status","moduleName","time","api_path","fe_flag","time_interval","page_name","ACTION_TIME_MAP","START_REQUEST_TIME","LOADING_DISSMISS_TIME","sendPrefetchActionFailed","sendPrefetchActionStatus","sendCodeCompileTime","page_init_timestamp","new_source_type","sendUserClickToDispatchFirstRequest","sendUserClickToDismissLoading","sendLoadingDurationTime","jsbridgeSendLog","obj","eventObj","eventName","tag","labelName","label","extra","EVENT_ORIGIN_FEATURE","isDouYin","sendLogV1","metaId","coupon_meta_id","validPeriod","valid_period","periodType","period_type","shopName","shop_name","couponName","coupon_name","max_discount_limit","createTime","create_time","start_time","beginTime","begin_time","endTime","end_time","typeString","type_string","isShow","is_show","popUpText","pop_up_text","shop_id","platform_sub_type","type_detail","kol_uid","productIds","product_ids","kolUserTag","kol_user_tag","kolScopeTag","mapNotApplyCoupons","leftAmount","left_amount","userApplyTimes","user_apply_times","maxApplyTimes","max_apply_times","newList","SCReducer","goodsNew","canUseLen","hasComputedDis","item1","item2","FCReducer","$values","values","vendors","elementStyle","createElement","support3d","WebKitCSSMatrix","vendorPrefix","capitalStyle","charAt","toUpperCase","substr","renderRiskSDK","option","code","callback","errorCallback","Slardar","renderCaptcha","codeMap","20205","20206","20207","20208","getUserInfo","baseInfo","baseIId","iid","aid","install_id","did","device_id","region","showMode","successCb","challenge_code","warn","isInHotsoon","getInstallId","newData","createNewKey","computeFullDiscount","fullConfig","full_discount","bigFullSmall","reverse","full","pvTime","getAdInfo","orderMiddleware","store","overTimer","checkTimer","showQueueModalTimer","createOrderExtraInfo","requestTokenTimer","overTimeLock","pollCounter","startDisplayQueueTime","microAppParams","token","requestTokenCounter","payHandler","finalStatus","orderId","order_id","orderIds","couponIdObj","st","toggleSupportRetIns","transferStatus","pay","payStatus","PayStatus","OrderFail","retInsDialogContent","retInsDialogShow","Queue","setPayParams","setQueueTips","START_CHECK_QUEUE","CHECK_QUEUE","WaitingToken","START_REQUEST_TOKEN","setFailure","Paying","Fail","createOrder","toast","timeDiff","PAY_ORDER","stage","STOP_CHECK_QUEUE","Ready","getToken","clearInterval","requestToken","payParams","setQueueStatus","QueueStatus","QUEUING_SILENCE","payState","chosenPayMethod","TIMEOUT","QUEUING","gap","CHECK_GAP","checkId","isBatchOrder","outTradeNo","checkQueue","CREATE_ORDER","postForm","extraInfo","needSplitOrder","CreatingOrder","formData","getSourceInfo","sub_way","subWay","pay_type","s_type","author_id","sub_b_type","adData","adInfoData","ad_request","properties","come_from","fe_params","source_id","new_source_id","event_type","event_value","origin_id","source_type","report_event","createCodOrder","Success","exceedCodOrder","createOnlineOrder","DOUYIN_ORDER_COLLECT","openThenCloseSelf","control","exceedOnlineOrder","processPromotionFull","stype","FullDiscountWithMultiShop","FullDiscount","promotionString","fullItem","per_level","defaultConfig","name","preTime","currentTime","supportGiveUpActivity","supportStyleInGoodsList","campaignScene","toutiao","toutiaoProduct","weixin","outapp","notifyBarStyle","campaignBarStyle","percent","customChecker","needRefresh","needPreEndTime","extraFunc","urlName","waitForSale","promotionType","campaignConfig","1","3","5","7","8","9","promotionConfig","descPrefix","descSuffix","getCampaignConfig","needStock","needStockStatus","left_stock","stock","current_time","useConfig","has","extraFeature","_defaultConfig","pre_time","fixDateStr","support_pre","pre_end_time","differMultiCampaign","multiCampaign","promotion","platformFullDiscount","campaignInfo","getCampaignInfo","promotionInfo","getPromotionInfo","MAX_SAFE_INTEGER","TYPE_LABELS","2","11","12","13","21","22","23","31","32","33","41","42","43","computeFullDiscountInCart","selectItem","originalTotal","selectFullDiscount","campaign_id","desc","totalFullDiscount","dis","coupons","needSelected","realTotal","couponsDiscount","init","maxCoupon","total_price_info","total_sku_price","total_sum_price","total_coupon_price","total_full_price","getFullDiscountItem","discountInfo","shopsInfo","shop_sku_list","shop_cart_list","shopsFlatten","platformFullDiscountInfo","platform_discount_detail","discountSum","full_discount_amount","full_discount_info","find","shopDiscountDetail","shop_discount_detail","fullDiscounts","select_shop_full_discount","discountTitle","List","toJS","mergeCouponList","mergedList","newMergedList","shopCouponLen","needMergedLen","oldMerged","platCouponLen","totalGoodsList","couponListInit","disable","shops","platformCoupons","couponLen","couponNow","initMergedShop","unshift","newClassify","useRouteBlock","closing","setClosing","closed","setClosed","userConfirmationCallback","match","isExact","confirmClose","useCallback","goBack","cancelClose","useRouteConfirmationCallback","setUserConfirmationCallback","block","_location","confirmThenClear","ok","getUserConfirmation","couponScope","needReason","resultAvailable","total","temp","getFeightByAddress","address","num","getFreight","area_id","city_id","province_id","prov_id","combo_id","combo_num","sendCodeMiddleware","disableToast","listBefore","selectedBefore","baseBefore","listAfter","selectedAfter","baseAfter","hasFees","freight","getOrderInfo","OrderRestriction","BASE_ADDRESS_URL","GET_ADDRESS_LIST","SAVE_ADDRESS","DELETE_ADDRESS","GET_DEFAULT_ADDRESS","GET_LEGAL_STATUS","SEND_LEGAL_CODE","askForCode","open","getAddressList","addressState","listLoading","saveAddress","saveFallBack","post","add_id","deleteAddress","getDefaultAddress","provIdPatch","switchAddressStatus","selectAddress","sendLegalCode","tel","mobile","updateLegalCode","clearSelectedAddress","initState","defaultLoading","legalStatus","VERIFIED_OK","legalCode","saveLoading","Boolean","is_default","UNCLEAR","FORBIDDEN","NEED_CODE","Direction","getTouchPoint","point","changedTouches","touches","clientX","clientY","SwipeoutPage","maskRef","containerRef","pageWidthRef","swipeable","showTitleBar","useLayoutEffect","offsetWidth","leftEdge","throttle","transitionTime","maskOpacity","onClose","shouldSwipeout","deltaX","startPoint","isSwipingout","direction","Unknown","transformPrefix","transitionPrefix","transformPage","swipeout","pageWidth","setAttribute","backgroundColor","zIndex","moveToPosition","touchstart","touchmove","curPoint","deltaY","abs","X","Y","preventDefault","touchend","transitionend","createCallbacks","goPageBack","moveInAnimated","setMoveInAnimated","disableSwipe","enableSwipe","container","lenMemo","showBack","onOptionItemSelected","onBackButtonClicked","nativeReverse","GLOBAL","NAME","INVALID","INVALID_DP","NUMERIC","round","dp","rm","more","xc","pop","z","RM","NE","PE","cmp","isneg","yc","DP","bl","bt","ri","bz","ai","al","rl","qc","qi","shift","eq","gt","gte","lt","lte","minus","xlty","plus","xe","ye","mod","ygtx","times","pow","one","sqrt","half","toExponential","toPrecision","sd","valueOf","toJSON","_Big_","nl","search","CachedMap","USE_PREFETCH_CONDITION","ge","prefetchAction","fallbackAction","method","initTime","ToutiaoJSBridge","isAndroid","cached","isEmpty","fromPrefetch","prefetchGetOrderInfoAction","skuId","originType","pageId","reset","defaultAction","sku_id","b_type_new","bType","prefetchGetBuyNow","API_KEN","numberWrapper","SupportReturn","BASEINFO_LOADED","MODIFY_GOODS_NUM","SHOW_PAY_FORM","GET_MARQUEE","GET_FREIGHT","SET_FREIGHT","support","modifyGoodsNum","modifyBuyerWords","words","setVirtual","setMobileError","setLoginStatus","isVirtualGetter","needLogistic","productType","headers","initalState","loading","buyerWords","showPayForm","flatAddress","payFormType","remain","abInfo","abLoaded","freightAmount","service","userBuyLimit","supportRetIns","baseReducer","differCampaign","campaign_info","extractGoodsInfo","extractServiceInfo","virtual","addressId","address_id","remainWords","islogin","showRemainDialog","marquee","post_amount","restricted","orderInfo","skuInfo","order_stock","img","pic","specs","order_spec","stock_num","weight","userLimit","user_limit","skuLimit","supply_status","cidLimit","cid_limit","productPlatform","product_platform","need_logistic","needCheckout","need_checkout","logo","shop_logo","warehouseId","warehouse_id","reduceType","reduce_type","skuType","sku_type","presellType","presell_type","presellEndTime","presell_end_time","presellDelay","presell_delay","showToast","area","actionAssignment","product","addr_id1","addr_id2","addr_id3","apiWrapper","requestBaseInfo","originId","URL","grayToken","Cookie","delayDay","delay_day","supportReturn","support_return_type","remain_words","quickRefund","user_buy_limit","getMarqueeContent","info"],"mappings":"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","file":"staticV3/js/2a996b68.js","sourcesContent":["/**\n * 版本号对比,目前仅针对形如'1.0.0'的两个数字版本号\n * @param pre 版本号\n * @param next 版本号\n * @returns result 0为相等,-1为前小后大,1为前大后小\n */\nexport default function compareVersion(pre: string, next: string) {\n // 输入形如'1.0.0'的两个数字版本号\n const preVer = String(pre).split('.');\n const nextVer = String(next).split('.');\n const maxL = Math.max(preVer.length, nextVer.length);\n for (let i = 0; i < maxL; i++) {\n let preVal = preVer.length > i ? Number(preVer[i]) : 0;\n let nextVal = nextVer.length > i ? Number(nextVer[i]) : 0;\n if (preVal < nextVal) return -1; // -1为前小后大\n if (preVal > nextVal) return 1; // 1为前大后小\n }\n return 0; // 0为两版本号相等\n}\n","import { getContext } from '@tetris/ad.js';\nimport bridge from 'libs/bridge';\nimport query from './query';\nimport { safeParse } from './utils';\n\ninterface AdInfo {\n extra?: any;\n reportEvent?: any;\n cid?: string;\n}\n\n// 是否是广告投放的页面\nexport const isAd = () => Number(query.page_id) > 0 || Number(query.origin_type) === 1;\n\nexport function getAdInfoFromBridge() {\n return new Promise((resolve, reject) => {\n // 先从本地获取ad信息,如果没有则从sdk和jsb获取\n if (query.getAdInfoLocal) {\n try {\n const json = JSON.parse(localStorage.getItem('LOCAL_AD_INFO') || '[]');\n resolve(json);\n } catch {\n reject(Error('get from localstorage fail'));\n }\n }\n setTimeout(() => reject(new Error('time out')), 1000);\n Promise.all([getContext(), bridge.call('adInfo')])\n .then((res) => resolve(res))\n .catch((err) => reject(err));\n });\n}\n\nexport async function getAdInfoJson(): Promise {\n return new Promise((resolve) => {\n let result = {};\n\n getAdInfoFromBridge()\n .then((res: any) => {\n let [context, ad] = res;\n // jsb中没有获取的cid,降级从url中获取\n\n if (!context.cid) {\n throw new Error('未获取到aid');\n }\n result = {\n ...context,\n ad_extra_data: ad.ad_extra_data || ''\n };\n })\n .catch(() => {\n const entranceInfo = safeParse(decodeURIComponent(query.entrance_info));\n const cid = entranceInfo.creative_id;\n\n if (!cid) {\n resolve(result);\n }\n\n result = {\n log_extra: entranceInfo.log_extra,\n cid: entranceInfo.creative_id,\n ad_extra_data: entranceInfo.ad || ''\n };\n })\n .finally(() => {\n resolve(result);\n });\n });\n}\n","import qs from 'qs';\nimport openLink, { getSuffix } from 'src/libs/open-link';\nimport { env } from '@byted/ecom-mobile-lib';\nimport bridge from 'libs/bridge';\nimport compareVersion from 'utils/compareVersion';\nimport { getAdInfo } from 'src/components/pay/middlewares/order';\nimport { getContext } from '@tetris/ad.js';\nimport { getAdInfoJson } from 'src/libs/ad';\nimport query from 'libs/query';\nimport { isAd as isAdPage } from 'utils/ad';\nimport { getAbTestParams } from 'src/utils/ab';\nimport { compare } from 'compare-versions';\nimport { reject } from 'lodash';\n\nconst payPagesControl =\n 'hide_bar=1&hide_nav_bar=1&hide_back=1&hide_back_close=1&hide_back_button=1&bounce_disable=1&disable_bounce=1&disable_bounces=1&status_bar_color=ffffff&loading_bgcolor=ffffff&status_font_dark=1';\nconst extraQuery = 'web_title=1&status_bar_color=ffffff&loading_bgcolor=ffffff&status_font_dark=1';\n// 标识使用webtitle\nexport const useWebTitle = 'web_title=1&hide_h5_title=0';\n\nconst __test__ = process.env.NODE_ENV === 'development';\n\nconst isAd = isAdPage();\n\nexport const buynowUrl = (\n id: string,\n comboId: string,\n comboNum: number,\n hideCustomTitleBar: boolean\n): Promise => {\n // 需要透传的通参\n const joinExtraQuery = ['page_id', 'activity_id', 'alkey'];\n\n return new Promise((resolve) => {\n const commonParams = joinExtraQuery.reduce(\n (acc, cur) => acc + (query[cur] ? `&${cur}=${query[cur]}` : ''),\n `id=${id}&combo_num=${comboNum}&combo_id=${comboId}`\n );\n\n const webUrl = `/views/product/buynow?${commonParams}${isAd ? '&getAdInfoLocal=1' : ''}${\n hideCustomTitleBar ? '&hide_custom_title_bar=1' : ''\n }&${extraQuery}`;\n\n if (!env.isInToutiao || compare(env.appVersion, '7.9.2', '<')) {\n return resolve(webUrl);\n }\n\n getAbTestParams('pindao', 'useFlutter', false, { timeout: 2000 })\n .then((res) => {\n if (!res) resolve(webUrl);\n\n let flutterUrl = `local-flutter://electronic_commercial/submit_order?from=buynow&${commonParams}&${getSuffix()}`;\n\n getAdInfoJson()\n .then((res) => {\n flutterUrl += `&adinfojson=${encodeURIComponent(JSON.stringify(res))}`;\n })\n .finally(() => {\n resolve(\n `sslocal://dynamicart?url=${encodeURIComponent(\n flutterUrl\n )}&fallback=sslocal%3a%2f%2fwebview%3furl%3dhttps%3a%2f%2fhaohuo.jinritemai.com%2fviews%2fproduct%2fbuynow%26hide_bar%3d1%26hide_nav_bar%3d1%26hide_back%3d1%26hide_back_close%3d1%26hide_back_button%3d1%26bounce_disable%3d1%26disable_bounce%3d1%26disable_bounces%3d1%26status_bar_color%3dffffff%26loading_bgcolor%3dffffff%26status_font_dark%3d1`\n );\n });\n })\n .catch(() => {\n resolve(webUrl);\n });\n });\n};\n\nexport const cartUrl = () =>\n `/views/product/cart?hide_nav_bar=1&${extraQuery}&login_source=click_shopping_cart_from_product_page`;\n\nexport const detailUrl = ({ id }: { id: string }) => {\n return `/views/product/detail?id=${id}&${extraQuery}`;\n};\n\ninterface LinkParams {\n id: string;\n extraParams?: string;\n enterFrom?: string;\n authorId?: string;\n secAuthorId?: string;\n options?: any;\n entranceInfo?: string;\n ecomEntranceForm?: string;\n v3EventsAdditions?: string;\n}\n\nexport const openProductDetail = ({\n id,\n extraParams,\n enterFrom,\n authorId,\n secAuthorId,\n options,\n entranceInfo,\n ecomEntranceForm,\n v3EventsAdditions\n}: LinkParams) => {\n const webLink = () =>\n openLink(\n `/views/product/detail?id=${id}&${extraQuery}${extraParams ? '&' + extraParams : ''}`,\n {\n title: '商品详情',\n hideBar: true,\n bounceDisable: true\n },\n options\n );\n // TODO: 订单详情跳转新商详显示网络错误,修复线上详情无法打开\n // 抖音端,version >= 12.0.0 支持新商详 schema\n if (env.isInAweme && compareVersion(env.appVersion, '12.0.0') >= 0) {\n let kol_id = authorId;\n let sec_author_id = secAuthorId;\n\n // 如果 authorId 取不到,则使用 购物小助手 的 ID\n // 什么情况下会取不到?1.店铺压根没有绑定达人;2.店铺封禁 3.server 调用下游失败\n if (!kol_id || !sec_author_id) {\n kol_id = '99514375927';\n sec_author_id = 'MS4wLjABAAAA2I9NdgAKZrz9e0tLm1csyDMNqLESPDm34TdYYqXe8-I';\n }\n\n const params = qs.stringify({\n promotion_id: id,\n source_page: enterFrom,\n kol_id,\n request_additions: JSON.stringify({\n sec_author_id,\n enter_from: enterFrom\n }),\n meta_params: JSON.stringify({\n product_type: 1\n })\n });\n\n return bridge\n .call('openSchema', {\n schema: `sslocal://ec_goods_detail/?promotion_id=${id}&source_page=${enterFrom}&kol_id=${kol_id}\n &request_additions=${encodeURIComponent(\n JSON.stringify({\n sec_author_id,\n enter_from: enterFrom\n })\n )}\n &meta_params=${encodeURIComponent(\n JSON.stringify({\n entrance_info: entranceInfo,\n product_type: 1\n })\n )}\n ${\n v3EventsAdditions\n ? `&v3_events_additions=${encodeURIComponent(v3EventsAdditions)}`\n : ''\n }\n ${ecomEntranceForm ? `&ecom_entrance_form=${ecomEntranceForm}` : ''}`\n })\n .catch(() => webLink());\n }\n\n if (env.isInMobile) {\n return openLink(\n `/views/product/detail?id=${id}${extraParams ? '&' + extraParams : ''}`,\n {\n title: '商品详情',\n bounceDisable: true\n },\n options\n );\n }\n\n return webLink();\n};\n","// Cache utils\n\ninterface SetOptions {\n // 到期时间\n expires: number;\n}\n\nexport async function get(key: string): Promise;\nexport async function get(key: string, defaultValue: T): Promise;\nexport async function get(key: string, defaultValue?: T): Promise {\n try {\n const value = localStorage.getItem(key);\n if (value === null) {\n return defaultValue;\n }\n\n const returnValue = JSON.parse(value!);\n\n // 如果包含 __exp__ 过期字段,需要判断是否已过期\n if (returnValue['__exp__']) {\n // 已过期\n if (Date.now() > returnValue['__exp__']) {\n return defaultValue;\n }\n\n return returnValue['data'];\n }\n\n return returnValue;\n } catch (err) {\n return defaultValue;\n }\n}\n\nexport async function set(key: string, value: any, options?: SetOptions) {\n try {\n let setValue = value;\n\n if (options && options.expires) {\n setValue = {\n data: value,\n __exp__: options.expires\n };\n }\n\n localStorage.setItem(key, JSON.stringify(setValue));\n } catch (err) {\n console.error(err);\n }\n}\n","import cx from 'classnames';\nimport React, { useEffect, useState, useMemo } from 'react';\nimport './index.scss';\nimport { getClientImage } from '@byted/ecom-mobile-lib/lib/utils/getClientImage';\n\nconst ONE_PIXEL_TRANSPARENT_PNG =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nconst ImageComponent: React.FC<{ src: string; className?: string; size?: number }> = ({\n src,\n className,\n size\n}) => {\n const [url, setUrl] = useState('');\n const [loaded, setLoad] = useState(false);\n\n const formatedImage = useMemo(() => {\n if (!size) return src;\n // 默认用三倍图\n const imageSize = size * 3;\n return getClientImage(src, 50, `${imageSize}x${imageSize}`);\n }, [src, size]);\n\n useEffect(() => {\n const image = new Image();\n image.src = formatedImage;\n\n const onLoad = () => {\n setLoad(true);\n setUrl(formatedImage);\n removeAllListener();\n };\n const onError = () => {\n setLoad(true);\n removeAllListener();\n };\n const removeAllListener = () => {\n image.removeEventListener('load', onLoad);\n image.removeEventListener('error', onError);\n };\n\n image.addEventListener('load', onLoad);\n image.addEventListener('error', onError);\n\n return () => {\n removeAllListener();\n };\n }, [formatedImage]);\n\n return (\n
\n \n
\n
\n );\n};\n\nexport default ImageComponent;\n","\nvar content = require(\"!!../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../node_modules/postcss-loader/src/index.js!../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".swipeout-page__container{position:absolute;top:0;left:0;bottom:0;right:0;background:#F8F9FA;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;flex-direction:column}.swipeout-page__container--hide{display:none}.swipeout-page__body{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-moz-box-orient:vertical;-moz-box-direction:normal;flex-direction:column;overflow-y:auto;-webkit-box-flex:1;-webkit-flex-grow:1;-moz-box-flex:1;flex-grow:1;-webkit-overflow-scrolling:touch}.swipeout-page__mask{position:absolute;overflow:hidden;top:0;left:0;bottom:0;right:0;background-color:rgba(0,0,0,0.5)}.swipeout-page__mask--hide{background-color:rgba(0,0,0,0)}\\n\", \"\"]);\n\n","import urlParams from 'libs/query';\n\n// 是否是广告投放的页面\nexport const isAd = () => Number(urlParams.page_id) > 0 || Number(urlParams.origin_type) === 1;\n","import Modal from 'components/common/modal/index';\nimport * as React from 'react';\n\nconst { useRef, useState, useEffect } = React;\n\nimport './index.scss';\n\nexport interface IPopupProps {\n children?: any;\n show: boolean;\n onModalClick?: () => void;\n styleSet?: string;\n modalClassSet?: string;\n modalStyleSet?: React.CSSProperties;\n}\n\nconst animationCssName = 'popup--slide-in';\n\nexport default function Popup(props: IPopupProps) {\n const ref = useRef(null);\n const [showModal, setModal] = useState(false);\n useEffect(() => {\n const el = ref.current;\n let timerId: number;\n if (el) {\n if (props.show) {\n setModal(props.show);\n setTimeout(() => {\n el.classList.add(animationCssName);\n }, 0);\n } else {\n el.classList.remove(animationCssName);\n setModal(props.show);\n }\n }\n\n // clean up effect\n return () => clearTimeout(timerId);\n }, [props.show]);\n return (\n <>\n {\n props.onModalClick && props.onModalClick();\n }}\n className={props.modalClassSet}\n />\n
\n {props.children}\n
\n \n );\n}\n","import { get } from 'libs/request';\nimport getValue from 'lodash/get';\nimport * as cache from 'utils/cache';\nimport { API_EC } from 'config/host';\nimport { checkResponse } from 'libs/utils';\nimport { counter } from 'utils/slardar';\n\nconst LS_ABTEST_PARAMS = 'LS_ABTEST_PARAMS';\n\nexport const ORDER_SHOW_SIGNATORY = 'order_show_signatory';\n\n/**\n * Get ABTest Params\n * @param platform E.g: aweme\n * @param key ABTest params key\n * @param defaultValue\n */\nexport async function getAbTestParams(\n platform: string,\n key: string,\n defaultValue: any,\n options?: any\n) {\n try {\n let abParamsInfo: any = await cache.get(LS_ABTEST_PARAMS);\n if (!abParamsInfo || typeof abParamsInfo[key] === 'undefined') {\n const response = await get(`${API_EC}/index/getNewAbUiParams?token=${platform}`, {\n timeout: 1000,\n ...(options || {})\n });\n const data = checkResponse(response);\n if (!data) {\n return defaultValue;\n }\n\n abParamsInfo = data.temai_ui;\n\n cache.set(LS_ABTEST_PARAMS, abParamsInfo, {\n expires: Date.now() + 1000 * 60 * 10\n });\n }\n\n return getValue(abParamsInfo, key, defaultValue);\n } catch (err) {\n counter('error_get_abtest_params', {\n tags: {\n platform,\n key,\n err: err.msg || err.message\n }\n });\n\n return defaultValue;\n }\n}\n","import {\n couponScopeConst,\n couponTypeConst,\n discountCoupon,\n fullDiscountCoupon,\n platformCoupon,\n shopCoupon,\n straightReducedCoupon\n} from 'config/coupon';\nimport { ICouponBase } from 'types/coupon';\n\nexport const getCouponType = (coupon: ICouponBase) => {\n const type = Number(coupon.type);\n\n if (straightReducedCoupon.indexOf(type) > -1) {\n return couponTypeConst.straightReduced;\n }\n if (fullDiscountCoupon.indexOf(type) > -1) {\n return couponTypeConst.fullDiscount;\n }\n if (discountCoupon.indexOf(type) > -1) {\n return couponTypeConst.discount;\n }\n};\n\nexport const getCouponScope = (coupon: ICouponBase) => {\n const type = Number(coupon.type);\n\n if (platformCoupon.indexOf(type) > -1) {\n return couponScopeConst.platform;\n }\n\n if (shopCoupon.indexOf(type) > -1) {\n return couponScopeConst.shop;\n }\n};\n","import bridge from 'libs/bridge';\nimport urlParams from 'libs/query';\nimport { counter } from 'utils/slardar';\n\nexport function noop() {}\n\nexport function back() {\n if (bridge.supports('close')) {\n bridge.call('close');\n return;\n }\n history.back();\n}\n\n/**\n * 获取小程序跳过来的订单携带的参数\n */\nexport function getMicroAppParams() {\n const entranceInfoString = decodeURIComponent(urlParams.entrance_info || '');\n let entranceInfo: any = {};\n if (entranceInfoString) {\n try {\n entranceInfo = JSON.parse(entranceInfoString) || {};\n } catch (err) {\n // do nothing\n return {};\n }\n }\n return {\n openId: entranceInfo.open_id,\n appId: entranceInfo.app_id\n };\n}\n\n// 直播推荐侧埋点参数\nexport function getLiveEventParams() {\n try {\n const entranceInfoString = decodeURIComponent(urlParams.entrance_info || '');\n let entranceInfo: any = null;\n if (entranceInfoString) {\n try {\n entranceInfo = JSON.parse(entranceInfoString) || {};\n } catch (err) {\n // do nothing\n }\n }\n\n let liveEvent: any = {};\n if (entranceInfo) {\n liveEvent = {\n live_author_id: entranceInfo.anchor_id || '',\n live_room_id: entranceInfo.room_id || '',\n live_video_id: entranceInfo.group_id || '',\n live_enter_from_merge: entranceInfo.enter_from_merge || '',\n live_enter_method: entranceInfo.enter_method || '',\n live_request_id: entranceInfo.request_id || ''\n };\n }\n\n return liveEvent;\n } catch (err) {\n counter('error_parse_entranceinfo', {\n tags: {\n error: err.message || 'unknown',\n raw: urlParams.entrance_info\n }\n });\n\n return {};\n }\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport './index.scss';\nimport usePrevious from 'hooks/use-previous';\n\nexport interface IModalProps {\n children?: any;\n show: boolean;\n clickModal?: () => void;\n styleSet?: React.CSSProperties;\n className?: string;\n}\n\nexport default function Modal(props: IModalProps) {\n const modalRef = useRef(null);\n const [inTransition, setInTransition] = useState(false);\n useEffect(() => {\n // 避免动画过程中,点击界面使弹窗消失\n if (modalRef.current) {\n if (props.show) {\n setInTransition(true);\n }\n const onTransitionEnd = (e: TransitionEvent) => {\n // IOS13抖音中e.propertyName为background\n if (\n e.target === modalRef.current &&\n (e.propertyName === 'background-color' || e.propertyName === 'background')\n ) {\n setInTransition(false);\n }\n };\n // 当出售show为true的时候没有动画会发生bug,这里使用setTimeout保证即使onTransitionEnd不触发也会重置inTransition为false\n const id = setTimeout(() => {\n setInTransition(false);\n }, 400);\n modalRef.current.addEventListener('transitionend', onTransitionEnd);\n return () => {\n if (modalRef.current) {\n modalRef.current.removeEventListener('transitionend', onTransitionEnd);\n }\n clearTimeout(id);\n };\n }\n }, [props.show]);\n return (\n \n {props.children}\n
\n );\n}\n","import { computeMaximumCouponForGoodsList, sortCoupon } from 'services/coupon/get-maximum-coupon';\nimport urlParams from 'libs/query';\nimport apiActionWrapper from 'actions/api';\nimport { get } from 'libs/request';\nimport { IOriginCoupon, ICouponApplied } from 'types/coupon';\nimport { mapAppliedCoupons, mapNotApplyCoupons } from 'services/coupon/map-coupon-data';\nimport {\n getAvailableCoupon,\n getOtherShopCoupon,\n getPlatformCoupon,\n getSelfShopCoupon,\n getShopCoupon,\n getUnavailableCoupon\n} from 'services/coupon/get-coupon-list';\nimport { ICampaign } from 'types/campaign';\nimport { changeCouponStatus, changeMultiShopStatus } from 'services/coupon/change-coupon-status';\nimport { ApiError } from 'types/api-error';\nimport { CartItem, CartShop, CouponGoodsItem, PriceInfo } from 'types/cart';\nimport { initComputeCartPrice } from 'services/cart/compute-cart-price';\nimport {\n classifyCouponByShop,\n classifySelectedCouponByShop\n} from 'services/coupon/classify-coupon-by-shop';\nimport { API_EC, API_ORIGIN } from 'src/config/host';\nimport { sendEvent } from 'libs/event';\nimport { getCouponIdObj } from 'libs/get-coupn-id';\nimport { getCouponScope } from 'services/coupon/type';\nimport { couponScopeConst } from 'config/coupon';\n\nexport const GET_COUPON_LIST = {\n REQUEST: 'GET_COUPON_LIST_REQUEST',\n SUCCESS: 'GET_COUPON_LIST_SUCCESS',\n FAILURE: 'GET_COUPON_LIST_FAILURE'\n};\n\nexport const FETCH_CART_COUPON_LIST = {\n REQUEST: 'FETCH_CART_COUPON_LIST_REQUEST',\n SUCCESS: 'FETCH_CART_COUPON_LIST_SUCCESS',\n FAILURE: 'FETCH_CART_COUPON_LIST_FAILURE'\n};\nexport const UPDATE_COUPON_SELECT_CHANGE = 'UPDATE_COUPON_SELECT_CHANGE';\nexport const UPDATE_COUPON_SELECT_CHANGE_NEW = 'UPDATE_COUPON_SELECT_CHANGE_NEW';\n\nexport type ISelectedCoupon = Record;\nexport type ISelectedCouponId = Record;\n\nexport interface CouponState {\n allCoupons: ICouponApplied[];\n available: ICouponApplied[]; // 可能能用到的优惠券\n unAvailable?: ICouponApplied[]; // 彻底不能用的优惠券\n otherCoupon?: ICouponApplied[]; // 别的店铺的店铺优惠券(购物车会用到)\n selected: ISelectedCoupon;\n selectedIds: ISelectedCouponId;\n availableIds: string[];\n bestSelectedIds: ISelectedCouponId;\n maxDiscount: ISelectedCoupon;\n failure?: ApiError;\n}\n\nexport interface WithCouponState {\n coupon: CouponState;\n}\n\nexport const COUPON_FACTORS_CHANGED = 'COUPON_FACTORS_CHANGED';\nexport const CART_COUPON_INIT = 'CART_COUPON_INIT';\nexport const SET_BEST_CART_COUPON = 'SET_BEST_CART_COUPON';\nexport const SET_AVAILABLE_COUPON = 'SET_AVAILABLE_COUPON';\nexport interface CouponFactors {\n price: number;\n discount: number;\n campaign?: ICampaign;\n fullDiscount?: ICampaign;\n payType: number;\n shopId: string;\n supplyStatus: number;\n goods: CouponGoodsItem;\n isSingle: boolean;\n}\n\nfunction cartCouponDataInit(data: { plat_coupon: IOriginCoupon[]; shop_coupon: IOriginCoupon[] }) {\n // const newData = data.shop_coupon || {};\n // newData.platform = [...(data.plat_coupon || [])];\n\n // return Object.values(newData).reduce((item1, item2) => {\n // return item1.concat(item2);\n // }, []);\n return [...data.plat_coupon.map(mapAppliedCoupons), ...data.shop_coupon.map(mapAppliedCoupons)];\n}\n\nfunction initCartCouponList(\n {\n list,\n selected,\n restrictIds,\n priceInfo\n }: { list: CartShop[]; selected: string[]; restrictIds: string[]; priceInfo: PriceInfo },\n couponList: ICouponApplied[]\n): Partial {\n const goods: CartItem[] = [];\n const shopSet = new Set([]);\n list.forEach((shop) => {\n shop.items.forEach((goodsItem) => {\n if (selected.indexOf(goodsItem.cartId) > -1) {\n goods.push({ ...goodsItem });\n shopSet.add(goodsItem.shopId);\n }\n });\n });\n\n const supplyId = goods.map((item) => {\n return { supplyStatus: item.supplyId, shopId: item.shopId };\n });\n const payType = goods.map((item) => item.payType);\n const goodsId = goods.map((item) => item.id);\n const campaign = goods.map((item) => item.campaign);\n const { selectedCoupon, available: sortCoupon, goods: goodsCoupon } = initComputeCartPrice(\n selected,\n list,\n couponList,\n false,\n restrictIds,\n priceInfo\n );\n const selfCoupon = getSelfShopCoupon(sortCoupon, Array.from(shopSet));\n const unAvailable = getUnavailableCoupon(\n selfCoupon,\n Array.from(shopSet),\n supplyId,\n payType,\n goodsId,\n campaign\n );\n const available = getAvailableCoupon(\n selfCoupon,\n Array.from(shopSet),\n supplyId,\n payType,\n goodsId,\n campaign\n );\n const classifyCoupon = classifyCouponByShop(available);\n Object.keys(classifyCoupon).forEach((shopId) => {\n if (shopId !== 'platform') {\n getShopCoupon(\n classifyCoupon[shopId],\n goodsCoupon.filter((item) => item.shopId === shopId)\n );\n }\n });\n if (classifyCoupon.platform) {\n getPlatformCoupon(classifyCoupon.platform, goodsCoupon);\n }\n if (selectedCoupon) {\n changeMultiShopStatus(selfCoupon, selectedCoupon, goodsCoupon, false);\n }\n return {\n unAvailable: [...unAvailable],\n available: [...available],\n otherCoupon: [...getOtherShopCoupon(couponList, Array.from(shopSet))],\n selected: selectedCoupon ? { ...selectedCoupon } : {},\n maxDiscount: selectedCoupon ? { ...selectedCoupon } : {}\n };\n}\n\nexport default (\n state: CouponState = {\n allCoupons: [],\n available: [],\n selected: {},\n maxDiscount: {},\n bestSelectedIds: {},\n selectedIds: {},\n availableIds: []\n },\n action: any\n): CouponState => {\n switch (action.type) {\n case GET_COUPON_LIST.REQUEST: {\n return { ...state, failure: undefined };\n }\n case GET_COUPON_LIST.SUCCESS: {\n const factors = action.payload.factors;\n const couponList = Array.prototype.map.call(action.payload, mapAppliedCoupons);\n if (!factors) {\n return {\n ...state,\n available: couponList as ICouponApplied[]\n };\n }\n const unAvailable = sortCoupon(\n getUnavailableCoupon(\n couponList as ICouponApplied[],\n [factors.shopId],\n [{ shopId: factors.shopId, supplyStatus: factors.supplyStatus }],\n [factors.payType],\n [urlParams.id],\n [factors.campaign]\n )\n );\n const available = getAvailableCoupon(\n couponList as ICouponApplied[],\n [factors.shopId],\n [{ shopId: factors.shopId, supplyStatus: factors.supplyStatus }],\n [factors.payType],\n [urlParams.id],\n [factors.campaign]\n );\n const sortedList = initCouponState(available, factors);\n const doPointObj = getCouponIdObj(sortedList.selected);\n sendEvent('special_page_view', doPointObj);\n return {\n ...state,\n unAvailable,\n ...sortedList\n };\n }\n case UPDATE_COUPON_SELECT_CHANGE_NEW: {\n let selectedIds = Object.assign({}, state.selectedIds);\n const coupon = action.payload;\n if (!coupon) {\n // 选择最优,把自己选的清除掉\n return {\n ...state,\n selectedIds: state.bestSelectedIds\n };\n }\n if (getCouponScope(coupon) === couponScopeConst.platform) {\n if (coupon.selected) {\n selectedIds['platform'] = coupon?.id;\n } else {\n delete selectedIds['platform'];\n }\n } else {\n if (coupon.selected) {\n selectedIds[coupon.shopId] = coupon?.id;\n } else {\n delete selectedIds[coupon.shopId];\n }\n }\n return {\n ...state,\n selectedIds\n };\n }\n case UPDATE_COUPON_SELECT_CHANGE: {\n const factors = action.payload.factors;\n if (!factors) return state;\n const list = changeCouponStatus(\n [...state.available],\n action.payload.coupon,\n factors.price,\n factors.discount\n );\n\n const selectObj = classifySelectedCouponByShop(list, factors.isSingle);\n\n return {\n ...state,\n available: list,\n selected: selectObj\n };\n }\n case GET_COUPON_LIST.FAILURE:\n return { ...state, failure: action.payload };\n case FETCH_CART_COUPON_LIST.SUCCESS: {\n return {\n ...state,\n allCoupons: [...cartCouponDataInit(action.payload)],\n available: [...cartCouponDataInit(action.payload)],\n unAvailable: undefined,\n otherCoupon: undefined,\n maxDiscount: {},\n selected: {}\n };\n }\n case COUPON_FACTORS_CHANGED: {\n const factors = action.payload;\n if (!factors) return state;\n if (!state.unAvailable) {\n if (state.available.length === 0) return { ...state, unAvailable: [] };\n const unAvailable = sortCoupon(\n getUnavailableCoupon(\n state.available,\n [factors.shopId],\n [{ shopId: factors.shopId, supplyStatus: factors.supplyStatus }],\n [factors.payType],\n [urlParams.id],\n [factors.campaign]\n )\n );\n const available = getAvailableCoupon(\n state.available,\n [factors.shopId],\n [{ shopId: factors.shopId, supplyStatus: factors.supplyStatus }],\n [factors.payType],\n [urlParams.id],\n [factors.campaign]\n );\n const sortedList = initCouponState(available, factors);\n return {\n ...state,\n unAvailable,\n ...sortedList\n };\n }\n if (state.unAvailable) {\n const sortedList = initCouponState(state.available, factors);\n return {\n ...state,\n ...sortedList\n };\n }\n return state;\n }\n case CART_COUPON_INIT: {\n return {\n ...state,\n ...initCartCouponList(\n action.payload,\n state.available.concat(state.unAvailable || []).concat(state.otherCoupon || [])\n ),\n selected: state.selected\n };\n }\n case SET_BEST_CART_COUPON: {\n return {\n ...state,\n bestSelectedIds: action.payload,\n selectedIds: action.payload\n };\n }\n case SET_AVAILABLE_COUPON: {\n return {\n ...state,\n availableIds: action.payload\n };\n }\n default:\n return state;\n }\n};\n\nfunction initCouponState(list: ICouponApplied[], factors: CouponFactors) {\n const sortedList = computeMaximumCouponForGoodsList(list, {\n [factors.shopId]: [factors.goods]\n });\n\n // 之前的逻辑里没有添加没有选择的券无法使用的理由,比如说自动选择了店铺券,那么平台券未满足条件就不会被显示\n // 优惠券计算逻辑写的太乱了,都是直接在原数据上进行操作,参考购物车的优惠券初始化逻辑,所以选择了这个位置。\n const classifyCoupon = classifyCouponByShop(sortedList.available);\n if (classifyCoupon.platform) {\n getPlatformCoupon(classifyCoupon.platform, [factors.goods]);\n }\n Object.keys(classifyCoupon).forEach((shopId) => {\n if (shopId !== 'platform') {\n getShopCoupon(classifyCoupon[shopId], [factors.goods]);\n }\n });\n\n const coupon: Record = {};\n if (sortedList.coupon) {\n Object.keys(sortedList.coupon).forEach((key) => {\n if (key !== 'platform') {\n coupon.shop = sortedList.coupon && sortedList.coupon[key];\n } else {\n coupon.platform = sortedList.coupon && sortedList.coupon[key];\n }\n });\n }\n return {\n available: sortedList.available,\n maxDiscount: { ...coupon },\n selected: { ...coupon }\n };\n}\n\nexport const requestCouponInfo = () => {\n return apiActionWrapper(\n GET_COUPON_LIST.REQUEST,\n GET_COUPON_LIST.FAILURE,\n GET_COUPON_LIST.SUCCESS,\n get(`${API_EC}/coupon/canUsedCouponList?id=${urlParams.product_id || urlParams.id}`)\n );\n};\n\nexport const requestCartCouponInfo = (ids: string) => {\n return apiActionWrapper(\n FETCH_CART_COUPON_LIST.REQUEST,\n FETCH_CART_COUPON_LIST.FAILURE,\n FETCH_CART_COUPON_LIST.SUCCESS,\n get(`${API_EC}/coupon/cart?str_shop_ids=${ids}`)\n );\n};\n\nexport const updateCouponSelectChange = (coupon: ICouponApplied) => {\n return {\n type: UPDATE_COUPON_SELECT_CHANGE,\n payload: coupon\n };\n};\n\nexport const updateConponSelect = (coupon?: ICouponApplied) => {\n return {\n type: UPDATE_COUPON_SELECT_CHANGE_NEW,\n payload: coupon\n };\n};\nexport const updateCouponByBase = (data?: CouponFactors) => {\n return {\n type: COUPON_FACTORS_CHANGED,\n payload: data\n };\n};\nexport const cartCouponInit = (data: {\n list: CartShop[];\n selected: string[];\n restrictIds?: string[];\n priceInfo?: PriceInfo;\n}) => {\n return {\n type: CART_COUPON_INIT,\n payload: data\n };\n};\n\nexport const setCartBestCoupon = (data: ISelectedCouponId) => {\n return {\n type: SET_BEST_CART_COUPON,\n payload: data\n };\n};\n\nexport const setAvailableIds = (data: string[]) => {\n return {\n type: SET_AVAILABLE_COUPON,\n payload: data\n };\n};\n","/* global define */\n(function (root, factory) {\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.compareVersions = factory();\n }\n}(this, function () {\n\n var semver = /^v?(?:\\d+)(\\.(?:[x*]|\\d+)(\\.(?:[x*]|\\d+)(\\.(?:[x*]|\\d+))?(?:-[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i;\n\n function indexOrEnd(str, q) {\n return str.indexOf(q) === -1 ? str.length : str.indexOf(q);\n }\n\n function split(v) {\n var c = v.replace(/^v/, '').replace(/\\+.*$/, '');\n var patchIndex = indexOrEnd(c, '-');\n var arr = c.substring(0, patchIndex).split('.');\n arr.push(c.substring(patchIndex + 1));\n return arr;\n }\n\n function tryParse(v) {\n return isNaN(Number(v)) ? v : Number(v);\n }\n\n function validate(version) {\n if (typeof version !== 'string') {\n throw new TypeError('Invalid argument expected string');\n }\n if (!semver.test(version)) {\n throw new Error('Invalid argument not valid semver (\\''+version+'\\' received)');\n }\n }\n\n function compareVersions(v1, v2) {\n [v1, v2].forEach(validate);\n\n var s1 = split(v1);\n var s2 = split(v2);\n\n for (var i = 0; i < Math.max(s1.length - 1, s2.length - 1); i++) {\n var n1 = parseInt(s1[i] || 0, 10);\n var n2 = parseInt(s2[i] || 0, 10);\n\n if (n1 > n2) return 1;\n if (n2 > n1) return -1;\n }\n\n var sp1 = s1[s1.length - 1];\n var sp2 = s2[s2.length - 1];\n\n if (sp1 && sp2) {\n var p1 = sp1.split('.').map(tryParse);\n var p2 = sp2.split('.').map(tryParse);\n\n for (i = 0; i < Math.max(p1.length, p2.length); i++) {\n if (p1[i] === undefined || typeof p2[i] === 'string' && typeof p1[i] === 'number') return -1;\n if (p2[i] === undefined || typeof p1[i] === 'string' && typeof p2[i] === 'number') return 1;\n\n if (p1[i] > p2[i]) return 1;\n if (p2[i] > p1[i]) return -1;\n }\n } else if (sp1 || sp2) {\n return sp1 ? -1 : 1;\n }\n\n return 0;\n };\n\n var allowedOperators = [\n '>',\n '>=',\n '=',\n '<',\n '<='\n ];\n\n var operatorResMap = {\n '>': [1],\n '>=': [0, 1],\n '=': [0],\n '<=': [-1, 0],\n '<': [-1]\n };\n\n function validateOperator(op) {\n if (typeof op !== 'string') {\n throw new TypeError('Invalid operator type, expected string but got ' + typeof op);\n }\n if (allowedOperators.indexOf(op) === -1) {\n throw new TypeError('Invalid operator, expected one of ' + allowedOperators.join('|'));\n }\n }\n\n compareVersions.validate = function(version) {\n return typeof version === 'string' && semver.test(version);\n }\n\n compareVersions.compare = function (v1, v2, operator) {\n // Validate operator\n validateOperator(operator);\n\n // since result of compareVersions can only be -1 or 0 or 1\n // a simple map can be used to replace switch\n var res = compareVersions(v1, v2);\n return operatorResMap[operator].indexOf(res) > -1;\n }\n\n return compareVersions;\n}));\n","import React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => 提示);","import React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => 警示);","import React from 'react';\nimport './index.scss';\n\nimport Alarm from './notice.svg';\nimport Error from './error.svg';\nexport default function Notice(props: { type: 'normal' | 'warning' | 'error'; text: string }) {\n return (\n <>\n {props.text ? (\n
\n {props.type === 'warning' ? : null}\n {props.type === 'error' ? : null}\n {props.text}\n
\n ) : null}\n \n );\n}\n","import { ICoupon, ICouponApplied, ICouponBase } from 'types/coupon';\nimport getValue from 'lodash/get';\nimport { getCouponScope, getCouponType } from 'services/coupon/type';\nimport { couponScopeConst, couponTypeConst } from 'config/coupon';\nimport { ICampaign } from 'types/campaign';\nimport findIndex from 'lodash/findIndex';\nimport union from 'lodash/union';\nimport intersection from 'lodash/intersection';\nimport { CartItem, CouponGoodsItem } from 'types/cart';\nimport {\n computePlatformCouponBaseAmount,\n computeShopCouponBaseAmount\n} from 'services/coupon/coupon-for-goods-list';\nimport { getLiveEventParams } from 'utils/helper';\n\n/**\n * 优惠券是否到达开始时间\n * @param coupon\n */\nexport function canUseCouponInTime(coupon: ICouponBase) {\n return new Date().getTime() >= new Date(coupon.startTime.replace(/-/g, '/')).getTime();\n}\n\n/**\n * 满减优惠券是否能用\n * @param coupon\n * @param amount\n */\nfunction canUseFullReducedCoupon(coupon: ICouponBase, amount: number) {\n return amount >= Number(coupon.threshold);\n}\n\n/**\n * 优惠券是否达到使用价格\n * @param coupon\n * @param amount\n */\nfunction canUseCouponInPrice(coupon: ICouponBase, amount: number) {\n const couponType = getCouponType(coupon);\n\n if (couponType === couponTypeConst.fullDiscount) {\n return canUseFullReducedCoupon(coupon, amount);\n }\n if (couponType === couponTypeConst.discount) {\n return amount > 1;\n }\n\n return true;\n}\n\nexport const getUnavailableCoupon = (\n couponList: Array,\n shopId: string[],\n supplyStatus: { shopId: string; supplyStatus: number }[],\n payType: number[],\n productId: string[],\n campaign?: (ICampaign | undefined)[]\n) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return [];\n }\n const liveEventParams = getLiveEventParams();\n\n // eslint-disable-next-line complexity\n return couponList.filter((coupon) => {\n const unavailableReason = [];\n coupon.explain = [];\n\n if (\n getCouponScope(coupon) === couponScopeConst.shop &&\n coupon.shopId !== 'fUCPXX' &&\n supplyStatus.filter((item) => item.shopId === coupon.shopId).length > 0\n ) {\n if (\n supplyStatus.filter(\n (item) => item.supplyStatus !== 10 && item.shopId === coupon.shopId\n ).length === 0\n ) {\n unavailableReason.push('特殊商品不能使用店铺券');\n }\n }\n\n if (!canUseCouponInTime(coupon)) {\n unavailableReason.push(`在${coupon.startTime}后可使用`);\n }\n\n // 如果优惠券是 直播券(kolId),则需要判断当前是通过直播间下单,并且当前主播(live_author_id) === kolId,才可以使用\n if (coupon.kol_scope_tag === 1) {\n if (\n !getValue(liveEventParams, 'live_room_id') ||\n getValue(liveEventParams, 'live_author_id') !== coupon.kolUid\n ) {\n unavailableReason.push('指定直播间可用');\n }\n }\n\n // 指定店铺的平台券\n if (\n getCouponScope(coupon) === couponScopeConst.platform &&\n coupon.platformSubType === 1 &&\n coupon.typeDetail\n ) {\n const availableShopList = coupon.typeDetail.split(',');\n if (\n union(availableShopList, shopId).length ===\n availableShopList.length + shopId.length\n ) {\n unavailableReason.push('非可用商家');\n }\n }\n\n // 指定商品的平台券\n // TODO: 购物车指定商品临时方案,平台指定商品优惠券目前不支持购物车\n if (getCouponScope(coupon) === couponScopeConst.platform && coupon.platformSubType === 2) {\n // @ts-ignore\n if (window['is_cart_page']) {\n unavailableReason.push('购物车下单不支持使用');\n }\n }\n\n // 指定店铺的平台券\n if (\n getCouponScope(coupon) === couponScopeConst.shop &&\n coupon.platformSubType === 1 &&\n coupon.typeDetail &&\n Math.floor(coupon.type / 10) === 4\n ) {\n const availableProductList = coupon.typeDetail.split(',');\n if (\n union(availableProductList, productId).length ===\n new Set(availableProductList).size + new Set(productId).size\n ) {\n unavailableReason.push('所结算商品不符合使用条件');\n }\n }\n\n if (\n campaign &&\n campaign.length > 0 &&\n campaign.filter((item) => !(item && !item.canUseCoupon && !item.isPre)).length === 0\n ) {\n unavailableReason.push('与秒杀价格不能共享');\n }\n\n if (\n payType.filter((item) => item === 0).length === payType.length &&\n getCouponScope(coupon) === couponScopeConst.platform\n ) {\n unavailableReason.push('仅支持在线支付商品使用');\n }\n\n if (unavailableReason.length) {\n coupon.explain = unavailableReason;\n return true;\n }\n return false;\n });\n};\n\nexport const getAvailableCoupon = (\n couponList: Array,\n shopId: string[],\n supplyStatus: { shopId: string; supplyStatus: number }[],\n payType: number[],\n productId: string[],\n campaign?: (ICampaign | undefined)[]\n) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return [];\n }\n const liveEventParams = getLiveEventParams();\n\n // eslint-disable-next-line complexity\n return couponList.filter((coupon) => {\n if (\n getCouponScope(coupon) === couponScopeConst.shop &&\n coupon.shopId !== 'fUCPXX' &&\n supplyStatus.filter((item) => item.shopId === coupon.shopId).length > 0\n ) {\n if (\n supplyStatus.filter(\n (item) => item.supplyStatus !== 10 && item.shopId === coupon.shopId\n ).length === 0\n ) {\n return false;\n }\n }\n\n if (!canUseCouponInTime(coupon)) {\n return false;\n }\n\n // 如果优惠券是 直播券(kolId !== ''),则需要判断当前是通过直播间下单,并且当前主播(live_author_id) === kolId,才可以使用\n if (coupon.kol_scope_tag === 1) {\n if (\n !getValue(liveEventParams, 'live_room_id') ||\n getValue(liveEventParams, 'live_author_id') !== coupon.kolUid\n ) {\n return false;\n }\n }\n\n // 指定店铺的平台券\n if (\n getCouponScope(coupon) === couponScopeConst.platform &&\n coupon.platformSubType === 1 &&\n coupon.typeDetail\n ) {\n const availableShopList = coupon.typeDetail.split(',');\n if (\n union(availableShopList, shopId).length ===\n availableShopList.length + shopId.length\n ) {\n return false;\n }\n }\n\n // 指定商品的平台券\n // TODO: 购物车指定商品临时方案,平台指定商品优惠券目前不支持购物车\n if (getCouponScope(coupon) === couponScopeConst.platform && coupon.platformSubType === 2) {\n // @ts-ignore\n if (window['is_cart_page']) {\n return false;\n }\n }\n\n // 指定店铺的平台券\n if (\n getCouponScope(coupon) === couponScopeConst.shop &&\n coupon.platformSubType === 1 &&\n coupon.typeDetail &&\n Math.floor(coupon.type / 10) === 4\n ) {\n const availableProductList = coupon.typeDetail.split(',');\n if (\n union(availableProductList, productId).length ===\n new Set(availableProductList).size + new Set(productId).size\n ) {\n return false;\n }\n }\n\n if (\n campaign &&\n campaign.length > 0 &&\n campaign.filter((item) => !(item && !item.canUseCoupon && !item.isPre)).length === 0\n ) {\n return false;\n }\n\n return !(\n payType.filter((item) => item === 0).length === payType.length &&\n getCouponScope(coupon) === couponScopeConst.platform\n );\n });\n};\n\nexport const getShopCoupon = (couponList: Array, goodsList: CouponGoodsItem[]) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return [];\n }\n\n return couponList.filter((coupon) => {\n const couponScope = getCouponScope(coupon);\n\n if (couponScope !== couponScopeConst.shop) {\n return false;\n }\n const unavailableReason = [];\n coupon.explain = coupon.explain || [];\n let newGoodsList: CouponGoodsItem[] = [];\n\n if (Math.floor(coupon.type / 10) === 2) {\n newGoodsList = goodsList.map((goodsItem) => {\n return { ...goodsItem };\n });\n } else {\n const ids = coupon.typeDetail.split(',');\n if (coupon.typeDetail && ids.length > 0) {\n newGoodsList = goodsList\n .filter((item) => ids.indexOf(item.id) !== -1)\n .map((goodsItem) => {\n return { ...goodsItem };\n });\n }\n }\n\n const len = newGoodsList.length;\n if (len > 0) {\n let j = 0;\n for (j; j < len; j++) {\n const goods = newGoodsList[j];\n if (!goods.isLimit) {\n break;\n }\n }\n if (j === len) {\n unavailableReason.push('无该店铺商品参与结算');\n }\n\n let i = 0;\n for (i; i < len; i++) {\n const goods = newGoodsList[i];\n if (\n !(goods.FDReducer > 0 && goods.fullDiscount && !goods.fullDiscount.canUseCoupon)\n ) {\n break;\n }\n }\n if (i === len) {\n unavailableReason.push('与满减促销不能共享');\n }\n } else {\n unavailableReason.push('所结算商品不符合使用条件');\n }\n\n const { base } = computeShopCouponBaseAmount(newGoodsList, coupon);\n if (!canUseCouponInPrice(coupon, base)) {\n unavailableReason.push(`差${(coupon.threshold - base) / 100}元可用`);\n }\n\n if (unavailableReason.length) {\n coupon.explain = unavailableReason;\n return false;\n }\n\n return true;\n });\n};\n\nexport const getPlatformCoupon = (\n couponList: Array,\n goodsList: CouponGoodsItem[]\n) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return [];\n }\n\n return couponList.filter((coupon) => {\n const couponScope = getCouponScope(coupon);\n if (couponScope !== couponScopeConst.platform) {\n return false;\n }\n const unavailableReason = [];\n coupon.explain = coupon.explain || [];\n\n let newGoodsList: CouponGoodsItem[] = goodsList.map((goodsItem) => {\n return { ...goodsItem };\n });\n\n if (coupon.typeDetail && coupon.typeDetail.split(',').length > 0) {\n const shopIds = coupon.typeDetail.split(',');\n const shopLen = shopIds.length;\n let flag = false;\n for (let i = 0; i < shopLen; i++) {\n const shopId = shopIds[i];\n const shopGoods = newGoodsList.filter(\n (item) => item.shopId === shopId && !item.isLimit\n );\n if (shopGoods.length > 0) {\n flag = true;\n break;\n }\n }\n\n if (!flag) {\n unavailableReason.push('无该店铺商品参与结算');\n }\n } else {\n if (newGoodsList.filter((item) => item.isLimit).length === newGoodsList.length) {\n unavailableReason.push('无该店铺商品参与结算');\n }\n }\n\n const { base } = computePlatformCouponBaseAmount(newGoodsList, coupon);\n if (!canUseCouponInPrice(coupon, base)) {\n unavailableReason.push(`差${(coupon.threshold - base) / 100}元可用`);\n }\n\n if (unavailableReason.length) {\n coupon.explain = unavailableReason;\n return false;\n }\n\n return true;\n });\n};\n\n/*\n * 店铺券的选择变化会引起平台券的能否选择变化\n * 店铺券由选择变成取消: 满减平台券不满足的可能变成满足\n * 店铺券由取消变成勾选: 满减平台券原本满足的变成不满足,如果这张券恰好勾选要变成不够选,且当前与其互斥的券变成可选状态\n **/\nexport const recheckPlatformCoupon = (couponList: Array, baseAmount: number) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return [];\n }\n\n return couponList.filter((coupon) => {\n const couponScope = getCouponScope(coupon);\n if (couponScope !== couponScopeConst.platform) {\n return false;\n }\n if (!coupon.explain) {\n coupon.explain = [];\n }\n\n const index = findIndex(coupon.explain, (item) => item.indexOf('元可用') > -1);\n if (!canUseCouponInPrice(coupon, baseAmount)) {\n if (index === -1) {\n coupon.explain.push(`差${(coupon.threshold - baseAmount) / 100}元可用`);\n }\n } else {\n if (index > -1) {\n coupon.explain.splice(index, 1);\n }\n }\n\n if (coupon.explain.length) {\n return true;\n }\n\n return false;\n });\n};\n\nexport const getOtherShopCoupon = (list: ICouponApplied[], shopIds: string[]) => {\n return list.filter((item) => {\n return (\n getCouponScope(item) === couponScopeConst.shop && shopIds.indexOf(item.shopId) === -1\n );\n });\n};\n\nexport const getSelfShopCoupon = (list: ICouponApplied[], shopIds: string[]) => {\n return list.filter((item) => {\n return (\n getCouponScope(item) === couponScopeConst.platform || shopIds.indexOf(item.shopId) > -1\n );\n });\n};\n","export const genGetURL = (url: string, params?: { [key: string]: any }) => {\n if (!params) return url;\n let copyUrl = url;\n copyUrl += copyUrl.indexOf('?') === -1 ? '?' : '&';\n Object.keys(params).forEach((key) => {\n const val = params[key];\n if (val !== null && val !== undefined) {\n copyUrl += `${key}=${encodeURIComponent(val)}&`;\n }\n });\n return copyUrl.replace(/&$/, '');\n};\n\nexport const isZeroOrNul = (val?: string | number) => {\n return val === '' || val === 0;\n};\n\nexport const greaterZero = (val: string): number => Math.max(Number(val) || 1, 1);\n","var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n parseInt: parseIntImplementation\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","import { IOriginCoupon } from './coupon';\n\nexport interface ICampaignInit {\n title: string;\n begin_time: string;\n end_time: string;\n pre_time: string;\n support_pre: number;\n sale_price: number;\n stock: number;\n left_stock: number;\n max_buy_times: number;\n has_buy_num: number;\n current_time: string;\n coupon: number;\n stype: number | ECampaignType;\n campaign_id: string;\n sku_min_price: number;\n sku_max_price: number;\n full_discount: Array;\n select_shop_full_discount: Array; // 满足的店铺满减条件,只有一个\n tips?: string;\n}\n\nexport enum ECampaignType {\n FullDiscount = 100,\n FullDiscountWithMultiShop = 110,\n LimitTimeSkill = 3\n}\n\nexport interface ICampaignConfig {\n supportGiveUpActivity: boolean; // 是否支持放弃活动\n supportStyleInGoodsList: boolean; // 是否支持在商品列表页面展示相应的活动样式\n campaignScene: {\n // 活动的适用场景\n toutiao: boolean; // 头条app\n toutiaoProduct: boolean; // 头条的app,不包括头条app\n weixin: boolean; // 微信\n outapp: boolean; // 站外(除微信)\n };\n notifyBarStyle: number; // 默认预告条样式\n campaignBarStyle: number; // 默认活动条\n percent: number; // 已购买百分比\n isPre: boolean; // 是否在预告中,只有当支持预告才可靠\n customChecker: () => boolean;\n needRefresh: boolean; // 预告需要刷新\n needPreEndTime: boolean; // 是否需要预热结束时间\n extraFunc: (item: ICampaignInit) => Partial; // 活动预处理\n url: string; // 跳转活动页url\n urlParams: Record; // 跳转活动页需要携带的参数\n urlName: string; // 跳转活动页的名字\n promotionString: string; // 营销文案\n beginTime: Date;\n endTime: Date;\n preTime: Date | '';\n currentTime: Date;\n name: string;\n waitForSale: boolean;\n bigFullSmall: Array;\n canUseCoupon: boolean;\n descPrefix?: string; // 用于标签前缀\n descSuffix?: string;\n}\n\nexport interface IFullDiscount {\n discount: number;\n full: number;\n per_level: number;\n}\n\nexport interface IDiscountDetail {\n total_amount: number;\n coupon_amount: number;\n coupon_info: IOriginCoupon;\n full_discount_amount: number;\n full_discount_info: ICampaignInit;\n per_level: boolean;\n}\n\nexport type ICampaign = ICampaignConfig & ICampaignInit;\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","\nvar content = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1000;visibility:hidden;-webkit-transition:visibility 0.3s cubic-bezier(0, 0, 0.25, 1),background 0.3s cubic-bezier(0, 0, 0.25, 1);-o-transition:visibility 0.3s cubic-bezier(0, 0, 0.25, 1),background 0.3s cubic-bezier(0, 0, 0.25, 1);-moz-transition:visibility 0.3s cubic-bezier(0, 0, 0.25, 1),background 0.3s cubic-bezier(0, 0, 0.25, 1);transition:visibility 0.3s cubic-bezier(0, 0, 0.25, 1),background 0.3s cubic-bezier(0, 0, 0.25, 1);background:rgba(0,0,0,0)}.modal--show{z-index:1000;background:rgba(0,0,0,0.5);visibility:visible}\\n\", \"\"]);\n\n","\nvar content = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Imports\nvar urlEscape = require(\"../../../node_modules/css-loader/dist/runtime/url-escape.js\");\nvar ___CSS_LOADER_URL___0___ = urlEscape(require(\"./img/img-bg.png\"));\n\n// Module\nexports.push([module.id, \".image__container{position:relative}.image__container--component{position:absolute;top:0;bottom:0;left:0;right:0;background:#FAFAFA url(\" + ___CSS_LOADER_URL___0___ + \") no-repeat center/24px;-webkit-border-radius:var(--img-border-radius);-moz-border-radius:var(--img-border-radius);border-radius:var(--img-border-radius)}.image__container--mask{position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,0.04);-webkit-border-radius:var(--img-border-radius);-moz-border-radius:var(--img-border-radius);border-radius:var(--img-border-radius)}\\n\", \"\"]);\n\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAACN1BMVEVHcEzx8fHz8/P////y8vL19fXy8vLy8vLz8/Pz8/Py8vLz8/P09PTq6uru7u7y8vLz8/Py8vL////////z8/Py8vLz8/Px8fHy8vLz8/Py8vLz8/Px8fH////z8/Pz8/Py8vLy8vLy8vL09PTz8/Pz8/P09PTy8vLy8vLy8vLy8vL09PTy8vLz8/Py8vL09PT29vb////y8vLz8/P19fXy8vL////y8vLz8/Pz8/Py8vLz8/P09PT////y8vLz8/Py8vL09PT09PTy8vLz8/P////z8/Pv7+/x8fH////y8vLz8/Py8vLz8/Py8vLz8/Px8fHz8/Py8vL19fXz8/P4+Pjy8vLy8vLz8/Px8fHz8/Px8fHy8vLy8vLy8vLx8fHo6Ojy8vL4+Pjz8/Pr6+vy8vLz8/P09PTz8/Py8vLx8fHx8fHz8/Py8vL09PTy8vLz8/Py8vL////39/fy8vL////y8vLy8vLz8/Py8vLz8/P09PTz8/Py8vLz8/Pz8/P////z8/Py8vLy8vL29vb09PTy8vLx8fH////y8vLw8PDy8vLz8/Py8vLx8fHy8vLz8/Py8vLz8/P////y8vLz8/Py8vLz8/Pz8/Py8vL39/f09PTy8vLz8/Py8vLz8/Pr6+vx8fHj4+Py8vLx8fHy8vLy8vL09PT39/fy8vLx8fHy8vLz8/P////x8fH19fXz8/Pz8/P////m5uby8vLz8/Pz8/Py8vLy8vLz8/Py8vLz8/Py8vJDys78AAAAvHRSTlMAbmcBxhoT5oK6/IBvDA/w+BQDCBX5vFyvV9dCEgKU4fo74Bj1+nTk6ejILu8r/UMbB3jUNdwR3eNoZBYtDfLSrlmcqlMEWDFHDp8pYc7nkOH3TEn8J7N14m+kk55gx34Ljia9DbdBcKjBlzVqJlvLVY0GPvQLc7ZAxbGd1e5U+QWXsNQ3RbXOD3cjv6tiOIal8b4SPM2JwszlH4n+bsr+GuIJPTfsKIYg2l05zwp8GSx/CQpO0ZFQrZLDw/TpG0IAAAIrSURBVBgZzcH1QxNhAMfh7zY3cHTa2K0gYqGE3d3d3d3d3d3d3fH543y3ux3HENj95vMoJjt118ykWrQ5M1bxWhynToMVpwP1GK5qsjKoR5scuc2hXj3lsrgV9crIVZXDJKBAji0kov002QIbSMhu2daToJ2KyplIgm4GFNGThL2WkZtBwh49lvQCD1KlwDM86C29xJMeeoonb/QET4pUhie9lH4XL3Kl+3hQIqk/HqRKyu5Cwt4WywjuJU6n5KOh5msWJBGn921Fpa/Ow2XSpnRFpV1oh0v7PX0U03ZeSrItpVFzOU4OSkm2pZzrof/ZrI5DNssIdOiUebatXIKN88avCMjIGdhvrWzbwrBRRipGl2w5hp3AKJXRCA4UyxIE/DL6EtFajuVENJXhA0KyBAG/jM5EHJNjMhEtZfiAkCxBwC+jAKNVuRxZUzEWyfABIVmCgF/G0ukYh1rIdnAlRuOFMnxASJYg4FdUs3ZA/jpFdZ0P7DuvKB8QkiUI+GVpEgbCO7YP3X9qSSGQOVIWHxCS5QpwT7YmW3HpNkW2GUCabJlwRzHdV+FYdloxE6BCMSVwTVWKZnfG6Di3taocgXGKuQ4PrsrtQ9nHAXJrBiQrpmshVKapDqOaQniMHBeBy31Uq6wbwGhVeXgL6Ne/XP+UXpoEtBwgl16XMDK/5TesIb8yD6PbCFXTvS91evVccdI+VVCrjPfvVNOXH78G/mlQw++f379+luMvXVylCAO3OFIAAAAASUVORK5CYII=\"","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.reduxLogger=e.reduxLogger||{})}(this,function(e){\"use strict\";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,\"kind\",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,\"path\",{value:t,enumerable:!0})}function n(e,t,r){n.super_.call(this,\"E\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0}),Object.defineProperty(this,\"rhs\",{value:r,enumerable:!0})}function o(e,t){o.super_.call(this,\"N\",e),Object.defineProperty(this,\"rhs\",{value:t,enumerable:!0})}function i(e,t){i.super_.call(this,\"D\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0})}function a(e,t,r){a.super_.call(this,\"A\",e),Object.defineProperty(this,\"index\",{value:t,enumerable:!0}),Object.defineProperty(this,\"item\",{value:r,enumerable:!0})}function f(e,t,r){var n=e.slice((r||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,n),e}function u(e){var t=\"undefined\"==typeof e?\"undefined\":N(e);return\"object\"!==t?t:e===Math?\"math\":null===e?\"null\":Array.isArray(e)?\"array\":\"[object Date]\"===Object.prototype.toString.call(e)?\"date\":\"function\"==typeof e.toString&&/^\\/.*\\//.test(e.toString())?\"regexp\":\"object\"}function l(e,t,r,c,s,d,p){s=s||[],p=p||[];var g=s.slice(0);if(\"undefined\"!=typeof d){if(c){if(\"function\"==typeof c&&c(g,d))return;if(\"object\"===(\"undefined\"==typeof c?\"undefined\":N(c))){if(c.prefilter&&c.prefilter(g,d))return;if(c.normalize){var h=c.normalize(g,d,e,t);h&&(e=h[0],t=h[1])}}}g.push(d)}\"regexp\"===u(e)&&\"regexp\"===u(t)&&(e=e.toString(),t=t.toString());var y=\"undefined\"==typeof e?\"undefined\":N(e),v=\"undefined\"==typeof t?\"undefined\":N(t),b=\"undefined\"!==y||p&&p[p.length-1].lhs&&p[p.length-1].lhs.hasOwnProperty(d),m=\"undefined\"!==v||p&&p[p.length-1].rhs&&p[p.length-1].rhs.hasOwnProperty(d);if(!b&&m)r(new o(g,t));else if(!m&&b)r(new i(g,e));else if(u(e)!==u(t))r(new n(g,e,t));else if(\"date\"===u(e)&&e-t!==0)r(new n(g,e,t));else if(\"object\"===y&&null!==e&&null!==t)if(p.filter(function(t){return t.lhs===e}).length)e!==t&&r(new n(g,e,t));else{if(p.push({lhs:e,rhs:t}),Array.isArray(e)){var w;e.length;for(w=0;w=t.length?r(new a(g,w,new i(void 0,e[w]))):l(e[w],t[w],r,c,g,w,p);for(;w=0?(l(e[n],t[n],r,c,g,n,p),S=f(S,i)):l(e[n],void 0,r,c,g,n,p)}),S.forEach(function(e){l(void 0,t[e],r,c,g,e,p)})}p.length=p.length-1}else e!==t&&(\"number\"===y&&isNaN(e)&&isNaN(t)||r(new n(g,e,t)))}function c(e,t,r,n){return n=n||[],l(e,t,function(e){e&&n.push(e)},r),n.length?n:void 0}function s(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},L,e),r=t.logger,n=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,f=t.diffPredicate;if(\"undefined\"==typeof r)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error(\"[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\\n// Logger with default options\\nimport { logger } from 'redux-logger'\\nconst store = createStore(\\n reducer,\\n applyMiddleware(logger)\\n)\\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\\nimport createLogger from 'redux-logger'\\nconst logger = createLogger({\\n // ...options\\n});\\nconst store = createStore(\\n reducer,\\n applyMiddleware(logger)\\n)\\n\"),function(){return function(e){return function(t){return e(t)}}};var u=[];return function(e){var r=e.getState;return function(e){return function(l){if(\"function\"==typeof i&&!i(r,l))return e(l);var c={};u.push(c),c.started=O.now(),c.startedTime=new Date,c.prevState=n(r()),c.action=l;var s=void 0;if(a)try{s=e(l)}catch(e){c.error=o(e)}else s=e(l);c.took=O.now()-c.started,c.nextState=n(r());var d=t.diff&&\"function\"==typeof f?f(r,l):t.diff;if(x(u,Object.assign({},t,{diff:d})),u.length=0,c.error)throw c.error;return s}}}}var k,j,E=function(e,t){return new Array(t+1).join(e)},A=function(e,t){return E(\"0\",t-e.toString().length)+e},D=function(e){return A(e.getHours(),2)+\":\"+A(e.getMinutes(),2)+\":\"+A(e.getSeconds(),2)+\".\"+A(e.getMilliseconds(),3)},O=\"undefined\"!=typeof performance&&null!==performance&&\"function\"==typeof performance.now?performance:Date,N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},P=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,r=e.getState;return\"function\"==typeof t||\"function\"==typeof r?S()({dispatch:t,getState:r}):void console.error(\"\\n[redux-logger v3] BREAKING CHANGE\\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\\n[redux-logger v3] Change\\n[redux-logger v3] import createLogger from 'redux-logger'\\n[redux-logger v3] to\\n[redux-logger v3] import { createLogger } from 'redux-logger'\\n\")};e.defaults=L,e.createLogger=S,e.logger=T,e.default=T,Object.defineProperty(e,\"__esModule\",{value:!0})});\n","\nvar content = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".popup{position:fixed;bottom:0;left:0;width:100%;height:10rem;background:#fff;-webkit-border-radius:8px 8px 0 0;-moz-border-radius:8px 8px 0 0;border-radius:0.21333rem 0.21333rem 0 0;z-index:1000;-webkit-transition:opacity 0.3s cubic-bezier(0, 0, 0.25, 1),-webkit-transform 0.3s cubic-bezier(0, 0, 0.25, 1);transition:opacity 0.3s cubic-bezier(0, 0, 0.25, 1),-webkit-transform 0.3s cubic-bezier(0, 0, 0.25, 1);-o-transition:opacity 0.3s cubic-bezier(0, 0, 0.25, 1),-o-transform 0.3s cubic-bezier(0, 0, 0.25, 1);-moz-transition:transform 0.3s cubic-bezier(0, 0, 0.25, 1),opacity 0.3s cubic-bezier(0, 0, 0.25, 1),-moz-transform 0.3s cubic-bezier(0, 0, 0.25, 1);transition:transform 0.3s cubic-bezier(0, 0, 0.25, 1),opacity 0.3s cubic-bezier(0, 0, 0.25, 1);transition:transform 0.3s cubic-bezier(0, 0, 0.25, 1),opacity 0.3s cubic-bezier(0, 0, 0.25, 1),-webkit-transform 0.3s cubic-bezier(0, 0, 0.25, 1),-moz-transform 0.3s cubic-bezier(0, 0, 0.25, 1),-o-transform 0.3s cubic-bezier(0, 0, 0.25, 1);-webkit-transform:translate3d(0, 100%, 0);-moz-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);will-change:transform;opacity:0}.popup--slide-in{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0);opacity:1}.popup--hide{display:none}\\n\", \"\"]);\n\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","interface DoPointObj {\n coupon_id?: string; // 优惠券id\n pv_for: string;\n}\ninterface Arg {\n shop?: ObjectWithId; // 店铺优惠券\n platform?: ObjectWithId; // 平台优惠券\n}\ninterface ObjectWithId {\n id?: string;\n}\nexport const getCouponIdObj = ({ shop, platform }: Arg) => {\n let doPointObj: DoPointObj = { pv_for: 'selected_coupon' };\n let couponIdArr = [];\n if (shop) {\n couponIdArr.push(shop.id);\n }\n if (platform) {\n couponIdArr.push(platform.id);\n }\n // 只有提单页面才打优惠券的点\n if (couponIdArr.length) {\n doPointObj.coupon_id = couponIdArr.join(',');\n }\n return doPointObj;\n};\n\nexport const getSelectedIdString = (selected: Record) => {\n if (!selected) {\n return '';\n }\n return Object.keys(selected)\n .map((item) => selected[item])\n .sort()\n .join(',');\n};\n","import { ICoupon, ICouponApplied } from 'types/coupon';\nimport { getCouponType } from 'services/coupon/type';\nimport { couponTypeConst } from 'config/coupon';\nimport Big from 'big.js';\n\nfunction getDiscountCouponAmount(coupon: ICouponApplied, amount: number) {\n let couponDiscount = Math.ceil(Big(amount).mul(Big(10).sub(coupon.discount)).div(10));\n if (coupon.maxDiscountLimit > 0 && couponDiscount > coupon.maxDiscountLimit) {\n return coupon.maxDiscountLimit;\n }\n if (amount < couponDiscount) {\n return amount;\n }\n\n // if (couponDiscount < 1) {\n // return 1;\n // }\n\n return couponDiscount;\n}\n\nfunction getStraightReducedCouponAmount(coupon: ICouponApplied, amount: number) {\n if (amount < coupon.credit) return amount;\n\n return coupon.credit;\n}\n\nfunction getFullReducedCouponAmount(coupon: ICouponApplied, amount: number) {\n if (amount >= Number(coupon.threshold)) {\n return coupon.credit;\n }\n\n return 0;\n}\n\nexport const computeCouponDiscount = (\n coupon: ICouponApplied | null | undefined,\n amount: number\n) => {\n if (!coupon || amount === 0) {\n return 0;\n }\n\n const couponType = getCouponType(coupon);\n\n if (couponType === couponTypeConst.discount) {\n return getDiscountCouponAmount(coupon, amount);\n }\n\n if (couponType === couponTypeConst.straightReduced) {\n return getStraightReducedCouponAmount(coupon, amount);\n }\n\n if (couponType === couponTypeConst.fullDiscount) {\n return getFullReducedCouponAmount(coupon, amount);\n }\n\n return 0;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar test = [];\nvar nativeSort = test.sort;\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD;\n\n// `Array.prototype.sort` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? nativeSort.call(toObject(this))\n : nativeSort.call(toObject(this), aFunction(comparefn));\n }\n});\n","\nvar content = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/thread-loader/dist/cjs.js??ref--8-1!../../../node_modules/css-loader/dist/cjs.js??ref--8-2!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".notice{line-height:0.42667rem;padding:0.21333rem 0.32rem;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:flex;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;align-items:center;-webkit-flex-shrink:0;flex-shrink:0}.notice.warning,.notice.normal{background:#fff9e6;color:#ffa526}.notice.error{background:#FFEFEE;color:#FF3826}.notice__text{max-width:8.8rem;margin-left:0.21333rem;font-size:0.32rem;font-family:PingFangSC-Regular, PingFang SC}.notice.normal .notice__text{margin:0 auto}\\n\", \"\"]);\n\n","import bridge from 'libs/bridge';\nimport openLink, { nativeReplace } from 'libs/open-link';\nimport * as link from '@byted/ecom-mobile-lib/lib/core/link';\nimport env from 'libs/env';\nexport default function (url: string, config?: any) {\n // 目前火山端指定关闭url有问题\n const openGap =\n ({\n douyin: 300\n } as any)[env.appName] || 0;\n\n const specialEnv = ['xigua', 'huoshan', 'super', 'automobile', 'toutiaolite'];\n const openConfig = { ...config, closeAndOpen: env.isInVideo };\n if (bridge.supports('close')) {\n openLink(url, openConfig);\n document.addEventListener('visibilitychange', () => {\n // 页面变为不可见,视作成功呼起支付应用,取消呼起失败的timeout\n if (document.visibilityState === 'visible') {\n close();\n }\n });\n if (!specialEnv.includes(env.appName)) {\n setTimeout(() => {\n close();\n }, openGap);\n }\n } else {\n nativeReplace(url);\n }\n}\n\nexport const close = () => {\n bridge.call('close', {\n reactId: (window as any).reactId,\n url: window.location.href\n });\n};\n","import { sendEvent } from 'libs/event';\nimport urlParams from 'libs/query';\n\nconst baseSendEventAction = ({ url, status, moduleName, time }: any) => {\n sendEvent('ecommerce_tect_stat', {\n api_path: url,\n fe_flag: status,\n time_interval: time,\n page_name: moduleName\n });\n};\n\ninterface BaseStatProps {\n url: string;\n status: number;\n time?: number;\n}\n\nlet ACTION_TIME_MAP = {\n START_REQUEST_TIME: 0,\n LOADING_DISSMISS_TIME: 0\n};\n\n// 上报数据预取失败上报\nexport const sendPrefetchActionFailed = ({ url, status }: BaseStatProps) => {\n baseSendEventAction({\n url,\n status,\n time: 'no use',\n moduleName: 'buynow_prefetch_failed'\n });\n};\n\n// 上报数据预取接口时延\nexport const sendPrefetchActionStatus = ({ url, status, time }: BaseStatProps) => {\n baseSendEventAction({\n url,\n time,\n status,\n moduleName: 'buynow_main_api_time_prefetch'\n });\n};\n\n// 上报常规接口时延\nexport const sendMainApiTime = ({ url, status, time }: BaseStatProps) => {\n baseSendEventAction({\n url,\n time,\n status,\n moduleName: 'buynow_main_api_time_network'\n });\n};\n\n// 上报页面代码执行时延\nexport const sendCodeCompileTime = () => {\n if (!urlParams.page_init_timestamp) {\n return;\n }\n baseSendEventAction({\n status: urlParams.new_source_type,\n moduleName: 'buynow_enter_code_compile',\n time: Date.now() - urlParams.page_init_timestamp\n });\n};\n\n// 用户点击 - baseRequest发出时间\nexport const sendUserClickToDispatchFirstRequest = () => {\n ACTION_TIME_MAP.START_REQUEST_TIME = Date.now();\n if (!urlParams.page_init_timestamp) {\n return;\n }\n baseSendEventAction({\n status: urlParams.new_source_type,\n moduleName: 'buynow_enter_request_dispatch',\n time: ACTION_TIME_MAP.START_REQUEST_TIME - urlParams.page_init_timestamp\n });\n};\n\n// 用户点击到 loading 圆圈消失时延(即所有主接口时延)\nexport const sendUserClickToDismissLoading = () => {\n ACTION_TIME_MAP.LOADING_DISSMISS_TIME = Date.now();\n if (!urlParams.page_init_timestamp) {\n return;\n }\n baseSendEventAction({\n status: urlParams.new_source_type,\n moduleName: 'buynow_enter_loading_dismiss',\n time: ACTION_TIME_MAP.LOADING_DISSMISS_TIME - urlParams.page_init_timestamp\n });\n};\n\n// 影响Loading的请求发出 - 请求返回时延(即所有主接口时延)\nexport const sendLoadingDurationTime = () => {\n baseSendEventAction({\n status: urlParams.new_source_type,\n moduleName: 'buynow_loading_duration',\n time: ACTION_TIME_MAP.LOADING_DISSMISS_TIME - ACTION_TIME_MAP.START_REQUEST_TIME\n });\n};\n","import env from './env';\nimport bridge from 'libs/bridge';\n// 鲁班新商详跳转小店打点 参考vue项目修改 第一版打点 使用很少没有进行使用promise化\ninterface LogV1Obj {\n tag?: string;\n label?: string;\n extra?: {};\n}\ninterface EventObj {\n extJson?: any;\n ext_json?: any;\n labelName: string;\n eventName: string;\n}\n\n/**\n * 发送事件必须添加 EVENT_ORIGIN_FEATURE 字段\n * @param {*} data\n */\nfunction addEventOriginFeature(data: any): void {\n // 待发送的事件对象必须存在,否则没有意义\n if (data) {\n data.extra = data.extra || {};\n // 在extra内部添加EVENT_ORIGIN_FEATURE属性\n // extra内部必须避免使用EVENT_ORIGIN_FEATURE\n // 否则会被覆盖\n data.extra.EVENT_ORIGIN_FEATURE = 'TEMAI';\n }\n}\n\n// jsbridge-sendlog上报日志 第一版日志上报埋点 暂时时只给鲁班用\nexport function jsbridgeSendLog(obj: LogV1Obj): void {\n if (!obj) return;\n const eventObj: EventObj = {\n eventName: obj.tag!,\n labelName: obj.label!\n };\n addEventOriginFeature(obj);\n eventObj[env.isDouYin ? 'extJson' : 'ext_json'] = obj.extra;\n bridge.call('sendLog', eventObj);\n}\nexport const sendLogV1 = (\n { tag = 'views_product_item', label = 'order_submit_success', extra = {} }: LogV1Obj = {\n tag: 'views_product_item',\n label: 'order_submit_success',\n extra: {}\n }\n) => {\n jsbridgeSendLog({ tag, label, extra });\n};\n","import { IOriginCoupon, ICouponApplied, ICouponNotApply } from 'types/coupon';\n\nexport const mapAppliedCoupons = (coupon: IOriginCoupon): ICouponApplied => {\n return {\n id: `${coupon.id}`,\n metaId: `${coupon.coupon_meta_id}`,\n type: coupon.type,\n validPeriod: coupon.valid_period || 0,\n periodType: coupon.period_type,\n shopName: coupon.shop_name,\n couponName: coupon.coupon_name,\n discount: coupon.discount,\n credit: coupon.credit,\n threshold: coupon.threshold,\n maxDiscountLimit: coupon.max_discount_limit,\n createTime: coupon.create_time,\n startTime: coupon.start_time,\n beginTime: coupon.begin_time,\n endTime: coupon.end_time,\n typeString: coupon.type_string,\n isShow: coupon.is_show,\n url: coupon.url || '',\n popUpText: coupon.pop_up_text || '',\n shopId: coupon.shop_id,\n explain: [],\n platformSubType: coupon.platform_sub_type,\n typeDetail: coupon.type_detail,\n kolUid: coupon.kol_uid,\n productIds: coupon.product_ids || [],\n coupon_meta_id: coupon.coupon_meta_id,\n kolUserTag: coupon.kol_user_tag,\n kolScopeTag: coupon.kol_scope_tag\n };\n};\nexport const mapNotApplyCoupons = (coupon: IOriginCoupon): ICouponNotApply => {\n return {\n metaId: `${coupon.coupon_meta_id}`,\n type: coupon.type,\n validPeriod: coupon.valid_period || 0,\n periodType: coupon.period_type,\n shopName: coupon.shop_name,\n couponName: coupon.coupon_name,\n discount: coupon.discount,\n credit: coupon.credit,\n threshold: coupon.threshold,\n maxDiscountLimit: coupon.max_discount_limit,\n createTime: coupon.create_time,\n startTime: coupon.start_time,\n beginTime: coupon.begin_time,\n endTime: coupon.end_time,\n typeString: coupon.type_string,\n isShow: coupon.is_show,\n leftAmount: coupon.left_amount,\n userApplyTimes: coupon.user_apply_times,\n maxApplyTimes: coupon.max_apply_times,\n kolUserTag: coupon.kol_user_tag\n };\n};\n","import { ICoupon, ICouponApplied } from 'types/coupon';\nimport { CouponGoodsItem } from 'types/cart';\nimport { computeCouponDiscount } from 'services/coupon/compute-coupon-discount';\nimport { canUseCouponInTime } from 'services/coupon/get-coupon-list';\n\nexport const computeShopCouponBaseAmount = (\n goodsList: CouponGoodsItem[],\n coupon?: ICouponApplied\n) => {\n let baseAmount = 0;\n const list: CouponGoodsItem[] = [];\n const newList: CouponGoodsItem[] = [];\n let discount = 0;\n\n // eslint-disable-next-line complexity\n goodsList.forEach((goods) => {\n const price = goods.price * goods.amount;\n goods.SCReducer = 0;\n const goodsNew = { ...goods };\n newList.push(goodsNew);\n if (coupon) {\n if (price <= 0) {\n // 价格小于0不参与接下来的优惠计算\n } else if (goods.isLimit) {\n // 限制区域下单\n } else if (goods.fullDiscount && !goods.fullDiscount.canUseCoupon && goods.FDReducer) {\n // 满减商品不支持使用优惠券\n } else if (goods.campaign && !goods.campaign.canUseCoupon && !goods.campaign.isPre) {\n // 活动商品不支持使用优惠券\n } else if (goods.supplyId && goods.supplyId !== 0 && goods.shopId !== 'fUCPXX') {\n // 分销商品不支持使用优惠券\n } else if (!canUseCouponInTime(coupon)) {\n // 优惠券不在使用时间内\n } else {\n if (coupon.type.toString().split('')[0] === '2') {\n baseAmount += price;\n list.push(goodsNew);\n } else if (\n coupon.typeDetail &&\n coupon.typeDetail.split(',').indexOf(goods.id) >= 0\n ) {\n baseAmount += price;\n list.push(goodsNew);\n }\n }\n }\n });\n\n if (baseAmount > 0) {\n const canUseLen = list.length;\n let hasComputedDis = 0;\n discount = computeCouponDiscount(coupon, baseAmount);\n list.sort(\n (item1, item2) => item1.price * item1.amount - item2.price * item2.amount\n ).forEach((goods, index) => {\n if (index === canUseLen - 1) {\n goods.SCReducer = discount - hasComputedDis;\n } else {\n const price = goods.price * goods.amount;\n goods.SCReducer = Math.floor((price / baseAmount) * discount);\n hasComputedDis += goods.SCReducer;\n }\n });\n }\n\n if (baseAmount <= 1) {\n discount = 0;\n }\n\n return {\n list: [...newList],\n base: baseAmount,\n discount\n };\n};\n\nexport const computePlatformCouponBaseAmount = (\n goodsList: CouponGoodsItem[],\n coupon?: ICouponApplied\n) => {\n let baseAmount = 0;\n const list: CouponGoodsItem[] = [];\n const newList: CouponGoodsItem[] = [];\n let discount = 0;\n\n goodsList.forEach((goods) => {\n // const reducerPrice = goods.price * goods.amount - (goods.FDReducer || 0) - (goods.SCReducer || 0); // 双十一改成平行优惠计算\n const price = goods.price * goods.amount - (goods.FDReducer || 0);\n goods.FCReducer = 0;\n const goodsNew = { ...goods };\n newList.push(goodsNew);\n if (coupon) {\n if (price <= 0) {\n // 价格小于0不参与接下来的优惠计算\n } else if (goods.isLimit) {\n // 限制区域下单\n } else if (goods.campaign && !goods.campaign.canUseCoupon && !goods.campaign.isPre) {\n // 活动商品不支持使用优惠券\n } else if (!canUseCouponInTime(coupon)) {\n // 优惠券不在使用时间内\n } else if (goods.payType === 0) {\n // 平台券不支持货到付款商品\n } else {\n // 全平台\n if (coupon.platformSubType === 0) {\n baseAmount += price;\n list.push(goodsNew);\n }\n\n // 指定商家\n if (\n coupon.platformSubType === 1 &&\n coupon.typeDetail &&\n coupon.typeDetail.split(',').indexOf(goods.shopId) >= 0\n ) {\n baseAmount += price;\n list.push(goodsNew);\n }\n\n // 指定商品\n if (\n coupon.platformSubType === 2 &&\n (coupon.productIds || []).indexOf(goods.id) >= 0\n ) {\n // @ts-ignore\n if (window['is_cart_page']) {\n return;\n }\n\n baseAmount += price;\n list.push(goodsNew);\n }\n }\n }\n });\n\n if (baseAmount > 0) {\n const canUseLen = list.length;\n let hasComputedDis = 0;\n discount = computeCouponDiscount(coupon, baseAmount);\n /* why sort?\n * 为了防止900元和1分的商品平分1分钱优惠券时\n * ,先计算900元的分到0分,再计算1分钱分到1分,\n * 最后算实际值时优惠券没有优惠😢\n * */\n list.sort(\n (item1, item2) => item1.price * item1.amount - item2.price * item2.amount\n ).forEach((goods, index) => {\n if (index === canUseLen - 1) {\n goods.FCReducer = discount - hasComputedDis;\n } else {\n const price = goods.price * goods.amount;\n goods.FCReducer = Math.floor((price / baseAmount) * discount);\n hasComputedDis += goods.FCReducer;\n }\n });\n }\n if (baseAmount < 0) {\n discount = 0;\n }\n\n return {\n list: [...newList],\n base: baseAmount,\n discount\n };\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.github.io/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","const vendors = ['webkit', 'moz', 'ms', 'o'];\nconst elementStyle = document.createElement('div').style;\n\n/* eslint-disable no-undef */\nexport const support3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix();\n/* eslint-enable no-undef */\n\n/**\n * @description get css prefix\n * @param {string} style style\n * @returns {string} style\n */\nexport const vendorPrefix = (style: string) => {\n if (!style) {\n return style;\n }\n const capitalStyle = style.charAt(0).toUpperCase() + style.substr(1);\n for (let i = 0, j = vendors.length; i < j; i++) {\n const prefixStyle = vendors[i] + capitalStyle;\n if (prefixStyle in elementStyle) {\n return `-${vendors[i]}-${style}`;\n }\n }\n\n return style;\n};\n","import { env } from '@byted/ecom-mobile-lib';\nimport bridge from 'libs/bridge';\nimport { IAppInfo } from '@byted/ecom-mobile-lib/lib/types/bridge';\n\n/**\n * @description 风控SDK呼起和关闭\n * @param callback 回调函数\n * @param error 错误处理函数\n */\nexport const renderRiskSDK = (option: {\n code: number;\n callback: Function;\n error: Function;\n}): void => {\n const { code, callback, error } = option;\n\n const errorCallback = (err?: any) => {\n try {\n window.Slardar('emit', 'log', {\n value: JSON.stringify(window.renderCaptcha),\n tags: {\n type: 'rendercaptcha error',\n action: err\n }\n });\n error && error((err && err.msg) || '系统异常,请重试');\n } catch (error) {}\n };\n\n if (!window.renderCaptcha) {\n errorCallback();\n return;\n }\n\n const codeMap = {\n 20205: 99999, // 滑块\n 20206: 99998, // 点选\n 20207: 99997, // 3d\n 20208: 99996 // 旋转\n };\n\n const getUserInfo = (baseInfo: any) => {\n const baseIId = baseInfo && baseInfo.iid;\n bridge\n .call('appInfo', {}, { timeout: 500 })\n .then((res) => {\n const aid = (res as IAppInfo).aid || env.aid || 0;\n const params = {\n aid: Number(aid),\n iid: (res as IAppInfo).install_id || baseIId || '',\n did: (res as IAppInfo).device_id || '0',\n region: 'cn',\n showMode: 'mask',\n successCb: (res: any) => {\n callback && callback(res);\n },\n challenge_code: codeMap[code] || 99999\n };\n console.warn('risk params', params);\n window.renderCaptcha(params);\n })\n .catch((err) => {\n error && error((err && err.msg) || '系统异常,请重试');\n });\n };\n\n const getInstallId = (callback: any) => {\n bridge\n .call('apiParam', {}, { timeout: 500 })\n .then((res) => {\n callback && callback(res);\n })\n .catch(errorCallback);\n };\n\n if (env.isInAweme || env.isInHotsoon) {\n // 如果是抖火的话,需要另外调用一个jsb获取iid\n getInstallId(getUserInfo);\n } else {\n getUserInfo({});\n }\n};\n","import { ICouponApplied } from 'types/coupon';\nimport { getCouponScope } from 'services/coupon/type';\nimport { couponScopeConst } from 'config/coupon';\n\nexport const classifyCouponByShop = (coupon: ICouponApplied[]) => {\n const newData: Record = {};\n coupon.forEach((item) => {\n if (getCouponScope(item) === couponScopeConst.platform) {\n createNewKey(newData, 'platform', item);\n } else {\n createNewKey(newData, item.shopId, item);\n }\n });\n\n return newData;\n};\n\nexport const classifySelectedCouponByShop = (coupon: ICouponApplied[], isSingle: false) => {\n const newData: Record = {};\n coupon.forEach((item) => {\n if (item.selected) {\n if (getCouponScope(item) === couponScopeConst.platform) {\n newData.platform = item;\n } else if (isSingle) {\n newData.shop = item;\n } else {\n newData[item.shopId] = item;\n }\n }\n });\n\n return newData;\n};\n\nfunction createNewKey(obj: Record, key: string, value: any) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n obj[key].push(value);\n } else {\n obj[key] = [value];\n }\n}\n","import { ICampaign } from 'types/campaign';\n\nexport const computeFullDiscount = (config: ICampaign | undefined, amount: number) => {\n const res = {\n fullDiscount: 0,\n string: ''\n };\n if (!config) return res;\n\n const fullConfig = config.full_discount;\n if (!fullConfig) return res;\n\n if (!config.bigFullSmall) {\n config.bigFullSmall = fullConfig.reverse();\n }\n\n for (let item of config.bigFullSmall) {\n if (item.full <= amount) {\n return {\n fullDiscount: item.discount,\n string: `满${item.full / 100}减${item.discount / 100}`\n };\n }\n }\n\n return res;\n};\n","import { Middleware } from 'redux';\nimport {\n createOnlineOrder,\n createCodOrder,\n setFailure,\n PayStatus,\n transferStatus,\n WithPayState,\n CREATE_ORDER,\n OrderForm,\n InternalOrderForm,\n PAY_ORDER,\n getSourceInfo,\n setPayParams,\n PayParams,\n CHECK_QUEUE,\n START_CHECK_QUEUE,\n START_REQUEST_TOKEN,\n checkQueue,\n requestToken,\n STOP_CHECK_QUEUE,\n setQueueStatus,\n QueueStatus,\n setQueueTips,\n ExtraOrderInfo,\n createOrder\n} from '../reducer';\nimport bridge from 'libs/bridge';\nimport urlParams from 'libs/query';\nimport { getContext } from '@tetris/ad.js';\nimport { isAd } from 'src/utils/ad';\nimport { IAppInfoExt } from 'types/bridge';\nimport openThenCloseSelf, { close } from 'utils/openlink-then-close-self';\nimport { sendEvent } from 'libs/event';\nimport { counter, log } from 'utils/slardar';\nimport { sendLogV1 } from 'libs/send-log';\nimport { getCouponIdObj } from 'libs/get-coupn-id';\nimport { getLiveEventParams, getMicroAppParams } from 'utils/helper';\nimport { toggleSupportRetIns } from 'pages/product/buynow/store/base-reducer';\nimport env from 'libs/env';\nimport toast from 'components/common/toast';\nimport { DOUYIN_ORDER_COLLECT } from 'services/v2/order/const';\nimport { renderRiskSDK } from 'utils/risk-control';\n\nconst pvTime = new Date().getTime();\nexport function getAdInfo() {\n return new Promise((resolve, reject) => {\n if (urlParams.getAdInfoLocal) {\n const json = JSON.parse(localStorage.getItem('LOCAL_AD_INFO') || '[]');\n resolve(json);\n } else {\n setTimeout(() => reject(new Error('time out')), 1000);\n Promise.all([getContext(), bridge.call('adInfo')])\n .then((res) => resolve(res))\n .catch((err) => reject(err));\n }\n });\n}\n\nexport interface ICreateOrderResp {\n st: number;\n data: PayParams;\n msg: string;\n}\n\n/**\n * 用于处理`CreateOrderAction`。需要使用者提供一个Middleware于该Middleware前,\n * 用于补全`CreateOrderAction`的payload,结构为`OrderForm`。\n * @param store 应用该Middleware的store\n */\nconst orderMiddleware: Middleware<{}, WithPayState> = (store) => {\n const { dispatch, getState } = store;\n let overTimeLock = false;\n // 整个排队的timer,超时后失败并停止\n let overTimer: number | undefined;\n // 每次轮询的timer,手动取消订单后需要clear\n let checkTimer: number | undefined;\n // 延迟展示排队的timer,可能用户已经进入队列但是延迟排队组件展示\n let showQueueModalTimer: number | undefined;\n let pollCounter = 0;\n let startDisplayQueueTime = 0;\n let createOrderExtraInfo: ExtraOrderInfo;\n const QUEUE_DISPLAY_DELAY = 1500;\n const CHECK_GAP = 500;\n const CHECK_COUNT = 4;\n // 五分十秒取消\n const FINISH_QUEUE_TIME = 1000 * 60 * 5 + 1000 * 10;\n\n const liveEventParams = getLiveEventParams();\n const microAppParams = getMicroAppParams();\n\n let token = '';\n let requestTokenTimer: number;\n let requestTokenCounter = 0;\n\n const payHandler = (res: ICreateOrderResp, finalStatus: PayStatus) => {\n const orderId =\n res.data &&\n (res.data.order_id || (Array.isArray(res.data.orderIds) && res.data.orderIds[0]));\n const { shop, platform } = (getState().coupon && getState().coupon.selected) || {\n shop: {},\n platform: {}\n };\n const couponIdObj = getCouponIdObj({ shop, platform });\n if (res.st === 0 || res.st === 20403) {\n sendEvent('order_submit_success', {\n order_id: orderId,\n ...couponIdObj,\n ...getLiveEventParams(),\n ...liveEventParams\n });\n if (isAd()) {\n // 鲁班第一版埋点\n sendLogV1();\n }\n }\n switch (res.st) {\n /**\n * code含义:\n * 20500:退货运费险 被商家端取消 需要重新提交订单\n * 20402:需要排队支付\n * 20403:支付金额超限\n * 20204: 命中处罚 【全部实名合作方均需要经过合规审查】\n * 20600: 下单失败 【命中黄牛风控】需要提供 token\n * 20601: 下单失败,delay token验证失败\n * 0:生单成功\n */\n case 20500:\n dispatch(toggleSupportRetIns(false));\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n return dispatch({\n type: 'TOGGLE_RET_INS_DIALOG',\n payload: { retInsDialogContent: res.msg, retInsDialogShow: true }\n });\n case 20402:\n if (getState().pay.payStatus !== PayStatus.Queue) {\n dispatch(setPayParams(res.data));\n dispatch(setQueueTips(res.msg || '支付人数过多,请耐心等待,不要走开哦'));\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Queue);\n return dispatch({ type: START_CHECK_QUEUE, payload: true });\n }\n return dispatch({ type: CHECK_QUEUE, payload: true });\n case 20600:\n if (getState().pay.payStatus !== PayStatus.WaitingToken) {\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.WaitingToken);\n token = '';\n return dispatch({ type: START_REQUEST_TOKEN });\n }\n break;\n case 20403:\n dispatch(setPayParams(res.data));\n dispatch(setFailure({ code: res.st, message: res.msg }));\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Paying);\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Fail);\n break;\n case 20205:\n case 20206:\n case 20207:\n case 20208:\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n renderRiskSDK({\n code: getState().pay?.failure?.code ?? '',\n callback: () => {\n dispatch(createOrder());\n },\n error: (err: string) => {\n toast(err || '系统异常,请重试');\n }\n });\n break;\n case 0: {\n dispatch(setPayParams(res.data));\n const now = new Date().getTime();\n const timeDiff = now - startDisplayQueueTime;\n const timeout = timeDiff > 0 && timeDiff < 1000 ? 1000 - timeDiff : 0;\n setTimeout(() => {\n dispatch({\n type: PAY_ORDER,\n payload: {\n id: orderId\n }\n });\n }, timeout);\n break;\n }\n default:\n token = '';\n sendEvent('pay_fail', { stage: 1, extra: res.data });\n transferStatus(dispatch, getState().pay.payStatus, finalStatus);\n return dispatch(setFailure({ code: res.st, message: res.msg }));\n }\n };\n\n // eslint-disable-next-line complexity\n return (next) => (action) => {\n // 结束轮询,状态转为ready\n if (action.type && action.type === STOP_CHECK_QUEUE) {\n overTimeLock = true;\n clearTimeout(overTimer);\n clearTimeout(checkTimer);\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Ready);\n }\n // 轮询风控排队 5 秒,获取 下单 token\n if (action.type && action.type === START_REQUEST_TOKEN) {\n const getToken = () => {\n requestTokenTimer = window.setTimeout(() => {\n if (requestTokenCounter > 5) {\n clearInterval(requestTokenTimer);\n requestTokenCounter = 0;\n token = '';\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n return dispatch(\n setFailure({ code: 20601, message: '当前下单人数过多,请稍后重试' })\n );\n }\n\n requestToken().then((res) => {\n const data = res ? res.data : {};\n if (data.token) {\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Ready);\n clearTimeout(requestTokenTimer);\n requestTokenCounter = 0;\n token = data.token;\n dispatch(createOrder());\n } else {\n getToken();\n }\n });\n requestTokenCounter += 1;\n }, 1000);\n };\n getToken();\n }\n // 开始轮询\n if (action.type && action.type === START_CHECK_QUEUE) {\n const payParams = getState().pay.payParams;\n const orderId = payParams && payParams.order_id;\n if (!orderId)\n return transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n\n // 开始check时需要重置timer,否则取消后二次支付会出现问题\n overTimeLock = false;\n overTimer = undefined;\n showQueueModalTimer = undefined;\n pollCounter = 0;\n startDisplayQueueTime = 0;\n dispatch({ type: CHECK_QUEUE });\n dispatch(setQueueStatus(QueueStatus.QUEUING_SILENCE));\n }\n // 单次轮询\n if (action.type && action.type === CHECK_QUEUE) {\n const payState = getState().pay;\n const payParams = payState.payParams;\n const payType = payState.chosenPayMethod ? payState.chosenPayMethod.payType : 0;\n const orderId = payParams && payParams.order_id;\n if (!orderId) return next(action);\n if (!overTimer) {\n overTimer = window.setTimeout(() => {\n overTimeLock = true;\n dispatch(setQueueStatus(QueueStatus.TIMEOUT));\n startDisplayQueueTime = new Date().getTime();\n }, FINISH_QUEUE_TIME);\n }\n if (!showQueueModalTimer) {\n showQueueModalTimer = window.setTimeout(() => {\n dispatch(setQueueStatus(QueueStatus.QUEUING));\n }, QUEUE_DISPLAY_DELAY);\n }\n const gap = pollCounter < CHECK_COUNT ? CHECK_GAP : CHECK_GAP * CHECK_COUNT;\n checkTimer = window.setTimeout(() => {\n if (!overTimeLock) {\n // 在购物车提单的场景下check支付方式应该用outTradeNo,因为可能存在多个订单\n const checkId =\n createOrderExtraInfo &&\n createOrderExtraInfo.isBatchOrder &&\n payParams &&\n payParams.outTradeNo\n ? payParams.outTradeNo\n : orderId;\n checkQueue(checkId, orderId, payType, ++pollCounter).then(\n (response: { data: ICreateOrderResp }) => {\n // 确保没有stop\n !overTimeLock && payHandler(response.data, PayStatus.Fail);\n }\n );\n } else {\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.Fail);\n }\n }, gap);\n }\n\n if (action.type && action.type === CREATE_ORDER) {\n if (action.payload && action.payload.postForm) {\n createOrderExtraInfo = action.payload.extraInfo;\n const exceedCodOrder = (data: InternalOrderForm) => {\n return createCodOrder(data)\n .then((response) => {\n const { shop, platform } = getState().coupon.selected || {\n shop: {},\n platform: {}\n };\n const couponIdObj = getCouponIdObj({ shop, platform });\n const res = response.data;\n if (res.st === 0) {\n sendEvent('order_submit_success', {\n order_id: res.data.order_id,\n ...couponIdObj,\n ...getLiveEventParams(),\n ...liveEventParams\n });\n if (isAd()) {\n // 鲁班第一版埋点\n sendLogV1();\n }\n dispatch(setPayParams(res.data));\n return transferStatus(\n dispatch,\n getState().pay.payStatus,\n PayStatus.Success\n );\n } else {\n transferStatus(\n dispatch,\n getState().pay.payStatus,\n PayStatus.OrderFail\n );\n return dispatch(setFailure({ code: res.st, message: res.msg }));\n }\n })\n .catch((err) => {\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n\n // 提单接口失败原因观察\n counter('error_order_submit', {\n tags: {\n type: 'CodOrder',\n error: err.msg || err.message || 'unknown'\n }\n });\n\n return dispatch(\n setFailure({ code: 10000, message: '下单失败,请稍后重试' })\n );\n });\n };\n const state = getState();\n\n const exceedOnlineOrder = (data: InternalOrderForm) => {\n createOnlineOrder(data, createOrderExtraInfo)\n .then((response) => {\n const res = response.data;\n // 需要拆单支付直接跳走\n if (\n createOrderExtraInfo.isBatchOrder &&\n getState().pay.needSplitOrder &&\n res.st === 0\n ) {\n if (env.isInAweme) {\n toast('此订单不支持合并支付,请前往订单列表分别支付');\n return setTimeout(() => {\n bridge.call('openSchema', {\n schema: DOUYIN_ORDER_COLLECT\n });\n setTimeout(() => {\n close();\n }, 300);\n }, 1000);\n } else {\n return openThenCloseSelf(\n `/views/neworder/center?confirm_text=${encodeURIComponent(\n '此订单不支持合并支付,请前往订单列表分别支付'\n )}`,\n { control: true }\n );\n }\n }\n return payHandler(res, PayStatus.OrderFail);\n })\n .catch((err) => {\n sendEvent('pay_fail', { stage: 1, extra: err });\n\n transferStatus(dispatch, getState().pay.payStatus, PayStatus.OrderFail);\n\n // 提单接口失败原因观察\n counter('error_order_submit', {\n tags: {\n type: 'OnlineOrder',\n error: err.msg || err.message || 'unknown'\n }\n });\n\n return dispatch(\n setFailure({ code: 10000, message: '下单失败,请稍后重试' })\n );\n });\n };\n\n const payStatus = state.pay.payStatus;\n const chosenPayMethod = state.pay.chosenPayMethod;\n // 只有拆单支付允许不上报支付方式\n if (!chosenPayMethod && !state.pay.needSplitOrder) return;\n if (!transferStatus(dispatch, payStatus, PayStatus.CreatingOrder)) return;\n const formData = action.payload.postForm as OrderForm;\n const data: InternalOrderForm = {\n ...getSourceInfo(),\n ...formData,\n ...(chosenPayMethod && { sub_way: chosenPayMethod.subWay }),\n ...(chosenPayMethod && { pay_type: chosenPayMethod.payType }),\n token,\n s_type: liveEventParams.live_room_id ? '1' : '',\n room_id: liveEventParams.live_room_id || '',\n author_id: liveEventParams.live_author_id || formData.author_id || '',\n sub_b_type: microAppParams && microAppParams.appId ? '2' : '3',\n open_id: microAppParams && microAppParams.openId\n };\n\n getAdInfo()\n .then((res: any) => {\n // dou+转化\n let [adData, adInfoData] = res;\n if (adData && adData.cid && +Number(adData.cid)) {\n const extra: any = {\n ad_request: JSON.stringify(adData),\n properties: JSON.stringify({\n duration: new Date().getTime() - pvTime,\n come_from: urlParams.come_from || '0'\n }),\n fe_params: adInfoData.ad_extra_data || '{}'\n };\n data.source_id = (adData.cid || '0').toString();\n data.new_source_id = data.source_id;\n // 广告创意id,目前和new_source_id以及source_id一致。。\n data.cid = data.source_id;\n if (isAd()) {\n extra.event_type = 'shopping';\n extra.event_value = '';\n\n data.origin_id = data.source_id;\n data.source_type =\n data.source_type === '0'\n ? urlParams.origin_type\n : data.source_type;\n try {\n const extra = JSON.parse(data.extra || '{}') || {};\n const log_extra = JSON.parse(adData.log_extra);\n data.extra = JSON.stringify(Object.assign(extra, log_extra));\n } catch (e) {\n data.extra = '';\n }\n }\n data.report_event = JSON.stringify(extra);\n }\n })\n .finally(() => {\n if (chosenPayMethod && chosenPayMethod.payType === 0) {\n return exceedCodOrder(data);\n } else {\n return exceedOnlineOrder(data);\n }\n })\n .catch((err) => {\n console.error(err);\n // 提单失败\n log(err, {\n type: 'error_order_submit',\n payType: String(\n (chosenPayMethod && chosenPayMethod.payType) || 'unknown'\n )\n });\n });\n }\n }\n return next(action);\n };\n};\n\nexport default orderMiddleware;\n","import { ICampaignConfig, ICampaignInit, ECampaignType } from 'types/campaign';\nimport { env } from '@byted/ecom-mobile-lib';\nimport { has, Map } from 'immutable';\nimport { fixDateStr } from 'utils/time';\n\n// 满减信息\nfunction processPromotionFull(item: ICampaignInit) {\n const stype = Number(item.stype);\n if (\n !item ||\n (stype !== ECampaignType.FullDiscountWithMultiShop && stype !== ECampaignType.FullDiscount)\n )\n return {};\n if (!item.full_discount || item.full_discount.length === 0) return {};\n\n const promotion_string = item.full_discount\n .map((fullItem) => {\n // 判断是否每满 X 减 X, 如果没有就降级判断 110 类型, 实际上应该就判断per_level, server部分接口没传 , 耦合设计.\n return `${stype === ECampaignType.FullDiscountWithMultiShop ? '跨店' : ''}${\n fullItem.per_level ? '每' : ''\n }满${fullItem.full / 100}减${fullItem.discount / 100}`;\n })\n .join(' ');\n\n return {\n promotionString: promotion_string\n };\n}\n\n/*\n * 后端的活动配置信息目前没有完全支持这些特性,\n * 所以前端针对stype定义了默认的config,\n * 所有配置项优先读取后端字段\n */\nconst defaultConfig: ICampaignConfig = {\n name: '',\n beginTime: new Date(),\n endTime: new Date(),\n preTime: new Date(),\n currentTime: new Date(),\n supportGiveUpActivity: false,\n supportStyleInGoodsList: false,\n campaignScene: {\n toutiao: true,\n toutiaoProduct: true,\n weixin: true,\n outapp: false\n },\n notifyBarStyle: 1,\n campaignBarStyle: 1,\n percent: 0,\n isPre: false,\n customChecker: () => true,\n needRefresh: false,\n needPreEndTime: false,\n promotionString: '',\n extraFunc: (item: ICampaignInit) => {\n return {};\n },\n urlParams: {},\n url: '',\n urlName: '',\n waitForSale: false,\n canUseCoupon: false\n};\n\nconst campaignType = [1, 2, 3, 5, 7, 8, 9];\nconst promotionType = [ECampaignType.FullDiscount, ECampaignType.FullDiscountWithMultiShop];\n\nconst campaignConfig: Record> = {\n 1: {\n name: '活动',\n supportStyleInGoodsList: true\n },\n 3: {\n name: '秒杀',\n campaignBarStyle: 2,\n needRefresh: true\n },\n 5: {\n name: '达人专享价',\n supportStyleInGoodsList: true\n },\n 7: {\n name: '限时活动',\n campaignBarStyle: 2,\n supportStyleInGoodsList: true\n },\n 8: {\n name: '快闪抢购活动',\n campaignBarStyle: 5,\n needPreEndTime: true,\n needRefresh: true\n },\n 9: {\n name: '快闪普通活动',\n campaignBarStyle: 5\n }\n};\n\nconst promotionConfig: Record> = {\n [ECampaignType.FullDiscount]: {\n // 满减不需要前缀\n name: '满减',\n descPrefix: '',\n descSuffix: '',\n extraFunc: processPromotionFull,\n urlName: '促销活动'\n },\n [ECampaignType.FullDiscountWithMultiShop]: {\n name: '跨店满减',\n descPrefix: '跨店',\n descSuffix: '可跨店使用',\n extraFunc: processPromotionFull,\n urlName: '促销活动'\n }\n};\n\n/**\n * 获取促销活动信息,促销可能有多个\n * @param multiCampaign\n * @returns {*}\n */\nexport const getPromotionInfo = (multiCampaign: ICampaignInit[]) => {\n if (!multiCampaign) return [];\n let res = [];\n for (let item of multiCampaign) {\n if (Object.prototype.hasOwnProperty.call(promotionConfig, item.stype)) {\n res.push(item);\n }\n }\n\n return res;\n};\n\n/**\n * 获取普通平台活动信息, 且活动只能存在一个\n * @param multiCampaign\n * @returns {*}\n */\nexport const getCampaignInfo = (multiCampaign: ICampaignInit[]) => {\n if (!multiCampaign) return null;\n let res = null;\n for (let item of multiCampaign) {\n if (Object.prototype.hasOwnProperty.call(campaignConfig, item.stype)) {\n res = item;\n break;\n }\n }\n\n return res;\n};\n\n/* eslint-disable complexity */\nexport const getCampaignConfig = (campaign: ICampaignInit | null, needStock = true) => {\n if (!campaign) return null;\n\n const needStockStatus = needStock ? campaign.left_stock >= 0 : needStock;\n\n /**\n * 检查库存是否还有剩余,没有剩余则认为该活动无效\n */\n if (needStockStatus && (!campaign.left_stock || !campaign.stock || campaign.left_stock <= 0)) {\n return null;\n }\n\n /**\n * 活动的时间校验\n */\n if (!campaign.begin_time || !campaign.end_time || !campaign.current_time) return null;\n\n /**\n * 校验stype是否符合预期\n */\n const stype = campaign.stype;\n const useConfig = promotionType.indexOf(stype) > -1 ? promotionConfig : campaignConfig;\n const config = has(useConfig, stype) && useConfig[stype];\n if (!config) return null;\n\n let extraFeature = {};\n if (config.extraFunc) extraFeature = config.extraFunc(campaign);\n\n const coupon = campaign.coupon === 1;\n\n const _defaultConfig = {\n ...defaultConfig,\n ...config,\n ...campaign,\n ...extraFeature,\n canUseCoupon: coupon\n };\n\n if (!_defaultConfig.customChecker()) return null;\n\n /**\n * 检查活动是否允许在当前环境中参加\n */\n // const campaignScene = _defaultConfig.campaignScene;\n // if (\n // (env.isInToutiao && !campaignScene.toutiao) ||\n // (env.isInToutiaoProduct && !env.isInToutiao && !campaignScene.toutiaoProduct) ||\n // (env.isInWechat && !campaignScene.weixin) ||\n // (!env.isInToutiaoProduct && !env.isInWechat && !campaignScene.outapp)\n // ) {\n // return null;\n // }\n\n const { begin_time, end_time, current_time, pre_time } = _defaultConfig;\n const beginTime = new Date(fixDateStr(begin_time));\n const endTime = new Date(fixDateStr(end_time));\n const currentTime = new Date(fixDateStr(current_time));\n const preTime = pre_time && new Date(fixDateStr(pre_time));\n\n if (beginTime.getTime() >= endTime.getTime() || currentTime.getTime() >= endTime.getTime()) {\n return null;\n }\n if (_defaultConfig.support_pre && (!preTime || currentTime.getTime() < preTime.getTime())) {\n return null;\n }\n\n _defaultConfig.beginTime = beginTime;\n _defaultConfig.endTime = endTime;\n if (_defaultConfig.support_pre && pre_time) {\n _defaultConfig.preTime = preTime;\n _defaultConfig.isPre = currentTime.getTime() < beginTime.getTime();\n if (_defaultConfig.isPre && _defaultConfig.needPreEndTime) {\n const pre_end_time = new Date(beginTime.getTime() - 1800000);\n _defaultConfig.isPre = currentTime.getTime() < pre_end_time.getTime();\n _defaultConfig.waitForSale =\n currentTime.getTime() < beginTime.getTime() &&\n currentTime.getTime() > pre_end_time.getTime();\n }\n }\n _defaultConfig.currentTime = currentTime;\n _defaultConfig.percent = (campaign.stock - campaign.left_stock) / campaign.stock;\n\n return _defaultConfig;\n};\n","import { ICampaign, ICampaignConfig, ICampaignInit } from 'types/campaign';\nimport { getCampaignConfig, getCampaignInfo, getPromotionInfo } from 'services/campaign/index';\n\nexport interface IRes {\n campaign?: ICampaign; // 用于外部展示\n promotion: ICampaign[];\n fullDiscount?: ICampaign;\n platformFullDiscount?: ICampaign;\n}\n\nexport const differMultiCampaign = (multiCampaign: ICampaignInit[]) => {\n const res: IRes = {\n campaign: undefined,\n promotion: [],\n fullDiscount: undefined,\n platformFullDiscount: undefined\n };\n if (!multiCampaign || multiCampaign.length === 0) return res;\n const campaignInfo = getCampaignInfo(multiCampaign);\n const campaignConfig = getCampaignConfig(campaignInfo);\n // 外部展示的一个活动信息\n if (campaignConfig) {\n res.campaign = { ...campaignConfig };\n }\n\n // 获取促销活动\n const promotionInfo = getPromotionInfo(multiCampaign);\n let promotionConfig: ICampaign[] = [];\n promotionInfo.forEach((item) => {\n const config = getCampaignConfig(item);\n if (config !== null) {\n promotionConfig.push(config);\n }\n });\n if (promotionConfig.length > 0) {\n res.promotion = promotionConfig;\n // 满减活动信息\n promotionConfig.forEach((item) => {\n if (item && item.stype === 100) {\n // 店铺满减\n res.fullDiscount = item;\n } else if (item && item.stype === 110) {\n res.platformFullDiscount = item;\n }\n });\n }\n return res;\n};\n","var $ = require('../internals/export');\n\n// `Number.MAX_SAFE_INTEGER` constant\n// https://tc39.github.io/ecma262/#sec-number.max_safe_integer\n$({ target: 'Number', stat: true }, {\n MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF\n});\n","export const shopCoupon = [11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43];\n\nexport const platformCoupon = [1, 2, 3];\n\nexport const discountCoupon = [1, 11, 21, 31, 41];\n\nexport const straightReducedCoupon = [2, 12, 22, 32, 42];\n\nexport const fullDiscountCoupon = [3, 13, 23, 33, 43];\n\nexport enum couponTypeConst {\n discount,\n straightReduced,\n fullDiscount\n}\n\nexport enum couponScopeConst {\n platform,\n shop\n}\n\nexport const canNotUseReason = {\n goodsNot: '所结算商品不符合使用条件',\n timeNot: ''\n};\nexport const TYPE_LABELS: { [key: number]: string } = {\n 1: '平台折扣券',\n 2: '平台直减券',\n 3: '平台满减券',\n 11: '品类折扣券',\n 12: '品类直减券',\n 13: '品类满减券',\n 21: '商家折扣券',\n 22: '商家直减券',\n 23: '商家满减券',\n 31: '渠道折扣券',\n 32: '渠道直减券',\n 33: '渠道满减券',\n 41: '单品折扣券',\n 42: '单品直减券',\n 43: '单品满减券'\n};\n","import {\n CartShop,\n CouponGoodsItem,\n ISelectFullDiscount,\n PriceInfo,\n DiscountDetail\n} from 'types/cart';\nimport { computeFullDiscount } from 'services/campaign/compute-full-discount';\nimport { ICouponApplied } from 'types/coupon';\nimport { computeMaximumCouponForGoodsList } from 'services/coupon/get-maximum-coupon';\nimport {\n computePlatformCouponBaseAmount,\n computeShopCouponBaseAmount\n} from 'services/coupon/coupon-for-goods-list';\nimport { getCouponScope } from 'services/coupon/type';\nimport { couponScopeConst } from 'config/coupon';\n\nfunction computeFullDiscountInCart(\n selectItem: CartShop[],\n selectedIds: string[],\n restrictIds?: string[]\n) {\n const list: CouponGoodsItem[] = [];\n selectItem.forEach((shop) => {\n shop.items.forEach((goods) => {\n if (selectedIds.indexOf(goods.cartId) > -1) {\n list.push({\n ...goods,\n FCReducer: 0,\n SCReducer: 0,\n FDReducer: 0,\n isLimit: (restrictIds || []).indexOf(goods.id) !== -1\n });\n }\n });\n });\n\n let originalTotal = 0;\n const selectFullDiscount: Record = {};\n let goods: Record | undefined;\n\n // 商品初始化遍历\n list.forEach((item) => {\n if (!item.isLimit) {\n const price = item.price * item.amount;\n originalTotal += price;\n if (item.fullDiscount) {\n const id = item.fullDiscount.campaign_id;\n if (!selectFullDiscount[id]) {\n selectFullDiscount[id] = {\n list: [],\n baseAmount: 0,\n config: item.fullDiscount,\n discount: 0,\n desc: ''\n };\n }\n selectFullDiscount[id].list.push(item);\n selectFullDiscount[id].baseAmount += price;\n }\n }\n goods = goods || {};\n if (goods[item.shopId]) {\n goods[item.shopId].push(item);\n } else {\n goods[item.shopId] = [item];\n }\n });\n\n // 满减计算\n let totalFullDiscount = 0;\n Object.values(selectFullDiscount).forEach((item) => {\n const base = computeFullDiscount(item.config, item.baseAmount);\n const discount = base.fullDiscount;\n item.desc = base.string;\n item.discount = discount;\n totalFullDiscount += discount;\n\n if (discount > 0) {\n let hasComputedDis = 0;\n const len = item.list.length;\n item.list\n .sort((item1, item2) => item1.price * item1.amount - item2.price * item2.amount)\n .forEach((goods, index) => {\n if (index === len - 1) {\n goods.FDReducer = discount - hasComputedDis;\n } else {\n const dis = Math.ceil(\n ((goods.price * goods.amount) / item.baseAmount) * discount\n );\n goods.FDReducer = dis;\n hasComputedDis += dis;\n }\n });\n }\n });\n\n return {\n list,\n goods,\n selectFullDiscount,\n originalTotal,\n totalFullDiscount\n };\n}\n\n// 处理小于0元商品,获取selectState\nfunction processUnderZeroGoods(list: CouponGoodsItem[]) {\n let realTotal = 0;\n list.forEach((goods) => {\n if (!goods.isLimit) {\n const realPrice =\n goods.price * goods.amount -\n (goods.FDReducer || 0) -\n (goods.SCReducer || 0) -\n (goods.FCReducer || 0);\n realTotal += realPrice <= 0 ? 1 : realPrice;\n }\n });\n\n return realTotal;\n}\n\nexport const initComputeCartPrice = (\n selectedIds: string[],\n list: CartShop[],\n coupons: ICouponApplied[],\n needSelected?: boolean,\n restrictIds?: string[],\n priceInfo?: PriceInfo\n) => {\n const { list: selectItem, goods } = computeFullDiscountInCart(list, selectedIds, restrictIds);\n if (selectItem.length === 0)\n return {\n realTotal: 0,\n originalTotal: 0,\n couponsDiscount: 0,\n totalFullDiscount: 0,\n selectedCoupon: {},\n available: coupons.filter((item) => getCouponScope(item) === couponScopeConst.platform),\n goods: Object.values(goods || { init: [] }).reduce(\n (item1, item2) => item1.concat(item2),\n []\n )\n };\n\n // 最佳优惠券\n let maxCoupon: {\n coupon?: Record;\n discount: number;\n goods: CouponGoodsItem[];\n available: ICouponApplied[];\n } = {\n coupon: undefined,\n discount: 0,\n goods: [],\n available: []\n };\n if (goods && coupons.length > 0) {\n maxCoupon = computeMaximumCouponForGoodsList(coupons, goods, needSelected);\n } else if (goods) {\n maxCoupon.goods = [...selectItem];\n }\n\n return {\n realTotal: priceInfo?.total_price_info?.total_sku_price,\n originalTotal: priceInfo?.total_price_info.total_sum_price,\n couponsDiscount: priceInfo?.total_price_info.total_coupon_price,\n totalFullDiscount: priceInfo?.total_price_info.total_full_price,\n selectedCoupon: maxCoupon.coupon,\n available: maxCoupon.available,\n goods: maxCoupon.goods\n };\n};\n\nexport const computePriceWithCoupon = (\n coupon: Record,\n goodsList: CartShop[],\n selectedIds: string[],\n restrictIds?: string[]\n) => {\n let list: CouponGoodsItem[] = [];\n\n const {\n goods,\n originalTotal,\n selectFullDiscount,\n totalFullDiscount\n } = computeFullDiscountInCart(goodsList, selectedIds, restrictIds);\n\n let couponDiscount = 0;\n let realTotal = originalTotal - totalFullDiscount;\n // 计算店铺券\n if (goods && Object.keys(coupon).length > 0) {\n Object.keys(goods).forEach((shopId) => {\n const base = computeShopCouponBaseAmount(goods[shopId], coupon[shopId]);\n couponDiscount += base.discount;\n list = list.concat(base.list);\n });\n // 计算平台券\n if (coupon.platform) {\n const base = computePlatformCouponBaseAmount(list, coupon.platform);\n couponDiscount += base.discount;\n list = base.list;\n }\n realTotal = processUnderZeroGoods(list);\n } else {\n list = Object.values(goods || { init: [] }).reduce(\n (item1, item2) => item1.concat(item2),\n []\n );\n }\n const fullDiscountItem = Object.values(selectFullDiscount)\n .filter((item) => item.discount > 0)\n .map((item) => {\n return {\n discount: item.discount,\n desc: item.desc\n };\n });\n\n return {\n goodsList: list,\n realTotal,\n originalTotal,\n couponsDiscount: originalTotal - realTotal - totalFullDiscount,\n totalFullDiscount,\n fullDiscountItem\n };\n};\n\nexport const getFullDiscountItem = (priceInfo: PriceInfo) => {\n let result = [];\n let discountInfo: { [key: string]: number } = {};\n // let shopCampaign = {} as Record;\n const shopsInfo = (priceInfo?.shop_sku_list || priceInfo?.shop_cart_list) ?? {}; // 价格接口返回 sku list。billinfo 下单接口返回 cart list\n const shopsFlatten = Object.keys(shopsInfo).map((key) => shopsInfo[key]);\n const platformFullDiscountInfo = priceInfo?.platform_discount_detail;\n const discountSum = platformFullDiscountInfo?.full_discount_amount;\n const fullDiscount = platformFullDiscountInfo?.full_discount_info?.full_discount.find(\n (item) => item.per_level === 1\n );\n if (discountSum && fullDiscount) {\n result.push({\n discount: discountSum,\n desc: `每满${fullDiscount?.full / 100}减${fullDiscount.discount / 100}`\n });\n }\n shopsFlatten.forEach((shop) => {\n const shopDiscountDetail = shop.shop_discount_detail;\n // const shopFullDiscount = shopDiscountDetail?.full_discount_info;\n // const campaignId = shopFullDiscount?.campaign_id;\n const discountSum = shopDiscountDetail?.full_discount_amount;\n const fullDiscounts = shopDiscountDetail?.full_discount_info?.select_shop_full_discount;\n fullDiscounts?.forEach((fullDiscount) => {\n if (!fullDiscount) {\n return;\n }\n const discountTitle = `满${fullDiscount.full / 100}减${fullDiscount.discount / 100}`;\n if (!discountInfo[discountTitle]) {\n discountInfo[discountTitle] = discountSum;\n } else {\n discountInfo[discountTitle] = discountInfo[discountTitle] + discountSum;\n }\n });\n });\n Object.keys(discountInfo).forEach((item) => {\n result.push({\n discount: discountInfo[item],\n desc: item\n });\n });\n return result;\n};\n","import { ICouponApplied } from 'types/coupon';\nimport { computeCouponDiscount } from 'services/coupon/compute-coupon-discount';\nimport { fixDateStr } from 'utils/time';\nimport { List } from 'immutable';\nimport { changeMultiShopStatus } from 'services/coupon/change-coupon-status';\nimport { CouponGoodsItem } from 'types/cart';\nimport {\n computePlatformCouponBaseAmount,\n computeShopCouponBaseAmount\n} from 'services/coupon/coupon-for-goods-list';\nimport { classifyCouponByShop } from 'services/coupon/classify-coupon-by-shop';\nimport { getPlatformCoupon, getShopCoupon } from 'services/coupon/get-coupon-list';\n\nexport const getMaximumCoupon = (couponList: ICouponApplied[], baseAmount: number) => {\n if (!Array.isArray(couponList) || couponList.length === 0) {\n return;\n }\n\n let choseCouponIndex = -1;\n let maxDiscount = 0;\n\n couponList.forEach((coupon, index) => {\n const couponDiscount = computeCouponDiscount(coupon, baseAmount);\n if (couponDiscount > maxDiscount) {\n maxDiscount = couponDiscount;\n choseCouponIndex = index;\n }\n });\n\n if (choseCouponIndex > -1) {\n return couponList[choseCouponIndex];\n }\n\n return;\n};\n\nexport const sortCoupon = (couponList: ICouponApplied[]) => {\n return List(couponList)\n .sort((item1, item2) => {\n const time1 = new Date(fixDateStr(item1.createTime)).getTime();\n const time2 = new Date(fixDateStr(item2.createTime)).getTime();\n\n // time1小于time2,time1的时间早于time2的时间,time2排在time1的前面\n return time1 - time2 < 0 ? 1 : -1;\n })\n .toJS();\n};\n\ninterface IMergedCoupon {\n coupon: Record;\n goods: Record;\n discount: number;\n}\n\ninterface INeedMergeCoupon {\n coupon?: ICouponApplied[];\n list: CouponGoodsItem[];\n shopId: string;\n}\n// 组合店铺券和平台券\nfunction mergeCouponList(\n mergedList: IMergedCoupon[],\n newList: INeedMergeCoupon,\n platformCoupon?: ICouponApplied[]\n) {\n const newMergedList: IMergedCoupon[] = [];\n if (!newList.shopId) {\n const shopCouponLen = mergedList.length;\n const platCouponLen = (platformCoupon && platformCoupon.length) || 1;\n for (let i = 0; i < shopCouponLen; i++) {\n let totalGoodsList: CouponGoodsItem[] = Object.values(mergedList[i].goods).reduce(\n (item1, item2) => item1.concat(item2),\n []\n );\n for (let j = 0; j < platCouponLen; j++) {\n const coupon = (platformCoupon && platformCoupon[j]) || undefined;\n const base = computePlatformCouponBaseAmount(totalGoodsList, coupon);\n const oldMerged = { ...mergedList[i] };\n if (base.discount > 0) {\n oldMerged.coupon = { ...oldMerged.coupon, platform: coupon };\n }\n oldMerged.goods = { ...oldMerged.goods, platform: base.list };\n oldMerged.discount = oldMerged.discount + base.discount;\n newMergedList.push({ ...oldMerged });\n }\n }\n } else {\n const shopCouponLen = mergedList.length;\n const needMergedLen = (newList.coupon && newList.coupon.length) || 1;\n for (let i = 0; i < shopCouponLen; i++) {\n for (let j = 0; j < needMergedLen; j++) {\n const coupon = (newList.coupon && newList.coupon[j]) || undefined;\n const base = computeShopCouponBaseAmount(newList.list, coupon);\n const oldMerged = { ...mergedList[i] };\n if (base.discount > 0) {\n oldMerged.coupon = { ...oldMerged.coupon, [newList.shopId]: coupon };\n }\n oldMerged.goods = { ...oldMerged.goods, [newList.shopId]: base.list };\n oldMerged.discount = oldMerged.discount + base.discount;\n newMergedList.push({ ...oldMerged });\n }\n }\n }\n return newMergedList;\n}\n\nfunction initMergedShop(list: CouponGoodsItem[], shopId: string, coupon?: ICouponApplied[]) {\n const res: IMergedCoupon[] = [];\n\n const couponLen = (coupon && coupon.length) || 1;\n for (let i = 0; i < couponLen; i++) {\n const couponNow = (coupon && coupon[i]) || undefined;\n const base = computeShopCouponBaseAmount(list, couponNow);\n if (base.discount > 0) {\n res.push({\n coupon: { [shopId]: couponNow },\n goods: { [shopId]: base.list },\n discount: base.discount\n });\n } else {\n res.push({\n coupon: {},\n goods: { [shopId]: base.list },\n discount: base.discount\n });\n }\n }\n\n return res;\n}\n\nexport const computeMaximumCouponForGoodsList = (\n couponListInit: ICouponApplied[],\n goodsList: Record,\n needSelected?: boolean\n) => {\n // 优惠券初始化\n const couponList = couponListInit.map((item) => {\n return { ...item, selected: false, explain: [], disable: false };\n });\n const shops = Object.keys(goodsList);\n const shopLen = shops.length;\n\n const coupon = classifyCouponByShop(couponList);\n const platformCoupons = coupon.platform;\n\n // 遍历优惠券\n let mergedList = initMergedShop(goodsList[shops[0]], shops[0], coupon[shops[0]]);\n for (let i = 1; i < shopLen + 1; i++) {\n mergedList = mergeCouponList(\n mergedList,\n { coupon: coupon[shops[i]], list: goodsList[shops[i]], shopId: shops[i] },\n platformCoupons\n );\n }\n // 选择最优券\n let max: {\n discount: number;\n coupon?: Record;\n goods: CouponGoodsItem[];\n available: ICouponApplied[];\n } = {\n discount: 0,\n coupon: undefined,\n goods: [],\n available: [...couponList]\n };\n\n mergedList.forEach((item) => {\n if (item.discount > max.discount) {\n max.discount = item.discount;\n max.coupon = item.coupon;\n max.goods = item.goods.platform;\n }\n });\n if (max.coupon) {\n // 优惠券列表排序,选择状态更新\n const ids = Object.values(max.coupon).map((item) => item && item.id);\n max.available = sortCoupon(max.available.filter((item) => ids.indexOf(item.id) === -1));\n Object.values(max.coupon).forEach((coupon) => {\n if (coupon) {\n max.available.unshift(coupon);\n }\n });\n\n if (needSelected === true || needSelected === undefined) {\n changeMultiShopStatus(max.available, max.coupon, max.goods);\n }\n } else {\n max.goods = Object.values(goodsList).reduce((item1, item2) => item1.concat(item2), []);\n max.available = sortCoupon(max.available);\n const newClassify = classifyCouponByShop(max.available);\n Object.keys(newClassify).forEach((shopId) => {\n if (shopId !== 'platform') {\n getShopCoupon(\n newClassify[shopId],\n max.goods.filter((item) => item.shopId === shopId)\n );\n }\n });\n if (newClassify.platform) {\n getPlatformCoupon(newClassify.platform, max.goods);\n }\n }\n\n return max;\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { RouteComponentProps, useHistory } from 'react-router-dom';\nimport { Location } from 'history';\n\nexport interface RouteBlockProps {\n userConfirmationCallback?: (ok: boolean) => void;\n}\n\n/**\n * 拦截取消location变化,等待动画完成或确认后再次触发close再放行location变化\n * @param props userConfirmationCallback仅当history.goBack()时有值\n * @returns closing是否收到location变化准备关闭,close确认关闭,setClosing主要用于重置待关闭状态\n */\nexport const useRouteBlock = (\n props: RouteComponentProps & RouteBlockProps\n): { closing: boolean; confirmClose: () => void; cancelClose: () => void } => {\n const [closing, setClosing] = useState(false);\n const [closed, setClosed] = useState(false);\n useEffect(() => {\n if (props.userConfirmationCallback && props.match.isExact) {\n if (closed) props.userConfirmationCallback(true);\n else {\n setClosing(true);\n props.userConfirmationCallback(false);\n }\n }\n }, [props.userConfirmationCallback]);\n const confirmClose = useCallback(() => {\n setClosed(true);\n props.history.goBack();\n }, []);\n const cancelClose = useCallback(() => {\n setClosing(false);\n }, []);\n return {\n closing: closing,\n confirmClose,\n cancelClose\n };\n};\n\nexport const useRouteConfirmationCallback = (): {\n block: (location: Location, action: string) => string;\n getUserConfirmation: (message: string, callback: (ok: boolean) => void) => void;\n userConfirmationCallback?: (ok: boolean) => void;\n} => {\n const [userConfirmationCallback, setUserConfirmationCallback] = useState<\n (ok: boolean) => void\n >();\n const block = useCallback((_location: Location, action: string) => {\n return action;\n }, []);\n\n // 包装userConfirmationCallback,调用后清除。\n const confirmThenClear = useCallback(\n (ok: boolean) => {\n if (userConfirmationCallback) {\n setUserConfirmationCallback(undefined);\n userConfirmationCallback(ok);\n }\n },\n [userConfirmationCallback]\n );\n\n const getUserConfirmation = useCallback((message: string, callback: (ok: boolean) => void) => {\n if (message === 'POP') {\n setUserConfirmationCallback(() => callback);\n } else {\n callback(true);\n }\n }, []);\n return {\n block,\n getUserConfirmation,\n userConfirmationCallback: userConfirmationCallback && confirmThenClear\n };\n};\n","import { ICouponApplied } from 'types/coupon';\nimport { getCouponScope } from 'services/coupon/type';\nimport { couponScopeConst } from 'config/coupon';\nimport {\n getPlatformCoupon,\n getShopCoupon,\n recheckPlatformCoupon\n} from 'services/coupon/get-coupon-list';\nimport { computeCouponDiscount } from 'services/coupon/compute-coupon-discount';\nimport { classifyCouponByShop } from 'services/coupon/classify-coupon-by-shop';\nimport { CouponGoodsItem } from 'types/cart';\n\nexport const changeCouponStatus = (\n list: ICouponApplied[],\n coupon: ICouponApplied,\n amount: number,\n discount: number\n) => {\n const couponScope = getCouponScope(coupon);\n if (couponScope === couponScopeConst.shop) {\n if (!coupon.selected) {\n let platform = recheckPlatformCoupon(list, amount - discount);\n if (amount - discount - computeCouponDiscount(coupon, amount) <= 0) {\n // 如果已有的优惠已经减去之后小于 0, 则不实用平行优惠\n platform = recheckPlatformCoupon(\n list,\n amount - discount - computeCouponDiscount(coupon, amount)\n );\n }\n platform.forEach((item) => {\n if (item.selected) {\n changeCouponStatus(list, item, amount, discount);\n }\n });\n } else {\n recheckPlatformCoupon(list, amount - discount);\n }\n }\n if (coupon.selected) {\n list.forEach((item) => {\n if (\n (couponScope === couponScopeConst.platform &&\n couponScope === getCouponScope(item)) ||\n (couponScope === couponScopeConst.shop && coupon.shopId === item.shopId)\n ) {\n item.selected = false;\n item.disable = false;\n const index = item.explain.indexOf('与已选券不能共享');\n if (item.explain && index > -1) {\n item.explain.splice(index, 1);\n }\n }\n });\n } else {\n list.forEach((item) => {\n if (\n (couponScope === couponScopeConst.platform &&\n couponScope === getCouponScope(item)) ||\n (couponScope === couponScopeConst.shop && coupon.shopId === item.shopId)\n ) {\n if (item.id === coupon.id) {\n item.selected = true;\n } else {\n if (item.explain) {\n item.explain.push('与已选券不能共享');\n } else {\n item.explain = ['与已选券不能共享'];\n }\n item.disable = true;\n }\n }\n });\n }\n\n return list;\n};\n\nexport const changeMultiShopStatus = (\n list: ICouponApplied[],\n maxCoupon: Record,\n goodsList: CouponGoodsItem[],\n needReason: boolean = true\n) => {\n const resultAvailable = classifyCouponByShop(list);\n\n Object.keys(maxCoupon).forEach((shopId) => {\n if (shopId !== 'platform') {\n if (maxCoupon[shopId]) {\n const amount = goodsList\n .filter((item) => item.shopId === shopId)\n .reduce(\n (total, next) =>\n total + next.SCReducer > 0 ? next.price * next.amount : 0,\n 0\n );\n const discount = goodsList\n .filter((item) => item.shopId === shopId)\n .reduce(\n (total, next) => (total + next.SCReducer > 0 ? next.FDReducer || 0 : 0),\n 0\n );\n if (needReason) {\n getShopCoupon(\n resultAvailable[shopId],\n goodsList.filter((item) => item.shopId === shopId)\n );\n }\n changeCouponStatus(\n resultAvailable[shopId],\n maxCoupon[shopId] as ICouponApplied,\n amount,\n discount\n );\n }\n }\n });\n\n if (maxCoupon.platform) {\n needReason && getPlatformCoupon(resultAvailable.platform, goodsList);\n changeCouponStatus(resultAvailable.platform, maxCoupon.platform, 0, 0);\n }\n};\n","import { Middleware, Dispatch } from 'redux';\nimport { IAddress } from 'types/address';\nimport urlParams from 'libs/query';\nimport { AppState } from './index';\nimport { getLegalStatus } from 'components/address/reducer';\nimport { mobileChecker } from 'components/address/edit/address-checkers';\nimport { getFreight, getOrderInfo } from './base-reducer';\nimport { greaterZero } from 'src/utils/common-func';\n\nlet temp = false; // 判断地址是否被新增或删减过\nexport const getFeightByAddress = (address: IAddress, num?: number, campaign_id?: string) => {\n return getFreight({\n area_id: String(address.area_id || ''),\n city_id: String(address.city_id || ''),\n province_id: String(address.prov_id || ''),\n items: [\n {\n product_id: urlParams.product_id || urlParams.id,\n combo_id: urlParams.combo_id,\n combo_num: num || greaterZero(urlParams.combo_num),\n campaign_id: campaign_id,\n group_id: '0' // 数字的字符串\n }\n ]\n });\n};\n\nconst getStockeByAddress = (address: any, disableToast: boolean) =>\n getOrderInfo(address, disableToast);\n\n/* eslint-disable complexity */\n// 这个中间件承担了发送验证码 发送运费计算接口的作用\nconst sendCodeMiddleware: Middleware<{}, AppState, Dispatch> = (store) => (next) => (action) => {\n const { list: listBefore, selected: selectedBefore } = store.getState().address;\n const baseBefore = store.getState().base;\n const result = next(action);\n const { list: listAfter, selected: selectedAfter } = store.getState().address;\n const baseAfter = store.getState().base;\n const hasFees = baseAfter.goods && baseAfter.goods.freight && selectedAfter;\n if (baseBefore.num !== baseAfter.num && baseAfter.num && hasFees) {\n store.dispatch(\n // @ts-ignore\n getFeightByAddress(\n selectedAfter,\n baseAfter.num,\n baseAfter.campaign && baseAfter.campaign.campaign_id\n )\n );\n }\n // 获取运费需要campaign_id,如果地址接口比orderinfo先返回,在获取到商品后需要发一下\n if (baseBefore.goods !== baseAfter.goods && hasFees) {\n store.dispatch(\n // @ts-ignore\n getFeightByAddress(\n selectedAfter,\n baseAfter.num,\n baseAfter.campaign && baseAfter.campaign.campaign_id\n )\n );\n }\n if (listAfter && listBefore && listBefore.length !== listAfter.length) {\n temp = true;\n }\n // 地址变化重新请求存库和运费\n if (selectedAfter && selectedBefore !== selectedAfter) {\n if (\n selectedBefore &&\n ['prov_id', 'city_id', 'area_id'].filter((x) => selectedBefore[x] !== selectedAfter[x])\n .length\n ) {\n store.dispatch(getStockeByAddress(selectedAfter, temp));\n temp = false;\n }\n // if (\n // (!selectedBefore ||\n // selectedBefore.area_id.toString() !== selectedAfter.area_id.toString()) &&\n // hasFees\n // ) {\n // store.dispatch(\n // // @ts-ignore\n // getFeightByAddress(\n // selectedAfter,\n // baseAfter.num,\n // baseAfter.campaign && baseAfter.campaign.campaign_id\n // )\n // );\n // }\n }\n\n return result;\n};\n\nexport default sendCodeMiddleware;\n","import { AnyAction } from 'redux';\nimport { apiActionWrapper, ThunkResult } from 'actions/api';\nimport { get, post } from 'libs/request';\nimport { IAddress } from 'types/address';\nimport { ApiError } from 'types/api-error';\nimport { shallowEqual } from 'react-redux';\nconst BASE_ADDRESS_URL = 'https://ecomuser.snssdk.com/address';\nconst CHECK_LEGAL_STATUS_URL = 'https://ec.snssdk.com/order/checkLegalOrder';\n\nexport enum OrderRestriction {\n VERIFIED_OK = 'verified-ok',\n NEED_CODE = 'need-code',\n FORBIDDEN = 'forbidden',\n UNCLEAR = 'unclear'\n}\nexport const SELECT_ADDRESS = 'SELECT_ADDRESS';\nexport const GET_ADDRESS_LIST = {\n SUCCESS: 'GET_ADDRESS_LIST_SUCCESS',\n FAILURE: 'GET_ADDRESS_LIST_FAILURE',\n REQUEST: 'GET_ADDRESS_LIST_REQUEST'\n};\n\nconst SAVE_ADDRESS = {\n SUCCESS: 'SAVE_ADDRESS_SUCCESS',\n FAILURE: 'SAVE_ADDRESS_FAILURE',\n REQUEST: 'SAVE_ADDRESS_REQUEST'\n};\n\nconst DELETE_ADDRESS = {\n SUCCESS: 'DELETE_ADDRESS_SUCCESS',\n FAILURE: 'DELETE_ADDRESS_FAILURE',\n REQUEST: 'DELETE_ADDRESS_REQUEST'\n};\n\nconst SELECT_ADDRESS_WITH_API = {\n SUCCESS: 'SELECT_ADDRESS_WITH_API_SUCCESS',\n FAILURE: 'SELECT_ADDRESS_WITH_API_FAILURE',\n REQUEST: 'SELECT_ADDRESS_WITH_API_REQUEST'\n};\n\nexport const GET_DEFAULT_ADDRESS = {\n REQUEST: 'GET_DEFAULT_ADDRESS_REQUEST',\n SUCCESS: 'GET_DEFAULT_ADDRESS_SUCCESS',\n FAILURE: 'GET_DEFAULT_ADDRESS_FAILURE'\n};\n\nexport const GET_LEGAL_STATUS = {\n REQUEST: 'GET_LEGAL_STATUS_REQUEST',\n SUCCESS: 'GET_LEGAL_STATUS_SUCCESS',\n FAILURE: 'GET_LEGAL_STATUS_FAILURE'\n};\n\nconst SEND_LEGAL_CODE = {\n REQUEST: 'SEND_LEGAL_CODE_REQUEST',\n SUCCESS: 'SEND_LEGAL_CODE_SUCCESS',\n FAILURE: 'SEND_LEGAL_CODE_FAILURE'\n};\n\nconst UPDATE_LEGAL_CODE = 'UPDATE_LEGAL_CODE';\nconst ASK_FOR_CODE = 'ASK_FOR_CODE';\nconst CLEAR_SELECTED = 'CLEAR_SELECTED';\nconst IS_SHOW_ADDRESS = 'IS_SHOW_ADDRESS';\n\nexport function askForCode(open: boolean) {\n return {\n type: ASK_FOR_CODE,\n payload: open\n };\n}\n\nexport const getAddressList: () => ThunkResult = () => (\n dispatch,\n getState\n) => {\n const addressState = getState().address;\n if (addressState.listLoading || addressState.list !== undefined) return;\n return dispatch(apiActionWrapper(GET_ADDRESS_LIST, get(`${BASE_ADDRESS_URL}/getlist`)));\n};\n\nexport const saveAddress = (add: IAddress, saveFallBack?: boolean) => {\n const data = { ...add };\n return apiActionWrapper(\n {\n ...SAVE_ADDRESS,\n SUCCESS: (payload) => (dispatch) => {\n dispatch({\n type: SAVE_ADDRESS.SUCCESS,\n payload: {\n ...data,\n id: payload.id\n }\n });\n },\n FAILURE: (err) => (dispatch) => {\n // 50000是后端限流,这种错误发生,并且有saveFallBack时候不阻塞主流程\n if (err.code === 50000 && saveFallBack) {\n dispatch({\n type: SAVE_ADDRESS.SUCCESS,\n payload: {\n ...data\n }\n });\n } else {\n dispatch({\n type: SAVE_ADDRESS.FAILURE,\n payload: data\n });\n }\n }\n },\n post(`${BASE_ADDRESS_URL}/save`, { ...data, add_id: data.id })\n );\n};\nexport const selectAddressWithApi = (id: string) => {\n return apiActionWrapper(\n SELECT_ADDRESS_WITH_API,\n get(`${BASE_ADDRESS_URL}/select?add_id=${id}`)\n );\n};\nexport const deleteAddress = (id: string) => {\n return apiActionWrapper(\n {\n ...DELETE_ADDRESS,\n SUCCESS: () => (dispatch) => {\n dispatch({\n type: DELETE_ADDRESS.SUCCESS,\n payload: { id }\n });\n }\n },\n get(`${BASE_ADDRESS_URL}/disable?add_id=${id}`)\n );\n};\nexport const getDefaultAddress = () => {\n return apiActionWrapper(\n {\n ...GET_DEFAULT_ADDRESS,\n SUCCESS: (payload: IAddress): ThunkResult => (\n dispatch\n ) => {\n if (!payload || Array.isArray(payload) || !payload.id) {\n dispatch({\n type: GET_DEFAULT_ADDRESS.FAILURE\n });\n } else {\n const address = provIdPatch(payload);\n dispatch({\n type: GET_DEFAULT_ADDRESS.SUCCESS,\n payload: address\n });\n }\n }\n },\n get(`${BASE_ADDRESS_URL}/getaddress?add_id=-1`)\n );\n};\n\nexport const switchAddressStatus = (payload: boolean) => {\n return {\n type: IS_SHOW_ADDRESS,\n payload: payload\n };\n};\n\nexport const selectAddress = (payload: IAddress | undefined) => {\n return {\n type: SELECT_ADDRESS,\n payload: payload\n };\n};\n\nexport function getLegalStatus(productId: string, mobile: string, addressId: string) {\n return apiActionWrapper(\n GET_LEGAL_STATUS,\n get(CHECK_LEGAL_STATUS_URL, {\n params: {\n post_tel: mobile,\n product_id: productId,\n address_id: addressId\n }\n })\n );\n}\n\ninterface LegalCode {\n mobile: string;\n id: number;\n}\n\nexport const sendLegalCode = (data: LegalCode) => {\n return apiActionWrapper(\n SEND_LEGAL_CODE,\n post('https://ec.snssdk.com/order/sendcode', {\n tel: data.mobile,\n id: data.id\n })\n );\n};\n\nexport const updateLegalCode = (code: string) => {\n return {\n type: UPDATE_LEGAL_CODE,\n payload: code\n };\n};\n\nexport const clearSelectedAddress = () => {\n return {\n type: CLEAR_SELECTED\n };\n};\n\nexport interface AddressState {\n list?: IAddress[];\n listLoading: boolean;\n defaultLoading: boolean;\n selected?: IAddress;\n legalStatus: OrderRestriction;\n legalCode: string;\n defaultAddressFailure?: ApiError;\n saveLoading: boolean;\n askForCode: boolean;\n cartPostAmount?: number;\n cartLimitGoods?: string[];\n cartPostDetail?: { group_id: string; post_amount: number }[];\n // 是否在地址页\n isShow: boolean;\n}\nexport interface WithAddressState {\n address: AddressState;\n}\n\nconst initState: AddressState = {\n listLoading: false,\n defaultLoading: true,\n legalStatus: OrderRestriction.VERIFIED_OK,\n legalCode: '',\n saveLoading: false,\n askForCode: false,\n isShow: false\n};\n\nconst provIdPatch = (address: IAddress): IAddress => {\n return address.prov_id.length === 2\n ? { ...address, prov_id: address.prov_id + '0000' }\n : address;\n};\n\n// eslint-disable-next-line complexity\nexport default (state = initState, action: AnyAction): AddressState => {\n switch (action.type) {\n case GET_ADDRESS_LIST.REQUEST:\n return { ...state, listLoading: true };\n case GET_ADDRESS_LIST.SUCCESS: {\n const list = action.payload.map(provIdPatch);\n return {\n ...state,\n listLoading: false,\n list: list\n };\n }\n case GET_ADDRESS_LIST.FAILURE:\n return { ...state, listLoading: false };\n case SAVE_ADDRESS.REQUEST:\n return { ...state, saveLoading: true };\n case IS_SHOW_ADDRESS:\n return { ...state, isShow: Boolean(action.payload) };\n case SAVE_ADDRESS.FAILURE:\n return { ...state, saveLoading: false };\n case SAVE_ADDRESS.SUCCESS: {\n let list = [...(state.list || [])];\n if (action.payload.is_default) {\n list = list.map((item) => ({ ...item, is_default: 0 }));\n }\n return {\n ...state,\n list: [\n action.payload,\n ...list.filter((address) => address.id !== action.payload.id)\n ],\n saveLoading: false\n };\n }\n case DELETE_ADDRESS.SUCCESS:\n return {\n ...state,\n list: (state.list || []).filter((address) => address.id !== action.payload.id)\n };\n case SELECT_ADDRESS:\n return { ...state, selected: action.payload };\n\n // 风控信息\n case GET_LEGAL_STATUS.REQUEST:\n return { ...state, legalStatus: OrderRestriction.UNCLEAR };\n case GET_LEGAL_STATUS.SUCCESS:\n return { ...state, legalStatus: OrderRestriction.VERIFIED_OK };\n case GET_LEGAL_STATUS.FAILURE: {\n if (!action.payload) return state;\n const code = action.payload.code;\n const legalStatus =\n code === 10005 ? OrderRestriction.FORBIDDEN : OrderRestriction.NEED_CODE;\n return {\n ...state,\n legalCode: '',\n legalStatus\n };\n }\n case UPDATE_LEGAL_CODE:\n return { ...state, askForCode: false, legalCode: action.payload };\n case ASK_FOR_CODE:\n return { ...state, askForCode: action.payload };\n case GET_DEFAULT_ADDRESS.REQUEST:\n return { ...state, defaultLoading: true };\n case CLEAR_SELECTED:\n return { ...state, selected: undefined };\n case GET_DEFAULT_ADDRESS.SUCCESS:\n return {\n ...state,\n defaultLoading: false,\n selected: state.selected || (action.payload.id && action.payload)\n };\n case GET_DEFAULT_ADDRESS.FAILURE:\n return { ...state, defaultLoading: false };\n default:\n return state;\n }\n};\n","import React, {\n useRef,\n useState,\n useEffect,\n useLayoutEffect,\n FunctionComponent,\n RefObject,\n MutableRefObject,\n useCallback\n} from 'react';\nimport { vendorPrefix, support3d } from 'utils/stylePrefix';\nimport { RouteComponentProps } from 'react-router-dom';\nimport './index.scss';\nimport TitleBar, { Props as TitleBarProps } from 'components/common/title-bar';\nimport { disableSwipe, enableSwipe } from 'utils/native-swipe';\n\nenum Direction {\n Unknown,\n X,\n Y\n}\n\nexport interface Props extends TitleBarProps, RouteComponentProps {\n leftEdge?: number;\n throttle?: number;\n transitionTime?: number;\n maskOpacity?: number;\n swipeable?: boolean;\n onClose?: () => void;\n shouldSwipeout?: () => boolean;\n closing?: boolean;\n showTitleBar?: boolean;\n}\n\ninterface Point {\n x: number;\n y: number;\n}\n\nfunction getTouchPoint(e: TouchEvent): Point {\n if (!e) return { x: 0, y: 0 };\n const point = (e.changedTouches && e.changedTouches[0]) || e.touches[0];\n return { x: point.clientX, y: point.clientY };\n}\n\nfunction createCallbacks(\n containerRef: RefObject,\n maskRef: RefObject,\n pageWidthRef: MutableRefObject,\n {\n leftEdge = 1,\n throttle = 0.3,\n transitionTime = 500,\n maskOpacity = 0.5,\n history,\n onClose = function () {\n if (history && history.length > 0) {\n history.goBack();\n }\n },\n shouldSwipeout = () => true\n }: Props\n) {\n let deltaX = 0;\n let startPoint: Point | null = null;\n let inTransition = false;\n let isSwipingout = false;\n let direction: Direction = Direction.Unknown;\n const transformPrefix = vendorPrefix('transform');\n const transitionPrefix = vendorPrefix('transition');\n\n const transformPage = (swipeout: boolean, deltaX: number) => {\n const pageWidth = pageWidthRef.current;\n const x = swipeout ? pageWidth : 0;\n const time = swipeout\n ? (transitionTime * (pageWidth - deltaX)) / pageWidth\n : (transitionTime * deltaX) / pageWidth;\n if (containerRef.current) {\n if (time > 0) {\n inTransition = true;\n isSwipingout = swipeout;\n }\n containerRef.current.setAttribute(\n 'style',\n `${transformPrefix}: ${\n support3d ? `translate3d(${x}px, 0, 0)` : `translate(${x}px, 0)`\n }; ${transitionPrefix}: ${transformPrefix} ease ${time}ms`\n );\n }\n if (maskRef.current) {\n const backgroundColor = `hsla(0,0%,0%,${maskOpacity * (1 - x / pageWidth)})`;\n maskRef.current.setAttribute(\n 'style',\n `z-index: ${maskRef.current.style.zIndex}; background-color: ${backgroundColor}; ${transitionPrefix}: background-color ease ${time}ms`\n );\n }\n };\n\n const moveToPosition = (x: number) => {\n if (containerRef.current) {\n containerRef.current.setAttribute(\n 'style',\n `${transformPrefix}: ${\n support3d ? `translate3d(${x}px, 0, 0)` : `translate(${x}px, 0)`\n }`\n );\n }\n if (maskRef.current) {\n const backgroundColor = `hsla(0,0%,0%,${maskOpacity * (1 - x / pageWidthRef.current)})`;\n maskRef.current.setAttribute(\n 'style',\n `z-index: ${maskRef.current.style.zIndex}; background-color: ${backgroundColor}`\n );\n }\n };\n\n const touchstart = (e: TouchEvent) => {\n if (inTransition) {\n return;\n }\n const point = getTouchPoint(e);\n if (point.x > leftEdge * pageWidthRef.current) {\n return;\n }\n direction = Direction.Unknown;\n deltaX = 0;\n startPoint = point;\n };\n const touchmove = (e: TouchEvent) => {\n if (inTransition || !startPoint) {\n return;\n }\n\n const curPoint = getTouchPoint(e);\n deltaX = curPoint.x - startPoint.x;\n const deltaY = curPoint.y - startPoint.y;\n // 判断用户意图方向\n if (direction === Direction.Unknown) {\n direction = Math.abs(deltaX) > Math.abs(deltaY) ? Direction.X : Direction.Y;\n }\n if (direction === Direction.Y) {\n return;\n }\n e.preventDefault();\n const x = deltaX > 0 ? deltaX : 0;\n moveToPosition(x);\n };\n const touchend = () => {\n if (inTransition || !startPoint || direction !== Direction.X) {\n return;\n }\n const pageWidth = pageWidthRef.current;\n const swipeout = deltaX > throttle * pageWidth && shouldSwipeout();\n transformPage(swipeout, deltaX);\n startPoint = null;\n deltaX = 0;\n };\n\n const transitionend = (e: TransitionEvent) => {\n if (e.target === containerRef.current) {\n if (isSwipingout) {\n onClose();\n }\n inTransition = false;\n }\n };\n\n return { touchstart, touchmove, touchend, transitionend, moveToPosition, transformPage };\n}\nlet length = 1;\nconst SwipeoutPage: FunctionComponent = (props) => {\n const maskRef = useRef(null);\n const containerRef = useRef(null);\n const pageWidthRef = useRef(0);\n const { swipeable = true, showTitleBar = true } = props;\n useLayoutEffect(() => {\n pageWidthRef.current = maskRef.current ? maskRef.current.offsetWidth : 0;\n });\n\n const touchCallbacks = useRef(createCallbacks(containerRef, maskRef, pageWidthRef, props));\n const {\n touchstart,\n touchmove,\n touchend,\n transitionend,\n moveToPosition,\n transformPage\n } = touchCallbacks.current;\n const goPageBack = useCallback(() => {\n props.history.goBack();\n }, []);\n const [moveInAnimated, setMoveInAnimated] = useState(!swipeable);\n\n useEffect(() => {\n if (props.closing) {\n if (swipeable) {\n transformPage(true, 0);\n } else {\n if (props.onClose) {\n props.onClose();\n }\n }\n }\n }, [props.closing]);\n // 当展示该组件时,禁用端上右滑返回\n useEffect(() => {\n if (swipeable) {\n disableSwipe();\n return enableSwipe;\n }\n }, [swipeable]);\n useEffect(() => {\n length += 1;\n return () => {\n length -= 1;\n };\n }, []);\n useEffect(() => {\n const container = containerRef.current;\n if (container && swipeable) {\n container.addEventListener('touchstart', touchstart);\n container.addEventListener('touchmove', touchmove);\n container.addEventListener('touchend', touchend);\n container.addEventListener('touchcancel', touchend);\n container.addEventListener('transitionend', transitionend);\n if (!moveInAnimated) {\n moveToPosition(pageWidthRef.current);\n setMoveInAnimated(true);\n setTimeout(() => transformPage(false, pageWidthRef.current), 0);\n }\n }\n return () => {\n if (container && swipeable) {\n // @ts-ignore\n container.removeEventListener('touchstart', touchstart);\n // @ts-ignore\n container.removeEventListener('touchmove', touchmove);\n container.removeEventListener('touchend', touchend);\n container.removeEventListener('touchcancel', touchend);\n container.removeEventListener('transitionend', transitionend);\n }\n };\n }, [swipeable]);\n const lenMemo = React.useMemo(() => length, []);\n return (\n \n \n {showTitleBar ? (\n \n ) : null}\n\n
\n {props.children}\n
\n \n \n );\n};\n\nexport default SwipeoutPage;\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = [].reverse;\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign\n if (isArray(this)) this.length = this.length;\n return nativeReverse.call(this);\n }\n});\n","/*\r\n * big.js v5.2.2\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2018 Michael Mclaughlin \r\n * https://github.com/MikeMcl/big.js/LICENCE\r\n */\r\n;(function (GLOBAL) {\r\n 'use strict';\r\n var Big,\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\n DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big.\r\n * (This limit is not enforced or checked.)\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n /*\r\n * Create and return a Big constructor.\r\n *\r\n */\r\n function _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) return n === UNDEFINED ? _Big_() : new Big(n);\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n parse(x, n);\r\n }\r\n\r\n /*\r\n * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\r\n * points to Object.\r\n */\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.version = '5.2.2';\r\n\r\n return Big;\r\n }\r\n\r\n\r\n /*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\n function parse(x, n) {\r\n var e, i, nl;\r\n\r\n // Minus zero?\r\n if (n === 0 && 1 / n < 0) n = '-0';\r\n else if (!NUMERIC.test(n += '')) throw Error(INVALID + 'number');\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round Big x to a maximum of dp decimal places using rounding mode rm.\r\n * Called by stringify, P.div, P.round and P.sqrt.\r\n *\r\n * x {Big} The Big to round.\r\n * dp {number} Integer, 0 to MAX_DP inclusive.\r\n * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\n function round(x, dp, rm, more) {\r\n var xc = x.c,\r\n i = x.e + dp + 1;\r\n\r\n if (i < xc.length) {\r\n if (rm === 1) {\r\n\r\n // xc[i] is the digit after the digit that may be rounded up.\r\n more = xc[i] >= 5;\r\n } else if (rm === 2) {\r\n more = xc[i] > 5 || xc[i] == 5 &&\r\n (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\r\n } else if (rm === 3) {\r\n more = more || !!xc[0];\r\n } else {\r\n more = false;\r\n if (rm !== 0) throw Error(INVALID_RM);\r\n }\r\n\r\n if (i < 1) {\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = -dp;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else {\r\n\r\n // Remove any digits after the required decimal places.\r\n xc.length = i--;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[i] > 9;) {\r\n xc[i] = 0;\r\n if (!i--) {\r\n ++x.e;\r\n xc.unshift(1);\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; !xc[--i];) xc.pop();\r\n }\r\n } else if (rm < 0 || rm > 3 || rm !== ~~rm) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n *\r\n * x {Big}\r\n * id? {number} Caller id.\r\n * 1 toExponential\r\n * 2 toFixed\r\n * 3 toPrecision\r\n * 4 valueOf\r\n * n? {number|undefined} Caller's argument.\r\n * k? {number|undefined}\r\n */\r\n function stringify(x, id, n, k) {\r\n var e, s,\r\n Big = x.constructor,\r\n z = !x.c[0];\r\n\r\n if (n !== UNDEFINED) {\r\n if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\r\n throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\r\n }\r\n\r\n x = new Big(x);\r\n\r\n // The index of the digit that may be rounded up.\r\n n = k - x.e;\r\n\r\n // Round?\r\n if (x.c.length > ++k) round(x, n, Big.RM);\r\n\r\n // toFixed: recalculate k as x.e may have changed if value rounded up.\r\n if (id == 2) k = x.e + n + 1;\r\n\r\n // Append zeros?\r\n for (; x.c.length < k;) x.c.push(0);\r\n }\r\n\r\n e = x.e;\r\n s = x.c.join('');\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) for (e -= n; e--;) s += '0';\r\n else if (e < n) s = s.slice(0, e) + '.' + s.slice(e);\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && (!z || id == 4) ? '-' + s : s;\r\n }\r\n\r\n\r\n // Prototype/instance methods\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\n P.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\n P.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\n P.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) throw Error(INVALID_DP);\r\n\r\n // Divisor is zero?\r\n if (!b[0]) throw Error(DIV_BY_ZERO);\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) return new Big(k * 0);\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result\r\n\r\n q.s = k;\r\n k = d < 0 ? 0 : d;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n }\r\n\r\n // Round?\r\n if (qi > d) round(q, dp, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\n P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\n P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\n P.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\n P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\n P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\n P.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // y is non-zero? x is non-zero? Or both are zero.\r\n return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\n P.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) throw Error(DIV_BY_ZERO);\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\n P.plus = P.add = function (y) {\r\n var t,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero? y is non-zero? x is non-zero? Or both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new Big(xc[0] ? x : a * 0);\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n a = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (b = 0; a; xc[a] %= 10) b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (b) {\r\n xc.unshift(b);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (a = xc.length; xc[--a] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\n P.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor(1),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) throw Error(INVALID + 'exponent');\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big rounded using rounding mode rm\r\n * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\r\n * multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n * If rm is not specified, use Big.RM.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\r\n */\r\n P.round = function (dp, rm) {\r\n var Big = this.constructor;\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) throw Error(INVALID_DP);\r\n return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\n P.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big(0.5);\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) throw Error(NAME + 'No square root');\r\n\r\n // Estimate.\r\n s = Math.sqrt(x + '');\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s);\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, Big.DP -= 4, Big.RM);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\n P.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) return new Big(y.s * 0);\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = (c[j] + b) % 10;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big in exponential notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n */\r\n P.toExponential = function (dp) {\r\n return stringify(this, 1, dp, dp);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big in normal notation to dp fixed decimal\r\n * places and rounded using Big.RM.\r\n *\r\n * dp? {number} Integer, 0 to MAX_DP inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\n P.toFixed = function (dp) {\r\n return stringify(this, 2, dp, this.e + dp);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Integer, 1 to MAX_DP inclusive.\r\n */\r\n P.toPrecision = function (sd) {\r\n return stringify(this, 3, sd, sd - 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\n P.toString = function () {\r\n return stringify(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return stringify(this, 4);\r\n };\r\n\r\n\r\n // Export\r\n\r\n\r\n Big = _Big_();\r\n\r\n Big['default'] = Big.Big = Big;\r\n\r\n //AMD.\r\n if (typeof define === 'function' && define.amd) {\r\n define(function () { return Big; });\r\n\r\n // Node and other CommonJS-like environments that support module.exports.\r\n } else if (typeof module !== 'undefined' && module.exports) {\r\n module.exports = Big;\r\n\r\n //Browser.\r\n } else {\r\n GLOBAL.Big = Big;\r\n }\r\n})(this);\r\n","import isEmpty from 'lodash/isEmpty';\nimport env from '@byted/ecom-mobile-lib/lib/core/env';\nimport { get } from 'libs/request';\nimport { genGetURL } from 'src/utils/common-func';\nimport { sendPrefetchActionStatus, sendPrefetchActionFailed } from 'services/product/tecEvent';\nimport { API_EC, API_KEN } from 'config/host';\nimport { ge } from 'libs/semver';\n\ninterface PrefetchOrderInfoProps {\n productId: number;\n skuId: number;\n originType: string;\n pageId: string;\n addr_id1?: string;\n addr_id2?: string;\n addr_id3?: string;\n addr_id4?: string;\n}\n\nenum CachedMap {\n fallback, // 取自缓存\n pending, // 取自pending中的数据\n cache // 取自缓存\n}\n\nconst USE_PREFETCH_CONDITION = env.isInAweme && ge(env.appVersion, '11.2.0');\n\nfunction prefetchAction({ method = 'GET', params = {}, url = '' }, fallbackAction: () => {}) {\n const initTime = Date.now();\n const props: any = {\n url, // 这里的url必须传入完整url\n method\n };\n if (method === 'POST') {\n props.data = params;\n } else {\n props.params = params;\n }\n\n return new Promise((resolve: (arg0: any) => void) => {\n const ToutiaoJSBridge = window.ToutiaoJSBridge;\n // 异常处理 以及 安卓走原逻辑(安卓基于bridge2.0版本才支持, ecom-mobile-lib是1.0 包袱比较重 先不动)\n if (!ToutiaoJSBridge || env.isAndroid) {\n resolve(fallbackAction());\n }\n\n ToutiaoJSBridge.call('__prefetch', props, ({ code, raw, cached }) => {\n // 上报数据预取成功失败率\n sendPrefetchActionStatus({\n url,\n status: cached,\n time: Date.now() - initTime\n });\n\n // 降级处理\n if (isEmpty(raw)) {\n sendPrefetchActionFailed({\n url,\n status: cached\n });\n resolve(fallbackAction());\n }\n\n resolve({\n code,\n data: raw,\n fromPrefetch: true\n });\n });\n });\n}\n\nexport const prefetchGetOrderInfoAction = ({\n productId,\n skuId,\n originType,\n pageId,\n ...reset\n}: PrefetchOrderInfoProps): Promise => {\n const defaultAction = () =>\n get(\n genGetURL(\n `${API_EC}/product/getorderinfo?id=${productId}&sku_id=${skuId}&origin_type=${originType}${\n pageId ? `&page_id=${pageId}` : ''\n }`,\n reset\n )\n );\n if (USE_PREFETCH_CONDITION) {\n return prefetchAction(\n {\n params: {\n id: productId,\n sku_id: skuId,\n origin_type: originType,\n page_id: pageId,\n // aweme flag\n b_type_new: env.bType,\n ...reset\n },\n url: `${API_EC}/product/getorderinfo`\n },\n defaultAction\n );\n }\n return defaultAction();\n};\n\ninterface PrefetchDetailInfoProps {\n id: string;\n originId: string;\n originType: string;\n}\n\nexport const prefetchGetProductDetail = ({\n id,\n originId,\n originType\n}: PrefetchDetailInfoProps): Promise => {\n const params = {\n id,\n originId,\n originType,\n b_type_new: env.bType\n };\n const URL = `${API_KEN}/product/getProductDetail`;\n\n const defaultAction = () =>\n get(URL, {\n params\n });\n\n if (USE_PREFETCH_CONDITION) {\n return prefetchAction(\n {\n params,\n url: URL\n },\n defaultAction\n );\n }\n return defaultAction();\n};\n\n/**\n * 提单页初始接口\n * @param PrefetchOrderInfoProps\n */\nexport const prefetchGetBuyNow = ({\n productId,\n skuId,\n originType,\n pageId\n}: PrefetchOrderInfoProps): Promise => {\n const defaultAction = () =>\n get(\n `${API_KEN}/pack/product/buynow?productId=${productId}&skuId=${skuId}&originType=${originType}${\n pageId ? `&pageId=${pageId}` : ''\n }`\n );\n if (USE_PREFETCH_CONDITION) {\n return prefetchAction(\n {\n params: {\n productId,\n skuId,\n originType,\n pageId,\n b_type_new: env.bType\n },\n url: `${API_KEN}/pack/product/buynow`\n },\n defaultAction\n );\n }\n return defaultAction();\n};\n","import toast from 'src/components/common/toast';\n\ninterface IUpdateNumProps {\n stock: number;\n currentNum: number;\n targetNum: number;\n input: boolean;\n limitNumber?: boolean;\n onNumUpdated: (num: number) => void;\n}\nexport const updateBuyNum = ({\n stock,\n currentNum,\n input,\n limitNumber,\n onNumUpdated,\n targetNum\n}: IUpdateNumProps) => {\n if (limitNumber && targetNum !== 1) {\n toast('只能购买 1 件');\n return onNumUpdated(1);\n }\n if (targetNum === 0 && input) return onNumUpdated(0);\n // stock可能为0,编辑数量最小为1\n if (targetNum > currentNum && targetNum > Math.max(stock, 1))\n return toast(`最多购买 ${Math.max(currentNum, stock, 1)} 件`);\n\n if (targetNum < 1) return toast(`最少购买 1 件`);\n\n onNumUpdated(targetNum);\n};\n\nexport const numberWrapper = (num: number) => (num && num >= 0 ? num : 0);\n","import { Action, AnyAction } from 'redux';\nimport { ThunkDispatch, ThunkAction } from 'redux-thunk';\nimport Cookie from 'js-cookie';\nimport { API_EC, API_KEN } from 'config/host';\nimport { get, post, resolve } from 'libs/request';\nimport urlParams from 'libs/query';\nimport apiWrapper, { apiActionWrapper, ActionGen } from 'actions/api';\nimport { differMultiCampaign } from 'services/campaign/differ-multi-campaign';\nimport toast from 'components/common/toast';\nimport { ICampaign } from 'types/campaign';\nimport { ApiError } from 'types/api-error';\nimport {\n prefetchGetBuyNow,\n prefetchGetOrderInfoAction,\n prefetchGetProductDetail\n} from './prefetch-action';\nimport { IPostFeesApiData } from '../../cart/store/form-reducer';\n\nimport { GET_COUPON_LIST } from 'components/coupon/reducer';\nimport { GET_DEFAULT_ADDRESS, getDefaultAddress } from 'components/address/reducer';\nimport bridge from '@byted/ecom-mobile-lib/lib/bridge';\nimport { numberWrapper } from 'src/services/goods/update-num';\nimport { getFeightByAddress } from './send-legalcode-middleware';\nimport { isZeroOrNul, greaterZero } from 'src/utils/common-func';\n\nexport const MODIFY_LOADING_STATUS = 'MODIFY_LOADING_STATUS';\nconst MODIFY_FAILURE = 'MODIFY_FAILURE';\nexport const BASEINFO_LOADED = 'BASEINFO_LOADED';\nexport const MODIFY_GOODS_NUM = 'MODIFY_GOODS_NUM';\nconst SERVICEINFO_LOADED = 'SERVICEINFO_LOADED';\nconst MODIFY_BUYER_WORDS = 'MODIFY_BUYER_WORDS';\nexport const SHOW_PAY_FORM = 'SHOW_PAY_FORMS';\nconst SET_VIRTUAL = 'SET_VIRTUAL';\nconst SET_MOBILE_ERROR = 'SET_MOBILE_ERROR';\nconst TOGGLE_RET_INS_DIALOG = 'TOGGLE_RET_INS_DIALOG';\nconst TOGGLE_SUPPORT_RET_INS = 'TOGGLE_SUPPORT_RET_INS';\nconst SET_LOGIN_STATUS = 'SET_LOGIN_STATUS';\nconst ABINFO_LOADED = 'ABINFO_LOADED';\nexport const SET_REMAIN_DIALOG = 'SET_REMAIN_DIALOG';\nconst GET_MARQUEE = {\n SUCCESS: 'GET_MARQUEE_SUCCESS',\n FAILURE: 'GET_MARQUEE_FAILURE',\n REQUEST: 'GET_MARQUEE_REQUEST'\n};\nconst GET_FREIGHT = {\n SUCCESS: 'GET_FREIGHT_SUCCESS',\n FAILURE: 'GET_FREIGHT_FAILURE',\n REQUEST: 'GET_FREIGHT_REQUEST'\n};\nexport const SET_FREIGHT = 'SET_FREIGHT';\n\ninterface ModifyLoadingStatusAction {\n type: typeof MODIFY_LOADING_STATUS;\n payload: boolean;\n}\n\ninterface ModifyFailureAction {\n type: typeof MODIFY_FAILURE;\n payload: ApiError;\n}\n\ninterface BaseInfoLoadedAction {\n type: typeof BASEINFO_LOADED;\n payload: any;\n}\ninterface RetInsDialogChangeAction {\n type: typeof TOGGLE_RET_INS_DIALOG;\n payload: { retInsDialogShow: boolean; retInsDialogContent: string };\n}\ninterface SupportRetInsChangeAction {\n type: typeof TOGGLE_SUPPORT_RET_INS;\n payload: boolean;\n}\n\ninterface AbinfoLoadedAction {\n type: typeof ABINFO_LOADED;\n payload: any;\n}\n\ninterface ModifyGoodsNumAction {\n type: typeof MODIFY_GOODS_NUM;\n payload: number;\n}\n\ninterface ModifyBuyerWordsAction {\n type: typeof MODIFY_BUYER_WORDS;\n payload: string;\n}\n\ninterface ServiceInfoLoadedAction {\n type: typeof SERVICEINFO_LOADED;\n payload: ServiceInfo;\n}\n\ninterface ShowPayFormAction {\n type: typeof SHOW_PAY_FORM;\n payload: boolean;\n}\n\ninterface SetVirtualAction {\n type: typeof SET_VIRTUAL;\n payload: Virtual;\n}\n\ninterface SetMobileErrorAction {\n type: typeof SET_MOBILE_ERROR;\n payload: boolean;\n}\n\ninterface SetLoginStatusAction {\n type: typeof SET_LOGIN_STATUS;\n payload: boolean;\n}\n\ntype ActionTypes =\n | ModifyLoadingStatusAction\n | ModifyFailureAction\n | BaseInfoLoadedAction\n | ModifyGoodsNumAction\n | ServiceInfoLoadedAction\n | ModifyBuyerWordsAction\n | ShowPayFormAction\n | SetVirtualAction\n | SetMobileErrorAction\n | SetLoginStatusAction\n | AbinfoLoadedAction\n | RetInsDialogChangeAction\n | SupportRetInsChangeAction\n | AnyAction;\n\nexport interface Spec {\n name: string;\n value: string;\n}\nexport interface GoodsInfo {\n title: string;\n img: string;\n specs: Spec[];\n price: number;\n status: number;\n payType: number;\n shopName: string;\n stock: number;\n weight: number;\n userLimit: number;\n skuId: string;\n shopId: string;\n supplyStatus: number;\n freight: any;\n endTime: number;\n skuLimit: number;\n productType: number; // 以后会不新增了\n cidLimit: number;\n productPlatform: string;\n needLogistic: boolean; // 是否需要物流\n needCheckout: boolean; // 是否需要核销\n logo: string;\n}\n\nexport enum SupportReturn {\n No = 0,\n Yes = 1,\n Partial = 2\n}\n\nexport interface Virtual {\n mobile?: string;\n addressId?: string;\n error?: boolean;\n}\n\nexport interface ServiceInfo {\n remainWords?: string;\n presellType?: number;\n presellEndTime?: number;\n presellDelay?: number;\n delayDay?: number;\n supportReturn: SupportReturn;\n quickRefund?: boolean;\n loaded: boolean;\n deliveryText?: string;\n userBuyLimit: number;\n influencerInfo: {\n name: string; // 推荐人名称\n userId: string;\n secUserId: string;\n };\n // 参与活动的 Icon\n activity: {\n tag_icon_uri: string;\n // 活动打标图标\n tag_icon_url: string;\n // 活动打标图标地址\n campaign_id: string;\n // 平台活动 ID\n campaign_type: string;\n } | null;\n supportRetIns?: boolean; // 是否支持退货运费险 实物\n}\n\nexport interface MarqueeItem {\n content: string;\n avatar: string;\n}\n\ninterface MarqueeInfo {\n showMarquee: boolean;\n list: MarqueeItem[];\n}\n\ninterface AbInfoType {\n quickRefundType?: number;\n abLoaded: boolean;\n abType?: number;\n hidePayRecommend?: boolean;\n hideLowStock?: boolean;\n hideFastRefund?: boolean;\n useOldReturnTag?: boolean;\n}\nexport interface BaseState {\n loading: boolean;\n failure?: ApiError;\n num: number;\n buyerWords: string;\n campaign: ICampaign;\n fullDiscount?: ICampaign;\n goods?: GoodsInfo;\n service: ServiceInfo;\n showPayForm: boolean;\n virtual?: Virtual;\n islogin?: boolean;\n payFormType?: string;\n remainWords?: string;\n showRemainDialog?: boolean;\n flatAddress: boolean;\n abInfo: AbInfoType;\n remain?: boolean;\n marquee?: MarqueeInfo;\n freightAmount: undefined | number;\n isLimit: boolean;\n retInsDialogShow: boolean; // 退货运费险 dialog\n retInsDialogContent: string;\n}\n// 切换是否支持退货运费险\nexport function toggleSupportRetIns(support: boolean) {\n return {\n type: TOGGLE_SUPPORT_RET_INS,\n payload: support\n };\n}\n// 切换退货运费险 弹窗展示\nexport function toggleRetInsDialog(dialogInfo: {\n retInsDialogShow: boolean;\n retInsDialogContent: string;\n}) {\n return {\n type: TOGGLE_RET_INS_DIALOG,\n payload: dialogInfo\n };\n}\n\nexport function modifyGoodsNum(num: number) {\n return {\n type: MODIFY_GOODS_NUM,\n payload: num\n };\n}\n\nexport function modifyBuyerWords(words: string) {\n return {\n type: MODIFY_BUYER_WORDS,\n payload: words\n };\n}\n\nexport function setVirtual(mobile: Virtual) {\n return {\n type: SET_VIRTUAL,\n payload: mobile\n };\n}\n\nexport const setMobileError = (error: boolean) => {\n return {\n type: SET_MOBILE_ERROR,\n payload: error\n };\n};\n\nexport const setLoginStatus = (status: boolean) => {\n return {\n type: SET_LOGIN_STATUS,\n payload: status\n };\n};\n// 不需要物流的商品提单页走虚拟商品流程\nexport const isVirtualGetter = (state: { base: BaseState }) =>\n !!state.base.goods &&\n (state.base.goods.needLogistic === false || state.base.goods.productType === 3);\n\nexport const payFormTypeGetter = (state: { base: BaseState }) => state.base.payFormType;\n\nexport const getFreight = (data: IPostFeesApiData) => {\n return apiActionWrapper(\n GET_FREIGHT,\n post(`${API_EC}/cart/postFees`, JSON.stringify(data), {\n headers: { 'Content-Type': 'application/json' }\n }),\n false\n );\n};\n\nconst DEFAULT_MAX_BUY_NUM = 200;\nconst initalState: BaseState = {\n loading: true,\n buyerWords: '',\n showPayForm: false,\n num: greaterZero(urlParams.combo_num),\n flatAddress: false,\n payFormType: 'flat',\n remain: true,\n abInfo: {\n abLoaded: false\n },\n freightAmount: undefined,\n isLimit: false,\n service: {\n loaded: false,\n userBuyLimit: DEFAULT_MAX_BUY_NUM,\n supportRetIns: false // 是否支持退货运费险\n },\n retInsDialogShow: false,\n retInsDialogContent: '' // 运费险 dialog content\n};\n// eslint-disable-next-line complexity\nexport default function baseReducer(\n state: BaseState = initalState,\n action: ActionTypes\n): BaseState {\n switch (action.type) {\n case MODIFY_FAILURE:\n return { ...state, failure: action.payload, loading: false };\n case MODIFY_LOADING_STATUS:\n return { ...state, loading: action.payload, failure: undefined };\n case BASEINFO_LOADED: {\n const differCampaign = differMultiCampaign(action.payload.campaign_info);\n return {\n ...state,\n goods: extractGoodsInfo(action.payload),\n service: { ...state.service, ...extractServiceInfo(action.payload) },\n campaign: differCampaign.campaign,\n fullDiscount: differCampaign.fullDiscount,\n loading: false,\n virtual: {\n mobile: action.payload.tel || '',\n addressId: action.payload.address_id,\n error: !action.payload.tel\n }\n };\n }\n case TOGGLE_SUPPORT_RET_INS:\n return { ...state, service: { ...state.service, supportRetIns: action.payload } };\n case TOGGLE_RET_INS_DIALOG:\n return {\n ...state,\n retInsDialogShow: action.payload.retInsDialogShow,\n retInsDialogContent: action.payload.retInsDialogContent\n };\n case MODIFY_GOODS_NUM:\n return { ...state, num: action.payload };\n case SERVICEINFO_LOADED:\n return {\n ...state,\n remainWords: action.payload.remainWords,\n service: { ...state.service, ...action.payload }\n };\n case MODIFY_BUYER_WORDS:\n return { ...state, buyerWords: action.payload };\n case SHOW_PAY_FORM:\n return { ...state, showPayForm: action.payload };\n case SET_VIRTUAL:\n return { ...state, virtual: { ...state.virtual, ...action.payload } };\n case SET_MOBILE_ERROR:\n return { ...state, virtual: { ...state.virtual, error: action.payload } };\n case SET_LOGIN_STATUS:\n return { ...state, islogin: action.payload };\n case GET_COUPON_LIST.FAILURE:\n if (action.payload.code === 401) {\n return { ...state, islogin: false };\n }\n return state;\n case ABINFO_LOADED:\n return {\n ...state,\n abInfo: {\n abLoaded: true\n }\n };\n case SET_REMAIN_DIALOG:\n return {\n ...state,\n showRemainDialog: action.payload\n };\n case GET_MARQUEE.SUCCESS:\n return {\n ...state,\n marquee: action.payload\n };\n case GET_FREIGHT.SUCCESS:\n return {\n ...state,\n freightAmount: Number(action.payload.post_amount),\n isLimit: action.payload.restricted.length !== 0\n };\n case SET_FREIGHT:\n return { ...state, freightAmount: action.payload };\n default:\n return state;\n }\n}\n\nconst extractGoodsInfo = (orderInfo: any): GoodsInfo => {\n const skuInfo = orderInfo.order_stock || {};\n if (!skuInfo.price) throw new Error('价格异常');\n\n return {\n img: (skuInfo.pic && `https://p3a.pstatp.com/large/${skuInfo.pic}`) || orderInfo.img,\n title: orderInfo.name || '',\n specs: skuInfo.order_spec || [],\n price: numberWrapper(skuInfo.price),\n status: orderInfo.status,\n payType: orderInfo.pay_type,\n shopName: orderInfo.shop_name || '',\n stock: numberWrapper(skuInfo.stock_num),\n weight: orderInfo.weight || '0',\n userLimit: numberWrapper(orderInfo.user_limit),\n skuId: skuInfo.id || urlParams.combo_id,\n skuLimit: numberWrapper(skuInfo.user_limit),\n shopId: orderInfo.shop_id,\n supplyStatus: orderInfo.supply_status,\n freight: orderInfo.freight,\n endTime: orderInfo.end_time,\n productType: orderInfo.product_type,\n cidLimit: orderInfo.cid_limit || Number.MAX_SAFE_INTEGER,\n productPlatform: orderInfo.product_platform,\n needLogistic: orderInfo.need_logistic,\n needCheckout: orderInfo.need_checkout,\n logo: orderInfo.shop_logo || '',\n warehouseId: skuInfo.warehouse_id,\n reduceType: orderInfo.reduce_type,\n skuType: skuInfo.sku_type\n };\n};\n\nconst extractServiceInfo = (orderInfo: any) => {\n return {\n presellType: orderInfo.presell_type,\n presellEndTime: orderInfo.presell_end_time,\n presellDelay: orderInfo.presell_delay\n };\n};\n\nexport const getAbtestInfo: () => ThunkAction = () => (\n dispatch: ThunkDispatch\n) => {\n dispatch(\n apiWrapper(\n 'GET_ABTEST_INFO_REQUEST',\n 'GET_ABTEST_INFO_FAILURE',\n ABINFO_LOADED,\n get(`${API_EC}/index/getNewAbUiParams?token=aweme&key=douyin`)\n )\n );\n};\n\n// toast 提示\nconst showToast = (payload, address, isLimit, disableToast) => {\n if (\n (!payload.order_stock.stock_num || payload.order_stock.stock_num === '0') &&\n Number(payload.reduce_type) === 1 &&\n !(\n Number(payload.order_stock.sku_type) === 1 &&\n isZeroOrNul(payload.order_stock.warehouse_id)\n ) &&\n !isLimit\n ) {\n !disableToast &&\n setTimeout(() => {\n toast(\n `${\n payload.order_stock.warehouse_id ? address.area : ''\n }商品已拍完,但还有人未支付,待会儿刷新试试`\n );\n }, 100);\n }\n};\n\n// action 触发\nconst fetchDowngrade: (\n dispath: ThunkDispatch,\n ...callbackArr: Array<(...args: any) => any>\n) => void = (dispath, ...callbackArr) => {\n callbackArr.forEach((cb) => {\n typeof cb === 'function' && dispath(cb);\n });\n};\n\n// action 触发\nconst actionAssignment: ActionGen = (base) => ({ address, product }) => (dispatch) => {\n const { campaign } = differMultiCampaign(product.campaign_info);\n [\n {\n type: BASEINFO_LOADED,\n payload: product\n },\n {\n type: GET_DEFAULT_ADDRESS.SUCCESS,\n payload: address\n },\n getFeightByAddress(address, base.num, campaign && campaign.campaign_id)\n ].forEach((item) => dispatch(item));\n showToast(product, address, base.isLimit);\n};\n\n// 获取订单信息\nexport const getOrderInfo = (params: any = {}, disableToast) => {\n const { prov_id: addr_id1, city_id: addr_id2, area_id: addr_id3 } = params;\n return apiWrapper(\n MODIFY_LOADING_STATUS,\n MODIFY_FAILURE,\n (payload) => (dispatch) => {\n dispatch({\n type: BASEINFO_LOADED,\n payload\n });\n showToast(payload, params, params.isLimit, disableToast);\n },\n prefetchGetOrderInfoAction({\n productId: urlParams.product_id || urlParams.id,\n skuId: urlParams.combo_id,\n originType: urlParams.origin_type,\n pageId: urlParams.page_id,\n ...{ addr_id1, addr_id2, addr_id3 }\n })\n );\n};\n\nexport const requestBaseInfo: () => ThunkAction = () => (\n dispatch: ThunkDispatch,\n getState\n) => {\n const page_id = urlParams.page_id;\n const productId = urlParams.product_id || urlParams.id;\n const skuId = urlParams.combo_id;\n if (!productId || !skuId) {\n return dispatch({\n type: MODIFY_FAILURE,\n payload: {\n code: 10001,\n message: '参数缺失'\n }\n });\n }\n\n /**\n * 提单页库存需求\n * @author yus\n * @date: 2020.07.20\n */\n dispatch((...args) => {\n apiWrapper(\n MODIFY_LOADING_STATUS,\n MODIFY_FAILURE,\n actionAssignment(getState().base),\n prefetchGetBuyNow({\n productId,\n skuId: urlParams.combo_id,\n originType: urlParams.origin_type,\n pageId: page_id\n }),\n true\n )(...args).catch(async (_) => {\n try {\n await dispatch(getDefaultAddress());\n dispatch(\n getOrderInfo({\n ...getState().address.selected,\n isLimit: getState().base.isLimit\n })\n );\n // 只有运费数据有问题才需要开启\n getFeightByAddress(\n getState().address.selected,\n getState().base.num,\n getState().base.campaign && getState().base.campaign.campaign_id\n );\n } catch (err) {\n dispatch(getOrderInfo());\n }\n });\n });\n\n dispatch((dispatch) =>\n prefetchGetProductDetail({\n id: productId,\n originId: urlParams.origin_id,\n originType: urlParams.origin_type\n })\n .then(resolve)\n .then((result) => {\n const { grayToken } = result;\n if (grayToken) {\n Cookie.set('ecom_gray_11', grayToken, {\n expires: 7\n });\n }\n return dispatch({\n type: SERVICEINFO_LOADED,\n payload: {\n loaded: true,\n delayDay: parseInt(result.delay_day, 0),\n supportReturn: parseInt(result.support_return_type, 0),\n remainWords: result.remain_words,\n quickRefund: result.quickRefund,\n userBuyLimit: result.user_buy_limit,\n ...result\n }\n });\n })\n );\n};\ndeclare global {\n interface Window {\n __ECOM_GLOBAL_CONFIG?: any;\n }\n}\n\nexport const getMarqueeContent: (productId: string) => ThunkAction = (\n productId\n) => (dispatch: ThunkDispatch) => {\n if (!productId) return;\n\n bridge\n .call('appInfo', {}, { timeout: 500 })\n .then(\n (info: any) => (info && info.aid ? (info.aid as number) : 1128),\n () => 1128\n )\n .then((aid: number) => {\n dispatch(\n apiActionWrapper(\n GET_MARQUEE,\n get(`${API_KEN}/product/getMarqueeContent?product_id=${productId}&aid=${aid}`)\n )\n );\n });\n};\n"],"sourceRoot":""}