{"version":3,"sources":["webpack:///static/js/app.4e035f7575a314141241.js","webpack:///src/components/common/loading.vue","webpack:///./src/components/common/loading.vue?8dbd","webpack:///./src/util/config.js","webpack:///./src/App.vue?dca8","webpack:///./src/App.vue?35a7","webpack:///./src/main.js","webpack:///./src/util/biz.js","webpack:///./src/router/index.js","webpack:///./src/vuex/store.js","webpack:///./src/util/index.js","webpack:///./src/components/common/loading.vue?12e1","webpack:///./src/util/payCustomizeI18n.js","webpack:///./src/http/api.js","webpack:///./src/vuex/types.js","webpack:///./src/api/permission.js","webpack:///src/App.vue","webpack:///./src/vuex/modules/detail.js"],"names":["webpackJsonp","3Qg8","module","__webpack_exports__","__webpack_require__","44dg","injectStyle","ssrContext","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_loading_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_12a8eafb_hasScoped_true_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_loading_vue__","normalizeComponent","__vue_styles__","Component","BK/k","hostUrl","i","NODE_ENV","STATIC_CDN","API_ROOT","window","location","origin","cdnUrl","msgUrl","loading","H2m6","render","_vm","this","_h","$createElement","_c","_self","style","direction","cConf","alignRight","attrs","id","_v","directives","name","rawName","value","fetchLoading","hardLoading","expression","staticRenderFns","esExports","M93x","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_App_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3e43f94b_hasScoped_false_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_App_vue__","NHnr","Object","defineProperty","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys___default","n","__WEBPACK_IMPORTED_MODULE_1_vue__","__WEBPACK_IMPORTED_MODULE_3__App__","__WEBPACK_IMPORTED_MODULE_4__router__","__WEBPACK_IMPORTED_MODULE_5__vuex_store_js__","__WEBPACK_IMPORTED_MODULE_6__http_api_js__","__WEBPACK_IMPORTED_MODULE_7_mint_ui__","__WEBPACK_IMPORTED_MODULE_7_mint_ui___default","__WEBPACK_IMPORTED_MODULE_8_mint_ui_lib_style_css__","__WEBPACK_IMPORTED_MODULE_9_vue_clipboard2__","__WEBPACK_IMPORTED_MODULE_9_vue_clipboard2___default","__WEBPACK_IMPORTED_MODULE_10__util_config__","__WEBPACK_IMPORTED_MODULE_11__util_index__","__WEBPACK_IMPORTED_MODULE_12__util_biz__","use","a","lazyload","prototype","$api","config","autoSetContainer","templateConfigs","tw_tc","country","stateSelect","citySelectInline","serviceLineMe","stateRequired","cityRequired","phoneRequired","nameRequired","autoFillProvince","th_th","citySelect","thAddress","th_en","my_cn","postalInput","postalRequired","my_en","ph_en","streetSelect","sg_cn","autoFillCity","sg_en","hk_tc","hk_en","jp_jp","cityInput","streetInput","streetRequired","jpRequired","jpSupply","emailInput","ua_ar","sa_ar","ro_ro","citySearch","cityPostalSelect","emailRequired","address2","cz_cs","postalSelect","cityDataZipcode","sk_sk","at_de","hu_hu","nameRegexp","pl_pl","es_es","it_it","gr_gr","hr_hr","sl_sl","lt_lt","bg_bg","localDomainPageCl","cl","variable","defaultCl","ptList","query","decodeURIComponent","search","substring","replace","e","vars","split","length","pair","indexOf","sessionStorage","setItem","urlObject","path","beforeEach","to","from","next","setTimeout","scrollTo","meta","requireAuth","state","login","token","productionTip","devtools","el","router","store","template","components","App","RCCn","isPageDetail","url","URL","pathname","setRuntimeCl","clValue","localStorage","BIZ_CONSTANT","runtime","domainPageCl","getRuntimeCl","getItem","setRuntimePath","pathValue","domainPagePath","getRuntimePath","getRuntimeSource","domainPageSource","RSd+","exports","YaEn","__WEBPACK_IMPORTED_MODULE_0_vue__","__WEBPACK_IMPORTED_MODULE_1_vue_router__","__WEBPACK_IMPORTED_MODULE_2__api_permission__","Index","resolve","then","__WEBPACK_AMD_REQUIRE_ARRAY__","apply","bind","catch","oe","List","Detail","Pay","Success","Search","ShippingPolicy","FAQ","ReturnPolicy","PrivacyPolicy","Error","Promotion","About","myRouter","mode","routes","component","title","seo_title","content","keywords","seo_keywords","description","seo_description","matched","errorUri","fullPath","document","getElementsByTagName","createElement","querySelector","setAttribute","queryCtrl","atm","u","utm_source","utm_medium","aid","source","home","event_label","gtag","event_category","href","startTime","event_name","onError","err","pattern","message","match","chunkBool","nowTimes","Date","now","parseInt","targetPath","history","pending","reload","YtJ0","__WEBPACK_IMPORTED_MODULE_1_vuex__","__WEBPACK_IMPORTED_MODULE_2__modules_detail__","Store","modules","detail","ZoQJ","getQueryObject","lastIndexOf","obj","reg","rs","$1","$2","val","String","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator__","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_set__","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_array_from__","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys__","__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof__","au6+","_m","staticClass","d8/S","dzxK","interpolate","str","_","k","payCustomizeLangDefaults","CL_TO_PACK","pack","PACKS","en","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign___default","formatPayLang","payCustomizeMessage","key","s","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign__","customize_section_title","customize_photo_upload","customize_photo_hint_per_group","customize_photo_slot","customize_opinion_label","customize_opinion_placeholder","upload_fail","upload_http_error_prefix","zh_cn","zh_tw","pl","cs","sk","de","es","it","ja","ro","hu","hr","sl","lt","bg","th","ar","e3oT","m4jk","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default","__WEBPACK_IMPORTED_MODULE_1_axios__","__WEBPACK_IMPORTED_MODULE_1_axios___default","__WEBPACK_IMPORTED_MODULE_2__vuex_store_js__","__WEBPACK_IMPORTED_MODULE_3__router__","api","create","defaults","timeout","headers","post","interceptors","request","commit","error","alert","reject","response","status","redirect","currentRoute","meMj","d","SET_LOADING","SET_HARDLOADING","vZz+","isSupportWebp","toDataURL","paramsProcess","params","arguments","undefined","timestamp","getTime","tmp","JSON","parse","substr","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default","request_time","getQueryVariable","atmFormat","areaDetail","province","city","area","street","user_info","uname","phone","email","postal","address","user_note","guest","item_info","combo_id","final_price","total_price","count","prostr","package","utm","site_info","domain","host","site_name","item_hash","langInfo","type","__WEBPACK_IMPORTED_MODULE_4__http_api__","get","cacheTl","getZipcode","zipcodeType","getZipcodeChild","child","getSupply","getFaq","getPrivacyPolicy","getReturnPolicy","getShippingPolicy","getAbout","getConfig","data","item","__WEBPACK_IMPORTED_MODULE_5__util_config_js__","isAtm","shopDetail","is_support_webp","fetchUploadPresign","filename","content_type","body","__WEBPACK_IMPORTED_MODULE_6_qs___default","stringify","Content-Type","parsePresignPayload","res","inner","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof___default","devOriginLikelyBlockedFromS3","hostname","h","toLowerCase","test","maybeProxyS3UploadUrl","uploadUrl","prefix","encodeURIComponent","hash","maybeProxyS3PutUrl","putUrl","presignPutNeedsContentType","q","URLSearchParams","some","trim","presignIsPostPolicy","p","method","toUpperCase","fields","Array","isArray","upload_url","customizeReadUrlFromPresign","public_url","file_url","cdn_url","view_url","read_url","access_url","extractS3XmlMessage","bodyText","m","fetchUploadRejectMessage","s3Human","msg","__WEBPACK_IMPORTED_MODULE_7__util_payCustomizeI18n_js__","slice","uploadCustomizeImage","file","pop","endsWith","presRes","readUrl","postTarget","form","FormData","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default","forEach","v","append","fieldName","file_field","fetch","r","ok","text","t","presigned_url","put_url","putTarget","shopCreate","eventId","newParams","pit_c_k","town","pixelId","fb_id","promotion","getHomeItem","getErListItem","mallSubmit","errorCatch","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof__","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends__","__WEBPACK_IMPORTED_MODULE_6_qs__","xJD8","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify__","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify___default","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator__","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator___default","__WEBPACK_IMPORTED_MODULE_4__api_permission__","__WEBPACK_IMPORTED_MODULE_5__components_common_loading__","v-loading","computed","$store","created","getLang","methods","_this","mark","_callee","lang","wrap","_context","prev","sent","stop","_this2","_callee2","configData","_context2","seo_img","yW3m","_mutations","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty___default","__WEBPACK_IMPORTED_MODULE_2__types__","__WEBPACK_IMPORTED_MODULE_3_vue__","mutations","actions","getters"],"mappings":"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","file":"static/js/app.4e035f7575a314141241.js?tl=528327","sourcesContent":["webpackJsonp([14],{\n\n/***/ \"3Qg8\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({});\n\n/***/ }),\n\n/***/ \"44dg\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_loading_vue__ = __webpack_require__(\"3Qg8\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_12a8eafb_hasScoped_true_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_loading_vue__ = __webpack_require__(\"au6+\");\nfunction injectStyle (ssrContext) {\n  __webpack_require__(\"RSd+\")\n}\nvar normalizeComponent = __webpack_require__(\"VU/8\")\n/* script */\n\n/* template */\n\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-12a8eafb\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_loading_vue__[\"a\" /* default */],\n  __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_12a8eafb_hasScoped_true_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_loading_vue__[\"a\" /* default */],\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n\n/***/ \"BK/k\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n    // 服务器地址\n    hostUrl: __webpack_require__.i({\"NODE_ENV\":\"production\",\"STATIC_CDN\":\"\"}).API_ROOT || window.location.origin,\n    // 图片的cdn地址，仅用于接口上传\n    cdnUrl: 'https://d2wm7jls0cs3y1.cloudfront.net/Public',\n    // 客服地址\n    // msgUrl: 'https://www.facebook.com/messages/t/120360636035534',\n    msgUrl: 'https://www.facebook.com/messages/t/111161744079782',\n\n    // msgUrl: 'https://m.me/113690220462833?ref=' + encodeURIComponent(location.href),\n    // msgUrl: 'https://m.me/103018364497776?ref=' + encodeURIComponent(location.href),\n    // 初始加载图\n    loading: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC'\n});\n\n/***/ }),\n\n/***/ \"H2m6\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    style: ({\n      direction: _vm.cConf.alignRight ? 'rtl' : ''\n    }),\n    attrs: {\n      \"id\": \"app\"\n    }\n  }, [_c('router-view'), _vm._v(\" \"), _c('v-loading', {\n    directives: [{\n      name: \"show\",\n      rawName: \"v-show\",\n      value: (_vm.fetchLoading || _vm.hardLoading),\n      expression: \"fetchLoading || hardLoading\"\n    }]\n  })], 1)\n}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\n\n/***/ }),\n\n/***/ \"M93x\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_App_vue__ = __webpack_require__(\"xJD8\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3e43f94b_hasScoped_false_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_App_vue__ = __webpack_require__(\"H2m6\");\nfunction injectStyle (ssrContext) {\n  __webpack_require__(\"e3oT\")\n}\nvar normalizeComponent = __webpack_require__(\"VU/8\")\n/* script */\n\n/* template */\n\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_App_vue__[\"a\" /* default */],\n  __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_3e43f94b_hasScoped_false_transformToRequire_video_src_source_src_img_src_image_xlink_href_node_modules_vue_loader_lib_selector_type_template_index_0_App_vue__[\"a\" /* default */],\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n\n/***/ \"NHnr\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys__ = __webpack_require__(\"fZjL\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue__ = __webpack_require__(\"7+uW\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vuex__ = __webpack_require__(\"NYxO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__App__ = __webpack_require__(\"M93x\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__router__ = __webpack_require__(\"YaEn\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__vuex_store_js__ = __webpack_require__(\"YtJ0\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__http_api_js__ = __webpack_require__(\"m4jk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_mint_ui__ = __webpack_require__(\"Au9i\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_mint_ui___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_mint_ui__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_mint_ui_lib_style_css__ = __webpack_require__(\"d8/S\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_mint_ui_lib_style_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_mint_ui_lib_style_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_vue_clipboard2__ = __webpack_require__(\"wvfG\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_vue_clipboard2___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_vue_clipboard2__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__util_config__ = __webpack_require__(\"BK/k\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__util_index__ = __webpack_require__(\"ZoQJ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__util_biz__ = __webpack_require__(\"RCCn\");\n\n\n\n\n\n //vuex\n //http请求\n //移动端UI\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"].use(__WEBPACK_IMPORTED_MODULE_7_mint_ui___default.a, {\n  lazyload: {\n    loading: __WEBPACK_IMPORTED_MODULE_10__util_config__[\"a\" /* default */].loading\n  }\n});\n__WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"].use(__WEBPACK_IMPORTED_MODULE_9_vue_clipboard2___default.a);\n__WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"].prototype.$api = __WEBPACK_IMPORTED_MODULE_6__http_api_js__[\"a\" /* default */];\n__WEBPACK_IMPORTED_MODULE_9_vue_clipboard2___default.a.config.autoSetContainer = true;\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 获取当前站点的语言信息\n\n// 设置cl值\n// 台湾：tw_tc\n// 泰国：th_th\n// 马来(中文)：my_cn\n// 马来(英文)：my_en\n// 新加坡(中文)：sg_cn\n// 新加坡(英文)：sg_en\n// 香港(中文)：hk_tc\n// 香港(英文)：hk_en\n// 日本：jp_jp\n// 阿联酋：ua_ar\n// 沙特阿拉伯：sa_ar\n// 罗马尼亚：ro_ro\n\nvar templateConfigs = {\n  'tw_tc': {\n    country: '台湾',\n    stateSelect: true,\n    citySelectInline: true,\n    serviceLineMe: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '台湾'\n\n  },\n  'th_th': {\n    country: '泰国',\n    stateSelect: true,\n    citySelect: true,\n    thAddress: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '泰国'\n  },\n  'th_en': {\n    country: '泰国',\n    stateSelect: true,\n    citySelect: true,\n    thAddress: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '泰国'\n  },\n  'my_cn': {\n    country: '马来西亚',\n    stateSelect: true,\n    citySelectInline: true,\n    postalInput: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '马来西亚'\n  },\n  'my_en': {\n    country: '马来西亚',\n    stateSelect: true,\n    citySelectInline: true,\n    postalInput: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '马来西亚'\n  },\n  'ph_en': {\n    country: '菲律宾',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    postalInput: true,\n    postalRequired: true\n  },\n  'sg_cn': {\n    country: '新加坡',\n    stateSelect: false,\n    postalInput: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '新加坡',\n    autoFillCity: '新加坡'\n  },\n  'sg_en': {\n    country: '新加坡',\n    stateSelect: false,\n    postalInput: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '新加坡',\n    autoFillCity: 'Singapore'\n  },\n  'hk_tc': {\n    country: '香港',\n    stateSelect: true,\n    citySelectInline: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true\n  },\n  'hk_en': {\n    country: '香港',\n    stateSelect: true,\n    citySelectInline: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true\n  },\n  'jp_jp': {\n    country: '日本',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    jpRequired: true,\n    jpSupply: true,\n    emailInput: true\n  },\n  'ua_ar': {\n    country: '阿联酋',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    alignRight: true\n  },\n  'sa_ar': {\n    country: '沙特阿拉伯',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    alignRight: true\n  },\n  'ro_ro': {\n    country: '罗马尼亚',\n    stateSelect: true,\n    citySearch: true,\n    stateRequired: true,\n    cityRequired: true,\n    cityPostalSelect: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    autoFillProvince: 'România',\n    address2: true\n  },\n  'cz_cs': {\n    country: '捷克',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'sk_sk': {\n    country: '斯洛伐克',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'at_de': {\n    country: '奥地利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'hu_hu': {\n    country: '匈牙利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    cityDataZipcode: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    nameRegexp: true\n  },\n  'pl_pl': {\n    country: '波兰',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'es_es': {\n    country: '西班牙',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'it_it': {\n    country: '意大利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'gr_gr': {\n    country: '希腊',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'hr_hr': {\n    country: '克罗地亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'sl_sl': {\n    country: '斯洛文尼亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'lt_lt': {\n    country: '立陶宛',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'bg_bg': {\n    country: '保加利亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  }\n\n  /**\n   * 方法：从连接中获取参数cl(含默认值赋值)\n   */\n};function getQueryVariable(variable, defaultCl) {\n  var ptList = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_keys___default()(templateConfigs);\n  var query = '';\n  try {\n    query = decodeURIComponent(window.location.search.substring(1)).replace(/&amp;/g, '&');\n  } catch (e) {\n    query = window.location.search.substring(1).replace(/&amp;/g, '&');\n  }\n  var vars = query.split(\"&\");\n  for (var i = 0; i < vars.length; i++) {\n    var pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      if (ptList.indexOf(pair[1]) === -1) {\n        return defaultCl;\n      } else {\n        return pair[1];\n      }\n    }\n  }\n  // window.location.search += ('&' + variable + '=' + defalut);\n  return defaultCl;\n}\n\n// 之前的cl获取方法\n// cl = getQueryVariable('cl', cl || 'pl_pl')\n// 2024年11月10日14:23:56 更改获取逻辑\nvar localDomainPageCl = __WEBPACK_IMPORTED_MODULE_12__util_biz__[\"a\" /* getRuntimeCl */]() || \"pl_pl\";\ncl = getQueryVariable('cl', cl || localDomainPageCl);\n\nsessionStorage.setItem('cl', cl); // 本页面需要的数据\nif (cl && __WEBPACK_IMPORTED_MODULE_12__util_biz__[\"b\" /* isPageDetail */]()) {\n  var urlObject = __WEBPACK_IMPORTED_MODULE_11__util_index__[\"a\" /* getQueryObject */]();\n  __WEBPACK_IMPORTED_MODULE_12__util_biz__[\"c\" /* setRuntimeCl */](cl); // 使用localStorage的方式保存，不同域名之间互不影响，并且也能跨标签页获取，同时控制只能是详情页才能写入\n  __WEBPACK_IMPORTED_MODULE_12__util_biz__[\"d\" /* setRuntimePath */](urlObject.path);\n}\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// cConf: 个人信息填写控制\nwindow.cConf = templateConfigs[cl] || {};\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 用钩子函数beforeEach()对路由进行判断\n__WEBPACK_IMPORTED_MODULE_4__router__[\"a\" /* default */].beforeEach(function (to, from, next) {\n  setTimeout(function () {\n    window.scrollTo(0, 0);\n  }, 100);\n  if (to.meta.requireAuth) {\n    // 需要权限,进一步进行判断\n    if (__WEBPACK_IMPORTED_MODULE_5__vuex_store_js__[\"a\" /* default */].state.login.token) {\n      // 通过vuex state获取当前的token是否存在\n      next();\n    } else {\n      //如果没有权限,重定向到登录页,进行登录\n      next({\n        path: '/login'\n        // query: {redirect: to.fullPath}  // 将跳转的路由path作为参数，登录成功后跳转到该路由\n      });\n    }\n  } else {\n    //不需要权限 直接跳转\n    next();\n  }\n});\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 开始启动进入Vue的世界\n/* eslint-disable no-new */\n// devtools 工具\n__WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"].config.productionTip = \"production\" !== 'production';\n__WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"].config.devtools = \"production\" !== 'production';\n\nnew __WEBPACK_IMPORTED_MODULE_1_vue__[\"default\"]({\n  el: '#app',\n  router: __WEBPACK_IMPORTED_MODULE_4__router__[\"a\" /* default */],\n  store: __WEBPACK_IMPORTED_MODULE_5__vuex_store_js__[\"a\" /* default */],\n  template: '<App/>',\n  components: { App: __WEBPACK_IMPORTED_MODULE_3__App__[\"a\" /* default */] }\n});\n\n/***/ }),\n\n/***/ \"RCCn\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = isPageDetail;\n/* unused harmony export isPageHome */\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = setRuntimeCl;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = getRuntimeCl;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = setRuntimePath;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = getRuntimePath;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = getRuntimeSource;\n// biz 业务js\n\nvar BIZ_CONSTANT = {\n  runtime: {\n    domainPageSource: \"source\",\n    domainPageCl: \"RuntimeDomainPageCl\",\n    domainPagePath: \"RuntimeDomainPagePath\"\n  }\n};\n\n/**\n * 是否是详情页\n * @param {string} url\n * @returns {boolean}\n */\nfunction isPageDetail(url) {\n  var urlIns = url == null ? window.location : new URL(url);\n  if (urlIns.pathname === \"/detail\") {\n    return true;\n  }\n  // 不使用内联的方式，方便后续处理其他逻辑\n  return false;\n}\n\n/**\n * 是否是首页\n * @param {string} url\n * @returns {boolean}\n */\nfunction isPageHome(url) {\n  var urlIns = url == null ? window.location : new URL(url);\n  if (urlIns.pathname === \"/\" || urlIns.pathname === \"\") {\n    return true;\n  }\n  // 不使用内联的方式，方便后续处理其他逻辑\n  return false;\n}\n\n// ****************************************************************************************************************************************************************\n// 页面逻辑处理\nfunction setRuntimeCl(clValue) {\n  return localStorage.setItem(BIZ_CONSTANT.runtime.domainPageCl, clValue);\n}\n\nfunction getRuntimeCl() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPageCl);\n}\n\nfunction setRuntimePath(pathValue) {\n  return localStorage.setItem(BIZ_CONSTANT.runtime.domainPagePath, pathValue);\n}\n\nfunction getRuntimePath() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPagePath);\n}\n\nfunction getRuntimeSource() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPageSource);\n}\n\n/***/ }),\n\n/***/ \"RSd+\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"YaEn\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(\"7+uW\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vue_router__ = __webpack_require__(\"/ocq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__api_permission__ = __webpack_require__(\"vZz+\");\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_0_vue__[\"default\"].use(__WEBPACK_IMPORTED_MODULE_1_vue_router__[\"a\" /* default */]);\n//按需加载,当渲染其他页面时才加载其组件,并缓存,减少首屏加载时间\nvar Index = function Index(resolve) {\n  return __webpack_require__.e/* require */(10).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"mlqX\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar List = function List(resolve) {\n  return __webpack_require__.e/* require */(9).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"NtvV\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Detail = function Detail(resolve) {\n  return __webpack_require__.e/* require */(0).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"/pee\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Pay = function Pay(resolve) {\n  return __webpack_require__.e/* require */(1).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"oU+0\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Success = function Success(resolve) {\n  return __webpack_require__.e/* require */(3).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"zpnF\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Search = function Search(resolve) {\n  return __webpack_require__.e/* require */(2).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"G7FF\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar ShippingPolicy = function ShippingPolicy(resolve) {\n  return __webpack_require__.e/* require */(4).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"Imty\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar FAQ = function FAQ(resolve) {\n  return __webpack_require__.e/* require */(7).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"vNOy\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar ReturnPolicy = function ReturnPolicy(resolve) {\n  return __webpack_require__.e/* require */(5).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"o9Gk\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar PrivacyPolicy = function PrivacyPolicy(resolve) {\n  return __webpack_require__.e/* require */(6).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"LnMR\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Error = function Error(resolve) {\n  return __webpack_require__.e/* require */(12).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"xLdf\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Promotion = function Promotion(resolve) {\n  return __webpack_require__.e/* require */(11).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"pcSv\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar About = function About(resolve) {\n  return __webpack_require__.e/* require */(8).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"g6s4\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar myRouter = new __WEBPACK_IMPORTED_MODULE_1_vue_router__[\"a\" /* default */]({\n  mode: 'history',\n  routes: [{\n    path: '/',\n    name: '首页',\n    component: Index,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/list',\n    name: '列表页',\n    component: List,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/detail',\n    name: '详情页',\n    component: Detail,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/pay',\n    name: '支付页',\n    component: Pay,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/success',\n    name: '成功页',\n    component: Success,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/search',\n    name: '查询页',\n    component: Search,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/shipping',\n    name: '发货政策',\n    component: ShippingPolicy,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/faq',\n    name: '常见问题',\n    component: FAQ,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/return',\n    name: '退货政策',\n    component: ReturnPolicy,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/privacy',\n    name: '隐私政策',\n    component: PrivacyPolicy,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/Promotion/:id',\n    name: '活动页',\n    component: Promotion,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/collections-big-sale',\n    name: '固定活动页',\n    component: Promotion,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/about',\n    name: '关于我们',\n    component: About,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/error',\n    name: 'error',\n    component: Error,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }]\n});\n\nmyRouter.beforeEach(function (to, from, next) {\n  if (to.matched.length === 0) {\n    next({\n      path: '/error',\n      query: to.query\n    });\n    // 储存错误的路由地址，方便以后使用\n    sessionStorage.errorUri = to.fullPath;\n    return;\n  }\n  /* 路由发生变化修改页面meta */\n  if (to.meta.content || sessionStorage.seo_keywords) {\n    var head = document.getElementsByTagName('head');\n    var meta = document.createElement('meta');\n    document.querySelector('meta[name=\"keywords\"]').setAttribute('content', to.meta.content.keywords || sessionStorage.seo_keywords);\n    document.querySelector('meta[name=\"description\"]').setAttribute('content', to.meta.content.description || sessionStorage.seo_description);\n  }\n  /* 路由发生变化修改页面title */\n  if (to.meta.title || sessionStorage.seo_title) {\n    document.title = to.meta.title || sessionStorage.seo_title;\n  }\n  /* 路由切换时，如果没有就添加，有就跳过执行，添加固定参数 */\n  var query = to.query;\n  var queryCtrl = false;\n  if (from.query.atm && !to.query.atm) {\n    query.atm = from.query.atm;\n    queryCtrl = true;\n  }\n  if (from.query.cl && !to.query.cl) {\n    query.cl = from.query.cl;\n    queryCtrl = true;\n  }\n  if (from.query.u && !to.query.u) {\n    query.u = from.query.u;\n    queryCtrl = true;\n  }\n  if (from.query.utm_source && !to.query.utm_source) {\n    query.utm_source = from.query.utm_source;\n    queryCtrl = true;\n  }\n  if (from.query.utm_medium && !to.query.utm_medium) {\n    query.utm_medium = from.query.utm_medium;\n    queryCtrl = true;\n  }\n  if (from.query.aid && !to.query.aid) {\n    query.aid = from.query.aid;\n    queryCtrl = true;\n  }\n  if (from.query.source && !to.query.source) {\n    query.source = from.query.source;\n    queryCtrl = true;\n  }\n  if (from.query.home && !to.query.home) {\n    query.home = from.query.home;\n    queryCtrl = true;\n  }\n  if (queryCtrl) {\n    next({\n      path: to.path,\n      query: query\n    });\n  } else {\n    next();\n    var event_label = '';\n    if (to.path === '/detail') {\n      event_label = 'home';\n    } else if (to.path === '/pay') {\n      event_label = 'pay';\n    } else if (to.path === '/search') {\n      event_label = 'query';\n    } else if (to.path === '/success') {\n      event_label = 'success';\n    }\n    gtag('event', 'PageView', {\n      event_category: window.location.href,\n      event_label: event_label,\n      value: startTime\n    });\n    __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__api_permission__[\"c\" /* mallSubmit */])({\n      event_name: 'PageView',\n      event_label: event_label\n    });\n  }\n});\n\nmyRouter.onError(function (err) {\n  var pattern = /Loading chunk (\\d)+ failed/g;\n  var isChunkLoadFailed = err.message.match(pattern);\n  if (isChunkLoadFailed) {\n    var chunkBool = sessionStorage.getItem('chunkError');\n    var nowTimes = Date.now();\n    if (chunkBool === null || chunkBool && nowTimes - parseInt(chunkBool) > 60000) {\n      //路由跳转报错,href手动跳转\n      sessionStorage.setItem('chunkError', 'reload');\n      var targetPath = myRouter.history.pending.fullPath;\n      window.location.href = window.location.origin + targetPath;\n    } else if (chunkBool === 'reload') {\n      //手动跳转后依然报错,强制刷新\n      sessionStorage.setItem('chunkError', Date.now());\n      window.location.reload(true);\n    }\n  }\n});\n/* harmony default export */ __webpack_exports__[\"a\"] = (myRouter);\n\n/***/ }),\n\n/***/ \"YtJ0\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(\"7+uW\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_vuex__ = __webpack_require__(\"NYxO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__modules_detail__ = __webpack_require__(\"yW3m\");\n//store.js\n\n\n\n// 头部分类\n\n\n__WEBPACK_IMPORTED_MODULE_0_vue__[\"default\"].use(__WEBPACK_IMPORTED_MODULE_1_vuex__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (new __WEBPACK_IMPORTED_MODULE_1_vuex__[\"a\" /* default */].Store({\n  modules: {\n    detail: __WEBPACK_IMPORTED_MODULE_2__modules_detail__[\"a\" /* default */]\n  }\n}));\n\n/***/ }),\n\n/***/ \"ZoQJ\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export parseTime */\n/* unused harmony export formatTime */\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = getQueryObject;\n/* unused harmony export byteLength */\n/* unused harmony export cleanArray */\n/* unused harmony export param */\n/* unused harmony export param2Obj */\n/* unused harmony export html2Text */\n/* unused harmony export objectMerge */\n/* unused harmony export toggleClass */\n/* unused harmony export getTime */\n/* unused harmony export deepClone */\n/* unused harmony export uniqueArr */\n/* unused harmony export createUniqueString */\n/* unused harmony export hasClass */\n/* unused harmony export addClass */\n/* unused harmony export removeClass */\n/* unused harmony export resetForm */\n/* unused harmony export addDateRange */\n/* unused harmony export selectDictLabel */\n/* unused harmony export selectDictLabels */\n/* unused harmony export sprintf */\n/* unused harmony export parseStrEmpty */\n/* unused harmony export mergeRecursive */\n/* unused harmony export handleTree */\n/* unused harmony export tansParams */\n/* unused harmony export blobValidate */\n/* unused harmony export debounce */\n/* unused harmony export formatSeconds */\n/* unused harmony export NumberMul */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator__ = __webpack_require__(\"BO1k\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_set__ = __webpack_require__(\"lHA8\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_set___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_set__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_array_from__ = __webpack_require__(\"c/Tr\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_array_from___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_array_from__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys__ = __webpack_require__(\"fZjL\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof__ = __webpack_require__(\"pFYg\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof__);\n\n\n\n\n\n/* eslint-disable eqeqeq */\n/**\n * Parse the time to string\n * @param {(Object|string|number)} time\n * @param {string} cFormat\n * @returns {string}\n */\nfunction parseTime(time, cFormat) {\n  if (arguments.length === 0) {\n    return null;\n  }\n  var format = cFormat || \"{y}-{m}-{d} {h}:{i}:{s}\";\n  var date = void 0;\n  if ((typeof time === \"undefined\" ? \"undefined\" : __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(time)) === \"object\") {\n    date = time;\n  } else {\n    if (typeof time === \"string\" && /^[0-9]+$/.test(time)) {\n      time = parseInt(time);\n    }\n    if (typeof time === \"number\" && time.toString().length === 10) {\n      time = time * 1000;\n    }\n    date = new Date(time);\n  }\n  var formatObj = {\n    y: date.getFullYear(),\n    m: date.getMonth() + 1,\n    d: date.getDate(),\n    h: date.getHours(),\n    i: date.getMinutes(),\n    s: date.getSeconds(),\n    a: date.getDay()\n  };\n  // eslint-disable-next-line camelcase\n  var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, function (result, key) {\n    var value = formatObj[key];\n    // Note: getDay() returns 0 on Sunday\n    // eslint-disable-next-line standard/computed-property-even-spacing\n    if (key === \"a\") {\n      return [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"][value];\n    }\n    if (result.length > 0 && value < 10) {\n      value = \"0\" + value;\n    }\n    return value || 0;\n  });\n  // eslint-disable-next-line camelcase\n  return time_str;\n}\n\n/**\n * @param {number} time\n * @param {string} option\n * @returns {string}\n */\nfunction formatTime(time, option) {\n  if ((\"\" + time).length === 10) {\n    time = parseInt(time) * 1000;\n  } else {\n    time = +time;\n  }\n  var d = new Date(time);\n  var now = Date.now();\n\n  var diff = (now - d) / 1000;\n\n  if (diff < 30) {\n    return \"刚刚\";\n  } else if (diff < 3600) {\n    // less 1 hour\n    return Math.ceil(diff / 60) + \"分钟前\";\n  } else if (diff < 3600 * 24) {\n    return Math.ceil(diff / 3600) + \"小时前\";\n  } else if (diff < 3600 * 24 * 2) {\n    return \"1天前\";\n  }\n  if (option) {\n    return parseTime(time, option);\n  } else {\n    return d.getMonth() + 1 + \"月\" + d.getDate() + \"日\" + d.getHours() + \"时\" + d.getMinutes() + \"分\";\n  }\n}\n\n/**\n * @param {string} url\n * @returns {Object}\n */\nfunction getQueryObject(url) {\n  url = url == null ? window.location.href : url;\n  var search = url.substring(url.lastIndexOf(\"?\") + 1);\n  var obj = {};\n  var reg = /([^?&=]+)=([^?&=]*)/g;\n  search.replace(reg, function (rs, $1, $2) {\n    var name = decodeURIComponent($1);\n    var val = decodeURIComponent($2);\n    val = String(val);\n    obj[name] = val;\n    return rs;\n  });\n  return obj;\n}\n\n/**\n * @param {string} input value\n * @returns {number} output value\n */\nfunction byteLength(str) {\n  // returns the byte length of an utf8 string\n  var s = str.length;\n  for (var i = str.length - 1; i >= 0; i--) {\n    var code = str.charCodeAt(i);\n    if (code > 0x7f && code <= 0x7ff) s++;else if (code > 0x7ff && code <= 0xffff) s += 2;\n    if (code >= 0xdc00 && code <= 0xdfff) i--;\n  }\n  return s;\n}\n\n/**\n * @param {Array} actual\n * @returns {Array}\n */\nfunction cleanArray(actual) {\n  var newArray = [];\n  for (var i = 0; i < actual.length; i++) {\n    if (actual[i]) {\n      newArray.push(actual[i]);\n    }\n  }\n  return newArray;\n}\n\n/**\n * @param {Object} json\n * @returns {Array}\n */\nfunction param(json) {\n  if (!json) return \"\";\n  return cleanArray(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(json).map(function (key) {\n    if (json[key] === undefined) return \"\";\n    return encodeURIComponent(key) + \"=\" + encodeURIComponent(json[key]);\n  })).join(\"&\");\n}\n\n/**\n * @param {string} url\n * @returns {Object}\n */\nfunction param2Obj(url) {\n  var search = url.split(\"?\")[1];\n  if (!search) {\n    return {};\n  }\n  return JSON.parse('{\"' + decodeURIComponent(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"').replace(/\\+/g, \" \") + '\"}');\n}\n\n/**\n * @param {string} val\n * @returns {string}\n */\nfunction html2Text(val) {\n  var div = document.createElement(\"div\");\n  div.innerHTML = val;\n  return div.textContent || div.innerText;\n}\n\n/**\n * Merges two objects, giving the last one precedence\n * @param {Object} target\n * @param {(Object|Array)} source\n * @returns {Object}\n */\nfunction objectMerge(target, source) {\n  if ((typeof target === \"undefined\" ? \"undefined\" : __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(target)) !== \"object\") {\n    target = {};\n  }\n  if (Array.isArray(source)) {\n    return source.slice();\n  }\n  __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(source).forEach(function (property) {\n    var sourceProperty = source[property];\n    if ((typeof sourceProperty === \"undefined\" ? \"undefined\" : __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(sourceProperty)) === \"object\") {\n      target[property] = objectMerge(target[property], sourceProperty);\n    } else {\n      target[property] = sourceProperty;\n    }\n  });\n  return target;\n}\n\n/**\n * @param {HTMLElement} element\n * @param {string} className\n */\nfunction toggleClass(element, className) {\n  if (!element || !className) {\n    return;\n  }\n  var classString = element.className;\n  var nameIndex = classString.indexOf(className);\n  if (nameIndex === -1) {\n    classString += \"\" + className;\n  } else {\n    classString = classString.substr(0, nameIndex) + classString.substr(nameIndex + className.length);\n  }\n  element.className = classString;\n}\n\n/**\n * @param {string} type\n * @returns {Date}\n */\nfunction getTime(type) {\n  if (type === \"start\") {\n    return new Date().getTime() - 3600 * 1000 * 24 * 90;\n  } else {\n    return new Date(new Date().toDateString());\n  }\n}\n\n/**\n * This is just a simple version of deep copy\n * Has a lot of edge cases bug\n * If you want to use a perfect deep copy, use lodash's _.cloneDeep\n * @param {Object} source\n * @returns {Object}\n */\nfunction deepClone(source) {\n  if (!source && (typeof source === \"undefined\" ? \"undefined\" : __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(source)) !== \"object\") {\n    throw new Error(\"error arguments\", \"deepClone\");\n  }\n  var targetObj = source.constructor === Array ? [] : {};\n  __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(source).forEach(function (keys) {\n    if (source[keys] && __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(source[keys]) === \"object\") {\n      targetObj[keys] = deepClone(source[keys]);\n    } else {\n      targetObj[keys] = source[keys];\n    }\n  });\n  return targetObj;\n}\n\n/**\n * @param {Array} arr\n * @returns {Array}\n */\nfunction uniqueArr(arr) {\n  return __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_array_from___default()(new __WEBPACK_IMPORTED_MODULE_1_babel_runtime_core_js_set___default.a(arr));\n}\n\n/**\n * @returns {string}\n */\nfunction createUniqueString() {\n  var timestamp = +new Date() + \"\";\n  var randomNum = parseInt((1 + Math.random()) * 65536) + \"\";\n  return (+(randomNum + timestamp)).toString(32);\n}\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} elm\n * @param {string} cls\n * @returns {boolean}\n */\nfunction hasClass(ele, cls) {\n  return !!ele.className.match(new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\"));\n}\n\n/**\n * Add class to element\n * @param {HTMLElement} elm\n * @param {string} cls\n */\nfunction addClass(ele, cls) {\n  if (!hasClass(ele, cls)) ele.className += \" \" + cls;\n}\n\n/**\n * Remove class from element\n * @param {HTMLElement} elm\n * @param {string} cls\n */\nfunction removeClass(ele, cls) {\n  if (hasClass(ele, cls)) {\n    var reg = new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\");\n    ele.className = ele.className.replace(reg, \" \");\n  }\n}\n\n/** 新增全局处理方法 */\n\n// 表单重置\nfunction resetForm(refName) {\n  if (this.$refs[refName]) {\n    this.$refs[refName].resetFields();\n  }\n}\n\n// 添加日期范围\nfunction addDateRange(params, dateRange, propName) {\n  var search = params;\n  search.params = __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(search.params) === \"object\" && search.params !== null && !Array.isArray(search.params) ? search.params : {};\n  dateRange = Array.isArray(dateRange) ? dateRange : [];\n  if (typeof propName === \"undefined\") {\n    search.params[\"beginTime\"] = dateRange[0];\n    search.params[\"endTime\"] = dateRange[1];\n  } else {\n    search.params[\"begin\" + propName] = dateRange[0];\n    search.params[\"end\" + propName] = dateRange[1];\n  }\n  return search;\n}\n\n// 回显数据字典\nfunction selectDictLabel(datas, value) {\n  if (value === undefined) {\n    return \"\";\n  }\n  var actions = [];\n  __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(datas).some(function (key) {\n    if (datas[key].value == \"\" + value) {\n      actions.push(datas[key].label);\n      return true;\n    }\n  });\n  if (actions.length === 0) {\n    actions.push(value);\n  }\n  return actions.join(\"\");\n}\n\n// 回显数据字典（字符串、数组）\nfunction selectDictLabels(datas, value, separator) {\n  if (value === undefined || value.length === 0) {\n    return \"\";\n  }\n  if (Array.isArray(value)) {\n    value = value.join(\",\");\n  }\n  var actions = [];\n  var currentSeparator = undefined === separator ? \",\" : separator;\n  var temp = value.split(currentSeparator);\n  __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(value.split(currentSeparator)).some(function (val) {\n    var match = false;\n    __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(datas).some(function (key) {\n      if (datas[key].value == \"\" + temp[val]) {\n        actions.push(datas[key].label + currentSeparator);\n        match = true;\n      }\n    });\n    if (!match) {\n      actions.push(temp[val] + currentSeparator);\n    }\n  });\n  return actions.join(\"\").substring(0, actions.join(\"\").length - 1);\n}\n\n// 字符串格式化(%s )\nfunction sprintf(str) {\n  var args = arguments;\n  var flag = true;\n  var i = 1;\n  str = str.replace(/%s/g, function () {\n    var arg = args[i++];\n    if (typeof arg === \"undefined\") {\n      flag = false;\n      return \"\";\n    }\n    return arg;\n  });\n  return flag ? str : \"\";\n}\n\n// 转换字符串，undefined,null等转化为\"\"\nfunction parseStrEmpty(str) {\n  if (!str || str == \"undefined\" || str == \"null\") {\n    return \"\";\n  }\n  return str;\n}\n\n// 数据合并\nfunction mergeRecursive(source, target) {\n  for (var p in target) {\n    try {\n      if (target[p].constructor == Object) {\n        source[p] = mergeRecursive(source[p], target[p]);\n      } else {\n        source[p] = target[p];\n      }\n    } catch (e) {\n      source[p] = target[p];\n    }\n  }\n  return source;\n}\n\n/**\n * 构造树型结构数据\n * @param {*} data 数据源\n * @param {*} id id字段 默认 'id'\n * @param {*} parentId 父节点字段 默认 'parentId'\n * @param {*} children 孩子节点字段 默认 'children'\n */\nfunction handleTree(data, id, parentId, children) {\n  var config = {\n    id: id || \"id\",\n    parentId: parentId || \"parentId\",\n    childrenList: children || \"children\"\n  };\n\n  var childrenListMap = {};\n  var nodeIds = {};\n  var tree = [];\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(data), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var d = _step.value;\n\n      var _parentId = d[config.parentId];\n      if (childrenListMap[_parentId] == null) {\n        childrenListMap[_parentId] = [];\n      }\n      nodeIds[d[config.id]] = d;\n      childrenListMap[_parentId].push(d);\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(data), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var _d = _step2.value;\n\n      var _parentId2 = _d[config.parentId];\n      if (nodeIds[_parentId2] == null) {\n        tree.push(_d);\n      }\n    }\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n\n  var _iteratorNormalCompletion3 = true;\n  var _didIteratorError3 = false;\n  var _iteratorError3 = undefined;\n\n  try {\n    for (var _iterator3 = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(tree), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n      var t = _step3.value;\n\n      adaptToChildrenList(t);\n    }\n  } catch (err) {\n    _didIteratorError3 = true;\n    _iteratorError3 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion3 && _iterator3.return) {\n        _iterator3.return();\n      }\n    } finally {\n      if (_didIteratorError3) {\n        throw _iteratorError3;\n      }\n    }\n  }\n\n  function adaptToChildrenList(o) {\n    if (childrenListMap[o[config.id]] !== null) {\n      o[config.childrenList] = childrenListMap[o[config.id]];\n    }\n    if (o[config.childrenList]) {\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(o[config.childrenList]), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          adaptToChildrenList(c);\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    }\n  }\n  return tree;\n}\n\n/**\n * 参数处理\n * @param {*} params  参数\n */\nfunction tansParams(params) {\n  var result = \"\";\n  var _iteratorNormalCompletion5 = true;\n  var _didIteratorError5 = false;\n  var _iteratorError5 = undefined;\n\n  try {\n    for (var _iterator5 = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(params)), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n      var propName = _step5.value;\n\n      var value = params[propName];\n      var part = encodeURIComponent(propName) + \"=\";\n      if (value !== null && value !== \"\" && typeof value !== \"undefined\") {\n        if ((typeof value === \"undefined\" ? \"undefined\" : __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_typeof___default()(value)) === \"object\") {\n          var _iteratorNormalCompletion6 = true;\n          var _didIteratorError6 = false;\n          var _iteratorError6 = undefined;\n\n          try {\n            for (var _iterator6 = __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_get_iterator___default()(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(value)), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n              var key = _step6.value;\n\n              if (value[key] !== null && value[key] !== \"\" && typeof value[key] !== \"undefined\") {\n                var _params = propName + \"[\" + key + \"]\";\n                var subPart = encodeURIComponent(_params) + \"=\";\n                result += subPart + encodeURIComponent(value[key]) + \"&\";\n              }\n            }\n          } catch (err) {\n            _didIteratorError6 = true;\n            _iteratorError6 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                _iterator6.return();\n              }\n            } finally {\n              if (_didIteratorError6) {\n                throw _iteratorError6;\n              }\n            }\n          }\n        } else {\n          result += part + encodeURIComponent(value) + \"&\";\n        }\n      }\n    }\n  } catch (err) {\n    _didIteratorError5 = true;\n    _iteratorError5 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion5 && _iterator5.return) {\n        _iterator5.return();\n      }\n    } finally {\n      if (_didIteratorError5) {\n        throw _iteratorError5;\n      }\n    }\n  }\n\n  return result;\n}\n\n// 验证是否为blob格式\nfunction blobValidate(data) {\n  return data.type !== \"application/json\";\n}\n\n/**\n * 防抖函数\n * @param {Function} func\n * @param {number} wait\n * @param {boolean} immediate\n * @return {*}\n */\nfunction debounce(func, wait, immediate) {\n  var timeout = void 0,\n      args = void 0,\n      context = void 0,\n      timestamp = void 0,\n      result = void 0;\n\n  var later = function later() {\n    // 据上一次触发时间间隔\n    var last = +new Date() - timestamp;\n\n    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n    if (last < wait && last > 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      // 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用\n      if (!immediate) {\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      }\n    }\n  };\n\n  return function () {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    context = this;\n    timestamp = +new Date();\n    var callNow = immediate && !timeout;\n    // 如果延时不存在，重新设定延时\n    if (!timeout) timeout = setTimeout(later, wait);\n    if (callNow) {\n      result = func.apply(context, args);\n      context = args = null;\n    }\n\n    return result;\n  };\n}\n\nfunction formatSeconds(theTime) {\n  var theTime1 = 0;\n  var theTime2 = 0;\n  if (theTime > 60) {\n    theTime1 = parseInt(theTime / 60);\n    theTime = parseInt(theTime % 60);\n    if (theTime1 > 60) {\n      theTime2 = parseInt(theTime1 / 60);\n      theTime1 = parseInt(theTime1 % 60);\n    }\n  }\n  var result = \"\" + parseInt(theTime) + \"秒\";\n  if (theTime1 > 0) {\n    result = \"\" + parseInt(theTime1) + \"分\" + result;\n  }\n  if (theTime2 > 0) {\n    result = \"\" + parseInt(theTime2) + \"小时\" + result;\n  }\n  return result;\n}\n\n// 加减乘除\nfunction NumberMul(arg1, arg2) {\n  var m = 0;\n  var s1 = arg1.toString();\n  var s2 = arg2.toString();\n  try {\n    m += s1.split(\".\")[1].length;\n  } catch (e) {}\n  try {\n    m += s2.split(\".\")[1].length;\n  } catch (e) {}\n\n  return Number(s1.replace(\".\", \"\")) * Number(s2.replace(\".\", \"\")) / Math.pow(10, m);\n}\n\n/***/ }),\n\n/***/ \"au6+\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _vm._m(0)\n}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \"wrap\"\n  }, [_c('div', {\n    staticClass: \"spinner\"\n  }, [_c('div', {\n    staticClass: \"double-bounce1\"\n  }), _vm._v(\" \"), _c('div', {\n    staticClass: \"double-bounce2\"\n  })]), _vm._v(\" \"), _c('p', [_vm._v(\"loading.....\")])])\n}]\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\n\n/***/ }),\n\n/***/ \"d8/S\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"dzxK\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = payCustomizeLangDefaults;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = formatPayLang;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = payCustomizeMessage;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign__ = __webpack_require__(\"woOf\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign__);\n\n/**\n * 下单页「定制」区块文案：按站点 cl 映射语言包，与接口 lang 合并后写入 this.lang。\n * 占位符：{n} {current} {total} {status}\n */\n\nfunction interpolate(str, vars) {\n  if (!str || !vars) return str || '';\n  return String(str).replace(/\\{(\\w+)\\}/g, function (_, k) {\n    return vars[k] != null ? String(vars[k]) : '{' + k + '}';\n  });\n}\n\n/** 各语言完整键集合（键名需与 Pay.vue / permission.js 使用一致） */\nvar PACKS = {\n  en: {\n    customize_section_title: 'Customization',\n    customize_photo_upload: 'Photo upload',\n    customize_photo_hint_per_group: 'Upload up to {n} photos per item',\n    customize_photo_slot: 'Photo ({current}/{total})',\n    customize_opinion_label: 'Customization notes',\n    customize_opinion_placeholder: 'Describe your request (text, color, engraving, etc.)',\n    upload_fail: 'Upload failed',\n    upload_http_error_prefix: 'Upload failed HTTP {status}'\n  },\n  zh_cn: {\n    customize_section_title: '定制',\n    customize_photo_upload: '照片上传',\n    customize_photo_hint_per_group: '每组需上传 {n} 张照片',\n    customize_photo_slot: '照片 ({current}/{total})',\n    customize_opinion_label: '定制商品意见',\n    customize_opinion_placeholder: '请填写定制说明（如文字、颜色、刻字内容等）',\n    upload_fail: '上传失败',\n    upload_http_error_prefix: '上传失败 HTTP {status}'\n  },\n  zh_tw: {\n    customize_section_title: '定制',\n    customize_photo_upload: '照片上傳',\n    customize_photo_hint_per_group: '每組需上傳 {n} 張照片',\n    customize_photo_slot: '照片 ({current}/{total})',\n    customize_opinion_label: '定制商品意見',\n    customize_opinion_placeholder: '請填寫定制說明（如文字、顏色、刻字內容等）',\n    upload_fail: '上傳失敗',\n    upload_http_error_prefix: '上傳失敗 HTTP {status}'\n  },\n  pl: {\n    customize_section_title: 'Personalizacja',\n    customize_photo_upload: 'Przesyłanie zdjęcia',\n    customize_photo_hint_per_group: 'Prześlij do {n} zdjęć na zestaw',\n    customize_photo_slot: 'Zdjęcie ({current}/{total})',\n    customize_opinion_label: 'Uwagi do personalizacji',\n    customize_opinion_placeholder: 'Opisz swoje życzenia (tekst, kolor, grawer itd.)',\n    upload_fail: 'Przesłanie nie powiodło się',\n    upload_http_error_prefix: 'Przesłanie nie powiodło się HTTP {status}'\n  },\n  cs: {\n    customize_section_title: 'Přizpůsobení',\n    customize_photo_upload: 'Nahrát fotku',\n    customize_photo_hint_per_group: 'Nahrajte až {n} fotek na sadu',\n    customize_photo_slot: 'Fotka ({current}/{total})',\n    customize_opinion_label: 'Poznámky k přizpůsobení',\n    customize_opinion_placeholder: 'Vyplňte požadavky (text, barva, gravírování atd.)',\n    upload_fail: 'Nahrání se nezdařilo',\n    upload_http_error_prefix: 'Nahrání se nezdařilo HTTP {status}'\n  },\n  sk: {\n    customize_section_title: 'Prispôsobenie',\n    customize_photo_upload: 'Nahrať fotku',\n    customize_photo_hint_per_group: 'Nahrajte až {n} fotiek na sadu',\n    customize_photo_slot: 'Fotka ({current}/{total})',\n    customize_opinion_label: 'Poznámky k prispôsobeniu',\n    customize_opinion_placeholder: 'Vyplňte požiadavky (text, farba, gravírovanie atď.)',\n    upload_fail: 'Nahrávanie zlyhalo',\n    upload_http_error_prefix: 'Nahrávanie zlyhalo HTTP {status}'\n  },\n  de: {\n    customize_section_title: 'Personalisierung',\n    customize_photo_upload: 'Foto hochladen',\n    customize_photo_hint_per_group: 'Bis zu {n} Fotos pro Set hochladen',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Anmerkungen zur Personalisierung',\n    customize_opinion_placeholder: 'Bitte Wünsche angeben (Text, Farbe, Gravur usw.)',\n    upload_fail: 'Upload fehlgeschlagen',\n    upload_http_error_prefix: 'Upload fehlgeschlagen HTTP {status}'\n  },\n  es: {\n    customize_section_title: 'Personalización',\n    customize_photo_upload: 'Subir foto',\n    customize_photo_hint_per_group: 'Sube hasta {n} fotos por artículo',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Notas de personalización',\n    customize_opinion_placeholder: 'Describe tu solicitud (texto, color, grabado, etc.)',\n    upload_fail: 'Error al subir',\n    upload_http_error_prefix: 'Error al subir HTTP {status}'\n  },\n  it: {\n    customize_section_title: 'Personalizzazione',\n    customize_photo_upload: 'Carica foto',\n    customize_photo_hint_per_group: 'Carica fino a {n} foto per articolo',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Note di personalizzazione',\n    customize_opinion_placeholder: 'Descrivi la richiesta (testo, colore, incisione, ecc.)',\n    upload_fail: 'Caricamento non riuscito',\n    upload_http_error_prefix: 'Caricamento non riuscito HTTP {status}'\n  },\n  ja: {\n    customize_section_title: 'カスタマイズ',\n    customize_photo_upload: '写真アップロード',\n    customize_photo_hint_per_group: '各セットあたり最大{n}枚の写真をアップロード',\n    customize_photo_slot: '写真 ({current}/{total})',\n    customize_opinion_label: 'カスタマイズ内容',\n    customize_opinion_placeholder: 'ご希望をご記入ください（文字・色・刻印など）',\n    upload_fail: 'アップロードに失敗しました',\n    upload_http_error_prefix: 'アップロード失敗 HTTP {status}'\n  },\n  ro: {\n    customize_section_title: 'Personalizare',\n    customize_photo_upload: 'Încărcare fotografie',\n    customize_photo_hint_per_group: 'Încărcați până la {n} fotografii per set',\n    customize_photo_slot: 'Fotografie ({current}/{total})',\n    customize_opinion_label: 'Note de personalizare',\n    customize_opinion_placeholder: 'Descrieți cererea (text, culoare, gravură etc.)',\n    upload_fail: 'Încărcarea a eșuat',\n    upload_http_error_prefix: 'Încărcarea a eșuat HTTP {status}'\n  },\n  hu: {\n    customize_section_title: 'Testreszabás',\n    customize_photo_upload: 'Fénykép feltöltése',\n    customize_photo_hint_per_group: 'Csoportonként legfeljebb {n} fénykép',\n    customize_photo_slot: 'Fénykép ({current}/{total})',\n    customize_opinion_label: 'Testreszabási megjegyzések',\n    customize_opinion_placeholder: 'Írja le a kérést (szöveg, szín, gravírozás stb.)',\n    upload_fail: 'A feltöltés sikertelen',\n    upload_http_error_prefix: 'A feltöltés sikertelen HTTP {status}'\n  },\n  hr: {\n    customize_section_title: 'Prilagodba',\n    customize_photo_upload: 'Prijenos fotografije',\n    customize_photo_hint_per_group: 'Prijenos do {n} fotografija po setu',\n    customize_photo_slot: 'Fotografija ({current}/{total})',\n    customize_opinion_label: 'Napomene za prilagodbu',\n    customize_opinion_placeholder: 'Opišite zahtjev (tekst, boja, gravura itd.)',\n    upload_fail: 'Prijenos nije uspio',\n    upload_http_error_prefix: 'Prijenos nije uspio HTTP {status}'\n  },\n  sl: {\n    customize_section_title: 'Prilagoditev',\n    customize_photo_upload: 'Naloži fotografijo',\n    customize_photo_hint_per_group: 'Naložite do {n} fotografij na komplet',\n    customize_photo_slot: 'Fotografija ({current}/{total})',\n    customize_opinion_label: 'Opombe za prilagoditev',\n    customize_opinion_placeholder: 'Opišite željo (besedilo, barva, gravura itd.)',\n    upload_fail: 'Nalaganje ni uspelo',\n    upload_http_error_prefix: 'Nalaganje ni uspelo HTTP {status}'\n  },\n  lt: {\n    customize_section_title: 'Personalizavimas',\n    customize_photo_upload: 'Įkelti nuotrauką',\n    customize_photo_hint_per_group: 'Įkelkite iki {n} nuotraukų vienam rinkiniui',\n    customize_photo_slot: 'Nuotrauka ({current}/{total})',\n    customize_opinion_label: 'Personalizavimo pastabos',\n    customize_opinion_placeholder: 'Aprašykite užklausą (tekstas, spalva, graviravimas ir kt.)',\n    upload_fail: 'Įkelti nepavyko',\n    upload_http_error_prefix: 'Įkelti nepavyko HTTP {status}'\n  },\n  bg: {\n    customize_section_title: 'Персонализация',\n    customize_photo_upload: 'Качване на снимка',\n    customize_photo_hint_per_group: 'Качете до {n} снимки на комплект',\n    customize_photo_slot: 'Снимка ({current}/{total})',\n    customize_opinion_label: 'Бележки за персонализация',\n    customize_opinion_placeholder: 'Опишете желанието (текст, цвят, гравиране и др.)',\n    upload_fail: 'Качването не бе успешно',\n    upload_http_error_prefix: 'Качването не бе успешно HTTP {status}'\n  },\n  el: {\n    customize_section_title: 'Εξατομίκευση',\n    customize_photo_upload: 'Μεταφόρτωση φωτογραφίας',\n    customize_photo_hint_per_group: 'Μεταφορτώστε έως {n} φωτογραφίες ανά σετ',\n    customize_photo_slot: 'Φωτογραφία ({current}/{total})',\n    customize_opinion_label: 'Σημειώσεις εξατομίκευσης',\n    customize_opinion_placeholder: 'Περιγράψτε το αίτημα (κείμενο, χρώμα, χάραξη κ.λπ.)',\n    upload_fail: 'Η μεταφόρτωση απέτυχε',\n    upload_http_error_prefix: 'Η μεταφόρτωση απέτυχε HTTP {status}'\n  },\n  th: {\n    customize_section_title: 'การปรับแต่ง',\n    customize_photo_upload: 'อัปโหลดรูปภาพ',\n    customize_photo_hint_per_group: 'อัปโหลดได้สูงสุด {n} รูปต่อชุด',\n    customize_photo_slot: 'รูปภาพ ({current}/{total})',\n    customize_opinion_label: 'รายละเอียดการปรับแต่ง',\n    customize_opinion_placeholder: 'โปรดระบุความต้องการ (ข้อความ สี การสลัก ฯลฯ)',\n    upload_fail: 'อัปโหลดไม่สำเร็จ',\n    upload_http_error_prefix: 'อัปโหลดไม่สำเร็จ HTTP {status}'\n  },\n  ar: {\n    customize_section_title: 'التخصيص',\n    customize_photo_upload: 'رفع الصورة',\n    customize_photo_hint_per_group: 'ارفع حتى {n} صور لكل مجموعة',\n    customize_photo_slot: 'صورة ({current}/{total})',\n    customize_opinion_label: 'ملاحظات التخصيص',\n    customize_opinion_placeholder: 'صف طلبك (النص، اللون، النقش، إلخ)',\n    upload_fail: 'فشل الرفع',\n    upload_http_error_prefix: 'فشل الرفع HTTP {status}'\n  }\n};\n\n/** cl（与 main.js templateConfigs 一致）→ 语言包 id */\nvar CL_TO_PACK = {\n  tw_tc: 'zh_tw',\n  hk_tc: 'zh_tw',\n  my_cn: 'zh_cn',\n  sg_cn: 'zh_cn',\n  jp_jp: 'ja',\n  pl_pl: 'pl',\n  cz_cs: 'cs',\n  sk_sk: 'sk',\n  at_de: 'de',\n  es_es: 'es',\n  it_it: 'it',\n  ro_ro: 'ro',\n  hu_hu: 'hu',\n  hr_hr: 'hr',\n  sl_sl: 'sl',\n  lt_lt: 'lt',\n  bg_bg: 'bg',\n  gr_gr: 'el',\n  ua_ar: 'ar',\n  sa_ar: 'ar',\n  th_th: 'th',\n  th_en: 'en',\n  ph_en: 'en',\n  my_en: 'en',\n  sg_en: 'en',\n  hk_en: 'en'\n};\n\n/**\n * 返回当前 cl 下的默认文案对象（不含接口覆盖）\n */\nfunction payCustomizeLangDefaults(cl) {\n  var id = CL_TO_PACK[cl] || 'en';\n  var pack = PACKS[id] || PACKS.en;\n  return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_object_assign___default()({}, pack);\n}\n\nfunction formatPayLang(str, vars) {\n  return interpolate(str, vars);\n}\n\nfunction payCustomizeMessage(cl, key, vars) {\n  var pack = PACKS[CL_TO_PACK[cl] || 'en'] || PACKS.en;\n  var s = pack && pack[key] || PACKS.en[key] || '';\n  return vars ? interpolate(s, vars) : s;\n}\n\n/***/ }),\n\n/***/ \"e3oT\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"m4jk\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise__ = __webpack_require__(\"//Fk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios__ = __webpack_require__(\"mtWM\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_axios___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_axios__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__ = __webpack_require__(\"YtJ0\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__router__ = __webpack_require__(\"YaEn\");\n\n\n\n\n\nvar api = __WEBPACK_IMPORTED_MODULE_1_axios___default.a.create();\n// api.defaults.baseURL = '/api';\napi.defaults.timeout = 25000;\napi.defaults.headers.post['Content-Type'] = 'application/json';\napi.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';\napi.defaults.loading = false;\n// api.defaults.headers.post['sys-site-path'] = sessionStorage.getItem('cl');\n\n// 请求拦截\napi.interceptors.request.use(function (config) {\n  // 在发送请求之前做些什么\n  if (config.loading) {\n    __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__[\"a\" /* default */].commit('SET_LOADING', true);\n  }\n  // 如果有token,添加到请求报文 后台会根据该报文返回status\n  return config;\n}, function (error) {\n  // 对请求错误做些什么\n  alert('网络错误,请稍后再试');\n  __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__[\"a\" /* default */].commit('SET_LOADING', false);\n  return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default.a.reject(error);\n});\n\n// 添加响应拦截器\napi.interceptors.response.use(function (response) {\n  // 对响应数据做点什么\n  __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__[\"a\" /* default */].commit('SET_LOADING', false);\n  return response;\n}, function (error) {\n  // 对响应错误做点什么\n  __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__[\"a\" /* default */].commit('SET_LOADING', false);\n  if (error.response) {\n    if (error.response.status === 401) {\n      // 如果返回401 即没有权限，跳到登录页重新登录\n      __WEBPACK_IMPORTED_MODULE_2__vuex_store_js__[\"a\" /* default */].commit('CHANGE_TOKEN', 0);\n      alert('请重新登录');\n      __WEBPACK_IMPORTED_MODULE_3__router__[\"a\" /* default */].replace({\n        path: 'login',\n        query: { redirect: __WEBPACK_IMPORTED_MODULE_3__router__[\"a\" /* default */].currentRoute.fullPath }\n      });\n    }\n  }\n  return error;\n});\n/* harmony default export */ __webpack_exports__[\"a\"] = (api);\n\n/***/ }),\n\n/***/ \"meMj\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SET_LOADING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return SET_HARDLOADING; });\n/* Detail + Car*/\n\n//全局loading状态\nvar SET_LOADING = 'SET_LOADING';\n//全局loading状态\nvar SET_HARDLOADING = 'SET_HARDLOADING';\n\n/***/ }),\n\n/***/ \"vZz+\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = langInfo;\n/* harmony export (immutable) */ __webpack_exports__[\"l\"] = getZipcode;\n/* harmony export (immutable) */ __webpack_exports__[\"o\"] = getZipcodeChild;\n/* harmony export (immutable) */ __webpack_exports__[\"q\"] = getSupply;\n/* harmony export (immutable) */ __webpack_exports__[\"h\"] = getFaq;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = getPrivacyPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = getReturnPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"i\"] = getShippingPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = getAbout;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = getConfig;\n/* harmony export (immutable) */ __webpack_exports__[\"k\"] = shopDetail;\n/* unused harmony export fetchUploadPresign */\n/* harmony export (immutable) */ __webpack_exports__[\"m\"] = uploadCustomizeImage;\n/* harmony export (immutable) */ __webpack_exports__[\"n\"] = shopCreate;\n/* harmony export (immutable) */ __webpack_exports__[\"j\"] = search;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = promotion;\n/* harmony export (immutable) */ __webpack_exports__[\"s\"] = getHomeItem;\n/* harmony export (immutable) */ __webpack_exports__[\"r\"] = getErListItem;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = mallSubmit;\n/* harmony export (immutable) */ __webpack_exports__[\"p\"] = errorCatch;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise__ = __webpack_require__(\"//Fk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof__ = __webpack_require__(\"pFYg\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends__ = __webpack_require__(\"Dd8w\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys__ = __webpack_require__(\"fZjL\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__http_api__ = __webpack_require__(\"m4jk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__util_config_js__ = __webpack_require__(\"BK/k\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_qs__ = __webpack_require__(\"mw3O\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_qs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_qs__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_payCustomizeI18n_js__ = __webpack_require__(\"dzxK\");\n\n\n\n\n\n// import md5 from 'js-md5';\n\n\n\n\n/**\n * 按规则定义的标识参数\n */\nvar key = \"tl\";\nvar value = \"528327\";\nvar cacheTl = key + '=' + value;\n\nfunction isSupportWebp() {\n  try {\n    return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0 ? 1 : 0;\n  } catch (err) {\n    return 0;\n  }\n}\n\nfunction objKeySort(arys) {\n  var newkey = __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(arys).sort();\n  var newObj = {};\n  for (var i = 0; i < newkey.length; i++) {\n    newObj[newkey[i]] = arys[newkey[i]];\n  }\n  return newObj;\n}\n\nfunction paramsProcess() {\n  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n  var timestamp = new Date().getTime();\n  var tmp = JSON.parse(String(timestamp).substr(0, 10));\n  return __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default()({\n    request_time: tmp\n  }, params);\n}\n\nfunction getQueryVariable(variable) {\n  var query = '';\n  try {\n    query = decodeURIComponent(window.location.search.substring(1)).replace(/&amp;/g, '&');\n  } catch (e) {\n    query = window.location.search.substring(1).replace(/&amp;/g, '&');\n  }\n  var vars = query.split(\"&\");\n  for (var i = 0; i < vars.length; i++) {\n    var pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      return pair[1];\n    }\n  }\n  return '';\n}\n\nfunction getCookie(variable) {\n  var cookie = document.cookie;\n  var vars = cookie.split(\";\").map(function (item) {\n    return item.trim();\n  });\n  for (var i = 0; i < vars.length; i++) {\n    var pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      return pair[1];\n    }\n  }\n  return '';\n}\n\n/**\n * atm模板订单提交格式转换\n */\nfunction atmFormat(params) {\n  // 香港，日本，阿联酋，沙特atm地区为三级，其他为二级\n  var areaDetail = cConf.autoFillProvince ? {\n    province: cConf.autoFillProvince,\n    city: params.state,\n    area: params.city\n  } : {\n    province: params.state,\n    city: params.city,\n    area: params.street\n  };\n\n  return {\n    user_info: __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default()({\n      name: params.uname,\n      phone: params.phone,\n      email: params.email,\n      postal: params.postal,\n      address: params.address\n    }, areaDetail),\n    user_note: params.guest,\n    item_info: {\n      combo_id: params.combo_id,\n      final_price: params.total_price,\n      count: 1,\n      prostr: params.package\n    },\n    utm: {\n      utm_source: getQueryVariable('utm_source'),\n      u: getQueryVariable('u'),\n      source: source\n    },\n    site_info: {\n      // 本地地址处理和测试地址处理\n      domain: location.host === 'localhost' ? 'www.tw51buygobuy.com' : location.host.replace('w3', 'www'),\n      site_name: getQueryVariable('path'),\n      item_hash: getQueryVariable('id'),\n      cl: sessionStorage.cl\n    }\n  };\n}\n\n/**\n * 语言模板信息\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nfunction langInfo() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/language/' + type + '.json?' + cacheTl + '&v=1.4.4');\n}\n\n/**\n * 获取地址和邮编json\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nfunction getZipcode() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  if (sessionStorage.getItem(\"configData\") && JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/zipcode/' + type + '.json?' + cacheTl + '&v=1.4.3');\n}\nfunction getZipcodeChild() {\n  var child = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : sessionStorage.cl;\n\n  if (sessionStorage.getItem(\"configData\") && JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/zipcode/' + type + '/' + child + '.json?' + cacheTl + '&v=1.4.3');\n}\n\n/**\n * 用户需知信息\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nfunction getSupply() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/supply/' + type + '.json?' + cacheTl + '&v=1.3.2');\n}\n\nfunction getFaq() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/faq/' + type + '.json?' + cacheTl + '&v=1.3.2');\n}\n\nfunction getPrivacyPolicy() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/privacyPolicy/' + type + '.json?' + cacheTl + '&v=1.3.2');\n}\n\nfunction getReturnPolicy() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/returnPolicy/' + type + '.json?' + cacheTl + '&v=1.3.2');\n}\n\nfunction getShippingPolicy() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/shippingPolicy/' + type + '.json?' + cacheTl + '&v=1.3.2');\n}\n\nfunction getAbout() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(\"\" + '/static/about/' + type + '.json?' + cacheTl + '&v=25.1.04.01');\n}\n\n/**\n * 公共信息\n * @returns {AxiosPromise}\n * @public 刷新配置缓存接口：/codx/reload_config\n */\nfunction getConfig() {\n  var data = {\n    item: getQueryVariable('id'),\n    path: getQueryVariable('path'),\n    cl: sessionStorage.cl\n  };\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx' + (isAtm ? '/ab' : '') + '/item/config', { params: data, loading: true });\n}\n\n/**\n * 商品详情\n * @returns {AxiosPromise}\n */\nfunction shopDetail(params) {\n  var data = paramsProcess(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default()({ 'is_support_webp': isSupportWebp() }, params));\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx' + (isAtm ? '/ab' : '') + '/item/detail', { params: data, loading: true });\n}\n\n/**\n * 获取预签名上传参数（与接口文档一致：仅 filename、content_type，application/x-www-form-urlencoded）\n * POST /codx/upload/presign\n * 注意：不要附带 request_time 等其它字段，否则部分后端会校验失败。\n */\nfunction fetchUploadPresign(filename, content_type) {\n  var body = __WEBPACK_IMPORTED_MODULE_6_qs___default.a.stringify({\n    filename: filename,\n    content_type: content_type\n  });\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].post(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx' + (isAtm ? '/ab' : '') + '/upload/presign', body, {\n    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n    loading: true\n  });\n}\n\nfunction parsePresignPayload(res) {\n  var d = res && res.data;\n  if (d == null) return null;\n  var inner = d.data !== undefined ? d.data : d;\n  if (typeof inner === 'string') {\n    try {\n      inner = JSON.parse(inner);\n    } catch (e) {\n      return null;\n    }\n  }\n  return inner && (typeof inner === 'undefined' ? 'undefined' : __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof___default()(inner)) === 'object' ? inner : null;\n}\n\n/** 本地 / 局域网访问开发机时，浏览器 Origin 往往不在 S3 CORS 白名单；走同源代理避免 PUT 直连桶失败（Failed to fetch） */\nfunction devOriginLikelyBlockedFromS3(hostname) {\n  if (!hostname) return false;\n  var h = String(hostname).toLowerCase();\n  if (h === 'localhost' || h === '127.0.0.1' || h === '[::1]') return true;\n  if (/^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^169\\.254\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  return false;\n}\n\n/** 本地直连 S3 会 CORS：改为同源 /__s3_put_proxy/<host>/path?query，由 dev-server 转发（PUT / POST multipart 均可） */\nfunction maybeProxyS3UploadUrl(uploadUrl) {\n  if (typeof window === 'undefined') return uploadUrl;\n  var h = window.location.hostname;\n  if (!devOriginLikelyBlockedFromS3(h)) return uploadUrl;\n  try {\n    var u = new URL(uploadUrl);\n    if (!/amazonaws\\.com/i.test(u.hostname)) return uploadUrl;\n    var prefix = '/__s3_put_proxy/' + encodeURIComponent(u.hostname);\n    var path = u.pathname || '/';\n    return window.location.origin + prefix + path + u.search + u.hash;\n  } catch (e) {\n    return uploadUrl;\n  }\n}\n\nfunction maybeProxyS3PutUrl(putUrl) {\n  return maybeProxyS3UploadUrl(putUrl);\n}\n\n/** AWS 预签名 URL 若 X-Amz-SignedHeaders 不含 content-type，则 PUT 不能带 Content-Type */\nfunction presignPutNeedsContentType(uploadUrl) {\n  try {\n    var q = uploadUrl.split('?')[1];\n    if (!q) return false;\n    var raw = new URLSearchParams(q).get('X-Amz-SignedHeaders') || '';\n    return raw.split(';').some(function (s) {\n      return decodeURIComponent(s.trim()).toLowerCase() === 'content-type';\n    });\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction presignIsPostPolicy(p) {\n  var m = String(p.method || '').toUpperCase();\n  return m === 'POST' && p.fields && __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_typeof___default()(p.fields) === 'object' && !Array.isArray(p.fields) && !!p.upload_url;\n}\n\nfunction customizeReadUrlFromPresign(p) {\n  return p.public_url || p.file_url || p.cdn_url || p.url || p.view_url || p.read_url || p.access_url || '';\n}\n\n/** S3 错误 XML 中的 <Message>，如 EntityTooLarge 时的说明文案 */\nfunction extractS3XmlMessage(bodyText) {\n  if (bodyText == null || typeof bodyText !== 'string') return '';\n  var m = bodyText.match(/<Message>([\\s\\S]*?)<\\/Message>/i);\n  if (!m || !m[1]) return '';\n  var raw = m[1].replace(/\\s+/g, ' ').trim();\n  return raw.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&apos;/g, \"'\").replace(/&quot;/g, '\"').replace(/&amp;/g, '&');\n}\n\nfunction fetchUploadRejectMessage(status, bodyText) {\n  var s3Human = extractS3XmlMessage(bodyText);\n  if (s3Human) {\n    return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default.a.reject(new Error(s3Human));\n  }\n  var cl = typeof sessionStorage !== 'undefined' && sessionStorage.cl ? sessionStorage.cl : '';\n  var msg = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__util_payCustomizeI18n_js__[\"a\" /* payCustomizeMessage */])(cl, 'upload_http_error_prefix', { status: status });\n  if (bodyText) msg += ' ' + String(bodyText).replace(/\\s+/g, ' ').slice(0, 160);\n  return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default.a.reject(new Error(msg));\n}\n\n/**\n * 定制图上传：POST /codx/upload/presign → 按返回使用 POSTmultipart（fields + file）或兼容旧版 PUT 预签名\n */\nfunction uploadCustomizeImage(file) {\n  var name = (file.name || '').split(/[/\\\\]/).pop() || 'image.jpg';\n  var filename = name.replace(/[^\\w.\\-()\\u4e00-\\u9fa5]/g, '_').slice(0, 120) || 'custom_' + Date.now() + '.jpg';\n  var content_type = file.type || 'image/jpeg';\n  if (!file.type) {\n    var n = name.toLowerCase();\n    if (n.endsWith('.png')) content_type = 'image/png';else if (n.endsWith('.webp')) content_type = 'image/webp';\n    // else if (n.endsWith('.gif')) content_type = 'image/gif';\n  }\n\n  return fetchUploadPresign(filename, content_type).then(function (presRes) {\n    var p = parsePresignPayload(presRes);\n    // 不支持的图片格式\n    if (!p) return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default.a.reject(new Error('unsupported image format'));\n\n    var readUrl = customizeReadUrlFromPresign(p);\n\n    if (presignIsPostPolicy(p)) {\n      var postTarget = maybeProxyS3UploadUrl(p.upload_url);\n      var form = new FormData();\n      __WEBPACK_IMPORTED_MODULE_3_babel_runtime_core_js_object_keys___default()(p.fields).forEach(function (k) {\n        var v = p.fields[k];\n        if (v == null) return;\n        form.append(k, String(v));\n      });\n      var fieldName = p.file_field || 'file';\n      form.append(fieldName, file, file.name || filename);\n      return fetch(postTarget, { method: 'POST', body: form }).then(function (r) {\n        if (!r.ok) {\n          return r.text().then(function (t) {\n            return fetchUploadRejectMessage(r.status, t);\n          });\n        }\n        var finalUrl = readUrl || (p.upload_url && p.key ? String(p.upload_url).replace(/\\/$/, '') + '/' + String(p.key).replace(/^\\//, '') : '');\n        return { data: { message: 'success', data: finalUrl || p.upload_url } };\n      });\n    }\n\n    var putUrl = p.upload_url || p.presigned_url || p.put_url;\n    if (!putUrl) {\n      if (readUrl) return { data: { message: 'success', data: readUrl } };\n      return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_core_js_promise___default.a.reject(new Error('presign no upload_url'));\n    }\n\n    var headers = {};\n    if (presignPutNeedsContentType(putUrl)) {\n      headers['Content-Type'] = content_type;\n    }\n\n    var putTarget = maybeProxyS3PutUrl(putUrl);\n    return fetch(putTarget, { method: 'PUT', body: file, headers: headers }).then(function (r) {\n      if (!r.ok) {\n        return r.text().then(function (t) {\n          return fetchUploadRejectMessage(r.status, t);\n        });\n      }\n      return { data: { message: 'success', data: readUrl || putUrl } };\n    });\n  });\n}\n\n/**\n * 下订单\n * @returns {AxiosPromise}\n */\nfunction shopCreate(params, eventId, msg) {\n  var newParams = paramsProcess(params);\n  newParams.pit_c_k = getQueryVariable('u');\n  if (msg === 'confirm') {\n    newParams.guest += '（用户确认更新订单）';\n  }\n  if (cConf.thAddress) {\n    newParams.address = newParams.town + newParams.address;\n  }\n  if (newParams.address2) {\n    // newParams.address = newParams.address + \",门牌号:\" + newParams.address2\n    newParams.address = newParams.address + \" \" + newParams.address2;\n  }\n  var data = void 0;\n  if (isAtm) {\n    data = atmFormat(newParams);\n  } else {\n    data = __WEBPACK_IMPORTED_MODULE_6_qs___default.a.stringify(newParams);\n  }\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].post(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx' + (isAtm ? '/ab' : '') + '/order/confirm' + (isAtm ? '' : '2'), data, {\n    headers: {\n      'Content-Type': isAtm ? 'application/json' : 'application/x-www-form-urlencoded',\n      'eventId': eventId,\n      'pixelId': fb_id || '352985638959852'\n    },\n    loading: true\n  });\n}\n\n/**\n * 订单查询\n * @returns {AxiosPromise}\n */\nfunction search(params) {\n  var data = paramsProcess(params);\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx' + (isAtm ? '/ab' : '') + '/order/query', {\n    params: data,\n    loading: true\n    // headers: {\n    //   'sys-site-sn': md5(md5(JSON.stringify(objKeySort(data)) + \"Ino9LhvD52FxPcSbt4WyH3zdkCXN7agE\")),\n    //   'sys-site-path':sessionStorage.cl\n    // }\n  });\n}\n\n/**\n * 活动页面\n * @param params\n * @return {AxiosPromise}\n */\nfunction promotion(params) {\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx/shopify/promotion', {\n    params: params,\n    loading: true\n  });\n}\n\n/**\n * 首页\n * @param params\n * @return {AxiosPromise}\n */\nfunction getHomeItem(params) {\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx/home', {\n    params: params,\n    loading: false\n  });\n}\n\n/**\n * 列表页\n * @param params\n * @return {AxiosPromise}\n */\nfunction getErListItem(params) {\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_5__util_config_js__[\"a\" /* default */].hostUrl + '/codx/er_list', {\n    params: params,\n    loading: false\n  });\n}\n\n/**\n * 埋点\n * @returns\n */\nfunction mallSubmit(params) {\n  return false;\n\n  var murl = \"https://www.example.com/mobile\";\n  var logDomain = getQueryVariable('log_domain');\n\n  if (logDomain === \"1\") {\n    murl = \"/mobile\";\n  } else if (logDomain === \"2\") {\n    return;\n  }\n\n  var data = __WEBPACK_IMPORTED_MODULE_2_babel_runtime_helpers_extends___default()({}, params, {\n    time_stamp: Date.now(),\n    cl: sessionStorage.cl,\n    user_ID: document.cookie ? getCookie('USERKEY') : '',\n    UA: navigator.userAgent,\n    campaign_ID: getQueryVariable('u'),\n    experiment: document.cookie ? getCookie('STRATEGYKEY') : '',\n    session_ID: sessionStorage.sessionId,\n    utm_source: getQueryVariable('utm_source'),\n    utm_medium: getQueryVariable('utm_medium'),\n    ad_id: getQueryVariable('aid'),\n    url: window.location.href\n  });\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get(murl, { params: data });\n}\n\nfunction errorCatch(params) {\n  return __WEBPACK_IMPORTED_MODULE_4__http_api__[\"a\" /* default */].get('static/error', {\n    params: params,\n    loading: false\n  });\n}\n\n/***/ }),\n\n/***/ \"xJD8\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator__ = __webpack_require__(\"Xxa5\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__ = __webpack_require__(\"Dd8w\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify__ = __webpack_require__(\"mvHQ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator__ = __webpack_require__(\"exGp\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__api_permission__ = __webpack_require__(\"vZz+\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__components_common_loading__ = __webpack_require__(\"44dg\");\n\n\n\n\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  components: {\n    \"v-loading\": __WEBPACK_IMPORTED_MODULE_5__components_common_loading__[\"a\" /* default */]\n  },\n  data: function data() {\n    return {\n      cConf: cConf\n    };\n  },\n\n  computed: {\n    fetchLoading: function fetchLoading() {\n      return this.$store.state.detail.fetchLoading;\n    },\n    hardLoading: function hardLoading() {\n      return this.$store.state.detail.hardLoading;\n    }\n  },\n  created: function created() {\n    this.getLang();\n    this.getConfig();\n  },\n\n  methods: {\n    getLang: function getLang() {\n      var _this = this;\n\n      return __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator___default()( /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default.a.mark(function _callee() {\n        var lang;\n        return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default.a.wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                _context.next = 2;\n                return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__api_permission__[\"a\" /* langInfo */])();\n\n              case 2:\n                lang = _context.sent;\n\n                sessionStorage.setItem('lang', __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify___default()(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({ cl: sessionStorage.cl }, lang.data.data)));\n\n              case 4:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee, _this);\n      }))();\n    },\n    getConfig: function getConfig() {\n      var _this2 = this;\n\n      return __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_asyncToGenerator___default()( /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default.a.mark(function _callee2() {\n        var configData;\n        return __WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default.a.wrap(function _callee2$(_context2) {\n          while (1) {\n            switch (_context2.prev = _context2.next) {\n              case 0:\n                _context2.next = 2;\n                return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__api_permission__[\"b\" /* getConfig */])();\n\n              case 2:\n                configData = _context2.sent.data;\n\n                if (configData && configData.message === 'success') {\n                  sessionStorage.setItem('configData', __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_json_stringify___default()(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_extends___default()({ cl: sessionStorage.cl }, configData.data)));\n                  sessionStorage.seo_keywords = configData.data.seo_title;\n                  sessionStorage.seo_title = configData.data.seo_title;\n                  sessionStorage.seo_description = configData.data.seo_title;\n                  sessionStorage.email = configData.data.email;\n                  document.querySelector('meta[name=\"keywords\"]').setAttribute('content', sessionStorage.seo_keywords);\n                  document.querySelector('meta[name=\"description\"]').setAttribute('content', sessionStorage.seo_description);\n                  document.title = sessionStorage.seo_title;\n                  document.querySelector('meta[property=\"og:title\"]').setAttribute('content', sessionStorage.seo_title);\n                  document.querySelector('meta[property=\"og:description\"]').setAttribute('content', sessionStorage.seo_description);\n                  document.querySelector('meta[property=\"og:url\"]').setAttribute('content', window.location.href);\n                  document.querySelector('meta[property=\"og:image\"]').setAttribute('content', sessionStorage.seo_img);\n                }\n\n              case 4:\n              case \"end\":\n                return _context2.stop();\n            }\n          }\n        }, _callee2, _this2);\n      }))();\n    }\n  }\n});\n\n/***/ }),\n\n/***/ \"yW3m\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty__ = __webpack_require__(\"bOdI\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_config__ = __webpack_require__(\"BK/k\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__types__ = __webpack_require__(\"meMj\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_vue__ = __webpack_require__(\"7+uW\");\n\n\nvar _mutations;\n\n\n\n\n\n// 容器\nvar state = {\n  fetchLoading: false, //全局加载状态的Loading\n  hardLoading: false //全局加载状态的Loading\n};\n\n//更改 store 中的状态的唯一方法:提交 mutation\n\nvar mutations = (_mutations = {}, __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty___default()(_mutations, __WEBPACK_IMPORTED_MODULE_2__types__[\"a\" /* SET_LOADING */], function (state, res) {\n  state.fetchLoading = res;\n}), __WEBPACK_IMPORTED_MODULE_0_babel_runtime_helpers_defineProperty___default()(_mutations, __WEBPACK_IMPORTED_MODULE_2__types__[\"b\" /* SET_HARDLOADING */], function (state, res) {\n  state.hardLoading = res;\n}), _mutations);\n\nvar vm = new __WEBPACK_IMPORTED_MODULE_3_vue__[\"default\"]({});\n\n// action提交mutations，不直接更改状态（通过store.dispatch触发）\nvar actions = {\n\n  // 购物车数量增减,true是加,false是减\n  //   setLocalCount({commit},bool = true) {\n  //     let count = Util.getLocal('count') || 0;\n  //     if(bool) {\n  //       Util.setLocal(++count,'count');\n  //     }else {\n  //         Util.setLocal(--count,'count');\n  //     }\n  //     commit(types.CHANGE_COUNT);\n  //   },\n};\n\n// 如同计算属性,处理state的某个状态\nvar getters = {\n\n  // selectedList(state) {\n  //     // choseBool为真的商品 即打钩的商品\n  //    if(state.carList!=='') {\n  //      let arr = state.carList.filter((ele)=>{\n  //        return ele.choseBool == true\n  //      });\n  //      return arr\n  //    }\n  // },\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  state: state,\n  actions: actions,\n  getters: getters,\n  mutations: mutations\n});\n\n/***/ })\n\n},[\"NHnr\"]);\n\n\n// WEBPACK FOOTER //\n// static/js/app.4e035f7575a314141241.js?tl=528327","<template lang=\"html\">\n  <div class=\"wrap\">\n    <div class=\"spinner\">\n      <div class=\"double-bounce1\"></div>\n      <div class=\"double-bounce2\"></div>\n    </div>\n    <p>loading.....</p>\n  </div>\n</template>\n\n<script>\nexport default {\n\n}\n</script>\n\n<style lang=\"less\" scoped>\n\n.wrap {\n  width: 100vw;\n  height: 100vh;\n  background-color: rgba(255,255,255,.8);\n  position: fixed;\n  left: 0;\n  top: 0;\n  z-index: 99999;\n}\n\np {\n  text-align: center;\n  font-size: 24px;\n}\n\n.spinner {\n  width: 50px;\n  height: 50px;\n  position: relative;\n  margin: 40vh auto 40px;\n}\n\n.double-bounce1, .double-bounce2 {\n  width: 100%;\n  height: 100%;\n  border-radius: 50%;\n  background-color: #facd2d;\n  opacity: 0.6;\n  position: absolute;\n  top: 0;\n  left: 0;\n\n  -webkit-animation: bounce 2.0s infinite ease-in-out;\n  animation: bounce 2.0s infinite ease-in-out;\n}\n\n.double-bounce2 {\n  -webkit-animation-delay: -1.0s;\n  animation-delay: -1.0s;\n}\n\n@-webkit-keyframes bounce {\n  0%, 100% { -webkit-transform: scale(0.0) }\n  50% { -webkit-transform: scale(1.0) }\n}\n\n@keyframes bounce {\n  0%, 100% {\n    transform: scale(0.0);\n    -webkit-transform: scale(0.0);\n  } 50% {\n    transform: scale(1.0);\n    -webkit-transform: scale(1.0);\n  }\n}\n\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/components/common/loading.vue?74def5a9","function injectStyle (ssrContext) {\n  require(\"!!../../../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-12a8eafb\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!less-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./loading.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./loading.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-12a8eafb\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":\\\"src\\\",\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./loading.vue\"\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-12a8eafb\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/common/loading.vue\n// module id = 44dg\n// module chunks = 14","export default {\n    // 服务器地址\n    hostUrl: process.env.API_ROOT || window.location.origin,\n    // 图片的cdn地址，仅用于接口上传\n    cdnUrl: 'https://d2wm7jls0cs3y1.cloudfront.net/Public',\n    // 客服地址\n    // msgUrl: 'https://www.facebook.com/messages/t/120360636035534',\n    msgUrl: 'https://www.facebook.com/messages/t/111161744079782',\n\n    // msgUrl: 'https://m.me/113690220462833?ref=' + encodeURIComponent(location.href),\n    // msgUrl: 'https://m.me/103018364497776?ref=' + encodeURIComponent(location.href),\n    // 初始加载图\n    loading: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC'\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/config.js","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    style: ({\n      direction: _vm.cConf.alignRight ? 'rtl' : ''\n    }),\n    attrs: {\n      \"id\": \"app\"\n    }\n  }, [_c('router-view'), _vm._v(\" \"), _c('v-loading', {\n    directives: [{\n      name: \"show\",\n      rawName: \"v-show\",\n      value: (_vm.fetchLoading || _vm.hardLoading),\n      expression: \"fetchLoading || hardLoading\"\n    }]\n  })], 1)\n}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-3e43f94b\",\"hasScoped\":false,\"transformToRequire\":{\"video\":\"src\",\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"}}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = H2m6\n// module chunks = 14","function injectStyle (ssrContext) {\n  require(\"!!../node_modules/extract-text-webpack-plugin/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"minimize\\\":true,\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-3e43f94b\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!less-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-3e43f94b\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":\\\"src\\\",\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = M93x\n// module chunks = 14","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport App from './App'\nimport router from './router'\nimport store from '@/vuex/store.js'   //vuex\nimport api from '@/http/api.js'       //http请求\nimport Mint from 'mint-ui';    //移动端UI\nimport 'mint-ui/lib/style.css'\nimport VueClipboard from 'vue-clipboard2';\nimport config from \"./util/config\";\nimport * as Utils from \"./util/index\";\nimport * as Biz from \"./util/biz\";\n\nVue.use(Mint, {\n  lazyload: {\n    loading: config.loading,\n  },\n});\nVue.use(VueClipboard);\nVue.prototype.$api = api;\nVueClipboard.config.autoSetContainer = true;\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 获取当前站点的语言信息\n\n// 设置cl值\n// 台湾：tw_tc\n// 泰国：th_th\n// 马来(中文)：my_cn\n// 马来(英文)：my_en\n// 新加坡(中文)：sg_cn\n// 新加坡(英文)：sg_en\n// 香港(中文)：hk_tc\n// 香港(英文)：hk_en\n// 日本：jp_jp\n// 阿联酋：ua_ar\n// 沙特阿拉伯：sa_ar\n// 罗马尼亚：ro_ro\n\nconst templateConfigs = {\n  'tw_tc': {\n    country: '台湾',\n    stateSelect: true,\n    citySelectInline: true,\n    serviceLineMe: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '台湾'\n\n  },\n  'th_th': {\n    country: '泰国',\n    stateSelect: true,\n    citySelect: true,\n    thAddress: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '泰国'\n  },\n  'th_en': {\n    country: '泰国',\n    stateSelect: true,\n    citySelect: true,\n    thAddress: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '泰国'\n  },\n  'my_cn': {\n    country: '马来西亚',\n    stateSelect: true,\n    citySelectInline: true,\n    postalInput: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '马来西亚'\n  },\n  'my_en': {\n    country: '马来西亚',\n    stateSelect: true,\n    citySelectInline: true,\n    postalInput: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '马来西亚'\n  },\n  'ph_en': {\n    country: '菲律宾',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    postalInput: true,\n    postalRequired: true\n  },\n  'sg_cn': {\n    country: '新加坡',\n    stateSelect: false,\n    postalInput: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '新加坡',\n    autoFillCity: '新加坡'\n  },\n  'sg_en': {\n    country: '新加坡',\n    stateSelect: false,\n    postalInput: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    autoFillProvince: '新加坡',\n    autoFillCity: 'Singapore'\n  },\n  'hk_tc': {\n    country: '香港',\n    stateSelect: true,\n    citySelectInline: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n  },\n  'hk_en': {\n    country: '香港',\n    stateSelect: true,\n    citySelectInline: true,\n    streetSelect: true,\n    stateRequired: true,\n    cityRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n  },\n  'jp_jp': {\n    country: '日本',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    jpRequired: true,\n    jpSupply: true,\n    emailInput: true\n  },\n  'ua_ar': {\n    country: '阿联酋',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    alignRight: true\n  },\n  'sa_ar': {\n    country: '沙特阿拉伯',\n    stateSelect: true,\n    cityInput: true,\n    streetInput: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    alignRight: true\n  },\n  'ro_ro': {\n    country: '罗马尼亚',\n    stateSelect: true,\n    citySearch: true,\n    stateRequired: true,\n    cityRequired: true,\n    cityPostalSelect: true,\n    postalRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    autoFillProvince: 'România',\n    address2: true\n  },\n  'cz_cs': {\n    country: '捷克',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'sk_sk': {\n    country: '斯洛伐克',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'at_de': {\n    country: '奥地利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'hu_hu': {\n    country: '匈牙利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    cityDataZipcode: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    nameRegexp: true\n  },\n  'pl_pl': {\n    country: '波兰',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'es_es': {\n    country: '西班牙',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'it_it': {\n    country: '意大利',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'gr_gr': {\n    country: '希腊',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true\n  },\n  'hr_hr': {\n    country: '克罗地亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'sl_sl': {\n    country: '斯洛文尼亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'lt_lt': {\n    country: '立陶宛',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  },\n  'bg_bg': {\n    country: '保加利亚',\n    stateSelect: true,\n    citySelect: true,\n    streetSelect: true,\n    postalSelect: true,\n    postalRequired: true,\n    cityDataZipcode: true,\n    stateRequired: true,\n    cityRequired: true,\n    streetRequired: true,\n    phoneRequired: true,\n    nameRequired: true,\n    emailInput: true,\n    emailRequired: true,\n    address2: true\n  }\n}\n\n/**\n * 方法：从连接中获取参数cl(含默认值赋值)\n */\nfunction getQueryVariable(variable, defaultCl) {\n  const ptList = Object.keys(templateConfigs);\n  let query = '';\n  try {\n    query = decodeURIComponent(window.location.search.substring(1)).replace(/&amp;/g, '&');\n  } catch (e) {\n    query = window.location.search.substring(1).replace(/&amp;/g, '&');\n  }\n  const vars = query.split(\"&\");\n  for (var i = 0; i < vars.length; i++) {\n    var pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      if (ptList.indexOf(pair[1]) === -1) {\n        return defaultCl;\n      } else {\n        return pair[1]\n      }\n    }\n  }\n  // window.location.search += ('&' + variable + '=' + defalut);\n  return defaultCl;\n}\n\n// 之前的cl获取方法\n// cl = getQueryVariable('cl', cl || 'pl_pl')\n// 2024年11月10日14:23:56 更改获取逻辑\nlet localDomainPageCl = Biz.getRuntimeCl() || \"pl_pl\";\ncl = getQueryVariable('cl', cl || localDomainPageCl)\n\nsessionStorage.setItem('cl', cl); // 本页面需要的数据\nif (cl && Biz.isPageDetail()) {\n  let urlObject = Utils.getQueryObject();\n  Biz.setRuntimeCl(cl); // 使用localStorage的方式保存，不同域名之间互不影响，并且也能跨标签页获取，同时控制只能是详情页才能写入\n  Biz.setRuntimePath(urlObject.path);\n}\n\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// cConf: 个人信息填写控制\nwindow.cConf = templateConfigs[cl] || {}\n\n\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 用钩子函数beforeEach()对路由进行判断\nrouter.beforeEach((to, from, next) => {\n  setTimeout(() => {\n    window.scrollTo(0, 0);\n  }, 100);\n  if (to.meta.requireAuth) {  // 需要权限,进一步进行判断\n    if (store.state.login.token) {  // 通过vuex state获取当前的token是否存在\n      next();\n    }\n    else {    //如果没有权限,重定向到登录页,进行登录\n      next({\n        path: '/login',\n        // query: {redirect: to.fullPath}  // 将跳转的路由path作为参数，登录成功后跳转到该路由\n      })\n    }\n  }\n  else { //不需要权限 直接跳转\n    next();\n  }\n});\n\n\n// ---------------------------------------------------------------------------------------------------------------------------------------------------\n// 开始启动进入Vue的世界\n/* eslint-disable no-new */\n// devtools 工具\nVue.config.productionTip = process.env.NODE_ENV !== 'production';\nVue.config.devtools = process.env.NODE_ENV !== 'production'\n\nnew Vue({\n  el: '#app',\n  router,\n  store,\n  template: '<App/>',\n  components: { App }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","// biz 业务js\n\nconst BIZ_CONSTANT = {\n  runtime: {\n    domainPageSource: \"source\",\n    domainPageCl: \"RuntimeDomainPageCl\",\n    domainPagePath: \"RuntimeDomainPagePath\",\n  },\n};\n\n/**\n * 是否是详情页\n * @param {string} url\n * @returns {boolean}\n */\nexport function isPageDetail(url) {\n  let urlIns = url == null ? window.location : new URL(url);\n  if (urlIns.pathname === \"/detail\") {\n    return true;\n  }\n  // 不使用内联的方式，方便后续处理其他逻辑\n  return false;\n}\n\n/**\n * 是否是首页\n * @param {string} url\n * @returns {boolean}\n */\nexport function isPageHome(url) {\n  let urlIns = url == null ? window.location : new URL(url);\n  if (urlIns.pathname === \"/\" || urlIns.pathname === \"\") {\n    return true;\n  }\n  // 不使用内联的方式，方便后续处理其他逻辑\n  return false;\n}\n\n// ****************************************************************************************************************************************************************\n// 页面逻辑处理\nexport function setRuntimeCl(clValue) {\n  return localStorage.setItem(BIZ_CONSTANT.runtime.domainPageCl, clValue);\n}\n\nexport function getRuntimeCl() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPageCl);\n}\n\nexport function setRuntimePath(pathValue) {\n  return localStorage.setItem(BIZ_CONSTANT.runtime.domainPagePath, pathValue);\n}\n\nexport function getRuntimePath() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPagePath);\n}\n\nexport function getRuntimeSource() {\n  return localStorage.getItem(BIZ_CONSTANT.runtime.domainPageSource);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/biz.js","import Vue from 'vue'\nimport Router from 'vue-router'\nimport { mallSubmit } from \"../api/permission\";\n\nVue.use(Router);\n//按需加载,当渲染其他页面时才加载其组件,并缓存,减少首屏加载时间\nconst Index = resolve => require(['@/views/Index.vue'], resolve);\nconst List = resolve => require(['@/views/List.vue'], resolve);\nconst Detail = resolve => require(['@/views/Detail.vue'], resolve);\nconst Pay = resolve => require(['@/views/Pay.vue'], resolve);\nconst Success = resolve => require(['@/views/Success.vue'], resolve);\nconst Search = resolve => require(['@/views/Search.vue'], resolve);\nconst ShippingPolicy = resolve => require(['@/views/Policy/ShippingPolicy.vue'], resolve);\nconst FAQ = resolve => require(['@/views/Policy/FAQ.vue'], resolve);\nconst ReturnPolicy = resolve => require(['@/views/Policy/ReturnPolicy.vue'], resolve);\nconst PrivacyPolicy = resolve => require(['@/views/Policy/PrivacyPolicy.vue'], resolve);\nconst Error = resolve => require(['@/views/Error.vue'], resolve);\nconst Promotion = resolve => require(['@/views/Promotion.vue'], resolve);\nconst About = resolve => require(['@/views/Policy/About.vue'], resolve);\nconst myRouter = new Router({\n  mode: 'history',\n  routes: [\n    {\n      path: '/',\n      name: '首页',\n      component: Index,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/list',\n      name: '列表页',\n      component: List,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/detail',\n      name: '详情页',\n      component: Detail,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/pay',\n      name: '支付页',\n      component: Pay,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/success',\n      name: '成功页',\n      component: Success,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/search',\n      name: '查询页',\n      component: Search,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/shipping',\n      name: '发货政策',\n      component: ShippingPolicy,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/faq',\n      name: '常见问题',\n      component: FAQ,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/return',\n      name: '退货政策',\n      component: ReturnPolicy,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/privacy',\n      name: '隐私政策',\n      component: PrivacyPolicy,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/Promotion/:id',\n      name: '活动页',\n      component: Promotion,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/collections-big-sale',\n      name: '固定活动页',\n      component: Promotion,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/about',\n      name: '关于我们',\n      component: About,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n    {\n      path: '/error',\n      name: 'error',\n      component: Error,\n      meta: {\n        title: sessionStorage.seo_title,\n        content: {\n          keywords: sessionStorage.seo_keywords,\n          description: sessionStorage.seo_description,\n        }\n      }\n    },\n  ]\n});\n\nmyRouter.beforeEach((to, from, next) => {\n  if (to.matched.length === 0) {\n    next({\n      path: '/error',\n      query: to.query\n    })\n    // 储存错误的路由地址，方便以后使用\n    sessionStorage.errorUri = to.fullPath;\n    return;\n  }\n  /* 路由发生变化修改页面meta */\n  if (to.meta.content || sessionStorage.seo_keywords) {\n    let head = document.getElementsByTagName('head');\n    let meta = document.createElement('meta');\n    document.querySelector('meta[name=\"keywords\"]').setAttribute('content', to.meta.content.keywords || sessionStorage.seo_keywords);\n    document.querySelector('meta[name=\"description\"]').setAttribute('content', to.meta.content.description || sessionStorage.seo_description)\n  }\n  /* 路由发生变化修改页面title */\n  if (to.meta.title || sessionStorage.seo_title) {\n    document.title = to.meta.title || sessionStorage.seo_title;\n  }\n  /* 路由切换时，如果没有就添加，有就跳过执行，添加固定参数 */\n  let query = to.query;\n  let queryCtrl = false;\n  if (from.query.atm && !to.query.atm) {\n    query.atm = from.query.atm;\n    queryCtrl = true;\n  }\n  if (from.query.cl && !to.query.cl) {\n    query.cl = from.query.cl;\n    queryCtrl = true;\n  }\n  if (from.query.u && !to.query.u) {\n    query.u = from.query.u;\n    queryCtrl = true;\n  }\n  if (from.query.utm_source && !to.query.utm_source) {\n    query.utm_source = from.query.utm_source;\n    queryCtrl = true;\n  }\n  if (from.query.utm_medium && !to.query.utm_medium) {\n    query.utm_medium = from.query.utm_medium;\n    queryCtrl = true;\n  }\n  if (from.query.aid && !to.query.aid) {\n    query.aid = from.query.aid;\n    queryCtrl = true;\n  }\n  if (from.query.source && !to.query.source) {\n    query.source = from.query.source;\n    queryCtrl = true;\n  }\n  if (from.query.home && !to.query.home) {\n    query.home = from.query.home;\n    queryCtrl = true;\n  }\n  if (queryCtrl) {\n    next({\n      path: to.path,\n      query: query\n    });\n  } else {\n    next();\n    let event_label = '';\n    if (to.path === '/detail') {\n      event_label = 'home';\n    } else if (to.path === '/pay') {\n      event_label = 'pay';\n    } else if (to.path === '/search') {\n      event_label = 'query';\n    } else if (to.path === '/success') {\n      event_label = 'success';\n    }\n    gtag('event', 'PageView', {\n      event_category: window.location.href,\n      event_label,\n      value: startTime\n    });\n    mallSubmit({\n      event_name: 'PageView',\n      event_label,\n    });\n  }\n});\n\nmyRouter.onError((err) => {\n  const pattern = /Loading chunk (\\d)+ failed/g;\n  const isChunkLoadFailed = err.message.match(pattern);\n  if (isChunkLoadFailed) {\n    let chunkBool = sessionStorage.getItem('chunkError');\n    let nowTimes = Date.now();\n    if (chunkBool === null || chunkBool && nowTimes - parseInt(chunkBool) > 60000) { //路由跳转报错,href手动跳转\n      sessionStorage.setItem('chunkError', 'reload');\n      const targetPath = myRouter.history.pending.fullPath;\n      window.location.href = window.location.origin + targetPath;\n    } else if (chunkBool === 'reload') { //手动跳转后依然报错,强制刷新\n      sessionStorage.setItem('chunkError', Date.now());\n      window.location.reload(true);\n    }\n  }\n});\nexport default myRouter\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","//store.js\nimport Vue from 'vue'\nimport Vuex from 'vuex'\n\n// 头部分类\nimport detail from './modules/detail';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n  modules: {\n    detail,\n  }\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/store.js","/* eslint-disable eqeqeq */\n/**\n * Parse the time to string\n * @param {(Object|string|number)} time\n * @param {string} cFormat\n * @returns {string}\n */\nexport function parseTime(time, cFormat) {\n  if (arguments.length === 0) {\n    return null;\n  }\n  const format = cFormat || \"{y}-{m}-{d} {h}:{i}:{s}\";\n  let date;\n  if (typeof time === \"object\") {\n    date = time;\n  } else {\n    if (typeof time === \"string\" && /^[0-9]+$/.test(time)) {\n      time = parseInt(time);\n    }\n    if (typeof time === \"number\" && time.toString().length === 10) {\n      time = time * 1000;\n    }\n    date = new Date(time);\n  }\n  const formatObj = {\n    y: date.getFullYear(),\n    m: date.getMonth() + 1,\n    d: date.getDate(),\n    h: date.getHours(),\n    i: date.getMinutes(),\n    s: date.getSeconds(),\n    a: date.getDay(),\n  };\n  // eslint-disable-next-line camelcase\n  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\n    let value = formatObj[key];\n    // Note: getDay() returns 0 on Sunday\n    // eslint-disable-next-line standard/computed-property-even-spacing\n    if (key === \"a\") {\n      return [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"][value];\n    }\n    if (result.length > 0 && value < 10) {\n      value = \"0\" + value;\n    }\n    return value || 0;\n  });\n  // eslint-disable-next-line camelcase\n  return time_str;\n}\n\n/**\n * @param {number} time\n * @param {string} option\n * @returns {string}\n */\nexport function formatTime(time, option) {\n  if ((\"\" + time).length === 10) {\n    time = parseInt(time) * 1000;\n  } else {\n    time = +time;\n  }\n  const d = new Date(time);\n  const now = Date.now();\n\n  const diff = (now - d) / 1000;\n\n  if (diff < 30) {\n    return \"刚刚\";\n  } else if (diff < 3600) {\n    // less 1 hour\n    return Math.ceil(diff / 60) + \"分钟前\";\n  } else if (diff < 3600 * 24) {\n    return Math.ceil(diff / 3600) + \"小时前\";\n  } else if (diff < 3600 * 24 * 2) {\n    return \"1天前\";\n  }\n  if (option) {\n    return parseTime(time, option);\n  } else {\n    return (\n      d.getMonth() +\n      1 +\n      \"月\" +\n      d.getDate() +\n      \"日\" +\n      d.getHours() +\n      \"时\" +\n      d.getMinutes() +\n      \"分\"\n    );\n  }\n}\n\n/**\n * @param {string} url\n * @returns {Object}\n */\nexport function getQueryObject(url) {\n  url = url == null ? window.location.href : url;\n  const search = url.substring(url.lastIndexOf(\"?\") + 1);\n  const obj = {};\n  const reg = /([^?&=]+)=([^?&=]*)/g;\n  search.replace(reg, (rs, $1, $2) => {\n    const name = decodeURIComponent($1);\n    let val = decodeURIComponent($2);\n    val = String(val);\n    obj[name] = val;\n    return rs;\n  });\n  return obj;\n}\n\n/**\n * @param {string} input value\n * @returns {number} output value\n */\nexport function byteLength(str) {\n  // returns the byte length of an utf8 string\n  let s = str.length;\n  for (var i = str.length - 1; i >= 0; i--) {\n    const code = str.charCodeAt(i);\n    if (code > 0x7f && code <= 0x7ff) s++;\n    else if (code > 0x7ff && code <= 0xffff) s += 2;\n    if (code >= 0xdc00 && code <= 0xdfff) i--;\n  }\n  return s;\n}\n\n/**\n * @param {Array} actual\n * @returns {Array}\n */\nexport function cleanArray(actual) {\n  const newArray = [];\n  for (let i = 0; i < actual.length; i++) {\n    if (actual[i]) {\n      newArray.push(actual[i]);\n    }\n  }\n  return newArray;\n}\n\n/**\n * @param {Object} json\n * @returns {Array}\n */\nexport function param(json) {\n  if (!json) return \"\";\n  return cleanArray(\n    Object.keys(json).map((key) => {\n      if (json[key] === undefined) return \"\";\n      return encodeURIComponent(key) + \"=\" + encodeURIComponent(json[key]);\n    })\n  ).join(\"&\");\n}\n\n/**\n * @param {string} url\n * @returns {Object}\n */\nexport function param2Obj(url) {\n  const search = url.split(\"?\")[1];\n  if (!search) {\n    return {};\n  }\n  return JSON.parse(\n    '{\"' +\n    decodeURIComponent(search)\n      .replace(/\"/g, '\\\\\"')\n      .replace(/&/g, '\",\"')\n      .replace(/=/g, '\":\"')\n      .replace(/\\+/g, \" \") +\n    '\"}'\n  );\n}\n\n/**\n * @param {string} val\n * @returns {string}\n */\nexport function html2Text(val) {\n  const div = document.createElement(\"div\");\n  div.innerHTML = val;\n  return div.textContent || div.innerText;\n}\n\n/**\n * Merges two objects, giving the last one precedence\n * @param {Object} target\n * @param {(Object|Array)} source\n * @returns {Object}\n */\nexport function objectMerge(target, source) {\n  if (typeof target !== \"object\") {\n    target = {};\n  }\n  if (Array.isArray(source)) {\n    return source.slice();\n  }\n  Object.keys(source).forEach((property) => {\n    const sourceProperty = source[property];\n    if (typeof sourceProperty === \"object\") {\n      target[property] = objectMerge(target[property], sourceProperty);\n    } else {\n      target[property] = sourceProperty;\n    }\n  });\n  return target;\n}\n\n/**\n * @param {HTMLElement} element\n * @param {string} className\n */\nexport function toggleClass(element, className) {\n  if (!element || !className) {\n    return;\n  }\n  let classString = element.className;\n  const nameIndex = classString.indexOf(className);\n  if (nameIndex === -1) {\n    classString += \"\" + className;\n  } else {\n    classString =\n      classString.substr(0, nameIndex) +\n      classString.substr(nameIndex + className.length);\n  }\n  element.className = classString;\n}\n\n/**\n * @param {string} type\n * @returns {Date}\n */\nexport function getTime(type) {\n  if (type === \"start\") {\n    return new Date().getTime() - 3600 * 1000 * 24 * 90;\n  } else {\n    return new Date(new Date().toDateString());\n  }\n}\n\n/**\n * This is just a simple version of deep copy\n * Has a lot of edge cases bug\n * If you want to use a perfect deep copy, use lodash's _.cloneDeep\n * @param {Object} source\n * @returns {Object}\n */\nexport function deepClone(source) {\n  if (!source && typeof source !== \"object\") {\n    throw new Error(\"error arguments\", \"deepClone\");\n  }\n  const targetObj = source.constructor === Array ? [] : {};\n  Object.keys(source).forEach((keys) => {\n    if (source[keys] && typeof source[keys] === \"object\") {\n      targetObj[keys] = deepClone(source[keys]);\n    } else {\n      targetObj[keys] = source[keys];\n    }\n  });\n  return targetObj;\n}\n\n/**\n * @param {Array} arr\n * @returns {Array}\n */\nexport function uniqueArr(arr) {\n  return Array.from(new Set(arr));\n}\n\n/**\n * @returns {string}\n */\nexport function createUniqueString() {\n  const timestamp = +new Date() + \"\";\n  const randomNum = parseInt((1 + Math.random()) * 65536) + \"\";\n  return (+(randomNum + timestamp)).toString(32);\n}\n\n/**\n * Check if an element has a class\n * @param {HTMLElement} elm\n * @param {string} cls\n * @returns {boolean}\n */\nexport function hasClass(ele, cls) {\n  return !!ele.className.match(new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\"));\n}\n\n/**\n * Add class to element\n * @param {HTMLElement} elm\n * @param {string} cls\n */\nexport function addClass(ele, cls) {\n  if (!hasClass(ele, cls)) ele.className += \" \" + cls;\n}\n\n/**\n * Remove class from element\n * @param {HTMLElement} elm\n * @param {string} cls\n */\nexport function removeClass(ele, cls) {\n  if (hasClass(ele, cls)) {\n    const reg = new RegExp(\"(\\\\s|^)\" + cls + \"(\\\\s|$)\");\n    ele.className = ele.className.replace(reg, \" \");\n  }\n}\n\n/** 新增全局处理方法 */\n\n// 表单重置\nexport function resetForm(refName) {\n  if (this.$refs[refName]) {\n    this.$refs[refName].resetFields();\n  }\n}\n\n// 添加日期范围\nexport function addDateRange(params, dateRange, propName) {\n  let search = params;\n  search.params =\n    typeof search.params === \"object\" &&\n      search.params !== null &&\n      !Array.isArray(search.params)\n      ? search.params\n      : {};\n  dateRange = Array.isArray(dateRange) ? dateRange : [];\n  if (typeof propName === \"undefined\") {\n    search.params[\"beginTime\"] = dateRange[0];\n    search.params[\"endTime\"] = dateRange[1];\n  } else {\n    search.params[\"begin\" + propName] = dateRange[0];\n    search.params[\"end\" + propName] = dateRange[1];\n  }\n  return search;\n}\n\n// 回显数据字典\nexport function selectDictLabel(datas, value) {\n  if (value === undefined) {\n    return \"\";\n  }\n  var actions = [];\n  Object.keys(datas).some((key) => {\n    if (datas[key].value == \"\" + value) {\n      actions.push(datas[key].label);\n      return true;\n    }\n  });\n  if (actions.length === 0) {\n    actions.push(value);\n  }\n  return actions.join(\"\");\n}\n\n// 回显数据字典（字符串、数组）\nexport function selectDictLabels(datas, value, separator) {\n  if (value === undefined || value.length === 0) {\n    return \"\";\n  }\n  if (Array.isArray(value)) {\n    value = value.join(\",\");\n  }\n  var actions = [];\n  var currentSeparator = undefined === separator ? \",\" : separator;\n  var temp = value.split(currentSeparator);\n  Object.keys(value.split(currentSeparator)).some((val) => {\n    var match = false;\n    Object.keys(datas).some((key) => {\n      if (datas[key].value == \"\" + temp[val]) {\n        actions.push(datas[key].label + currentSeparator);\n        match = true;\n      }\n    });\n    if (!match) {\n      actions.push(temp[val] + currentSeparator);\n    }\n  });\n  return actions.join(\"\").substring(0, actions.join(\"\").length - 1);\n}\n\n// 字符串格式化(%s )\nexport function sprintf(str) {\n  var args = arguments;\n  var flag = true;\n  var i = 1;\n  str = str.replace(/%s/g, function () {\n    var arg = args[i++];\n    if (typeof arg === \"undefined\") {\n      flag = false;\n      return \"\";\n    }\n    return arg;\n  });\n  return flag ? str : \"\";\n}\n\n// 转换字符串，undefined,null等转化为\"\"\nexport function parseStrEmpty(str) {\n  if (!str || str == \"undefined\" || str == \"null\") {\n    return \"\";\n  }\n  return str;\n}\n\n// 数据合并\nexport function mergeRecursive(source, target) {\n  for (var p in target) {\n    try {\n      if (target[p].constructor == Object) {\n        source[p] = mergeRecursive(source[p], target[p]);\n      } else {\n        source[p] = target[p];\n      }\n    } catch (e) {\n      source[p] = target[p];\n    }\n  }\n  return source;\n}\n\n/**\n * 构造树型结构数据\n * @param {*} data 数据源\n * @param {*} id id字段 默认 'id'\n * @param {*} parentId 父节点字段 默认 'parentId'\n * @param {*} children 孩子节点字段 默认 'children'\n */\nexport function handleTree(data, id, parentId, children) {\n  let config = {\n    id: id || \"id\",\n    parentId: parentId || \"parentId\",\n    childrenList: children || \"children\",\n  };\n\n  var childrenListMap = {};\n  var nodeIds = {};\n  var tree = [];\n\n  for (let d of data) {\n    let parentId = d[config.parentId];\n    if (childrenListMap[parentId] == null) {\n      childrenListMap[parentId] = [];\n    }\n    nodeIds[d[config.id]] = d;\n    childrenListMap[parentId].push(d);\n  }\n\n  for (let d of data) {\n    let parentId = d[config.parentId];\n    if (nodeIds[parentId] == null) {\n      tree.push(d);\n    }\n  }\n\n  for (let t of tree) {\n    adaptToChildrenList(t);\n  }\n\n  function adaptToChildrenList(o) {\n    if (childrenListMap[o[config.id]] !== null) {\n      o[config.childrenList] = childrenListMap[o[config.id]];\n    }\n    if (o[config.childrenList]) {\n      for (let c of o[config.childrenList]) {\n        adaptToChildrenList(c);\n      }\n    }\n  }\n  return tree;\n}\n\n/**\n * 参数处理\n * @param {*} params  参数\n */\nexport function tansParams(params) {\n  let result = \"\";\n  for (const propName of Object.keys(params)) {\n    const value = params[propName];\n    var part = encodeURIComponent(propName) + \"=\";\n    if (value !== null && value !== \"\" && typeof value !== \"undefined\") {\n      if (typeof value === \"object\") {\n        for (const key of Object.keys(value)) {\n          if (\n            value[key] !== null &&\n            value[key] !== \"\" &&\n            typeof value[key] !== \"undefined\"\n          ) {\n            let params = propName + \"[\" + key + \"]\";\n            var subPart = encodeURIComponent(params) + \"=\";\n            result += subPart + encodeURIComponent(value[key]) + \"&\";\n          }\n        }\n      } else {\n        result += part + encodeURIComponent(value) + \"&\";\n      }\n    }\n  }\n  return result;\n}\n\n// 验证是否为blob格式\nexport function blobValidate(data) {\n  return data.type !== \"application/json\";\n}\n\n/**\n * 防抖函数\n * @param {Function} func\n * @param {number} wait\n * @param {boolean} immediate\n * @return {*}\n */\nexport function debounce(func, wait, immediate) {\n  let timeout, args, context, timestamp, result;\n\n  const later = function () {\n    // 据上一次触发时间间隔\n    const last = +new Date() - timestamp;\n\n    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait\n    if (last < wait && last > 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      // 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用\n      if (!immediate) {\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      }\n    }\n  };\n\n  return function (...args) {\n    context = this;\n    timestamp = +new Date();\n    const callNow = immediate && !timeout;\n    // 如果延时不存在，重新设定延时\n    if (!timeout) timeout = setTimeout(later, wait);\n    if (callNow) {\n      result = func.apply(context, args);\n      context = args = null;\n    }\n\n    return result;\n  };\n}\n\nexport function formatSeconds(theTime) {\n  let theTime1 = 0;\n  let theTime2 = 0;\n  if (theTime > 60) {\n    theTime1 = parseInt(theTime / 60);\n    theTime = parseInt(theTime % 60);\n    if (theTime1 > 60) {\n      theTime2 = parseInt(theTime1 / 60);\n      theTime1 = parseInt(theTime1 % 60);\n    }\n  }\n  let result = \"\" + parseInt(theTime) + \"秒\";\n  if (theTime1 > 0) {\n    result = \"\" + parseInt(theTime1) + \"分\" + result;\n  }\n  if (theTime2 > 0) {\n    result = \"\" + parseInt(theTime2) + \"小时\" + result;\n  }\n  return result;\n}\n\n// 加减乘除\nexport function NumberMul(arg1, arg2) {\n  var m = 0;\n  var s1 = arg1.toString();\n  var s2 = arg2.toString();\n  try {\n    m += s1.split(\".\")[1].length;\n  } catch (e) { }\n  try {\n    m += s2.split(\".\")[1].length;\n  } catch (e) { }\n\n  return Number(s1.replace(\".\", \"\")) * Number(s2.replace(\".\", \"\")) / Math.pow(10, m);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/index.js","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _vm._m(0)\n}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n  return _c('div', {\n    staticClass: \"wrap\"\n  }, [_c('div', {\n    staticClass: \"spinner\"\n  }, [_c('div', {\n    staticClass: \"double-bounce1\"\n  }), _vm._v(\" \"), _c('div', {\n    staticClass: \"double-bounce2\"\n  })]), _vm._v(\" \"), _c('p', [_vm._v(\"loading.....\")])])\n}]\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue-loader/lib/template-compiler?{\"id\":\"data-v-12a8eafb\",\"hasScoped\":true,\"transformToRequire\":{\"video\":\"src\",\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"}}!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/common/loading.vue\n// module id = au6+\n// module chunks = 14","/**\n * 下单页「定制」区块文案：按站点 cl 映射语言包，与接口 lang 合并后写入 this.lang。\n * 占位符：{n} {current} {total} {status}\n */\n\nfunction interpolate(str, vars) {\n  if (!str || !vars) return str || '';\n  return String(str).replace(/\\{(\\w+)\\}/g, function (_, k) {\n    return vars[k] != null ? String(vars[k]) : '{' + k + '}';\n  });\n}\n\n/** 各语言完整键集合（键名需与 Pay.vue / permission.js 使用一致） */\nvar PACKS = {\n  en: {\n    customize_section_title: 'Customization',\n    customize_photo_upload: 'Photo upload',\n    customize_photo_hint_per_group: 'Upload up to {n} photos per item',\n    customize_photo_slot: 'Photo ({current}/{total})',\n    customize_opinion_label: 'Customization notes',\n    customize_opinion_placeholder: 'Describe your request (text, color, engraving, etc.)',\n    upload_fail: 'Upload failed',\n    upload_http_error_prefix: 'Upload failed HTTP {status}'\n  },\n  zh_cn: {\n    customize_section_title: '定制',\n    customize_photo_upload: '照片上传',\n    customize_photo_hint_per_group: '每组需上传 {n} 张照片',\n    customize_photo_slot: '照片 ({current}/{total})',\n    customize_opinion_label: '定制商品意见',\n    customize_opinion_placeholder: '请填写定制说明（如文字、颜色、刻字内容等）',\n    upload_fail: '上传失败',\n    upload_http_error_prefix: '上传失败 HTTP {status}'\n  },\n  zh_tw: {\n    customize_section_title: '定制',\n    customize_photo_upload: '照片上傳',\n    customize_photo_hint_per_group: '每組需上傳 {n} 張照片',\n    customize_photo_slot: '照片 ({current}/{total})',\n    customize_opinion_label: '定制商品意見',\n    customize_opinion_placeholder: '請填寫定制說明（如文字、顏色、刻字內容等）',\n    upload_fail: '上傳失敗',\n    upload_http_error_prefix: '上傳失敗 HTTP {status}'\n  },\n  pl: {\n    customize_section_title: 'Personalizacja',\n    customize_photo_upload: 'Przesyłanie zdjęcia',\n    customize_photo_hint_per_group: 'Prześlij do {n} zdjęć na zestaw',\n    customize_photo_slot: 'Zdjęcie ({current}/{total})',\n    customize_opinion_label: 'Uwagi do personalizacji',\n    customize_opinion_placeholder: 'Opisz swoje życzenia (tekst, kolor, grawer itd.)',\n    upload_fail: 'Przesłanie nie powiodło się',\n    upload_http_error_prefix: 'Przesłanie nie powiodło się HTTP {status}'\n  },\n  cs: {\n    customize_section_title: 'Přizpůsobení',\n    customize_photo_upload: 'Nahrát fotku',\n    customize_photo_hint_per_group: 'Nahrajte až {n} fotek na sadu',\n    customize_photo_slot: 'Fotka ({current}/{total})',\n    customize_opinion_label: 'Poznámky k přizpůsobení',\n    customize_opinion_placeholder: 'Vyplňte požadavky (text, barva, gravírování atd.)',\n    upload_fail: 'Nahrání se nezdařilo',\n    upload_http_error_prefix: 'Nahrání se nezdařilo HTTP {status}'\n  },\n  sk: {\n    customize_section_title: 'Prispôsobenie',\n    customize_photo_upload: 'Nahrať fotku',\n    customize_photo_hint_per_group: 'Nahrajte až {n} fotiek na sadu',\n    customize_photo_slot: 'Fotka ({current}/{total})',\n    customize_opinion_label: 'Poznámky k prispôsobeniu',\n    customize_opinion_placeholder: 'Vyplňte požiadavky (text, farba, gravírovanie atď.)',\n    upload_fail: 'Nahrávanie zlyhalo',\n    upload_http_error_prefix: 'Nahrávanie zlyhalo HTTP {status}'\n  },\n  de: {\n    customize_section_title: 'Personalisierung',\n    customize_photo_upload: 'Foto hochladen',\n    customize_photo_hint_per_group: 'Bis zu {n} Fotos pro Set hochladen',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Anmerkungen zur Personalisierung',\n    customize_opinion_placeholder: 'Bitte Wünsche angeben (Text, Farbe, Gravur usw.)',\n    upload_fail: 'Upload fehlgeschlagen',\n    upload_http_error_prefix: 'Upload fehlgeschlagen HTTP {status}'\n  },\n  es: {\n    customize_section_title: 'Personalización',\n    customize_photo_upload: 'Subir foto',\n    customize_photo_hint_per_group: 'Sube hasta {n} fotos por artículo',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Notas de personalización',\n    customize_opinion_placeholder: 'Describe tu solicitud (texto, color, grabado, etc.)',\n    upload_fail: 'Error al subir',\n    upload_http_error_prefix: 'Error al subir HTTP {status}'\n  },\n  it: {\n    customize_section_title: 'Personalizzazione',\n    customize_photo_upload: 'Carica foto',\n    customize_photo_hint_per_group: 'Carica fino a {n} foto per articolo',\n    customize_photo_slot: 'Foto ({current}/{total})',\n    customize_opinion_label: 'Note di personalizzazione',\n    customize_opinion_placeholder: 'Descrivi la richiesta (testo, colore, incisione, ecc.)',\n    upload_fail: 'Caricamento non riuscito',\n    upload_http_error_prefix: 'Caricamento non riuscito HTTP {status}'\n  },\n  ja: {\n    customize_section_title: 'カスタマイズ',\n    customize_photo_upload: '写真アップロード',\n    customize_photo_hint_per_group: '各セットあたり最大{n}枚の写真をアップロード',\n    customize_photo_slot: '写真 ({current}/{total})',\n    customize_opinion_label: 'カスタマイズ内容',\n    customize_opinion_placeholder: 'ご希望をご記入ください（文字・色・刻印など）',\n    upload_fail: 'アップロードに失敗しました',\n    upload_http_error_prefix: 'アップロード失敗 HTTP {status}'\n  },\n  ro: {\n    customize_section_title: 'Personalizare',\n    customize_photo_upload: 'Încărcare fotografie',\n    customize_photo_hint_per_group: 'Încărcați până la {n} fotografii per set',\n    customize_photo_slot: 'Fotografie ({current}/{total})',\n    customize_opinion_label: 'Note de personalizare',\n    customize_opinion_placeholder: 'Descrieți cererea (text, culoare, gravură etc.)',\n    upload_fail: 'Încărcarea a eșuat',\n    upload_http_error_prefix: 'Încărcarea a eșuat HTTP {status}'\n  },\n  hu: {\n    customize_section_title: 'Testreszabás',\n    customize_photo_upload: 'Fénykép feltöltése',\n    customize_photo_hint_per_group: 'Csoportonként legfeljebb {n} fénykép',\n    customize_photo_slot: 'Fénykép ({current}/{total})',\n    customize_opinion_label: 'Testreszabási megjegyzések',\n    customize_opinion_placeholder: 'Írja le a kérést (szöveg, szín, gravírozás stb.)',\n    upload_fail: 'A feltöltés sikertelen',\n    upload_http_error_prefix: 'A feltöltés sikertelen HTTP {status}'\n  },\n  hr: {\n    customize_section_title: 'Prilagodba',\n    customize_photo_upload: 'Prijenos fotografije',\n    customize_photo_hint_per_group: 'Prijenos do {n} fotografija po setu',\n    customize_photo_slot: 'Fotografija ({current}/{total})',\n    customize_opinion_label: 'Napomene za prilagodbu',\n    customize_opinion_placeholder: 'Opišite zahtjev (tekst, boja, gravura itd.)',\n    upload_fail: 'Prijenos nije uspio',\n    upload_http_error_prefix: 'Prijenos nije uspio HTTP {status}'\n  },\n  sl: {\n    customize_section_title: 'Prilagoditev',\n    customize_photo_upload: 'Naloži fotografijo',\n    customize_photo_hint_per_group: 'Naložite do {n} fotografij na komplet',\n    customize_photo_slot: 'Fotografija ({current}/{total})',\n    customize_opinion_label: 'Opombe za prilagoditev',\n    customize_opinion_placeholder: 'Opišite željo (besedilo, barva, gravura itd.)',\n    upload_fail: 'Nalaganje ni uspelo',\n    upload_http_error_prefix: 'Nalaganje ni uspelo HTTP {status}'\n  },\n  lt: {\n    customize_section_title: 'Personalizavimas',\n    customize_photo_upload: 'Įkelti nuotrauką',\n    customize_photo_hint_per_group: 'Įkelkite iki {n} nuotraukų vienam rinkiniui',\n    customize_photo_slot: 'Nuotrauka ({current}/{total})',\n    customize_opinion_label: 'Personalizavimo pastabos',\n    customize_opinion_placeholder: 'Aprašykite užklausą (tekstas, spalva, graviravimas ir kt.)',\n    upload_fail: 'Įkelti nepavyko',\n    upload_http_error_prefix: 'Įkelti nepavyko HTTP {status}'\n  },\n  bg: {\n    customize_section_title: 'Персонализация',\n    customize_photo_upload: 'Качване на снимка',\n    customize_photo_hint_per_group: 'Качете до {n} снимки на комплект',\n    customize_photo_slot: 'Снимка ({current}/{total})',\n    customize_opinion_label: 'Бележки за персонализация',\n    customize_opinion_placeholder: 'Опишете желанието (текст, цвят, гравиране и др.)',\n    upload_fail: 'Качването не бе успешно',\n    upload_http_error_prefix: 'Качването не бе успешно HTTP {status}'\n  },\n  el: {\n    customize_section_title: 'Εξατομίκευση',\n    customize_photo_upload: 'Μεταφόρτωση φωτογραφίας',\n    customize_photo_hint_per_group: 'Μεταφορτώστε έως {n} φωτογραφίες ανά σετ',\n    customize_photo_slot: 'Φωτογραφία ({current}/{total})',\n    customize_opinion_label: 'Σημειώσεις εξατομίκευσης',\n    customize_opinion_placeholder: 'Περιγράψτε το αίτημα (κείμενο, χρώμα, χάραξη κ.λπ.)',\n    upload_fail: 'Η μεταφόρτωση απέτυχε',\n    upload_http_error_prefix: 'Η μεταφόρτωση απέτυχε HTTP {status}'\n  },\n  th: {\n    customize_section_title: 'การปรับแต่ง',\n    customize_photo_upload: 'อัปโหลดรูปภาพ',\n    customize_photo_hint_per_group: 'อัปโหลดได้สูงสุด {n} รูปต่อชุด',\n    customize_photo_slot: 'รูปภาพ ({current}/{total})',\n    customize_opinion_label: 'รายละเอียดการปรับแต่ง',\n    customize_opinion_placeholder: 'โปรดระบุความต้องการ (ข้อความ สี การสลัก ฯลฯ)',\n    upload_fail: 'อัปโหลดไม่สำเร็จ',\n    upload_http_error_prefix: 'อัปโหลดไม่สำเร็จ HTTP {status}'\n  },\n  ar: {\n    customize_section_title: 'التخصيص',\n    customize_photo_upload: 'رفع الصورة',\n    customize_photo_hint_per_group: 'ارفع حتى {n} صور لكل مجموعة',\n    customize_photo_slot: 'صورة ({current}/{total})',\n    customize_opinion_label: 'ملاحظات التخصيص',\n    customize_opinion_placeholder: 'صف طلبك (النص، اللون، النقش، إلخ)',\n    upload_fail: 'فشل الرفع',\n    upload_http_error_prefix: 'فشل الرفع HTTP {status}'\n  }\n};\n\n/** cl（与 main.js templateConfigs 一致）→ 语言包 id */\nvar CL_TO_PACK = {\n  tw_tc: 'zh_tw',\n  hk_tc: 'zh_tw',\n  my_cn: 'zh_cn',\n  sg_cn: 'zh_cn',\n  jp_jp: 'ja',\n  pl_pl: 'pl',\n  cz_cs: 'cs',\n  sk_sk: 'sk',\n  at_de: 'de',\n  es_es: 'es',\n  it_it: 'it',\n  ro_ro: 'ro',\n  hu_hu: 'hu',\n  hr_hr: 'hr',\n  sl_sl: 'sl',\n  lt_lt: 'lt',\n  bg_bg: 'bg',\n  gr_gr: 'el',\n  ua_ar: 'ar',\n  sa_ar: 'ar',\n  th_th: 'th',\n  th_en: 'en',\n  ph_en: 'en',\n  my_en: 'en',\n  sg_en: 'en',\n  hk_en: 'en'\n};\n\n/**\n * 返回当前 cl 下的默认文案对象（不含接口覆盖）\n */\nexport function payCustomizeLangDefaults(cl) {\n  var id = CL_TO_PACK[cl] || 'en';\n  var pack = PACKS[id] || PACKS.en;\n  return Object.assign({}, pack);\n}\n\nexport function formatPayLang(str, vars) {\n  return interpolate(str, vars)\n}\n\nexport function payCustomizeMessage(cl, key, vars) {\n  var pack = PACKS[CL_TO_PACK[cl] || 'en'] || PACKS.en;\n  var s = (pack && pack[key]) || PACKS.en[key] || '';\n  return vars ? interpolate(s, vars) : s\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/util/payCustomizeI18n.js","import axios from 'axios'\nimport store from '@/vuex/store.js'\nimport router from '../router'\n\nconst api = axios.create();\n// api.defaults.baseURL = '/api';\napi.defaults.timeout = 25000;\napi.defaults.headers.post['Content-Type'] = 'application/json';\napi.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';\napi.defaults.loading = false;\n// api.defaults.headers.post['sys-site-path'] = sessionStorage.getItem('cl');\n\n// 请求拦截\napi.interceptors.request.use(function (config) {\n  // 在发送请求之前做些什么\n  if (config.loading) {\n    store.commit('SET_LOADING', true);\n  }\n  // 如果有token,添加到请求报文 后台会根据该报文返回status\n  return config;\n}, function (error) {\n  // 对请求错误做些什么\n  alert('网络错误,请稍后再试');\n  store.commit('SET_LOADING', false);\n  return Promise.reject(error);\n});\n\n// 添加响应拦截器\napi.interceptors.response.use(function (response) {\n  // 对响应数据做点什么\n  store.commit('SET_LOADING', false);\n  return response;\n\n}, function (error) {\n  // 对响应错误做点什么\n  store.commit('SET_LOADING', false);\n  if (error.response) {\n    if (error.response.status === 401) {\n      // 如果返回401 即没有权限，跳到登录页重新登录\n      store.commit('CHANGE_TOKEN', 0);\n      alert('请重新登录');\n      router.replace({\n        path: 'login',\n        query: { redirect: router.currentRoute.fullPath }\n      })\n\n    }\n  }\n  return error;\n});\nexport default api\n\n\n\n// WEBPACK FOOTER //\n// ./src/http/api.js","/* Detail + Car*/\n\n\n//全局loading状态\nexport const SET_LOADING = 'SET_LOADING';\n//全局loading状态\nexport const SET_HARDLOADING = 'SET_HARDLOADING';\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/types.js","import axios from '../http/api'\n// import md5 from 'js-md5';\nimport config from '../util/config.js';\nimport qs from 'qs'\nimport { payCustomizeMessage } from '../util/payCustomizeI18n.js';\n\n/**\n * 按规则定义的标识参数\n */\nvar key = \"tl\";\nvar value = \"528327\";\nvar cacheTl = `${key}=${value}`;\n\nfunction isSupportWebp() {\n  try {\n    return document.createElement('canvas').toDataURL('image/webp', 0.5).indexOf('data:image/webp') === 0 ? 1 : 0;\n  } catch (err) {\n    return 0;\n  }\n}\n\nfunction objKeySort(arys) {\n  const newkey = Object.keys(arys).sort();\n  let newObj = {};\n  for (let i = 0; i < newkey.length; i++) {\n    newObj[newkey[i]] = arys[newkey[i]];\n  }\n  return newObj;\n}\n\nfunction paramsProcess(params = null) {\n  const timestamp = new Date().getTime();\n  const tmp = JSON.parse(String(timestamp).substr(0, 10));\n  return {\n    request_time: tmp,\n    ...params\n  };\n}\n\nfunction getQueryVariable(variable) {\n  let query = '';\n  try {\n    query = decodeURIComponent(window.location.search.substring(1)).replace(/&amp;/g, '&');\n  } catch (e) {\n    query = window.location.search.substring(1).replace(/&amp;/g, '&');\n  }\n  const vars = query.split(\"&\");\n  for (let i = 0; i < vars.length; i++) {\n    const pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      return pair[1];\n    }\n  }\n  return '';\n}\n\nfunction getCookie(variable) {\n  let cookie = document.cookie;\n  const vars = cookie.split(\";\").map(item => item.trim());\n  for (let i = 0; i < vars.length; i++) {\n    const pair = vars[i].split(\"=\");\n    if (pair[0] === variable) {\n      return pair[1];\n    }\n  }\n  return '';\n}\n\n/**\n * atm模板订单提交格式转换\n */\nfunction atmFormat(params) {\n  // 香港，日本，阿联酋，沙特atm地区为三级，其他为二级\n  const areaDetail = cConf.autoFillProvince ?\n    {\n      province: cConf.autoFillProvince,\n      city: params.state,\n      area: params.city,\n    } : {\n      province: params.state,\n      city: params.city,\n      area: params.street,\n    }\n\n  return {\n    user_info: {\n      name: params.uname,\n      phone: params.phone,\n      email: params.email,\n      postal: params.postal,\n      address: params.address,\n      ...areaDetail\n    },\n    user_note: params.guest,\n    item_info: {\n      combo_id: params.combo_id,\n      final_price: params.total_price,\n      count: 1,\n      prostr: params.package\n    },\n    utm: {\n      utm_source: getQueryVariable('utm_source'),\n      u: getQueryVariable('u'),\n      source: source\n    },\n    site_info: {\n      // 本地地址处理和测试地址处理\n      domain: location.host === 'localhost' ? 'www.tw51buygobuy.com' : location.host.replace('w3', 'www'),\n      site_name: getQueryVariable('path'),\n      item_hash: getQueryVariable('id'),\n      cl: sessionStorage.cl\n    }\n  };\n}\n\n/**\n * 语言模板信息\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nexport function langInfo(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/language/${type}.json?${cacheTl}&v=1.4.4`)\n}\n\n/**\n * 获取地址和邮编json\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nexport function getZipcode(type = sessionStorage.cl) {\n  if (sessionStorage.getItem(\"configData\") && JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return axios.get(`${process.env.STATIC_CDN}/static/zipcode/${type}.json?${cacheTl}&v=1.4.3`)\n}\nexport function getZipcodeChild(child = '', type = sessionStorage.cl) {\n  if (sessionStorage.getItem(\"configData\") && JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return axios.get(`${process.env.STATIC_CDN}/static/zipcode/${type}/${child}.json?${cacheTl}&v=1.4.3`)\n}\n\n/**\n * 用户需知信息\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nexport function getSupply(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/supply/${type}.json?${cacheTl}&v=1.3.2`)\n}\n\nexport function getFaq(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/faq/${type}.json?${cacheTl}&v=1.3.2`)\n}\n\nexport function getPrivacyPolicy(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/privacyPolicy/${type}.json?${cacheTl}&v=1.3.2`)\n}\n\nexport function getReturnPolicy(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/returnPolicy/${type}.json?${cacheTl}&v=1.3.2`)\n}\n\nexport function getShippingPolicy(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/shippingPolicy/${type}.json?${cacheTl}&v=1.3.2`)\n}\n\nexport function getAbout(type = sessionStorage.cl) {\n  return axios.get(`${process.env.STATIC_CDN}/static/about/${type}.json?${cacheTl}&v=25.1.04.01`)\n}\n\n\n/**\n * 公共信息\n * @returns {AxiosPromise}\n * @public 刷新配置缓存接口：/codx/reload_config\n */\nexport function getConfig() {\n  const data = {\n    item: getQueryVariable('id'),\n    path: getQueryVariable('path'),\n    cl: sessionStorage.cl\n  };\n  return axios.get(`${config.hostUrl}/codx${isAtm ? '/ab' : ''}/item/config`, { params: data, loading: true })\n}\n\n/**\n * 商品详情\n * @returns {AxiosPromise}\n */\nexport function shopDetail(params) {\n  const data = paramsProcess({ 'is_support_webp': isSupportWebp(), ...params });\n  return axios.get(`${config.hostUrl}/codx${isAtm ? '/ab' : ''}/item/detail`, { params: data, loading: true })\n}\n\n/**\n * 获取预签名上传参数（与接口文档一致：仅 filename、content_type，application/x-www-form-urlencoded）\n * POST /codx/upload/presign\n * 注意：不要附带 request_time 等其它字段，否则部分后端会校验失败。\n */\nexport function fetchUploadPresign(filename, content_type) {\n  const body = qs.stringify({\n    filename: filename,\n    content_type: content_type\n  });\n  return axios.post(`${config.hostUrl}/codx${isAtm ? '/ab' : ''}/upload/presign`, body, {\n    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n    loading: true\n  });\n}\n\nfunction parsePresignPayload(res) {\n  const d = res && res.data;\n  if (d == null) return null;\n  let inner = d.data !== undefined ? d.data : d;\n  if (typeof inner === 'string') {\n    try {\n      inner = JSON.parse(inner);\n    } catch (e) {\n      return null;\n    }\n  }\n  return inner && typeof inner === 'object' ? inner : null;\n}\n\n/** 本地 / 局域网访问开发机时，浏览器 Origin 往往不在 S3 CORS 白名单；走同源代理避免 PUT 直连桶失败（Failed to fetch） */\nfunction devOriginLikelyBlockedFromS3(hostname) {\n  if (!hostname) return false;\n  const h = String(hostname).toLowerCase();\n  if (h === 'localhost' || h === '127.0.0.1' || h === '[::1]') return true;\n  if (/^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^172\\.(1[6-9]|2\\d|3[01])\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  if (/^169\\.254\\.\\d{1,3}\\.\\d{1,3}$/.test(h)) return true;\n  return false;\n}\n\n/** 本地直连 S3 会 CORS：改为同源 /__s3_put_proxy/<host>/path?query，由 dev-server 转发（PUT / POST multipart 均可） */\nfunction maybeProxyS3UploadUrl(uploadUrl) {\n  if (typeof window === 'undefined') return uploadUrl;\n  const h = window.location.hostname;\n  if (!devOriginLikelyBlockedFromS3(h)) return uploadUrl;\n  try {\n    const u = new URL(uploadUrl);\n    if (!/amazonaws\\.com/i.test(u.hostname)) return uploadUrl;\n    const prefix = '/__s3_put_proxy/' + encodeURIComponent(u.hostname);\n    const path = u.pathname || '/';\n    return window.location.origin + prefix + path + u.search + u.hash;\n  } catch (e) {\n    return uploadUrl;\n  }\n}\n\nfunction maybeProxyS3PutUrl(putUrl) {\n  return maybeProxyS3UploadUrl(putUrl);\n}\n\n/** AWS 预签名 URL 若 X-Amz-SignedHeaders 不含 content-type，则 PUT 不能带 Content-Type */\nfunction presignPutNeedsContentType(uploadUrl) {\n  try {\n    const q = uploadUrl.split('?')[1];\n    if (!q) return false;\n    const raw = new URLSearchParams(q).get('X-Amz-SignedHeaders') || '';\n    return raw.split(';').some(function (s) {\n      return decodeURIComponent(s.trim()).toLowerCase() === 'content-type';\n    });\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction presignIsPostPolicy(p) {\n  const m = String(p.method || '').toUpperCase();\n  return m === 'POST' && p.fields && typeof p.fields === 'object' && !Array.isArray(p.fields) && !!p.upload_url;\n}\n\nfunction customizeReadUrlFromPresign(p) {\n  return (\n    p.public_url ||\n    p.file_url ||\n    p.cdn_url ||\n    p.url ||\n    p.view_url ||\n    p.read_url ||\n    p.access_url ||\n    ''\n  );\n}\n\n/** S3 错误 XML 中的 <Message>，如 EntityTooLarge 时的说明文案 */\nfunction extractS3XmlMessage(bodyText) {\n  if (bodyText == null || typeof bodyText !== 'string') return '';\n  var m = bodyText.match(/<Message>([\\s\\S]*?)<\\/Message>/i);\n  if (!m || !m[1]) return '';\n  var raw = m[1].replace(/\\s+/g, ' ').trim();\n  return raw\n    .replace(/&lt;/g, '<')\n    .replace(/&gt;/g, '>')\n    .replace(/&apos;/g, \"'\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&amp;/g, '&');\n}\n\nfunction fetchUploadRejectMessage(status, bodyText) {\n  var s3Human = extractS3XmlMessage(bodyText);\n  if (s3Human) {\n    return Promise.reject(new Error(s3Human));\n  }\n  var cl = typeof sessionStorage !== 'undefined' && sessionStorage.cl ? sessionStorage.cl : '';\n  var msg = payCustomizeMessage(cl, 'upload_http_error_prefix', { status: status });\n  if (bodyText) msg += ' ' + String(bodyText).replace(/\\s+/g, ' ').slice(0, 160);\n  return Promise.reject(new Error(msg));\n}\n\n/**\n * 定制图上传：POST /codx/upload/presign → 按返回使用 POSTmultipart（fields + file）或兼容旧版 PUT 预签名\n */\nexport function uploadCustomizeImage(file) {\n  const name = (file.name || '').split(/[/\\\\]/).pop() || 'image.jpg';\n  const filename = name.replace(/[^\\w.\\-()\\u4e00-\\u9fa5]/g, '_').slice(0, 120) || `custom_${Date.now()}.jpg`;\n  let content_type = file.type || 'image/jpeg';\n  if (!file.type) {\n    const n = name.toLowerCase();\n    if (n.endsWith('.png')) content_type = 'image/png';\n    else if (n.endsWith('.webp')) content_type = 'image/webp';\n    // else if (n.endsWith('.gif')) content_type = 'image/gif';\n  }\n\n  return fetchUploadPresign(filename, content_type).then(function (presRes) {\n    const p = parsePresignPayload(presRes);\n    // 不支持的图片格式\n    if (!p) return Promise.reject(new Error('unsupported image format'));\n\n    const readUrl = customizeReadUrlFromPresign(p);\n\n    if (presignIsPostPolicy(p)) {\n      const postTarget = maybeProxyS3UploadUrl(p.upload_url);\n      const form = new FormData();\n      Object.keys(p.fields).forEach(function (k) {\n        const v = p.fields[k];\n        if (v == null) return;\n        form.append(k, String(v));\n      });\n      const fieldName = p.file_field || 'file';\n      form.append(fieldName, file, file.name || filename);\n      return fetch(postTarget, { method: 'POST', body: form }).then(function (r) {\n        if (!r.ok) {\n          return r.text().then(function (t) {\n            return fetchUploadRejectMessage(r.status, t);\n          });\n        }\n        const finalUrl = readUrl || (p.upload_url && p.key ? String(p.upload_url).replace(/\\/$/, '') + '/' + String(p.key).replace(/^\\//, '') : '');\n        return { data: { message: 'success', data: finalUrl || p.upload_url } };\n      });\n    }\n\n    const putUrl = p.upload_url || p.presigned_url || p.put_url;\n    if (!putUrl) {\n      if (readUrl) return { data: { message: 'success', data: readUrl } };\n      return Promise.reject(new Error('presign no upload_url'));\n    }\n\n    const headers = {};\n    if (presignPutNeedsContentType(putUrl)) {\n      headers['Content-Type'] = content_type;\n    }\n\n    const putTarget = maybeProxyS3PutUrl(putUrl);\n    return fetch(putTarget, { method: 'PUT', body: file, headers: headers }).then(function (r) {\n      if (!r.ok) {\n        return r.text().then(function (t) {\n          return fetchUploadRejectMessage(r.status, t);\n        });\n      }\n      return { data: { message: 'success', data: readUrl || putUrl } };\n    });\n  });\n}\n\n/**\n * 下订单\n * @returns {AxiosPromise}\n */\nexport function shopCreate(params, eventId, msg) {\n  let newParams = paramsProcess(params);\n  newParams.pit_c_k = getQueryVariable('u');\n  if (msg === 'confirm') {\n    newParams.guest += '（用户确认更新订单）'\n  }\n  if (cConf.thAddress) {\n    newParams.address = newParams.town + newParams.address;\n  }\n  if (newParams.address2) {\n    // newParams.address = newParams.address + \",门牌号:\" + newParams.address2\n    newParams.address = newParams.address + \" \" + newParams.address2\n  }\n  let data;\n  if (isAtm) {\n    data = atmFormat(newParams);\n  } else {\n    data = qs.stringify(newParams);\n  }\n  return axios.post(`${config.hostUrl}/codx${isAtm ? '/ab' : ''}/order/confirm${isAtm ? '' : '2'}`, data, {\n    headers: {\n      'Content-Type': isAtm ? 'application/json' : 'application/x-www-form-urlencoded',\n      'eventId': eventId,\n      'pixelId': fb_id || '352985638959852'\n    },\n    loading: true\n  })\n}\n\n/**\n * 订单查询\n * @returns {AxiosPromise}\n */\nexport function search(params) {\n  const data = paramsProcess(params);\n  return axios.get(`${config.hostUrl}/codx${isAtm ? '/ab' : ''}/order/query`, {\n    params: data,\n    loading: true\n    // headers: {\n    //   'sys-site-sn': md5(md5(JSON.stringify(objKeySort(data)) + \"Ino9LhvD52FxPcSbt4WyH3zdkCXN7agE\")),\n    //   'sys-site-path':sessionStorage.cl\n    // }\n  })\n}\n\n/**\n * 活动页面\n * @param params\n * @return {AxiosPromise}\n */\nexport function promotion(params) {\n  return axios.get(`${config.hostUrl}/codx/shopify/promotion`, {\n    params,\n    loading: true\n  })\n}\n\n/**\n * 首页\n * @param params\n * @return {AxiosPromise}\n */\nexport function getHomeItem(params) {\n  return axios.get(`${config.hostUrl}/codx/home`, {\n    params,\n    loading: false\n  })\n}\n\n/**\n * 列表页\n * @param params\n * @return {AxiosPromise}\n */\nexport function getErListItem(params) {\n  return axios.get(`${config.hostUrl}/codx/er_list`, {\n    params,\n    loading: false\n  })\n}\n\n\n/**\n * 埋点\n * @returns\n */\nexport function mallSubmit(params) {\n  return false;\n\n  let murl = \"https://www.example.com/mobile\"\n  const logDomain = getQueryVariable('log_domain')\n\n  if (logDomain === \"1\") {\n    murl = \"/mobile\"\n  } else if (logDomain === \"2\") {\n    return\n  }\n\n  const data = {\n    ...params,\n    time_stamp: Date.now(),\n    cl: sessionStorage.cl,\n    user_ID: document.cookie ? getCookie('USERKEY') : '',\n    UA: navigator.userAgent,\n    campaign_ID: getQueryVariable('u'),\n    experiment: document.cookie ? getCookie('STRATEGYKEY') : '',\n    session_ID: sessionStorage.sessionId,\n    utm_source: getQueryVariable('utm_source'),\n    utm_medium: getQueryVariable('utm_medium'),\n    ad_id: getQueryVariable('aid'),\n    url: window.location.href,\n  };\n  return axios.get(murl, { params: data })\n}\n\n\nexport function errorCatch(params) {\n  return axios.get(`static/error`, {\n    params,\n    loading: false\n  })\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/permission.js","<template>\n  <div id=\"app\" :style=\"{direction: cConf.alignRight ? 'rtl' : ''}\">\n    <router-view></router-view>\n    <v-loading v-show=\"fetchLoading || hardLoading\"></v-loading>\n  </div>\n</template>\n\n<script>\n  import {langInfo, getConfig, mallSubmit} from \"./api/permission\";\n  import Loading from \"@/components/common/loading\";\n\n  export default {\n    components: {\n      \"v-loading\": Loading\n    },\n    data() {\n      return {\n        cConf: cConf\n      }\n    },\n    computed: {\n      fetchLoading() {\n        return this.$store.state.detail.fetchLoading;\n      },\n      hardLoading() {\n        return this.$store.state.detail.hardLoading;\n      }\n    },\n    created() {\n      this.getLang();\n      this.getConfig();\n    },\n    methods: {\n      async getLang() {\n        // 语言模板请求\n        let lang = await langInfo();\n        sessionStorage.setItem('lang', JSON.stringify({cl: sessionStorage.cl, ...lang.data.data}));\n      },\n      async getConfig() {\n        // seo信息请求\n        let configData = (await getConfig()).data;\n        if (configData && configData.message === 'success') {\n          sessionStorage.setItem('configData', JSON.stringify({cl: sessionStorage.cl, ...configData.data}));\n          sessionStorage.seo_keywords = configData.data.seo_title;\n          sessionStorage.seo_title = configData.data.seo_title;\n          sessionStorage.seo_description = configData.data.seo_title;\n          sessionStorage.email = configData.data.email;\n          document.querySelector('meta[name=\"keywords\"]').setAttribute('content', sessionStorage.seo_keywords);\n          document.querySelector('meta[name=\"description\"]').setAttribute('content', sessionStorage.seo_description);\n          document.title = sessionStorage.seo_title;\n          document.querySelector('meta[property=\"og:title\"]').setAttribute('content', sessionStorage.seo_title);\n          document.querySelector('meta[property=\"og:description\"]').setAttribute('content', sessionStorage.seo_description);\n          document.querySelector('meta[property=\"og:url\"]').setAttribute('content', window.location.href);\n          document.querySelector('meta[property=\"og:image\"]').setAttribute('content', sessionStorage.seo_img);\n        }\n      },\n    }\n  };\n</script>\n\n<style lang=\"less\">\n* {\n  box-sizing: border-box;\n}\n\nhtml,\nbody,\n#app {\n  width: 100%;\n  height: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  font-size:16px;\n}\n\n@media screen and (max-width: 340px) {\n  html, body{\n    font-size:14px;\n  }\n}\n\nbody {\n  font-family: '微软雅黑', sans-serif;\n  color: #333;\n  background: #f3f3f3;\n}\n\nbody,\ndd,\ndl,\ndt,\nfieldset,\nform,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhtml,\nimg,\nlegend,\nli,\nol,\np,\nul {\n  margin: 0;\n  padding: 0;\n  /*-moz-user-select: none;*/\n  /*-webkit-user-select: none;*/\n  -webkit-tap-highlight-color: transparent;\n}\n\nbutton,\nfieldset,\nimg,\ninput {\n  border: none;\n  padding: 0;\n  margin: 0;\n  outline-style: none;\n}\n\nul,\nli {\n  background-color: #ffffff;\n}\nol,\nul {\n  list-style: none;\n}\n\ninput {\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\ninput,\nselect {\n  vertical-align: middle;\n}\n\ninput,\nselect,\ntextarea {\n  font-size: 12px;\n  margin: 0;\n  font-family: '微软雅黑', sans-serif;\n}\ntextarea {\n  resize: none;\n}\n\n/*防止拖动*/\nimg {\n  border: 0;\n  vertical-align: middle;\n}\n\n/*  去掉图片低测默认的3像素空白缝隙*/\ntable {\n  border-collapse: collapse;\n}\n\ni {\n  font-style: normal;\n}\n\na {\n  color: #666;\n  text-decoration: none;\n}\n\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button{\n  -webkit-appearance: none !important;\n  margin: 0;\n}\n\n.mint-msgbox {\n  max-width: 640px;\n}\n\n.mint-msgbox .mint-msgbox-message {\n  font-size: 16px;\n  line-height: 24px;\n  color: #333;\n}\n\n.mint-msgbox .mint-msgbox-message p:first-child {\n  margin: 10px 0;\n}\n\n.mint-msgbox .mint-msgbox-confirm {\n  color: #000;\n  font-size: 16px;\n}\n\n.mint-msgbox .mint-msgbox-cancel {\n  color: #000;\n  font-size: 16px;\n  border-left: 1px #eee solid;\n}\n\n.mint-msgbox .mint-msgbox-confirm:active {\n  color: inherit;\n}\n\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue?fff56e96","import Util from '../../util/config'\nimport * as types from '../types'\nimport Vue from 'vue'\n\n// 容器\nconst state = {\n  fetchLoading:false,     //全局加载状态的Loading\n  hardLoading:false,     //全局加载状态的Loading\n};\n\n//更改 store 中的状态的唯一方法:提交 mutation\n\nconst mutations = {\n\n// loading开关\n  [types.SET_LOADING] (state,res) {\n    state.fetchLoading = res\n  },\n  // loading开关2：用于除了ajax请求以外的loading需求\n  [types.SET_HARDLOADING] (state,res) {\n    state.hardLoading = res\n  },\n};\n\nlet vm = new Vue({});\n\n// action提交mutations，不直接更改状态（通过store.dispatch触发）\nconst actions = {\n\n  // 购物车数量增减,true是加,false是减\n  //   setLocalCount({commit},bool = true) {\n  //     let count = Util.getLocal('count') || 0;\n  //     if(bool) {\n  //       Util.setLocal(++count,'count');\n  //     }else {\n  //         Util.setLocal(--count,'count');\n  //     }\n  //     commit(types.CHANGE_COUNT);\n  //   },\n};\n\n// 如同计算属性,处理state的某个状态\nconst getters = {\n\n  // selectedList(state) {\n  //     // choseBool为真的商品 即打钩的商品\n  //    if(state.carList!=='') {\n  //      let arr = state.carList.filter((ele)=>{\n  //        return ele.choseBool == true\n  //      });\n  //      return arr\n  //    }\n  // },\n};\n\n\n\n\nexport default {\n  state,\n  actions,\n  getters,\n  mutations\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/vuex/modules/detail.js"],"sourceRoot":""}