{"version":3,"sources":["webpack:///static/js/app.4e09b07c96c82fcc1c95.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__","Index2","resolve","then","__WEBPACK_AMD_REQUIRE_ARRAY__","apply","bind","catch","oe","List","Detail","Pay","Success","Search","ShippingPolicy","FAQ","ReturnPolicy","PrivacyPolicy","Error","Promotion","About","Category","Comment","myRouter","mode","routes","component","title","seo_title","content","keywords","seo_keywords","description","seo_description","keepAlive","scrollBehavior","savedPosition","x","y","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_4_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_6__http_api__","get","cacheTl","getZipcode","zipcodeType","getZipcodeChild","child","getSupply","getFaq","getPrivacyPolicy","getReturnPolicy","fetchUploadPresign","filename","content_type","body","__WEBPACK_IMPORTED_MODULE_8_qs___default","stringify","__WEBPACK_IMPORTED_MODULE_7__util_config_js__","isAtm","Content-Type","parsePresignPayload","res","data","inner","__WEBPACK_IMPORTED_MODULE_3_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","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_promise___default","msg","__WEBPACK_IMPORTED_MODULE_9__util_payCustomizeI18n_js__","slice","uploadCustomizeImage","file","pop","endsWith","presRes","readUrl","postTarget","form","FormData","__WEBPACK_IMPORTED_MODULE_5_babel_runtime_core_js_object_keys___default","forEach","v","append","fieldName","file_field","fetch","r","ok","text","t","presigned_url","put_url","putTarget","getShippingPolicy","getAbout","getConfig","item","shopDetail","is_support_webp","shopCreate","eventId","newParams","pit_c_k","town","pixelId","fb_id","promotion","getHomeItem","getErListItem","mallSubmit","errorCatch","getWebsiteIcon","fetchHomeData","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator__","__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_asyncToGenerator__","__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_asyncToGenerator___default","__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_promise__","__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_typeof__","__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_extends__","__WEBPACK_IMPORTED_MODULE_5_babel_runtime_core_js_object_keys__","__WEBPACK_IMPORTED_MODULE_8_qs__","_ref","mark","_callee","wrap","_context","prev","sent","json","abrupt","stop","xJD8","__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","lang","_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.4e09b07c96c82fcc1c95.js?tl=528320","sourcesContent":["webpackJsonp([17],{\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/* 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__[\"f\"] = getRuntimePath;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = 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 */(12).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 Index2 = function Index2(resolve) {\n  return __webpack_require__.e/* require */(2).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"UuF4\")]; (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 */(10).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 */(4).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 */(3).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 */(5).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 */(8).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 */(6).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 */(7).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 */(15).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 */(14).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 */(9).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 Category = function Category(resolve) {\n  return __webpack_require__.e/* require */(11).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"fXvj\")]; (resolve.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));}.bind(this)).catch(__webpack_require__.oe);\n};\nvar Comment = function Comment(resolve) {\n  return __webpack_require__.e/* require */(13).then(function() { var __WEBPACK_AMD_REQUIRE_ARRAY__ = [__webpack_require__(\"vWrT\")]; (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: Index2,\n    meta: {\n      title: sessionStorage.seo_title,\n      content: {\n        keywords: sessionStorage.seo_keywords,\n        description: sessionStorage.seo_description\n      }\n    }\n  }, {\n    path: '/index2',\n    name: '首页2',\n    component: Index2,\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: '/category',\n    name: '分类页',\n    component: Category,\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      keepAlive: true\n    }\n  }, {\n    path: '/comment',\n    name: '评论页',\n    component: Comment,\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  scrollBehavior: function scrollBehavior(to, from, savedPosition) {\n    // 如果是从评论页返回到详情页，则不要自动滚动\n    if (from.path === '/comment' && to.path === '/detail') {\n      return false;\n    }\n\n    // 如果有保存的位置则使用\n    if (savedPosition) {\n      return savedPosition;\n    }\n\n    // 其他情况滚动到顶部\n    return { x: 0, y: 0 };\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__[\"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: \"loading-mask\"\n  }, [_c('div', {\n    staticClass: \"loading-spinner\"\n  }, [_c('div', {\n    staticClass: \"spinner\"\n  }), _vm._v(\" \"), _c('div', {\n    staticClass: \"loading-text\"\n  }, [_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\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"langInfo\"] = langInfo;\n/* harmony export (immutable) */ __webpack_exports__[\"getZipcode\"] = getZipcode;\n/* harmony export (immutable) */ __webpack_exports__[\"getZipcodeChild\"] = getZipcodeChild;\n/* harmony export (immutable) */ __webpack_exports__[\"getSupply\"] = getSupply;\n/* harmony export (immutable) */ __webpack_exports__[\"getFaq\"] = getFaq;\n/* harmony export (immutable) */ __webpack_exports__[\"getPrivacyPolicy\"] = getPrivacyPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"getReturnPolicy\"] = getReturnPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"fetchUploadPresign\"] = fetchUploadPresign;\n/* harmony export (immutable) */ __webpack_exports__[\"uploadCustomizeImage\"] = uploadCustomizeImage;\n/* harmony export (immutable) */ __webpack_exports__[\"getShippingPolicy\"] = getShippingPolicy;\n/* harmony export (immutable) */ __webpack_exports__[\"getAbout\"] = getAbout;\n/* harmony export (immutable) */ __webpack_exports__[\"getConfig\"] = getConfig;\n/* harmony export (immutable) */ __webpack_exports__[\"shopDetail\"] = shopDetail;\n/* harmony export (immutable) */ __webpack_exports__[\"shopCreate\"] = shopCreate;\n/* harmony export (immutable) */ __webpack_exports__[\"search\"] = search;\n/* harmony export (immutable) */ __webpack_exports__[\"promotion\"] = promotion;\n/* harmony export (immutable) */ __webpack_exports__[\"getHomeItem\"] = getHomeItem;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fetchHomeData\", function() { return fetchHomeData; });\n/* harmony export (immutable) */ __webpack_exports__[\"getErListItem\"] = getErListItem;\n/* harmony export (immutable) */ __webpack_exports__[\"mallSubmit\"] = mallSubmit;\n/* harmony export (immutable) */ __webpack_exports__[\"errorCatch\"] = errorCatch;\n/* harmony export (immutable) */ __webpack_exports__[\"getWebsiteIcon\"] = getWebsiteIcon;\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_asyncToGenerator__ = __webpack_require__(\"exGp\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_asyncToGenerator___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_asyncToGenerator__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_promise__ = __webpack_require__(\"//Fk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_babel_runtime_core_js_promise__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_typeof__ = __webpack_require__(\"pFYg\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_typeof___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_babel_runtime_helpers_typeof__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_extends__ = __webpack_require__(\"Dd8w\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_extends___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_extends__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_babel_runtime_core_js_object_keys__ = __webpack_require__(\"fZjL\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_babel_runtime_core_js_object_keys___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_babel_runtime_core_js_object_keys__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__http_api__ = __webpack_require__(\"m4jk\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__util_config_js__ = __webpack_require__(\"BK/k\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_qs__ = __webpack_require__(\"mw3O\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_qs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_qs__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__util_payCustomizeI18n_js__ = __webpack_require__(\"dzxK\");\n\n\n\n\n\n\n\n// import md5 from 'js-md5';\n\n\n\n/**\n * 按规则定义的标识参数\n */\nvar key = \"tl\";\nvar value = \"528320\";\nvar cacheTl = key + \"=\" + value;\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_5_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_4_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_4_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_6__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_6__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_6__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_6__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_6__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_6__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_6__http_api__[\"a\" /* default */].get(\"\" + \"/static/returnPolicy/\" + type + \".json?\" + cacheTl + \"&v=1.3.2\");\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_8_qs___default.a.stringify({\n    filename: filename,\n    content_type: content_type\n  });\n  return __WEBPACK_IMPORTED_MODULE_6__http_api__[\"a\" /* default */].post(__WEBPACK_IMPORTED_MODULE_7__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_3_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_3_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_2_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_9__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_2_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    if (!p) return __WEBPACK_IMPORTED_MODULE_2_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_5_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_2_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\nfunction getShippingPolicy() {\n  var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sessionStorage.cl;\n\n  return __WEBPACK_IMPORTED_MODULE_6__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_6__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_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__util_config_js__[\"a\" /* default */].hostUrl + \"/codx\" + (isAtm ? \"/ab\" : \"\") + \"/item/config\", {\n    params: data,\n    loading: true\n  });\n}\n\n/**\n * 商品详情\n * @returns {AxiosPromise}\n */\nfunction shopDetail(params) {\n  var data = paramsProcess(__WEBPACK_IMPORTED_MODULE_4_babel_runtime_helpers_extends___default()({ is_support_webp: isSupportWebp() }, params));\n  return __WEBPACK_IMPORTED_MODULE_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__util_config_js__[\"a\" /* default */].hostUrl + \"/codx\" + (isAtm ? \"/ab\" : \"\") + \"/item/detail\", {\n    params: data,\n    loading: true\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_8_qs___default.a.stringify(newParams);\n  }\n  return __WEBPACK_IMPORTED_MODULE_6__http_api__[\"a\" /* default */].post(__WEBPACK_IMPORTED_MODULE_7__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_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__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_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__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_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__util_config_js__[\"a\" /* default */].hostUrl + \"/codx/home\", {\n    params: params,\n    loading: false\n  });\n}\n\n/**\n * 获取首页数据（使用特定网址）\n * @param params\n * @return {Promise}\n */\n// http://www.codfront-2.ldev/codx/main/index\nvar fetchHomeData = function () {\n  var _ref = __WEBPACK_IMPORTED_MODULE_1_babel_runtime_helpers_asyncToGenerator___default()( /*#__PURE__*/__WEBPACK_IMPORTED_MODULE_0_babel_runtime_regenerator___default.a.mark(function _callee() {\n    var response;\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 fetch(__WEBPACK_IMPORTED_MODULE_7__util_config_js__[\"a\" /* default */].hostUrl + \"/codx/main/index\");\n\n          case 2:\n            response = _context.sent;\n            _context.next = 5;\n            return response.json();\n\n          case 5:\n            return _context.abrupt(\"return\", _context.sent);\n\n          case 6:\n          case \"end\":\n            return _context.stop();\n        }\n      }\n    }, _callee, this);\n  }));\n\n  return function fetchHomeData() {\n    return _ref.apply(this, arguments);\n  };\n}();\n\n/**\n * 列表页\n * @param params\n * @return {AxiosPromise}\n */\nfunction getErListItem(params) {\n  return __WEBPACK_IMPORTED_MODULE_6__http_api__[\"a\" /* default */].get(__WEBPACK_IMPORTED_MODULE_7__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_4_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_6__http_api__[\"a\" /* default */].get(murl, { params: data });\n}\n\nfunction errorCatch(params) {\n  return __WEBPACK_IMPORTED_MODULE_6__http_api__[\"a\" /* default */].get(\"static/error\", {\n    params: params,\n    loading: false\n  });\n}\n\n/**\n * 获取网站图标\n * @returns {string} 图标路径\n */\nfunction getWebsiteIcon() {\n  return \"\" + \"/static/icon/icon.png\";\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__[\"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__[\"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.4e09b07c96c82fcc1c95.js?tl=528320","<template lang=\"html\">\n  <div class=\"loading-mask\">\n    <div class=\"loading-spinner\">\n      <div class=\"spinner\"></div>\n      <div class=\"loading-text\">Loading...</div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n\n}\n</script>\n\n<style lang=\"less\" scoped>\n.loading-mask {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 9999;\n}\n\n.loading-spinner {\n  text-align: center;\n}\n\n.spinner {\n  width: 40px;\n  height: 40px;\n  margin: 0 auto;\n  border: 3px solid #f3f3f3;\n  border-top: 3px solid #4781D9;\n  border-radius: 50%;\n  animation: spin 1s linear infinite;\n}\n\n.loading-text {\n  margin-top: 10px;\n  color: #ffffff;\n  font-size: 14px;\n}\n\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/components/common/loading.vue?44f9cf71","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 = 17","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 = 17","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 = 17","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 Index2 = resolve => require(['@/views/Index2.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 Category = resolve => require(['@/views/Category.vue'], resolve);\nconst Comment = resolve => require(['@/components/detail/comment.vue'], resolve);\nconst myRouter = new Router({\n  mode: 'history',\n  routes: [\n    {\n      path: '/',\n      name: '首页',\n      component: Index2,\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: '/index2',\n      name: '首页2',\n      component: Index2,\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: '/category',\n      name: '分类页',\n      component: Category,\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        keepAlive: true\n      }\n    },\n    {\n      path: '/comment',\n      name: '评论页',\n      component: Comment,\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  scrollBehavior(to, from, savedPosition) {\n    // 如果是从评论页返回到详情页，则不要自动滚动\n    if (from.path === '/comment' && to.path === '/detail') {\n      return false;\n    }\n    \n    // 如果有保存的位置则使用\n    if (savedPosition) {\n      return savedPosition;\n    }\n    \n    // 其他情况滚动到顶部\n    return { x: 0, y: 0 };\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: \"loading-mask\"\n  }, [_c('div', {\n    staticClass: \"loading-spinner\"\n  }, [_c('div', {\n    staticClass: \"spinner\"\n  }), _vm._v(\" \"), _c('div', {\n    staticClass: \"loading-text\"\n  }, [_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 = 17","/**\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 */\nvar key = \"tl\";\nvar value = \"528320\";\nvar cacheTl = `${key}=${value}`;\nfunction isSupportWebp() {\n  try {\n    return document\n      .createElement(\"canvas\")\n      .toDataURL(\"image/webp\", 0.5)\n      .indexOf(\"data:image/webp\") === 0\n      ? 1\n      : 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(\n      /&amp;/g,\n      \"&\"\n    );\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    : {\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:\n        location.host === \"localhost\"\n          ? \"www.tw51buygobuy.com\"\n          : 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(\n    `${process.env.STATIC_CDN}/static/language/${type}.json?${cacheTl}&v=1.4.4`\n  );\n}\n\n/**\n * 获取地址和邮编json\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nexport function getZipcode(type = sessionStorage.cl) {\n  if (\n    sessionStorage.getItem(\"configData\") &&\n    JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType\n  ) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/zipcode/${type}.json?${cacheTl}&v=1.4.3`\n  );\n}\nexport function getZipcodeChild(child = \"\", type = sessionStorage.cl) {\n  if (\n    sessionStorage.getItem(\"configData\") &&\n    JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType\n  ) {\n    type = JSON.parse(sessionStorage.getItem(\"configData\")).zipcodeType;\n  }\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/zipcode/${type}/${child}.json?${cacheTl}&v=1.4.3`\n  );\n}\n\n/**\n * 用户需知信息\n * 每次更新json需要修改query参数v的值\n * @returns {AxiosPromise}\n */\nexport function getSupply(type = sessionStorage.cl) {\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/supply/${type}.json?${cacheTl}&v=1.3.2`\n  );\n}\n\nexport function getFaq(type = sessionStorage.cl) {\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/faq/${type}.json?${cacheTl}&v=1.3.2`\n  );\n}\n\nexport function getPrivacyPolicy(type = sessionStorage.cl) {\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/privacyPolicy/${type}.json?${cacheTl}&v=1.3.2`\n  );\n}\n\nexport function getReturnPolicy(type = sessionStorage.cl) {\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/returnPolicy/${type}.json?${cacheTl}&v=1.3.2`\n  );\n}\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    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\nexport function getShippingPolicy(type = sessionStorage.cl) {\n  return axios.get(\n    `${process.env.STATIC_CDN}/static/shippingPolicy/${type}.json?${cacheTl}&v=1.3.2`\n  );\n}\n\nexport function getAbout(type = sessionStorage.cl) {\n  return axios.get(\n    `${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`, {\n    params: data,\n    loading: true,\n  });\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`, {\n    params: data,\n    loading: true,\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(\n    `${config.hostUrl}/codx${isAtm ? \"/ab\" : \"\"}/order/confirm${\n      isAtm ? \"\" : \"2\"\n    }`,\n    data,\n    {\n      headers: {\n        \"Content-Type\": isAtm\n          ? \"application/json\"\n          : \"application/x-www-form-urlencoded\",\n        eventId: eventId,\n        pixelId: fb_id || \"352985638959852\",\n      },\n      loading: true,\n    }\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 {Promise}\n */\n// http://www.codfront-2.ldev/codx/main/index\nexport async function fetchHomeData() {\n  const response = await fetch(`${config.hostUrl}/codx/main/index`);\n  return await response.json();\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 * @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\nexport function errorCatch(params) {\n  return axios.get(`static/error`, {\n    params,\n    loading: false,\n  });\n}\n\n/**\n * 获取网站图标\n * @returns {string} 图标路径\n */\nexport function getWebsiteIcon() {\n  return `${process.env.STATIC_CDN}/static/icon/icon.png`;\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":""}