{"version":3,"file":"index.9e1554ab.js","sources":["../../vite/modulepreload-polyfill","../../plugin-vue:export-helper","../../src/App.vue","../../vite/preload-helper","../../src/helpers/isAuth.ts","../../src/utils/common.ts","../../src/utils/url.ts","../../src/utils/browser.ts","../../src/utils/buryPoint.ts","../../src/utils/http.ts","../../src/utils/request.ts","../../src/apis/user.ts","../../src/libs/yufu-bridge/libs/base.js","../../src/libs/yufu-bridge/libs/user.js","../../src/libs/yufu-bridge/initalEvent.js","../../src/libs/yufu-bridge/index.js","../../src/router.ts","../../src/apis/home.ts","../../src/store/modules/home.ts","../../src/store/modules/good.ts","../../src/apis/cart.ts","../../src/store/modules/cart.ts","../../src/apis/login.ts","../../src/store/modules/login.ts","../../src/apis/search.ts","../../src/store/modules/search.ts","../../src/apis/detail.ts","../../src/store/modules/detail.ts","../../src/store/modules/user.ts","../../src/apis/address.ts","../../src/store/modules/address.ts","../../src/apis/order.ts","../../src/store/modules/order.ts","../../src/store/index.ts","../../src/main.ts","../../src/utils/rem.ts","../../src/entry-client.js"],"sourcesContent":["const p = function polyfill() {\n const relList = document.createElement('link').relList;\n if (relList && relList.supports && relList.supports('modulepreload')) {\n return;\n }\n for (const link of document.querySelectorAll('link[rel=\"modulepreload\"]')) {\n processPreload(link);\n }\n new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') {\n continue;\n }\n for (const node of mutation.addedNodes) {\n if (node.tagName === 'LINK' && node.rel === 'modulepreload')\n processPreload(node);\n }\n }\n }).observe(document, { childList: true, subtree: true });\n function getFetchOpts(script) {\n const fetchOpts = {};\n if (script.integrity)\n fetchOpts.integrity = script.integrity;\n if (script.referrerpolicy)\n fetchOpts.referrerPolicy = script.referrerpolicy;\n if (script.crossorigin === 'use-credentials')\n fetchOpts.credentials = 'include';\n else if (script.crossorigin === 'anonymous')\n fetchOpts.credentials = 'omit';\n else\n fetchOpts.credentials = 'same-origin';\n return fetchOpts;\n }\n function processPreload(link) {\n if (link.ep)\n // ep marker = processed\n return;\n link.ep = true;\n // prepopulate the load record\n const fetchOpts = getFetchOpts(link);\n fetch(link.href, fetchOpts);\n }\n};__VITE_IS_MODERN__&&p();","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","\n\n \n \n \n \n \n \n \n \n \n \n\n\n\n","const scriptRel = 'modulepreload';const seen = {};const base = '/';export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps || deps.length === 0) {\n return baseModule();\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n dep = `${base}${dep}`;\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","/*\n * @Author: tengwei\n * @Date: 2022-09-21 10:56:58\n * @LastEditors: tengwei\n * @LastEditTime: 2022-12-16 18:54:04\n * @FilePath: /yufu_h5_ssr/src/helpers/isAuth.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\n\n// const isAuth = async () => {\nexport function isAuth(): any {\n if (typeof window !== 'undefined') {\n const sessionId = localStorage.getItem('sessionId')\n if (sessionId) {\n return sessionId\n }\n return false\n }\n}\n\n// export { isAuth }\n","/*\n * @Author: tengwei\n * @Date: 2022-08-10 14:45:30\n * @LastEditors: Sll\n * @LastEditTime: 2023-06-16 17:47:40\n * @FilePath: /yufu_h5_fuka/src/utils/common.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\n\nimport { Toast } from 'vant'\n/**\n * 校验字段是否是连续的6位数字\n * @param target 需要校验的值\n */\nexport function isNotSeriesNum(target: string | number) {\n const tempStr = target + ''\n // eslint-disable-next-line no-constant-condition\n if (!/^\\d{6}$/) return false // 不是6位数字\n if (/^(\\d)\\1+$/.test(tempStr)) return false // 6位相同数字\n\n let str = tempStr.replace(/\\d/g, function ($0, pos) {\n return (parseInt($0) - pos) as unknown as string\n })\n if (/^(\\d)\\1+$/.test(str)) return false // 6位数顺序递增\n\n str = tempStr.replace(/\\d/g, function ($0, pos) {\n return parseInt($0) + pos\n })\n if (/^(\\d)\\1+$/.test(str)) return false // 6位数顺序递减\n return true\n}\n\n// 获取schema参数\nconst getSchemaParam = (key: string, urlSearch: string) => {\n // 正则筛选地址栏\n const reg = new RegExp(`(^|&)${key}=([^&]*)(&|$)`)\n // 匹配目标参数\n const result = urlSearch.match(reg)\n // 返回参数值\n return result ? decodeURIComponent(result[2]) : null\n}\n\n/**\n * 获取schema的正确信息\n * @param url schema地址\n * @param paramsKey 需要的参数\n */\nexport const dealSchemaInfo = (url: string, paramsKey: string[]) => {\n console.log('url', url)\n const urlArr = url.split('?')\n const params: any = {}\n if (urlArr[1]) {\n paramsKey.map((item: string) => {\n params[item] = getSchemaParam(item, urlArr[1])\n })\n }\n const targetUrlArr = urlArr[0].split('/')\n const target = targetUrlArr[targetUrlArr.length - 1]\n return {\n target,\n params\n }\n}\n\n/**\n * 跳转正确的shema地址\n * @param url schema地址\n * @param paramsKey 需要的参数\n */\nexport const navigateRightSchemaPage = (url: string, paramsKey: string[]) => {\n const { target, params } = dealSchemaInfo(url, paramsKey)\n switch (target) {\n case 'detail':\n // 商品详情\n navigatorRightPage({\n url: `/pages/goods/goodsDetail/goodsDetail?id=${params.id}`\n })\n return\n default:\n window.location.href = url\n return\n }\n}\n\nexport const navigatorRightPage = ({ url }: any) => {\n window.wx.miniProgram.navigateTo({\n url\n })\n}\n\n/**\n * 获取登录地址\n * @returns\n */\n\nconst isProd = import.meta.env.MODE === 'production' || import.meta.env.MODE === 'release'\nexport const getLoginUrl = () => {\n const url = encodeURIComponent(window.location.href)\n const xClient = encodeURIComponent(\n JSON.stringify({\n channelId: 3,\n platformId: sessionStorage.getItem('platformId') || 1003,\n source: sessionStorage.getItem('source') || '2'\n })\n )\n\n if (!isProd) {\n // 测试\n return `https://testapi.yufumall.cn/uc-api/h5/toH5LoginPage?callbackUrl=${url}&xclientInfo=${xClient}`\n // return 'http://malltest.auth.yufu.cn/passport/oauth/authorize?client_id=yf_newMall_H5&redirect_uri=https://testwap.yufumall.cn/uc-api/h5/login-callback&response_type=code&scope=read'\n }\n // 线上\n return `https://api.yufumall.cn/uc-api/h5/toH5LoginPage?callbackUrl=${url}&xclientInfo=${xClient}`\n // return 'http://auth.yufu.cn/passport/oauth/authorize?client_id=yf_newMall_H5&redirect_uri=https://api.yufumall.cn/uc-api/h5/login-callback&response_type=code&scope=read'\n}\n\n/**\n * 每隔4个加空格\n * @param str\n * @returns\n */\nexport function replaceSpaceStr(str: string) {\n return str.replace(/(.{4})/g, '$1 ')\n}\n\n/**\n * 返回小程序页面\n * @param delta 返回多少层\n */\nexport function backMiniProgram(delta = 1) {\n window.wx.miniProgram.navigateBack({\n delta\n })\n}\n\n/**\n * 复制\n * @param val 要复制的内容\n */\nexport function copyText(val: string) {\n const input = document.createElement('input') // 直接构建input\n input.value = val // 设置内容\n document.body.appendChild(input) // 添加临时实例\n input.select() // 选择实例内容\n document.execCommand('Copy') // 执行复制\n document.body.removeChild(input) // 删除临时实例\n Toast('复制成功')\n}\n\nexport const myRegExp = {\n // 检查字符串是否为合法QQ号码\n isQQ: function (str: string) {\n // 1 首位不能是0 ^[1-9]\n // 2 必须是 [5, 11] 位的数字 \\d{4, 9}\n const reg = /^[1-9][0-9]{4,9}$/gim\n if (reg.test(str)) {\n return true\n } else {\n return false\n }\n },\n // 检查字符串是否为合法手机号码\n isPhone: function (str: string) {\n const reg =\n /^(0|86|17951)?(13[0-9]|15[012356789]|18[0-9]|14[0-9]|16[0-9]|17[0-9]|19[0-9])[0-9]{8}$/\n if (reg.test(str)) {\n return true\n } else {\n return false\n }\n }\n}\n\n/**\n * 比较两个版本号的大小\n * if left > right return -1\n * if left < right return 1\n * if left = right return 0\n */\nexport const compareVersion = (left: string, right: string) => {\n const regex = /^(\\d+)\\.*(\\d*)\\.*(\\d*)/\n if (regex.test(left) && regex.test(right)) {\n const leftMatch = left.match(regex)!\n const rightMatch = right.match(regex)!\n const x = [parseInt(leftMatch[1]), parseInt(rightMatch[1])]\n const y = [parseInt(leftMatch[2]), parseInt(rightMatch[2])]\n const z = [parseInt(leftMatch[3]), parseInt(rightMatch[3])]\n if (x[1] !== x[0]) return x[1] > x[0] ? 1 : -1\n if (y[1] !== y[0]) return y[1] > y[0] ? 1 : -1\n if (z[1] !== z[0]) return z[1] > z[0] ? 1 : -1\n return 0\n }\n}\n","// 这些key会尝试从 localstorge 中获取\nconst localstorgeKey = ['device']\n\n/**\n * 获取 url query 值\n * 如果没有获取到,从 localstorage 里取值\n * @param {string} key queryKey\n */\nexport function getQueryString(key: string) {\n if (!key) {\n return ''\n }\n const queryObj = getQueryObject() as any\n\n let value = queryObj[key]\n const isLocalStorageKey = localstorgeKey.indexOf(key) > -1\n // 并不是所有的 key 都能从 localstorgeKey 里取\n\n if (isLocalStorageKey) {\n if (!window.localStorage.getItem(key)) {\n window.localStorage.setItem(key, getRandomCode())\n }\n value = window.localStorage.getItem(key)\n }\n return value || ''\n}\n\n/**\n * 生成随机数\n * @returns\n */\nexport function getRandomCode() {\n return Math.random().toString(36).slice(2, 7) + Math.random().toString(36).slice(2, 7)\n}\n\n/**\n * 获得 Url query 对象\n * @param {object} defaultParameter 默认的 query 对象\n */\nexport function getQueryObject(defaultParameter = {}) {\n const queryString = window.location.search.replace(/^\\?/, '')\n\n if (queryString === '') {\n return {}\n }\n const urlParameter = queryString.split('&').reduce((prev: any, cur) => {\n const kvArray = cur.split('=')\n const key = decodeURIComponent(kvArray[0]),\n val = decodeURIComponent(kvArray[1])\n\n prev[key] = val\n return prev\n }, {})\n\n return Object.assign(defaultParameter, urlParameter)\n}\n\n/**\n * 把对象转换为 url querystring 格式的字符串 eg: {a:1, b:2} => ?a=1&b=2\n * @param {object} obj 带转换对象\n * @param {string} symbol 前缀符号(默认为 ?)\n */\nexport function getUrlParamsByObject(obj: any, symbol = '?') {\n if (Object.prototype.toString.call(obj).slice(8, -1) !== 'Object') {\n return ''\n }\n const kvArray = []\n\n for (const name in obj) {\n // if (obj.hasOwnProperty(name)) {\n if (Object.prototype.hasOwnProperty.call(obj, name)) {\n kvArray.push(name + '=' + encodeURIComponent(obj[name]))\n }\n }\n return symbol + kvArray.join('&')\n}\n","import { getQueryString } from '@/utils/url'\n/**\n * check browser type\n */\nconst BROWSER = (function () {\n if (typeof window === 'undefined') return\n const ua = navigator.userAgent.toLowerCase(),\n isAndroid = ua.indexOf('android') !== -1 ? 1 : 0\n\n const isAndroidOSVersion = ua.match(/android\\s([0-9\\\\.]*)/), // 获取安卓版本号\n isiOSOSVersion = ua.match(/cpu iphone os (.*?) like mac os/) // 获取ios版本号\n\n return {\n isAndroid,\n isiOS: Boolean(ua.match(/\\(i[^;]+;( u;)? cpu.+mac os x/)),\n isiPhone: ua.indexOf('iphone') > -1 || ua.indexOf('mac') > -1,\n isiPad: ua.indexOf('ipad') > -1,\n isWeChat: ua.indexOf('micromessenger') !== -1 ? 1 : 0,\n isQQ: Boolean(ua.match(/QQ/i)),\n isWeiBo: Boolean(ua.match(/Weibo/i)),\n androidVersion: isAndroid ? ua.substr(ua.indexOf('android') + 8, 1) : false,\n isAndroidOSVer: isAndroidOSVersion ? isAndroidOSVersion[1] : false,\n isiOSOSVer: isiOSOSVersion ? isiOSOSVersion[1] : false,\n isOldMallApp: ua.indexOf('mallbrowser') > -1 ? 1 : 0 // 是否是老商城app环境\n }\n})()\n\nexport function isIphoneX() {\n if (getQueryString('isIphoneX') === '1') {\n return true\n } else if (window.screen.width === 375 && window.screen.height === 812) {\n return true\n }\n return false\n}\n\nexport default BROWSER\n","/*\n * @Author: tengwei\n * @Date: 2022-09-01 16:56:35\n * @LastEditors: tengwei\n * @LastEditTime: 2023-02-16 14:59:25\n * @FilePath: /yufu_h5_ssr/src/utils/modules/aplusQueue.ts\n * @Description: H5多页面 接入友盟\n *\n */\nimport BROWSER from './browser'\nconst isProd = import.meta.env.MODE === 'production' || import.meta.env.MODE === 'release'\n\n/**\n * 获取设备类型\n */\nfunction getOsType() {\n if (BROWSER?.isAndroid) {\n return 'android'\n }\n if (BROWSER?.isiPad || BROWSER?.isiPhone) {\n return 'ios'\n }\n return 'others'\n}\n\nconst soureEnum: any = {\n '1': '数字福卡',\n '2': '福卡',\n '6': '老商城',\n '7': '福鲤通'\n}\n\n/**\n * 随机生成字符串\n * @param e\n * @returns\n */\nexport function getRandomCode() {\n let result = ''\n if (localStorage.getItem('randomCode')) {\n result = localStorage.getItem('randomCode') as string\n } else {\n result = Math.random().toString(36).slice(2, 7) + Math.random().toString(36).slice(2, 7)\n localStorage.setItem('randomCode', result)\n }\n //\n return result\n}\n\n/**\n * 获取公共参数\n * @returns\n */\nfunction getDefaultParams() {\n const source = sessionStorage.getItem('source') || '1'\n return {\n url: window.location.href, // 当前页面地址\n hash: getRandomCode(), // 用户未登录时生成一个随机数当标识\n operation_system: getOsType(), // 设备类型\n eventTime: Date.now(), // 时间戳\n isProd, // 开发环境\n source: soureEnum[source]\n }\n}\n\n/**\n * H5手动触发曝光上传\n * @param params 上传参数\n */\nexport const AplusQueusSendPV = (params: any = {}) => {\n console.log('开始进行友盟曝光')\n const { aplus_queue }: any = window\n aplus_queue.push({\n action: 'aplus.sendPV',\n arguments: [\n {\n is_auto: false\n },\n {\n ...getDefaultParams(),\n ...params\n }\n ]\n })\n}\n\n/**\n * H5 进行友盟点击事件上报\n * @param eventKeyCode 事件ID 或 事件编码 例如1、 H5_页面名_自定义名称 2、全大写\n * @param params 事件参数,例如:{page: 'home'}\n */\nexport const mBuryPoint = (eventKeyCode: string, params: any = {}) => {\n const { aplus_queue }: any = window\n aplus_queue.push({\n action: 'aplus.record',\n arguments: [\n eventKeyCode,\n 'CLK',\n {\n ...getDefaultParams(),\n ...params\n }\n ]\n })\n}\n\n/**\n * 通知Native进行友盟埋点\n * @param eventKeyCode 事件ID 或 事件编码 1、 H5_页面名_自定义名称 2、全大写\n * @param params 事件参数,例如:{page: 'home'}\n */\nexport const nBuryPoint = (eventKeyCode: string, params: any = {}) => {\n console.log('Native 埋点', eventKeyCode, params)\n // const { aplus_queue }: any = window\n // aplus_queue.push({\n // action: 'aplus.record',\n // arguments: [\n // eventKeyCode,\n // 'CLK',\n // {\n // ...getDefaultParams(),\n // ...params\n // }\n // ]\n // })\n}\n","/***\n * 创建 axios 实例\n * 详细请求方式设置到 request.ts\n */\n\nimport axios, { AxiosResponse } from 'axios'\n// import { useRouter, Router } from 'vue-router'\nimport { Toast, Dialog } from 'vant'\nimport { isAuth } from '@/helpers/isAuth'\nimport { getLoginUrl } from './common'\nimport { getQueryString } from '@/utils/url'\nimport { getRandomCode } from './buryPoint'\n\n//创建axios的一个实例\nconst instance = axios.create({\n // baseURL: isProd ? '/' : 'http://localhost:3000/', //接口统一域名\n baseURL: '/', //接口统一域名\n // timeout: 10000, //设置超时\n headers: {\n 'Content-Type': 'application/json;charset=UTF-8;'\n }\n})\n\nlet loading: any\n//正在请求的数量, 用来理重复请求的问题\nlet requestCount = 0\nlet message = ''\n//显示loading\nconst showLoading = () => {\n if (requestCount === 0 && !loading) {\n loading = Toast.loading({\n message: '加载中...',\n forbidClick: true\n })\n }\n requestCount++\n}\n\n//隐藏loading\nconst hideLoading = () => {\n requestCount--\n if (requestCount == 0) {\n loading.close()\n }\n}\n\n// 刷新sessionId\nfunction refreshSessionId() {\n return axios.create()({\n method: 'POST',\n url: `/uc-api/uc/member/refesh-session?sessionId=${isAuth()}`,\n headers: {\n 'X-Client': JSON.stringify({\n channelId: getQueryString('channelId') || sessionStorage.getItem('channelId'),\n deviceId: getRandomCode(),\n fixVersion: 1,\n mainVersion: 1,\n os: 'H5',\n platformId: getQueryString('platformId') || sessionStorage.getItem('platformId'),\n pm: 'H5',\n source: getQueryString('source') || localStorage.getItem('channelSource') || '2',\n screenSize: 'x',\n signVersion: 1,\n subVersion: 1,\n systemVersion: 'x',\n sessionId: (isAuth() && isAuth()) || ''\n })\n }\n })\n}\n\n// 重定向到登录页\nfunction redirectLogin(msg: string, response: AxiosResponse) {\n localStorage.removeItem('sessionId')\n localStorage.removeItem('userInfo')\n Dialog.confirm({\n message: `${msg},请重新登录`\n })\n .then(() => {\n location.assign(getLoginUrl())\n })\n .catch(() => {})\n return response.data\n}\n\n//请求拦截器\ninstance.interceptors.request.use(\n async (config: any) => {\n showLoading()\n //若请求方式为post,则将data参数转为JSON字符串\n // config.headers['sessionId'] = 'b2485fb767a09c306abef54a7ddf51b93e286fef'\n config.headers['sessionId'] = (isAuth() && isAuth()) || ''\n config.headers['X-Client'] = JSON.stringify({\n channelId: getQueryString('channelId') || sessionStorage.getItem('channelId') || 3,\n deviceId: 'x',\n fixVersion: 1,\n mainVersion: 1,\n os: 'H5',\n platformId: getQueryString('platformId') || sessionStorage.getItem('platformId') || 1003,\n pm: 'H5',\n source: getQueryString('source') || localStorage.getItem('channelSource') || '1',\n screenSize: 'x',\n signVersion: 1,\n subVersion: 1,\n systemVersion: 'x',\n sessionId: (isAuth() && isAuth()) || ''\n })\n config.headers['callbackUrl'] = location.href\n return config\n },\n (error) => Promise.reject(error)\n)\n\n//响应拦截器\nlet isRfreshing = false // 控制刷新 session 的状态\nlet requests: any[] = [] // 存储刷新 session 期间过来的 请求\ninstance.interceptors.response.use(\n (response: AxiosResponse) => {\n if (typeof window !== 'undefined') {\n hideLoading()\n }\n //请求成功\n const { code, msg }: any = response.data\n console.log(code, 'code')\n // 用户未登录 或 sessionId 过期\n if (code.match(/^99/)) {\n if (sessionStorage.getItem('isWap')) {\n redirectLogin(msg, response)\n } else {\n // 62aa0dca7c5aaf3fc9df7cccd043ff04372c38b8\n // 刷新 sessionId\n if (!isRfreshing) {\n isRfreshing = true // 开启刷新状态\n // 尝试刷新获取新的 Session\n return refreshSessionId()\n .then((res) => {\n const { data }: any = res.data\n if (!data) {\n throw new Error('刷新 Session 失败')\n }\n // 刷新 Session 成功了\n localStorage.setItem('sessionId', data)\n // 把 requests 队列中的请求重新发出去\n requests.forEach((cb) => cb())\n // 重置 requests 数组\n requests = []\n return instance(response.config)\n })\n .catch((err) => {\n console.log(err)\n // redirectLogin(msg, response)\n return Promise.reject(response)\n })\n .finally(() => {\n isRfreshing = false // 重置刷新状态\n })\n }\n // 刷新状态下,把请求挂起放到 requests 数组中\n return new Promise((resolve) => {\n requests.push(() => {\n resolve(instance(response.config))\n })\n })\n }\n }\n if (code !== '000000') {\n if (msg && msg !== '') {\n Toast(msg)\n }\n return response.data\n }\n return response.data\n },\n (error) => {\n //请求失败\n if (error.response && error.response.status) {\n const status = error.response.status\n switch (status) {\n case 400:\n message = '请求错误'\n break\n case 401:\n message = '请求错误'\n break\n case 404:\n message = '请求地址出错'\n break\n case 408:\n message = '请求超时'\n break\n case 500:\n message = '服务器内部错误!'\n break\n case 501:\n message = '服务未实现!'\n break\n case 502:\n message = '网关错误!'\n break\n case 503:\n message = '服务不可用!'\n break\n case 504:\n message = '网关超时!'\n break\n case 505:\n message = 'HTTP版本不受支持'\n break\n default:\n message = '请求失败'\n }\n Toast.fail(message)\n return Promise.reject(error)\n }\n return Promise.reject(error)\n }\n)\n\nexport default instance\n","import instance from './http'\n/**\n * @param {String} method 请求的方法:get、post、delete、put\n * @param {String} url 请求的url:\n * @param {Object} data 请求的参数\n * @param {Object} config 请求的配置\n * @returns {Promise} 返回一个promise对象,其实就相当于axios请求数据的返回值\n */\n\ninterface Axios {\n method: string\n url: string\n data?: object\n config?: object\n}\n\nconst axios = ({ method, url, data, config }: Axios) => {\n method = method.toLowerCase()\n if (method == 'post') {\n return instance.post(url, data, { ...config })\n } else if (method == 'get') {\n return instance.get(url, {\n params: data,\n ...config\n })\n } else if (method == 'delete') {\n return instance.delete(url, {\n params: data,\n ...config\n })\n } else if (method == 'put') {\n return instance.put(url, data, { ...config })\n } else {\n console.error('未知的method' + method)\n return instance(url)\n }\n}\nexport default axios\n","/*\n * @Author: your name\n * @Date: 2021-11-15 18:50:16\n * @LastEditTime: 2023-04-07 13:54:41\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/apis/user.ts\n */\n// 用户相关接口\n\nimport axios from '@/utils/request'\n\n/**\n * 获取用户信息\n * @param sessionId\n * @returns\n */\n\nexport const getUserInfo = (sessionId?: string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/get-member-by-session-id',\n config: {\n sessionId\n }\n })\n}\n\n/**\n * 获取默认地址\n */\nexport const fetchGetDefaultAddress = () => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/receive/address/default'\n })\n}\n\n/**\n * 获取重置支付密码验证码(身份证号验证通过给用户发送短信验证码)\n * \"captcha\": \"验证码\",\n * \"idCard\": \"身份身份证号\",\n * \"mobile\": \"手机号\"\n * @returns\n */\nexport const resetPayPwd = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/get-reset-pay-password-captcha',\n data\n })\n}\n\n/**\n * 重置支付密码\n * @param data\n * @returns\n */\nexport const savePayPwd = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/reset-pay-password',\n data\n })\n}\n\n/**\n * 校验忘记支付密码的短信验证码是否正确\n * @param data\n * @returns\n */\nexport const validPayCaptcha = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/validate-pay-password-captcha',\n data\n })\n}\n\n/**\n * 校验原支付密码是否正确\n * @param payPassword\n * @returns\n */\nexport const validPayOldPwd = (payPassword: string) => {\n return axios({\n method: 'post',\n url: `/uc-api/uc/member/validate-pay-password?payPassword=${payPassword}`\n })\n}\n\n/**\n * 检查用户是否设置过支付密码\n * @returns\n */\nexport const validifPayPwd = () => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/if-absent-pay-password'\n })\n}\n\n/**\n * 获取重置密码验证码\n * @param mobile 手机号\n * @returns\n */\nexport const getResetCaptcha = (mobile: string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/getResetPasswordCaptcha',\n data: {\n mobile\n }\n })\n}\n\n/**\n * 找回密码时验证验证码\n * @param mobile\n * @param captcha\n * @returns\n */\nexport const validResetCaptcha = (mobile: string, captcha: string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/captcha/forget-password',\n data: {\n mobile,\n captcha\n }\n })\n}\n\n/**\n * 重置密码\n * @param mobile\n * @param password\n * @returns\n */\nexport const saveResetPwd = (mobile: string, password: string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/reset-password',\n data: {\n mobile,\n password\n }\n })\n}\n\n/**\n * 获取用户实名认证信息\n * @returns\n */\nexport const getRealName = () => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/real-name/get'\n })\n}\n\n/**\n * 初始化微信接口\n * @param url 回调地址\n * @returns\n */\nexport const getWechatInit = (url: string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/third-party/web-wx-share-token-params',\n data: {\n url\n }\n })\n}\n\n/**\n * 获取卡券数量\n * @returns\n */\nexport const getMcCount = () => {\n return axios({\n method: 'get',\n url: '/order-api/card-voucher/not-invalid-count'\n })\n}\n\n/**\n * 个人中心接口\n * @returns\n */\nexport const getUcList = () => {\n return axios({\n method: 'get',\n url: '/goods-api/goods/uc/list'\n })\n}\n\n/**\n * 美团免登接口\n * @param productType productType业务类型分别为dp_canyin(餐饮)、mt_waimai(外卖)、mt_hotel(酒店)和mt_maicai(美团买菜)\n * @returns\n */\nexport const oAuthMeituan = (productType: string) => {\n return axios({\n method: 'POST',\n url: `/uc-api/mt/commonaccess?productType=${productType}`\n })\n}\n","/**\n * 关闭当前页面\n * @param {*} args\n */\nexport const closeCurrentPage = function (args) {\n this.call('closeCurrentPage', args)\n}\n\n/**\n * 后退功能\n * @param {*} delta 后退几步\n * @param {*} cb 回调函数\n */\nexport const navigateGoBack = function (delta = 1, cb) {\n this.call('navigateGoBack', { delta }, cb)\n}\n\n/**\n * 打开照相机\n * @param {*} args\n * @param {*} cb\n */\nexport const openCarema = function (args = {}, cb) {\n this.call('openCarema', args, cb)\n}\n/**\n * 打开相册\n * @param {*} args type: 1打开相机,2打开相册\n * @param {*} cb\n */\nexport const openPhotos = function (args = { type: 1 }, cb) {\n this.call('openPhotos', args, cb)\n}\n","/**\n * 用户相关\n */\n\n// 跳转登录页面\nexport function skipLoginPage(args = {}) {\n this.call('skipLoginPage', args)\n}\n\n// 获取用户信息\nexport function getUserInfo() {\n return this.call('getUserInfo')\n}\n\n// 检测用户是否是登录状态\nexport function checkSession() {\n return this.call('checkSession')\n}\n","// const base = require('./libs/base')\nimport * as base from './libs/base'\nimport * as user from './libs/user'\n\nexport default {\n ...base,\n ...user\n}\n","/* eslint-disable */\n// const initalEvent = require('./initalEvent')\nimport initalEvent from './initalEvent'\n\nvar yfBridge = {\n default: this, // for typescript\n call(method, args, cb) {\n let ret = ''\n if (typeof args === 'function') {\n cb = args\n args = {}\n }\n let arg = { data: args === undefined ? null : args }\n if (typeof cb === 'function') {\n const cbName = `dscb${window.dscb++}`\n window[cbName] = cb\n arg._dscbstub = cbName\n }\n arg = JSON.stringify(arg)\n\n if (window._dsbridge) {\n ret = _dsbridge.call(method, arg)\n } else if (window._dswk || navigator.userAgent.indexOf('_dsbridge') != -1) {\n ret = prompt(`_dsbridge=${method}`, arg)\n }\n\n return JSON.parse(ret || '{}').data\n },\n register(name, fun, asyn) {\n const q = asyn ? window._dsaf : window._dsf\n if (!window._dsInit) {\n window._dsInit = true\n // notify native that js apis register successfully on next event loop\n setTimeout(() => {\n yfBridge.call('_dsb.dsinit')\n }, 0)\n }\n if (typeof fun === 'object') {\n q._obs[name] = fun\n } else {\n q[name] = fun\n }\n },\n registerAsyn(name, fun) {\n this.register(name, fun, true)\n },\n hasNativeMethod(name, type) {\n return this.call('_dsb.hasNativeMethod', {\n name,\n type: type || 'all'\n })\n },\n disableJavascriptDialogBlock(disable) {\n this.call('_dsb.disableJavascriptDialogBlock', {\n disable: disable !== false\n })\n }\n}\n\nfor (const key in initalEvent) {\n yfBridge[key] = initalEvent[key]\n}\n\n!(function () {\n if (window._dsf) return\n const ob = {\n _dsf: {\n _obs: {}\n },\n _dsaf: {\n _obs: {}\n },\n dscb: 0,\n dsBridge: yfBridge,\n close() {\n yfBridge.call('_dsb.closePage')\n },\n _handleMessageFromNative(info) {\n const arg = JSON.parse(info.data)\n const ret = {\n id: info.callbackId,\n complete: true\n }\n const f = this._dsf[info.method]\n const af = this._dsaf[info.method]\n const callSyn = function (f, ob) {\n ret.data = f.apply(ob, arg)\n yfBridge.call('_dsb.returnValue', ret)\n }\n const callAsyn = function (f, ob) {\n arg.push((data, complete) => {\n ret.data = data\n ret.complete = complete !== false\n yfBridge.call('_dsb.returnValue', ret)\n })\n f.apply(ob, arg)\n }\n if (f) {\n callSyn(f, this._dsf)\n } else if (af) {\n callAsyn(af, this._dsaf)\n } else {\n // with namespace\n const name = info.method.split('.')\n if (name.length < 2) return\n const method = name.pop()\n const namespace = name.join('.')\n let obs = this._dsf._obs\n let ob = obs[namespace] || {}\n let m = ob[method]\n if (m && typeof m === 'function') {\n callSyn(m, ob)\n return\n }\n obs = this._dsaf._obs\n ob = obs[namespace] || {}\n m = ob[method]\n if (m && typeof m === 'function') {\n callAsyn(m, ob)\n }\n }\n }\n }\n for (const attr in ob) {\n window[attr] = ob[attr]\n }\n yfBridge.register('_hasJavascriptMethod', (method, tag) => {\n const name = method.split('.')\n if (name.length < 2) {\n return !!(_dsf[name] || _dsaf[name])\n }\n // with namespace\n var method = name.pop()\n const namespace = name.join('.')\n const ob = _dsf._obs[namespace] || _dsaf._obs[namespace]\n return ob && !!ob[method]\n })\n})()\n\nexport default yfBridge\n","import {\n // createMemoryHistory,\n createRouter as _createRouter,\n createWebHistory,\n RouteRecordRaw\n} from 'vue-router'\n\nimport { getUserInfo } from '@/apis/user'\nimport BROWSER from './utils/browser'\nimport yfBridge from './libs/yufu-bridge'\nimport { AplusQueusSendPV, mBuryPoint } from '@/utils/buryPoint'\n\nconst routes: Array = [\n {\n path: '/',\n name: 'home',\n redirect: '/home',\n component: () => import('./components/NavBar/index.vue'),\n children: [\n {\n path: '/home',\n name: 'home',\n component: () => import('./pages/DigitalHome/index.vue'),\n // component: () => import('./pages/Home/index.vue'),\n meta: {\n index: 1 // 标识几级页面\n }\n },\n {\n path: '/classification', // 分类\n name: 'classification',\n component: () => import('./pages/Classification/index.vue'),\n meta: {\n index: 1, // 标识几级页面\n title: '分类'\n }\n },\n {\n path: '/shopcart', // 购物车\n name: 'shopCart',\n component: () => import('./pages/ShopCart/index.vue'),\n meta: {\n title: '购物车'\n }\n },\n {\n path: '/my', // 我的\n name: 'My',\n component: () => import('./pages/My/index.vue'),\n meta: {\n requiresAuth: false, // 自定义对象\n title: '我的'\n }\n }\n ]\n },\n {\n path: '/goods_logistics_lists', // 多物流列表信息\n name: 'goodsLogisticsList',\n component: () => import('./pages/GoodsLogisticsLists/index.vue'),\n meta: {\n title: '物流信息列表'\n }\n },\n {\n path: '/goods_logistics', // 物流信息\n name: 'goodsLogistics',\n component: () => import('./pages/GoodsLogistics/index.vue'),\n meta: {\n title: '物流信息'\n }\n },\n {\n path: '/shopcart_detail', // 二次跳转购物车购物车\n name: 'shopCartDetail',\n component: () => import('./pages/ShopCart/index.vue'),\n meta: {\n title: '购物车'\n }\n },\n {\n path: '/address', // 地址管理页面\n name: 'address',\n component: () => import('./pages/Address/index.vue'),\n meta: {\n index: 2,\n title: '地址列表'\n }\n },\n {\n path: '/address/edit', // 地址编辑页面\n name: 'addressEdit',\n component: () => import('@/pages/addrAddOrEdit/index.vue'),\n meta: {\n index: 3\n }\n },\n {\n path: '/good_detail', // 商品详情页\n name: 'gooddetail',\n component: () => import('./pages/GoodDetail/index.vue'),\n meta: {\n index: 2,\n title: '详情页'\n }\n },\n {\n path: '/coupons_list', // 商品详情页\n name: 'couponslist',\n component: () => import('./pages/CouponsList/index.vue'),\n meta: {\n index: 2,\n title: '我的优惠券'\n }\n },\n {\n path: '/login', // 登录页面\n name: 'login',\n component: () => import('./pages/Login/index.vue')\n },\n {\n path: '/login-forget', // 找回密码\n name: 'loginforget',\n component: () => import('./pages/ForgetPwd/index.vue')\n },\n {\n path: '/change_pwd', // 修改登录密码\n name: 'changepwd',\n component: () => import('./pages/ChangePwd/index.vue')\n },\n {\n path: '/checkstand', // 收银台\n name: 'checkstand',\n component: () => import('./pages/Checkstand/index.vue'),\n meta: {\n title: '收银台'\n }\n },\n {\n path: '/order', // 我的订单\n name: 'orders',\n component: () => import('./pages/Orders/index.vue'),\n meta: {\n title: '我的订单'\n }\n },\n {\n path: '/refund_order', // 退款/售后\n name: 'refundOrder',\n component: () => import('./pages/RefundAfterSale/index.vue'),\n meta: {\n title: '退款/售后'\n }\n },\n {\n path: '/order_detail', // 订单详情页\n name: 'orderdetail',\n component: () => import('./pages/OrderDetail/index.vue'),\n meta: {\n title: '订单详情页'\n }\n },\n {\n path: '/order_history', // 历史订单\n name: 'ordershistory',\n component: () => import('./pages/OrdersHistory/index.vue'),\n meta: {\n title: '历史订单'\n }\n },\n {\n path: '/order_confirmtion', // 订单确认页\n name: 'orderconfirm',\n component: () => import('./pages/OrderConfirm/index.vue'),\n meta: {\n title: '确认订单'\n }\n },\n {\n path: '/setting', // 设置\n name: 'setting',\n component: () => import('./pages/Setting/index.vue'),\n meta: {\n title: '设置'\n }\n },\n {\n path: '/search', // 搜索页\n name: 'search',\n component: () => import('./pages/Search/index.vue'),\n meta: {\n title: '搜索页'\n }\n },\n {\n path: '/search-shop', // 店铺搜索页\n name: 'searchshop',\n component: () => import('./pages/SearchShop/index.vue'),\n meta: {\n title: '店铺搜索页'\n }\n },\n {\n path: '/my-points', // 我的积分\n name: 'mypoints',\n component: () => import('./pages/MyPoints/index.vue'),\n meta: {\n title: '我的积分'\n }\n },\n {\n path: '/pay_result', // 支付结果页\n name: 'payresult',\n component: () => import('./pages/PayResult/index.vue'),\n meta: {\n title: '支付结果页'\n }\n },\n {\n path: '/yf_mobile_recharge', // 手机充值中心\n name: 'mobileRecharge',\n component: () => import('./pages/MobileRecharge/index.vue'),\n meta: {\n title: '充值中心'\n }\n },\n {\n path: '/yf_mobile_record', // 手机充值记录\n name: 'mobileRecords',\n component: () => import('./pages/MobileRecords/index.vue'),\n meta: {\n title: '充值记录'\n }\n },\n {\n path: '/yf_mobile_record_detail', // 手机充值详情\n name: 'mobileRecordDetail',\n component: () => import('./pages/MobileRecordDetail/index.vue'),\n meta: {\n title: '充值详情'\n }\n },\n {\n path: '/set_pay_pwd', // 设置或者修改支付密码\n name: 'setpaypwd',\n component: () => import('./pages/SetOrChangPayPwd/index.vue')\n },\n {\n path: '/integral_list', // 积分明细列表\n name: 'IntegralList',\n component: () => import('./pages/IntegralList/index.vue'),\n meta: {\n title: '积分明细列表'\n }\n },\n {\n path: '/integral_detail', // 积分明细详情\n name: 'IntegralDetail',\n component: () => import('./pages/IntegralDetail/index.vue'),\n meta: {\n title: '积分明细详情'\n }\n },\n {\n path: '/shop_list', // 商铺列表页\n name: 'shoplist',\n component: () => import('./pages/shopList/index.vue'),\n meta: {\n title: '商铺列表页'\n }\n },\n {\n path: '/shop_detail', // 商铺详情页\n name: 'shopdetail',\n component: () => import('./pages/shopDetail/index.vue'),\n meta: {\n title: '店铺详情'\n }\n },\n {\n path: '/rever_list', // 我的预约页面\n name: 'reverlist',\n component: () => import('./pages/ReverList/index.vue')\n },\n {\n path: '/account_safe', // 账户与安全\n name: 'accountsafe',\n component: () => import('./pages/AccountSafe/index.vue')\n },\n {\n path: '/refund_type', // 选择退款类型\n name: 'refundType',\n component: () => import('./pages/RefundType/index.vue')\n },\n {\n path: '/refund_info', // 填写退货信息\n name: 'refundInfo',\n component: () => import('./pages/RefundInfo/index.vue')\n },\n {\n path: '/refund', // 退款\n name: 'refund',\n component: () => import('./pages/Refund/index.vue')\n },\n {\n path: '/refund_detail', // 退款详情\n name: 'refunddetail',\n component: () => import('./pages/RefundDetail/index.vue'),\n meta: {\n title: '退款详情'\n }\n },\n {\n path: '/digital_card', // 数字福卡列表\n name: 'digitalcard',\n component: () => import('./pages/DigitalCard/index.vue'),\n meta: {\n title: '数字福卡列表'\n }\n },\n {\n path: '/digital_card_detail', // 数字福卡详情\n name: 'digitalCardDetail',\n component: () => import('./pages/DigitalCardDetail/index.vue'),\n meta: {\n title: '数字福卡详情'\n }\n },\n {\n path: '/add_digital_card', // 添加数字福卡\n name: 'AddDigitalCard',\n component: () => import('./pages/DigitalCardAdd/index.vue'),\n meta: {\n title: '添加数字福卡'\n }\n },\n {\n path: '/yufu_jd_home', // 京东优选\n name: 'jdHome',\n component: () => import('./pages/JdHome/index.vue'),\n meta: {\n title: '京东优选'\n }\n },\n {\n path: '/discount_coupon', //专属权益\n name: 'DiscountCoupon',\n component: () => import('./pages/DiscountCoupon/index.vue'),\n meta: {\n title: '专属权益'\n }\n },\n {\n path: '/activity_rules', //活动规则\n name: 'ActivityRules',\n component: () => import('./pages/ActivityRules/index.vue'),\n meta: {\n title: '活动细则'\n }\n },\n {\n path: '/card_details', // 查看详情\n name: 'CardDetails',\n component: () => import('./pages/CardDetails/index.vue'),\n meta: {\n title: '查看详情'\n }\n },\n {\n path: '/credit_card',\n name: 'CreditCard',\n component: () => import('./pages/CreditCard/index.vue')\n },\n {\n path: '/recharge_center', // 充值中心\n name: 'rechargeCenter',\n component: () => import('./pages/RechargeCenter/index.vue'),\n meta: {\n title: '充值中心'\n }\n },\n {\n path: '/auth_space', // 数字福卡空白授权页面\n name: 'authspace',\n component: () => import('./pages/AuthSpace/index.vue'),\n meta: {\n title: ''\n }\n },\n {\n path: '/fuka', // 福卡首页H5\n name: 'fukaHome',\n component: () => import('./pages/FukaHome/index.vue')\n },\n {\n path: '/:pathMatch(.*)*',\n name: '404',\n component: () => import('./pages/404/index.vue'),\n meta: { title: '页面丢失了' }\n }\n]\n\nexport function createRouter() {\n const router = _createRouter({\n // use appropriate history implementation for server/client\n // import.meta.env.SSR is injected by Vite.\n // history: import.meta.env.SSR ? createMemoryHistory() : createWebHistory(),\n history: createWebHistory(),\n routes\n })\n router.beforeEach(async (to, from, next) => {\n if (\n (to.query.platformId && !localStorage.getItem('platformId')) ||\n (to.query.platformId && sessionStorage.getItem('platformId') !== to.query.platformId)\n ) {\n sessionStorage.setItem('platformId', to.query.platformId as string)\n }\n if (\n (to.query.channelId && !localStorage.getItem('channelId')) ||\n (to.query.channelId && sessionStorage.getItem('channelId') !== to.query.channelId)\n ) {\n sessionStorage.setItem('channelId', to.query.channelId as string)\n }\n if (\n (to.query.source && !localStorage.getItem('channelSource')) ||\n (to.query.source && localStorage.getItem('channelSource') !== to.query.source)\n ) {\n localStorage.setItem('channelSource', to.query.source as string)\n sessionStorage.setItem('source', to.query.source as string)\n }\n if (to.query.source === '2' && to.name === 'home') {\n // source 2 -- 福卡渠道\n document.title = '福卡商城'\n localStorage.setItem('channelSource', to.query.source)\n sessionStorage.setItem('source', to.query.source as string)\n } else {\n document.title = '数字福卡'\n }\n\n if (yfBridge.hasNativeMethod('getAppXClient')) {\n yfBridge.call('getAppXClient', (data: string) => {\n console.log('xClient 参数', JSON.parse(data))\n const res: any = JSON.parse(data)\n if (res && Number(res.source) === 1) {\n // 判断是否是数字福卡App环境\n sessionStorage.setItem('isApp', '1')\n }\n })\n }\n if (to.query.from === 'wechat_applet') {\n sessionStorage.setItem('isMiniProgram', '1')\n }\n\n // 包含sessionId,并且from=wechat_applet,就将本地sessionId和传入的做对比,判断是否获取用户信息\n // to.query.sessionId != JSON.parse(window.localStorage.getItem('sessionId') as string)\n if (to.query.sessionId) {\n if (to.query.sessionId !== (sessionStorage.getItem('historySessionId') as string)) {\n localStorage.setItem('sessionId', to.query.sessionId as string)\n // 记录历史sessionId\n sessionStorage.setItem('historySessionId', to.query.sessionId as string)\n } else if (to.query.sessionId !== (localStorage.getItem('sessionId') as string)) {\n // 更新url的sessionId为最新值\n router.replace({\n // name: 'mobileRecharge',\n path: from.path,\n query: { sessionId: localStorage.getItem('sessionId') as string }\n })\n }\n\n window.localStorage.setItem('sessionId', to.query.sessionId as string)\n const { data }: any = await getUserInfo(to.query.sessionId as string)\n window.localStorage.setItem('userInfo', JSON.stringify(data))\n }\n // 新版的用户标识改为了token\n if (to.query.token && to.query.token != (window.localStorage.getItem('sessionId') as string)) {\n window.localStorage.setItem('sessionId', to.query.token as string)\n const { data }: any = await getUserInfo(to.query.token as string)\n window.localStorage.setItem('userInfo', JSON.stringify(data))\n }\n // 这个目的是为了小程序先进入了多页面项目的页面,没有存储userinfo的信息做的处理\n if (\n to.query.from === 'wechat_applet' &&\n window.localStorage.getItem('sessionId') &&\n !window.localStorage.getItem('userInfo')\n ) {\n const { data }: any = await getUserInfo(window.localStorage.getItem('sessionId') as string)\n window.localStorage.setItem('userInfo', JSON.stringify(data))\n }\n\n next()\n })\n\n router.afterEach((to, from) => {\n AplusQueusSendPV({\n from: from.meta.title || ''\n })\n mBuryPoint('H5_OPEN_APP_PAGE', {\n from: from.meta.title || ''\n })\n if (to.meta.title) {\n document.title = to.meta.title as string\n if (BROWSER?.isiOS) {\n yfBridge.call('browserTitle', { title: to.meta.title })\n }\n }\n })\n\n return router\n}\n\nexport const router = createRouter()\n","/*\n * @Author: tengwei\n * @Date: 2022-01-19 14:47:31\n * @LastEditors: tengwei\n * @LastEditTime: 2023-05-06 14:23:33\n * @FilePath: /yufu_h5_ssr/src/apis/home.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\n// 首页相关接口\nimport axios from '@/utils/request'\n\ninterface recommendReqType {\n limit: number\n orderBy: string\n page: number\n req: string | number | null | object\n count: boolean\n}\n\n/**\n * 获取首页数据\n * @returns\n */\nexport const getHomeInfo = () => {\n return axios({\n method: 'post',\n url: '/goods-api/recommend/info'\n })\n}\n\n/**\n * 推荐接口\n * @param param0\n * @returns\n */\nexport const getHomeRecommendList = ({ limit, orderBy, page, req }: recommendReqType) => {\n return axios({\n method: 'post',\n url: '/goods-api/recommend/list-spu-by-topic-id',\n data: {\n limit,\n orderBy,\n page,\n req\n }\n })\n}\n\n/**\n * 获取首页顶部Topic\n * @returns\n */\nexport const getHomeTopics = () => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/show-category/all'\n })\n}\n\n/**\n * 商品展示分类列表分页接口\n * @param param0\n * @returns\n *\n */\nexport const getPageByCondition = ({\n limit,\n orderBy,\n page,\n req,\n count = false\n}: recommendReqType) => {\n return axios({\n method: 'POST',\n url: '/goods-api/goods/spu/page-by-condition',\n data: {\n limit,\n orderBy,\n page,\n req,\n count\n }\n })\n}\n\n/**\n *\n * @param data\n * @returns\n */\nexport const getPageCondition = ({\n limit,\n orderBy,\n page,\n req,\n count = false\n}: recommendReqType) => {\n return axios({\n method: 'post',\n url: '/goods-api/recommend/page',\n data: {\n limit,\n orderBy,\n page,\n req,\n count\n }\n })\n}\n\n/**\n * 获取推荐位的信息\n * @param topicId 1017-支付页banner,1019-个人页banner 1020-个人积分页\n */\nexport const fetchGetRecBanner = (topicId: any) => {\n return axios({\n method: 'GET',\n url: '/goods-api/recommend/query-content-by-topic-id',\n data: {\n topicId\n }\n })\n}\n\n/**\n * 获取 数字福卡 首页数据\n * @returns\n */\nexport const fetchHomeInfo = (id = '') => {\n return axios({\n method: 'GET',\n // url: '../../public/home.json'\n url: `/goods-api/homepage/index/v2?id=${id}`\n })\n}\n\n/**\n * 获取 数字福卡 首页猜你喜欢数据\n * @param param0\n * @returns\n */\nexport const fetchRemmendList = ({ limit, page, req }: recommendReqType) => {\n return axios({\n method: 'POST',\n url: '/goods-api/homepage/load_section',\n data: {\n limit,\n page,\n req\n }\n })\n}\n/**\n * 获取 数字福卡 首页猜你喜欢数据草稿箱\n * @param param0\n * @returns\n */\nexport const fetchRemmendListDraft = ({ limit, page, req }: recommendReqType) => {\n return axios({\n method: 'POST',\n url: '/goods-api/homepage/load_section/draft',\n data: {\n limit,\n page,\n req\n }\n })\n}\n\n/**\n * 获取免密登录 Code 值\n * @returns\n */\nexport const fetchAuthCode = () => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/get-yufumall-code'\n })\n}\n\n/**\n * 专题页相关店铺推荐列表\n * @param param0\n * @param param1 req {\"merId\":111,\"elementId\":111}\n * @returns\n */\nexport const getPageByMerchat = ({ limit, page, req }: recommendReqType) => {\n return axios({\n method: 'POST',\n url: '/goods-api/merchant/homepage/load_section',\n data: {\n limit,\n page,\n req\n }\n })\n}\n","import { getHomeInfo, getHomeTopics } from '@/apis/home'\nimport { Toast } from 'vant'\ninterface iconObj {\n name?: string\n type?: number\n url?: string\n title?: string\n desc?: string\n merType?: number | string\n}\n\ninterface Store {\n tabLists: iconObj[]\n iconLists: iconObj[]\n tabBottomList: iconObj[]\n bannerList: []\n firstNewDatas?: object\n nextDatas?: object\n firstRecommendList?: any[]\n nextRecommendList?: any[]\n recommendTopicResList?: any[]\n}\n\nconst state: Store = {\n bannerList: [],\n tabLists: [\n {\n name: '推荐',\n type: 1\n }\n ],\n iconLists: [],\n tabBottomList: [],\n firstNewDatas: {},\n firstRecommendList: [],\n nextDatas: {},\n nextRecommendList: [],\n recommendTopicResList: []\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_ICON_INFO(state: { iconLists: any }, payload: any) {\n state.iconLists = payload\n },\n SET_BANNER_INFO(state: { bannerList: any }, payload: any) {\n state.bannerList = payload\n },\n SET_ICON_BOTTOM(state: { tabBottomList: any }, payload: any) {\n state.tabBottomList = payload\n },\n SET_TOPICINFO(state: { tabLists: string | any[] }, payload: any) {\n state.tabLists = state.tabLists.concat(payload)\n },\n SET_FIRST_LISTS(state: { firstNewDatas: any; firstRecommendList: any }, payload: any) {\n state.firstNewDatas = payload\n state.firstRecommendList = [].concat(state.firstRecommendList, payload.items)\n },\n SET_NEXT_LISTS(state: { nextRecommendList: any }, payload: any) {\n state.nextRecommendList = payload\n // state.nextRecommendList = state.nextRecommendList.concat(payload.items)\n state.nextRecommendList = payload.items\n },\n SET_RECOMMEND_TOPIC_RESLIST(state: { recommendTopicResList: any }, payload: any) {\n state.recommendTopicResList = payload\n }\n}\n\nconst actions = {\n // 获取精选首页信息\n async getHomeInfo({ commit }: any) {\n try {\n const { data, code }: any = await getHomeInfo()\n if (code === '000000') {\n const { bannerInfoRes, menuInfoRes, spuTopicResList, recommendTopicResList }: any = data\n if (bannerInfoRes.recommendContentResList.length !== 0)\n commit('SET_BANNER_INFO', bannerInfoRes.recommendContentResList)\n if (menuInfoRes.recommendContentResList.length !== 0)\n commit('SET_ICON_INFO', menuInfoRes.recommendContentResList)\n if (spuTopicResList.length !== 0) commit('SET_ICON_BOTTOM', spuTopicResList)\n if (recommendTopicResList.length !== 0)\n commit('SET_RECOMMEND_TOPIC_RESLIST', recommendTopicResList)\n }\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n // 首页精选底部推荐列表\n // async getHomeRecommendList(\n // { commit }: any,\n // { limit = 10, orderBy = '1', page = 1, req = 0 }: recommendReqType\n // ) {\n // try {\n // const { data }: any = await getHomeRecommendList({\n // limit,\n // orderBy,\n // page,\n // req\n // })\n // commit('SET_FIRST_LISTS', data)\n // } catch (error) {\n // console.error('error ------> ', error)\n // }\n // },\n // 首页顶部Tab\n async getHomeTopics({ commit }: any) {\n try {\n const { data, code, msg }: any = await getHomeTopics()\n if (code !== '000000') return Toast(msg)\n commit('SET_TOPICINFO', data)\n } catch (error) {\n console.error('error ----> ', error)\n }\n }\n // async getPageCondition({ commit }: any, body: any) {\n // try {\n // const { data, code, msg }: any = await getPageCondition(body)\n // if (code !== '000000') return Toast(msg)\n // commit('SET_NEXT_LISTS', data)\n // } catch (error) {\n // console.error('error ---> ', error)\n // }\n // }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","// interface Good {\n// imgUrl: string\n// name: string\n// price: number\n// }\n\nconst state = {}\n\nconst getters = {}\n\nconst mutations = {}\n\nconst actions = {}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: your name\n * @Date: 2021-11-11 20:27:42\n * @LastEditTime: 2023-02-17 14:03:38\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/apis/cart.ts\n */\n// 购物车相关\n\nimport axios from '@/utils/request'\n\n/**\n * 添加商品到购物车\n * @param data\n * @returns\n */\nexport const addCart = (data: any) => {\n return axios({\n method: 'post',\n url: '/order-api/cart/add',\n data\n })\n}\n\n/**\n * 获取购物车\n * @returns\n */\nexport const getCart = (addressId = '') => {\n return axios({\n method: 'get',\n url: `/order-api/cart/get/v2?addressId=${addressId}`\n })\n}\n\n/**\n * 删除购物车商品\n * @param data\n * @returns\n */\nexport const delCart = (data: any) => {\n return axios({\n method: 'post',\n url: '/order-api/cart/delete/v2',\n data\n })\n}\n\n/**\n * 更新购物车商品数量\n * @param data\n * @returns\n */\nexport const updateCartNum = (data: any) => {\n return axios({\n method: 'post',\n url: '/order-api/cart/update/v2',\n data\n })\n}\n\n/**\n * 更新详情页中购物车数量\n * @returns\n */\nexport const getShopCartCount = () => {\n return axios({\n method: 'post',\n url: '/order-api/cart/count'\n })\n}\n\n/**\n * 购物车选中商品\n * @param data\n * @returns\n */\nexport const updateCartChecked = (data: any) => {\n return axios({\n method: 'post',\n url: '/order-api/cart/checked',\n data\n })\n}\n\n/**\n * 购物车取消选中商品\n * @param data\n * @returns\n */\nexport const updateCartUnChecked = (data: any) => {\n return axios({\n method: 'post',\n url: '/order-api/cart/un-checked',\n data\n })\n}\n","import {\n addCart,\n getCart,\n delCart,\n updateCartNum,\n updateCartUnChecked,\n updateCartChecked\n} from '@/apis/cart'\nimport { Toast } from 'vant'\n\ninterface State {\n cartProducts: any[]\n allChecked: boolean\n alldelChecked: boolean\n allProducts: any[]\n addCartSuccess?: boolean\n cartsInfo?: any\n addressInfo?: Object\n isShopChecked?: boolean\n isEditState?: boolean\n}\n\nlet CART_PRODUCTS: string | null | undefined\nif (typeof window !== 'undefined') {\n // 判断当前环境是否是浏览器环境\n CART_PRODUCTS = localStorage.getItem('cart-products')\n}\nlet skuLists: any[] = []\n\nconst state: State = {\n cartProducts: typeof CART_PRODUCTS === 'string' ? JSON.parse(CART_PRODUCTS) : [],\n allProducts: [],\n allChecked: false,\n alldelChecked: false,\n addCartSuccess: false,\n cartsInfo: {\n amount: '0'\n },\n addressInfo: {},\n isEditState: false,\n isShopChecked: true // 店铺按钮是否可选\n}\n\nconst getters = {\n // 总数量\n totalCount(state: any) {\n return state.allProducts.reduce((total: any, value: { num: number }) => total + value.num, 0)\n },\n // 总价\n totalPrice(state: any) {\n return state.cartsInfo.amount\n },\n // 选中商品数量\n checkedCount(state: any) {\n console.log('state', state)\n return 0\n }\n}\nconst mutations = {\n ADD_CART_SUCCESS(state: { addCartSuccess: any }, payload: any) {\n state.addCartSuccess = payload\n },\n GET_CART_PRODUCTS(\n state: {\n cartProducts: any\n allProducts: any\n cartsInfo: any\n allChecked: boolean\n isEditState: boolean\n },\n payload: any\n ) {\n state.cartsInfo = payload\n state.cartProducts = [].concat(payload.list)\n\n if (!state.isEditState) {\n // 非编辑状态\n state.cartProducts.forEach((item: any) => {\n state.allProducts = [].concat(state.allProducts, item.cartResList)\n item.selectState = item.cartResList\n .filter(\n (val: { ifHasStock: boolean; saleState: boolean }) => val.saleState && val.ifHasStock\n )\n .every((val: { selectState: any }) => val.selectState)\n })\n state.allChecked = state.allProducts\n .filter((val: { isEdit: boolean }) => !val.isEdit)\n .every((val: { selectState: any }) => val.selectState)\n } else {\n // 编辑状态\n state.cartProducts.forEach((item: any) => {\n state.allProducts = [].concat(state.allProducts, item.cartResList)\n item.selectState = item.cartResList.every((val: { selectState: any }) => val.selectState)\n })\n\n state.allChecked = state.allProducts.every((val: { selectState: any }) => val.selectState)\n }\n },\n CHANGE_ADDRESS_INFO(state: any, payload: any) {\n state.addressInfo = payload\n },\n CHANGE_EDIT_STATE(state: any, payload: boolean) {\n state.isEditState = payload\n state.allChecked = state.allProducts.every((val: { selectState: any }) => val.selectState)\n }\n}\n\nconst actions = {\n // 加入购物车\n async addCart({ commit }: any, body: any) {\n try {\n const { code }: any = await addCart(body)\n if (code === '000000') commit('ADD_CART_SUCCESS', true)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n // 获取购物车商品\n async getCart({ dispatch, state }: any) {\n try {\n const { data, code }: any = await getCart(state.addressInfo.id)\n if (code === '000000') {\n dispatch('updateCart', data)\n }\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n // 删除购物车商品\n async delCart({ commit, state }: any) {\n try {\n if (skuLists.length === 0) {\n Toast('请勾选您要删除的商品')\n return\n }\n const res: any = await delCart({\n skuIdList: skuLists,\n addressId: state.addressInfo.id\n })\n if (res.code === '000000') {\n skuLists = []\n await commit('GET_CART_PRODUCTS', res.data)\n Toast.success('删除成功')\n } else {\n Toast.fail(res.msg)\n }\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n // 更新购物车商品数量\n async updateCartNum({ dispatch, state, commit }: any, body: any) {\n try {\n const { data, code }: any = await updateCartNum(body)\n if (code === '000000') {\n if (!state.isEditState) {\n dispatch('updateCart', data)\n } else {\n const newData = state.cartProducts.map((item: { cartResList: any[] }) => {\n item.cartResList.map((val: any) => {\n if (val.skuId === body.skuId) val.num = val.num + body.updateNum\n })\n\n return item\n })\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: state.cartsInfo.amount })\n }\n }\n } catch (error) {\n console.error('error----->', error)\n }\n },\n async updateChooseGood({ dispatch, state }: any, body: any) {\n let res: any = null\n if (body.selectState) {\n // 选中状态\n res = await updateCartUnChecked(body.req)\n } else {\n // 未选中状态\n res = await updateCartChecked(body.req)\n }\n if (res.code === '000000') {\n if (!state.isEditState) {\n dispatch('getCart')\n } else {\n if (!body.isShop) {\n // 单商品编辑\n dispatch('updateDelSkus', body)\n } else {\n dispatch('updateDelShopSkus', { ...body, selectState: !body.selectState })\n }\n }\n }\n },\n changeAddr({ commit }: any, item: any) {\n commit('CHANGE_ADDRESS_INFO', item)\n },\n // 全选\n async updateAllProductChecked({ dispatch, state, commit }: any) {\n if (!state.isEditState) {\n state.allProducts\n .filter((item: { isEdit: boolean }) => !item.isEdit)\n .map((item: any) => {\n if (!skuLists.includes(item.skuId)) skuLists.push(item.skuId)\n })\n const body = {\n req: {\n addressId: state.addressInfo.id,\n skuIdList: skuLists\n },\n selectState: state.allChecked\n }\n await dispatch('updateChooseGood', body)\n if (state.allChecked) {\n skuLists = []\n }\n } else {\n const newData = state.cartProducts.map(\n (item: { selectState: boolean; cartResList: any[] }) => {\n item.cartResList.map((val: any) => {\n val.selectState = !state.allChecked\n })\n item.selectState = !state.allChecked\n return item\n }\n )\n if (!state.allChecked) {\n state.allProducts.map((item: any) => {\n if (!skuLists.includes(item.skuId) && item.selectState) skuLists.push(item.skuId)\n })\n } else {\n skuLists = []\n }\n\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: state.cartsInfo.amount })\n }\n },\n // 进入/退出管理\n async updateDelChecked({ dispatch, commit }: any, data: any) {\n commit('CHANGE_EDIT_STATE', data)\n if (data) {\n const newData = state.cartProducts.map(\n (item: { isEditShop: boolean; cartResList: any[]; selectState: boolean }) => {\n item.isEditShop = false\n item.cartResList.map((val: any) => {\n val.isEdit = false\n })\n return item\n }\n )\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: state.cartsInfo.amount })\n } else {\n dispatch('getCart')\n }\n },\n async updateDelShopSkus({ commit, state }: any, data: any) {\n if (data.selectState) {\n data.cartResList.forEach((good: { selectState: boolean; skuId: string }) => {\n good.selectState = data.selectState\n if (!skuLists.includes(data.skuId)) skuLists.push(good.skuId)\n })\n } else {\n data.cartResList.forEach((good: { selectState: boolean; skuId: string }) => {\n good.selectState = data.selectState\n const index = skuLists.findIndex((val: any) => val === good.skuId)\n skuLists.splice(index, 1)\n })\n }\n // data.selectState = data.cartResList.some((prod: { selectState: boolean }) => !prod.selectState)\n const newData = state.cartProducts.map(\n (item: { selectState: boolean; cartResList: any[]; merchantId: string }) => {\n if (item.merchantId === data.merchantId) {\n item.selectState = data.selectState\n item.cartResList.map((val: any) => {\n val.selectState = data.selectState\n })\n }\n\n item.selectState = item.cartResList.every((prod: { selectState: any }) => prod.selectState)\n return item\n }\n )\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: state.cartsInfo.amount })\n },\n async updateDelSkus({ commit, state }: any, body: any) {\n const shopProducts = state.cartProducts.find(\n (shop: { merchantId: any }) => shop.merchantId === body.merchantId\n )\n shopProducts.selectState = shopProducts.cartResList.every(\n (prod: { selectState: any }) => prod.selectState\n )\n if (!body.selectState && !skuLists.includes(body.skuId)) {\n skuLists.push(body.skuId)\n } else {\n const index = skuLists.findIndex((val: any) => val === body.skuId)\n skuLists.splice(index, 1)\n }\n const newData = state.cartProducts.map((item: { selectState: boolean; cartResList: any[] }) => {\n item.cartResList.map((val: any) => {\n if (val.skuId === body.skuId) val.selectState = !body.selectState\n })\n item.selectState = item.cartResList.every((prod: { selectState: any }) => prod.selectState)\n return item\n })\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: state.cartsInfo.amount })\n },\n // 更新购物车数据\n async updateCart({ commit }: any, data: any) {\n const newData = data.list.map(\n (item: {\n saleShopState: boolean\n isEdit: boolean\n ifShopHasStock: boolean\n isEditShop: boolean\n cartResList: any[]\n }) => {\n item.isEditShop = item.cartResList.every((val: any) => !val.saleState || !val.ifHasStock)\n item.cartResList.map((val: any) => {\n val.isEdit = !val.saleState || !val.ifHasStock\n if (val.selectState && !skuLists.includes(val.skuId)) {\n skuLists.push(val.skuId)\n }\n })\n return item\n }\n )\n state.allProducts = []\n commit('GET_CART_PRODUCTS', { list: newData, amount: data.amount })\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","// 用户相关接口\n\nimport axios from '@/utils/request'\n\n// 验证码登录\nexport const loginCap = (data: object) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/captcha/login',\n data\n })\n}\n\n// 获取验证码\nexport const getCaptcha = (mobile: number | string) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/get-login-captcha',\n data: {\n mobile\n }\n })\n}\n\n/**\n *\n * @param mobile 手机号\n * @param captcha 验证码\n */\nexport const validCaptcha = (data: object) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/captcha/forget-password',\n data\n })\n}\n\n/**\n * 重置密码\n * @param data\n * @returns\n */\nexport const resetPwd = (data: object) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/reset-password',\n data\n })\n}\n\n/**\n *\n * @param data username 用户名\n * @param data password 密码\n * @returns\n */\nexport const loginPwd = (data: object) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/password/login',\n data\n })\n}\n\ninterface RealnameAuthType {\n idCard: string\n name: string\n}\n/**\n * 实名\n * @param data\n * @returns\n */\nexport const fetchRealnameAuth = (data: RealnameAuthType) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/real-name/save',\n data\n })\n}\n\n/**\n * 退出登录\n * @param data\n * @returns\n */\nexport const logOut = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/member/sign-out',\n data\n })\n}\n\n/**\n * 切换环境\n */\nexport const fetchSwitchProdDev = () => {\n return axios({\n method: 'GET',\n url: '/uc-api/switch/mini-program'\n })\n}\n","import { loginCap, loginPwd, validCaptcha, resetPwd } from '@/apis/login'\nimport { getResetCaptcha } from '@/apis/user'\nimport { Toast } from 'vant'\n\nexport interface State {\n mobile?: string\n code?: string\n codeSuccess?: boolean\n type?: string\n titleRight?: string\n titleForm?: string\n sessionId?: string\n userId?: string\n resetPasswordSuccess?: boolean\n authActiveNum?: number // 实名认证页面的步骤\n}\n\nlet SESSION: string | null | undefined\nif (typeof window !== 'undefined') {\n // 判断当前环境是否是浏览器环境\n SESSION = localStorage.getItem('sessionId')\n}\n\nconst state: State = {\n mobile: '',\n code: '',\n codeSuccess: false,\n type: 'pwd',\n sessionId: SESSION || '',\n userId: '',\n resetPasswordSuccess: false,\n authActiveNum: 0\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_CODE(state: State, payload: any) {\n state.code = payload\n },\n SET_CODE_SUCCESS(state: State, payload: any) {\n state.codeSuccess = payload\n },\n SET_TYPE(state: State, payload: any) {\n state.type = payload\n },\n SET_TOKEN(state: { sessionId: string }, payload: any) {\n localStorage.setItem('sessionId', payload.sessionId)\n localStorage.setItem('userInfo', JSON.stringify(payload))\n state.sessionId = payload\n },\n VALID_CAPTCHA_SUCCESS(state: { userId: string }, payload: string) {\n state.userId = payload\n },\n SET_PASSWORD_SUCCESS(state: { resetPasswordSuccess: boolean }) {\n state.resetPasswordSuccess = true\n },\n SET_AUTH_ACTIVITE_NUM(state: State, payload: number) {\n state.authActiveNum = payload\n }\n}\n\nconst actions = {\n // 获取验证码(忘记密码时的验证码)\n async getCaptchaCode({ commit }: unknown, mobile: string) {\n const response: any = await getResetCaptcha(mobile)\n if (response.code === '000000') {\n commit('SET_CODE', response.data)\n commit('SET_CODE_SUCCESS', true)\n }\n },\n // 验证码登录\n async loginCap({ commit }: unknown, data: object) {\n const response: any = await loginCap(data)\n if (response.code !== '000000') return Toast(response.msg)\n commit('SET_TOKEN', response.data)\n },\n // 验证手机号验证码\n async validCaptcha({ commit }: unknown, data: object) {\n try {\n const response: any = await validCaptcha(data)\n if (response.code !== '000000') return Toast(response.msg)\n commit('VALID_CAPTCHA_SUCCESS', response.data)\n } catch (error) {\n console.log('error', error)\n }\n },\n // 账号密码登录\n async loginPwd({ commit }: unknown, data: object) {\n const response: any = await loginPwd(data)\n if (response.code !== '000000') return Toast(response.msg)\n commit('SET_TOKEN', response.data)\n },\n // 重置密码\n async resetPwd({ commit }: unknown, data: object) {\n const response: any = await resetPwd(data)\n if (response.code !== '000000') return Toast(response.msg)\n commit('SET_PASSWORD_SUCCESS')\n },\n changeType({ commit }: unknown, type: string) {\n commit('SET_TYPE', type)\n },\n // 设置实名认证的activite\n setAuthActiviteNum({ commit }: unknown, type: number) {\n commit('SET_AUTH_ACTIVITE_NUM', type)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: tengwei\n * @Date: 2021-11-08 20:39:08\n * @LastEditTime: 2023-03-09 15:54:25\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/apis/search.ts\n */\n// 搜索相关\n\nimport axios from '@/utils/request'\n\n/**\n *\n * @param data 搜索参数\n * @returns\n */\nexport const searchListAndShop = (data: object) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/spu/search-new',\n data\n })\n}\n\n/**\n * 搜索热词接口\n * @returns\n */\nexport const searchHot = () => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/hot-word/list/v2'\n })\n}\n\n/**\n * 搜索默认词\n * @returns\n */\nexport const searchDefault = () => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/default-word/query-valid'\n })\n}\n\n/**\n * 包含排序的搜索接口\n * @param data\n * @returns\n */\nexport const searchListV3 = (data: object) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/spu/search/v3',\n data\n })\n}\n\n/**\n * 根据条件查询商品spu的筛选条件\n * @returns\n */\nexport const fetchScreenCodition = (data: object) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/spu/search/screen',\n data\n })\n}\n\n/**\n * 根据条件联想查询\n * @returns\n */\nexport const fetchSuggestWords = (keyword: string) => {\n return axios({\n method: 'post',\n url: '/goods-api/suggest/words',\n data: {\n keyword\n }\n })\n}\n","/*\n * @Author: zhangsong@yufu.cn\n * @Date: 2022-08-23 19:02:41\n * @LastEditors: tengwei\n * @LastEditTime: 2023-03-09 15:54:35\n * @FilePath: /yufu_h5_ssr/src/store/modules/search.ts\n * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n */\nimport { searchListV3, fetchScreenCodition } from '@/apis/search'\nimport { Toast } from 'vant'\nimport _ from 'lodash'\n\ninterface ReqType {\n brandIdList?: number[] | string[] // 品牌ID\n categoryIdList?: number[] | string[] // 分类ID\n collation?: number // 排序规则:1-正序,2-逆序\n keyWord?: string // 搜索关键词\n maxPrice?: number // 价格区间-最大价格\n minPrice?: number // 价格区间-最小价格\n sortType?: number // 排序类型:1-综合排序(毛利),2-销量排序,3-价格排序\n merId?: number // 商铺ID\n}\n\ninterface SearchParamsType {\n limit: number\n orderBy: number\n page: number\n req: ReqType\n}\n\ninterface State {\n resultList: object[]\n traceId?: string // 数据追踪ID\n brandList: object[] // 品牌列表\n categoryList: object[] // 分类列表\n resultCode: boolean\n // reqParams: SearchParamsType\n reqParams: SearchParamsType\n loading: boolean // 加载loading\n finished: boolean // 是否加载完成\n selectBrands: any // 筛选条件选中的品牌\n selectCategories: any // 筛选条件选中的分类\n totalNum: number | string\n isShowClass?: boolean // 是否展示分类\n minPrice?: string | number | null // 筛选最小值\n maxPrice?: string | number | null // 筛选最大值\n}\n\nconst state: State = {\n resultList: [],\n brandList: [],\n categoryList: [],\n resultCode: false,\n loading: false,\n finished: false,\n reqParams: {\n limit: 24,\n orderBy: 1,\n page: 1,\n req: {}\n },\n selectBrands: [],\n selectCategories: [],\n totalNum: 0,\n isShowClass: true,\n minPrice: null,\n maxPrice: null,\n traceId: ''\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_RESULT_LIST(state: { resultList: object[] }, payload: object[]) {\n state.resultList = [...state.resultList, ...payload]\n },\n SET_RESULT_TRACEID(state: { traceId: string }, payload: string) {\n state.traceId = payload\n },\n SET_RESULT_LIST_NO(state: { resultList: object[] }) {\n state.resultList = []\n },\n SET_BRAND_LIST(state: { brandList: object[] }, payload: object[]) {\n state.brandList = payload\n },\n SET_CATEGORY_LIST(state: { categoryList: object[] }, payload: object[]) {\n state.categoryList = payload\n },\n SET_LIST_LOADING(state: { loading: boolean }, payload: boolean) {\n state.loading = payload\n },\n SET_LIST_FINISHED(state: { finished: boolean }, payload: boolean) {\n state.finished = payload\n },\n SELECT_BRANDS(state: { selectBrands: any; reqParams: any }, payload: any) {\n state.selectBrands = payload\n state.reqParams.req['brandIdList'] = payload\n },\n SELECT_CATETORIES(state: { selectCategories: any; reqParams: any }, payload: any) {\n state.selectCategories = payload\n state.reqParams.req['categoryIdList'] = payload\n },\n ONLY_RESET_SEARCH_CONDITION(state: {\n selectBrands: any\n selectCategories: any\n reqParams: any\n isShowClass: boolean\n minPrice: any\n maxPrice: any\n }) {\n if (!state.isShowClass) {\n state.reqParams.req['brandIdList'] = []\n state.selectBrands = []\n state.maxPrice = null\n state.minPrice = null\n return\n }\n state.reqParams.req['brandIdList'] = []\n state.selectBrands = []\n state.reqParams.req['categoryIdList'] = []\n state.selectCategories = []\n state.maxPrice = null\n state.minPrice = null\n },\n RESET_ALL_CONDITION(state: {\n selectBrands: any\n selectCategories: any\n reqParams: any\n resultList: any\n brandList: any\n }) {\n state.reqParams.req['brandIdList'] = []\n state.reqParams.req['categoryIdList'] = []\n state.selectCategories = []\n state.selectBrands = []\n state.resultList = []\n state.brandList = []\n },\n SET_SEARCH_PARAMS(state: any, payload: any) {\n state.reqParams = _.mergeWith(state.reqParams, payload)\n },\n SET_SALE_GOOD_NUM(state: any, payload: any) {\n state.totalNum = payload\n },\n SET_IS_SHOW_CLASS(state: { isShowClass: boolean }, payload: any) {\n state.isShowClass = payload\n },\n SET_GOOD_MAXPRICE(state: any, payload: any) {\n state.maxPrice = payload\n },\n SET_GOOD_MINPRICE(state: any, payload: any) {\n state.minPrice = payload\n },\n RESET_GOOD_PRICE(state: any) {\n state.minPrice = null\n state.maxPrice = null\n }\n}\n\nconst actions = {\n setResultNo({ commit }: any) {\n commit('SET_RESULT_LIST_NO')\n },\n async getSearch({ commit }: any, data: any) {\n // 搜索\n try {\n if (data.req) {\n if (!_.isEqual(state.reqParams.req, data.req)) {\n state.resultList = []\n commit('SET_LIST_LOADING', false)\n commit('SET_LIST_FINISHED', false)\n }\n }\n state.reqParams = _.mergeWith(state.reqParams, data)\n commit('SET_LIST_LOADING', true)\n if (state.finished) return\n const response: any = await searchListV3(state.reqParams)\n if (response.code !== '000000') return Toast(response.msg)\n commit('SET_SALE_GOOD_NUM', response.data.totalNum)\n if (response.data.items.length > 0) {\n commit('SET_RESULT_LIST', response.data.items)\n commit('SET_RESULT_TRACEID', response.data.traceId)\n commit('SET_LIST_LOADING', false)\n } else {\n commit('SET_RESULT_LIST', response.data.items)\n commit('SET_LIST_LOADING', true)\n commit('SET_LIST_FINISHED', true)\n }\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async getCondtion({ commit }: any, data: any) {\n // 获取筛选条件\n try {\n const body = {\n keyWord: data.req.keyWord,\n merId: data.req.merId || '',\n brandIdList: data.req.brandIdList || [],\n categoryIdList: data.req.categoryIdList || []\n // collation: 0,\n // maxPrice: 0,\n // minPrice: 0,\n // sortType: 0\n }\n const response: any = await fetchScreenCodition(body)\n if (response.code !== '000000') return Toast(response.msg)\n commit('SET_BRAND_LIST', response.data.brandList)\n commit('SET_CATEGORY_LIST', response.data.categoryList)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n chooseBrand({ commit }: any, data: any) {\n // 选择品牌\n if (state.selectBrands.includes(data!.id)) {\n state.selectBrands = state.selectBrands.filter((val: any) => val !== data!.id)\n } else {\n state.selectBrands.push(data.id)\n }\n commit('SELECT_BRANDS', [...state.selectBrands])\n },\n chooseCategory({ commit }: any, data: any) {\n // 选择分类\n if (state.selectCategories.includes(data!.id)) {\n state.selectCategories = []\n } else if (state.selectCategories.length > 0 && !state.selectCategories.includes(data!.id)) {\n state.selectCategories = [data.id]\n } else {\n state.selectCategories.push(data.id)\n }\n commit('SELECT_CATETORIES', [...state.selectCategories])\n },\n // changePrice({ commit }: any, data: any) {\n // // 修改价格\n // console.log('修改价格', commit, data)\n // },\n resetCondition({ commit }: any) {\n commit('RESET_ALL_CONDITION')\n },\n onlyresetCondition({ commit }: any, isResetClass: boolean) {\n // 仅重置筛选参数\n commit('ONLY_RESET_SEARCH_CONDITION', isResetClass)\n },\n setSeachParams({ commit }: any, data: any) {\n commit('SET_SEARCH_PARAMS', data)\n },\n setIsShowClass({ commit }: any, data: any) {\n commit('SET_IS_SHOW_CLASS', data)\n },\n setGoodMaxPrice({ commit }: any, data: any) {\n commit('SET_GOOD_MAXPRICE', data)\n },\n setGoodMinPrice({ commit }: any, data: any) {\n commit('SET_GOOD_MINPRICE', data)\n },\n resetGoodPrice({ commit }: any) {\n commit('RESET_GOOD_PRICE')\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: your name\n * @Date: 2021-11-11 10:46:44\n * @LastEditTime: 2023-03-02 10:47:49\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/apis/detail.ts\n */\n// 详情相关接口\nimport axios from '@/utils/request'\n\n/**\n * 获取详情页信息\n * @param id\n * @returns\n */\nexport const getGoodDetail = (id: string) => {\n return axios({\n method: 'get',\n url: `/goods-api/goods/sku/detail?id=${id}`\n })\n}\n\n/**\n * 获取商品详情\n * @param spuId\n * @returns\n * integer($int32)\n * 商品类型;1-普通实体商品,2-电子福卡,3-手机充值,4-麦当劳,5-积分,6-卡汇,7-加油卡\n */\nexport const getSpuDetail = (spuId: string) => {\n return axios({\n method: 'get',\n url: `/goods-api/goods/spu/detail/v2?spuId=${spuId}`\n })\n}\n\n/**\n * 根据spu id和规格列表查询规格集合和sku\n * @param data\n * @returns\n */\nexport const getSkuSpec = (data: any) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/sku/query-sku-by-spu-id-and-spec',\n data\n })\n}\n\n/**\n * 根据spuId获取商铺信息\n * @param spuId\n * @returns\n */\nexport const getMerchantInfoBySpu = (spuId: string) => {\n return axios({\n method: 'get',\n url: `/goods-api/goods/spu/merchant?spuId=${spuId}`\n })\n}\n\n/**\n * 预约/抢购按钮接口\n * @param activityId 活动ID\n * @returns\n */\nexport const joinActivity = (activityId: string) => {\n return axios({\n method: 'post',\n url: `/goods-api/goods/activity/join?activityId=${activityId}`\n })\n}\n\n/**\n * 获取商铺信息\n * @param id\n */\nexport const getShopInfo = (id: number) => {\n return axios({\n method: 'GET',\n url: `/goods-api/merchant/info/find-by-id?id=${id}`\n })\n}\n","/*\n * @Author: your name\n * @Date: 2021-11-11 10:49:33\n * @LastEditTime: 2023-03-02 16:32:30\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/store/modules/detail.ts\n */\n\nimport { getSpuDetail, getSkuSpec, getMerchantInfoBySpu } from '@/apis/detail'\nimport { addCart } from '@/apis/cart'\ninterface State {\n defaultData: object\n addCartSuccess?: boolean\n goodsSku: object\n merchant?: object | null\n salePrice?: string | null\n chooseGoodNum?: string | number\n // specGroupList: any[]\n}\n\nconst state: State = {\n defaultData: {},\n addCartSuccess: false,\n goodsSku: {},\n merchant: null,\n salePrice: null,\n chooseGoodNum: 1\n}\n\nconst getters = {\n defaultData(state: { defaultData: any }) {\n return Object.assign({}, state.defaultData)\n },\n specGroupList(state: { defaultData: { specGroupList: any } }) {\n return state.defaultData && state.defaultData.specGroupList\n },\n chooseSkuDetail(state: { goodsSku: any }) {\n let selectedTxt = ''\n if (state.goodsSku && JSON.stringify(state.goodsSku) !== '{}') {\n state.goodsSku.specList.forEach((val: any) => {\n selectedTxt += `${val.value} `\n })\n }\n return selectedTxt\n }\n}\n\nconst mutations = {\n SET_DEFAULT_DETAIL_DATA(state: { defaultData: any }, payload: any) {\n state.defaultData = payload\n },\n SET_SPECGROUP_LIST(state: { defaultData: { specGroupList: any } }, payload: any) {\n state.defaultData.specGroupList = payload\n },\n SET_GOODS_SKU(state: { goodsSku: any }, payload: any) {\n state.goodsSku = payload\n },\n SET_MERCHANT_INFO(state: any, payload: any) {\n state.merchant = payload\n },\n RESET_GOODS_SKUS(state: any) {\n state.goodsSku = {}\n },\n SET_CHOOSE_GOOD_NUM(state: { chooseGoodNum: string | number }, payload: number) {\n state.chooseGoodNum = payload\n }\n}\n\nconst actions = {\n async getMerchant({ commit }: any, spuId: string) {\n try {\n const { data, code }: any = await getMerchantInfoBySpu(spuId)\n if (code === '000000') {\n commit('SET_MERCHANT_INFO', data)\n }\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async getSpuDetail({ commit }: any, spuId: string) {\n try {\n const { data }: any = await getSpuDetail(spuId)\n commit('SET_DEFAULT_DETAIL_DATA', data)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async addCart({ commit }: any, req: any) {\n try {\n const { data, code, msg }: any = await addCart(req)\n console.log('data', data, code, msg)\n console.log('commit--used', commit)\n } catch (error) {\n console.error('error ---> ', error)\n }\n },\n async getSkuSpec({ commit }: any, req: any) {\n try {\n const { data }: any = await getSkuSpec(req)\n commit('SET_GOODS_SKU', data.goodsSku)\n commit('SET_SPECGROUP_LIST', data.specGroupList)\n } catch (error) {\n console.error('error -----> ', error)\n }\n },\n async resetGoodSpu({ commit }: any) {\n commit('RESET_GOODS_SKUS')\n },\n async setGoodNum({ commit }: any, data: number) {\n commit('SET_CHOOSE_GOOD_NUM', data)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: your name\n * @Date: 2021-11-12 10:15:37\n * @LastEditTime: 2021-11-16 18:44:41\n * @LastEditors: your name\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/store/modules/user.ts\n */\nimport { getUserInfo } from '@/apis/user'\n\ninterface State {\n userInfo: object\n}\n\nconst state: State = {\n userInfo: {}\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_USER_INFO(state: { userInfo: any }, payload: any) {\n state.userInfo = payload\n }\n}\n\nconst actions = {\n async getUserInfo({ commit }: any, sessionId: string) {\n try {\n const { data }: any = await getUserInfo(sessionId)\n commit('SET_USER_INFO', data)\n } catch (error) {\n console.error('error ----> ', error)\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: your name\n * @Date: 2021-11-15 13:46:24\n * @LastEditTime: 2023-03-02 16:14:42\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/apis/address.ts\n */\nimport axios from '@/utils/request'\n\n/**\n * 查询同级区域\n * @returns\n */\nexport const getRegion = (parentCode = '') => {\n return axios({\n method: 'get',\n url: `/goods-api/goods/region/list-same-level?parentCode=${parentCode}`\n })\n}\n\n/**\n * 获取地址列表\n * @returns\n */\nexport const getAddressList = () => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/receive/address/list'\n })\n}\n\n/**\n * 保存地址\n * @param data\n * @returns\n */\nexport const saveAddress = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/receive/address/save',\n data\n })\n}\n\n/**\n * 运费计算\n * @param param0\n * @returns\n */\nexport const calculateFee = (data: any) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/spu/calculate-delivery-fee/v2',\n data\n })\n}\n\n/**\n * 根据id获取地址信息\n * @param addressId 地址ID\n * @returns\n */\nexport const findAddressById = (addressId: string) => {\n return axios({\n method: 'post',\n url: `/uc-api/uc/receive/address/findById?id=${addressId}`\n })\n}\n\n/**\n * 删除会员收货地址接口\n * @param idList\n * @returns\n */\nexport const delAddressById = (data: any) => {\n return axios({\n method: 'post',\n url: '/uc-api/uc/receive/address/delete',\n data\n })\n}\n","import {\n calculateFee,\n findAddressById,\n getAddressList,\n getRegion,\n saveAddress\n} from '@/apis/address'\n\ninterface State {\n areaLists: any[]\n saveAddressSuccess: boolean\n feeDetail: object\n editAddres: object\n addressInfo: any\n singleAddressInfo: object // 添加地址之后的单地址详情\n}\n\nconst state: State = {\n areaLists: [],\n saveAddressSuccess: false,\n addressInfo: {\n addressList: [],\n success: false\n },\n feeDetail: {},\n editAddres: {},\n singleAddressInfo: {}\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_AREA_LIST(state: any, payload: any) {\n state.areaLists = payload\n },\n SAVE_ADDRESS_SUCCESS(state: any, payload: any) {\n // state.saveAddressSuccess = payload\n state.singleAddressInfo = payload.data\n },\n SET_ADDRESS_LIST(state: { addressInfo: any }, payload: any) {\n state.addressInfo = {\n addressList: payload.data || [],\n success: payload.code === '000000' ? true : false\n }\n },\n SET_FEE_DETAIL(state: { feeDetail: any }, payload: any) {\n state.feeDetail = payload\n },\n SET_EDIT_ADDRESS(state: { editAddres: any }, payload: any) {\n state.editAddres = payload\n }\n}\n\nconst actions = {\n async getRegion({ commit }: any, parentCode: string) {\n try {\n const { data }: any = await getRegion(parentCode)\n commit('SET_AREA_LIST', data)\n } catch (error) {\n console.error('error -----> ', error)\n }\n },\n async getAddressList({ commit }: any) {\n try {\n const res: any = await getAddressList()\n commit('SET_ADDRESS_LIST', res)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async saveAddress({ commit }: any, body: any) {\n try {\n const res: any = await saveAddress(body)\n commit('SAVE_ADDRESS_SUCCESS', res)\n // commit('SAVE_ADDRESS_SUCCESS', true)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async calculateFee({ commit }: any, body: any) {\n try {\n const { data }: any = await calculateFee(body)\n commit('SET_FEE_DETAIL', data)\n } catch (error) {\n console.error('error ----> ', error)\n }\n },\n async findAddressById({ commit }: any, body: string) {\n try {\n const { data }: any = await findAddressById(body)\n commit('SET_EDIT_ADDRESS', data)\n } catch (error) {\n console.error('error ----> ', error)\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","// 订单相关接口\nimport axios from '@/utils/request'\n\nexport type OrderSkuBOListType = {\n merId: string\n num: number\n originPrice: string\n sellPrice: string\n skuId: string\n spuId: string\n activityId?: string\n addFrom?: string\n rechargeAccount?: string\n}\ninterface fetchGetOrderPreviewType {\n addressId: string | number\n rechargeAccount?: string | number\n orderSkuBOList: OrderSkuBOListType[]\n}\n/**\n * 获取确认订单的接口信息\n * @param data\n * @returns\n */\nexport const fetchGetOrderPreview = ({\n addressId,\n rechargeAccount,\n orderSkuBOList\n}: fetchGetOrderPreviewType) => {\n return axios({\n method: 'post',\n url: '/order-api/order/preview',\n data: {\n addressId,\n rechargeAccount,\n orderSkuResList: orderSkuBOList\n }\n })\n}\n\ninterface CreateOrderType {\n channelId?: string\n ifIntegral: 0 | 1 // 是否使用积分抵扣1-是;0-否\n ifSingleCard: 0 | 1 // 是否使用数字福卡抵扣 1-是;0-否\n orderSkuResList: OrderSkuBOListType[]\n platformId?: string\n receiveAddressId?: string\n source?: string\n totalPrice: string\n type: 0 | 1 // 0-购物车结算,1-立即购买结算\n useIntegral?: number // 使用积分数量\n goodsSpuType: number // 商品类型 1-普通实体商品 2-电子福卡 3-话费充值\n rechargeMobile?: string // 充值手机号\n orderRemarkResList?: string // 用户备注信息\n integralPaySmsCode?: string | number\n integralPlatformOrderId?: string | number\n singleCardSmsCode?: string // 数字福卡支付验证码\n singleCardList: any[] // 使用的数字福卡列表\n couponCode?: string // 使用优惠券\n singleCardServiceAmount?: string // 数字福卡手续费\n realNameAuthenticationId?: string | number // 海淘提交成功之后返回的ID\n}\n/**\n * 创建订单\n * @param param0\n */\nexport const fetchCreateOrder = ({\n channelId,\n ifIntegral,\n ifSingleCard,\n orderSkuResList,\n platformId,\n source,\n totalPrice,\n type,\n useIntegral,\n goodsSpuType,\n rechargeMobile,\n orderRemarkResList,\n receiveAddressId,\n integralPaySmsCode,\n singleCardSmsCode,\n integralPlatformOrderId,\n singleCardList,\n couponCode,\n singleCardServiceAmount,\n realNameAuthenticationId\n}: CreateOrderType) => {\n return axios({\n method: 'post',\n url: '/order-api/order/creat/v2',\n data: {\n channelId,\n ifIntegral,\n ifSingleCard,\n integralPaySmsCode,\n singleCardSmsCode,\n integralPlatformOrderId,\n mobile:\n typeof window !== 'undefined' &&\n localStorage.getItem('userInfo') &&\n JSON.parse(localStorage.getItem('userInfo') as string).mobile,\n orderSkuResList,\n platformId,\n receiveAddressId,\n source,\n totalPrice,\n type,\n useIntegral,\n goodsSpuType,\n rechargeMobile:\n rechargeMobile ||\n (typeof window !== 'undefined' &&\n localStorage.getItem('userInfo') &&\n JSON.parse(localStorage.getItem('userInfo') as string).mobile),\n orderRemarkResList,\n singleCardList,\n couponCode,\n singleCardServiceAmount,\n realNameAuthenticationId\n }\n })\n}\n\n/**\n * 获取订单列表接口\n * @param orderStatus 订单状态1000-已下单,待支付;1001-超时自动取消;1002-支付前手动取消;1003-支付成功待发货;1004-待收货;1006-完成;\n * @returns\n */\nexport const fetchGetOrderList = (options: any = {}) => {\n const { limit = 10, page = 1, req = {} } = options\n return axios({\n method: 'post',\n url: '/order-api/order/list/page',\n data: {\n limit,\n page,\n req\n }\n })\n}\n/**\n * 获取各状态订单数量\n * @returns\n */\nexport const getAllOrderCount = () => {\n return axios({\n method: 'post',\n url: '/order-api/order/count'\n })\n}\n\n/**\n * 获取主订单详情\n * @param orderSn\n * @returns\n */\nexport const getOrderMainDetail = (orderSn: string | number) => {\n return axios({\n method: 'post',\n url: `/order-api/order/main/detail?orderSn=${orderSn}`\n })\n}\n/**\n * 获取主订单详情\n * @param orderSn\n * @returns\n */\nexport const getOrderSubDetail = (orderSn: string | number) => {\n return axios({\n method: 'post',\n url: `/order-api/order/sub/detail?orderSn=${orderSn}`\n })\n}\n\n/**\n * 用户未支付 手动取消订单\n * @param param0\n * @returns\n */\nexport const cancelOrder = (params: any) => {\n return axios({\n method: 'post',\n url: '/order-api/order/cancel',\n data: params\n })\n}\n\n/**\n * 用户删除订单\n * @param cancelOrderReq 订单号\n * @param type 订单类型:0-子订单;1-主订单\n * @returns\n */\nexport const delOrder = (cancelOrderReq: string, type: string | number) => {\n return axios({\n method: 'post',\n url: `/order-api/order/delete?cancelOrderReq=${cancelOrderReq}&type=${type}`\n })\n}\n\n/**\n * 获取快递物流信息\n * @param orderSn 快递单号\n * @param mobile 收/寄件人手机号后四位,顺丰快递必须填写本字段。\n * @returns\n */\nexport const fetchGetLogistics = (orderSn: string, mobile?: string) => {\n return axios({\n method: 'post',\n url: `/order-api/deliver/node-info?orderSn=${orderSn}&mobile=${mobile}`\n })\n}\n\n/**\n * 获取历史订单快递物流信息\n * @param deliverSn 快递单号\n * @returns\n */\nexport const fetchGetLogisticsHistory = (deliverSn: string) => {\n return axios({\n method: 'post',\n url: `/order-api/deliver/old-mall/node-info?orderSn=${deliverSn}`\n })\n}\n\n/**\n * 手机充值商品信息\n * @returns\n */\nexport const getMoblieRecharge = () => {\n return axios({\n method: 'get',\n url: '/goods-api/goods/spu/query-recharge'\n })\n}\n\n/**\n * 用户确认收货\n * @param subOrderSn\n * @param memberId\n * @returns\n */\nexport const confirmGood = (subOrderSn: string, memberId: string | number) => {\n return axios({\n method: 'post',\n url: '/order-api/order/confirm-receive',\n data: {\n subOrderSn,\n memberId\n }\n })\n}\n\n/**\n * 获取老商城历史订单数据\n * @param options\n * @returns\n */\nexport const getHistoryOrders = (options: any = {}) => {\n const { pageSize = 10, pageIndex = 1, status = -1 } = options\n return axios({\n method: 'post',\n url: '/order-api/old-mall/list',\n data: {\n pageSize,\n pageIndex,\n status\n }\n })\n}\n\n/**\n * 获取历史订单详情\n * @param orderId\n * @returns\n */\nexport const getHistoryOrdersDetail = (orderId: string | number) => {\n return axios({\n method: 'post',\n url: `/order-api/old-mall/detail?orderId=${orderId}`\n })\n}\n\n/**\n * 获取退款原因列表\n * @returns\n */\nexport const fetchGetRefundReasonList = () => {\n return axios({\n method: 'get',\n url: '/order-api/order/refund/type/list'\n })\n}\n\n/**\n * 批量上传图片\n * @param multipartFiles 图片数组\n * @returns\n */\nexport const fetchUploadImage = (multipartFiles: any) => {\n return axios({\n method: 'post',\n url: '/goods-api/goods/upload-batch',\n data: multipartFiles,\n config: {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n }\n })\n}\n\n/**\n * 申请退款\n * @param param0 refundImageList: 图片列表, refundRemark: 具体原因描述,refundType:选择,subOrderSn: 订单\n * @returns\n */\nexport const fetchRefund = ({\n refundImageList,\n refundRemark,\n refundType,\n subOrderSn,\n skuIdList,\n refundReasonType\n}: any) => {\n return axios({\n method: 'post',\n url: '/order-api/order/refund/save/new',\n data: {\n refundImageList,\n refundRemark,\n refundType,\n subOrderSn,\n skuIdList,\n refundReasonType\n }\n })\n}\n\n/**\n * 获取退款订单详情\n * @param refundSn\n * @returns\n */\nexport const fetchGetRefundDetail = (refundSn: string) => {\n return axios({\n method: 'get',\n url: `/order-api/order/refund/detail/new?refundSn=${refundSn}`\n })\n}\n\n/**\n * 撤销退款申请\n * @param refundSn 退款单号\n * @returns\n */\nexport const fetchRevokeRefund = (refundSn: string) => {\n return axios({\n method: 'post',\n url: `/order-api/order/refund/revoke?refundSn=${refundSn}`\n })\n}\n/*\n * 历史订单确认收货\n * @param orderId\n * @returns\n */\nexport const confirmHistoryConfirm = (orderId: string | number) => {\n return axios({\n method: 'post',\n url: `/order-api/old-mall/confirm?orderId=${orderId}`\n })\n}\n\n/**\n * 检测手机号是否可充值\n * @param mobile\n * @param skuId\n * @returns\n */\nexport const validateMobileIsRecharge = (mobile: string | number, skuId: number) => {\n return axios({\n method: 'POST',\n url: `/order-api/order/mobile-if-support-recharge?mobile=${mobile}&skuId=${skuId}`\n })\n}\n\n/**\n * 手机号归属地查询\n * @param mobile\n * @returns\n */\nexport const lookMobileRegion = (mobile: string | number) => {\n return axios({\n method: 'POST',\n url: `/order-api/order/mobile-region?mobile=${mobile}`\n })\n}\n\n/**\n * 获取用户可用优惠券列表\n * @returns\n */\nexport const getCouponsLists = () => {\n return axios({\n method: 'POST',\n url: '/goods-api/coupon/user-coupon-list'\n })\n}\n\n/**\n * 实时计算订单金额\n * @returns\n */\nexport const getRealTimePrice = (data: any) => {\n return axios({\n method: 'POST',\n url: '/order-api/order/real-time-cal-price',\n data\n })\n}\n\n/**\n * 获取物流列表\n */\nexport const getDeliverLists = (orderSn: string) => {\n return axios({\n method: 'POST',\n url: `/order-api/deliver/detail?orderSn=${orderSn}`\n })\n}\n\n/**\n * 海淘订单实名认证\n * @param realName 真实姓名\n * @param idCard 真实身份证号\n * @returns\n */\nexport const collectUserInfo = (realName: string, idCard: string) => {\n return axios({\n method: 'POST',\n url: '/order-api/order/real-name-authentication',\n data: {\n realName,\n idCard\n }\n })\n}\n\n/**\n * 发起售后前获取售后信息\n * @param orderSn\n * @param skuId\n * @returns\n */\nexport const refundPriceInfo = (orderSn: string, skuId: string | number) => {\n return axios({\n method: 'POST',\n url: '/order-api/order/refund/pre/refund-info',\n data: {\n orderSn,\n skuId\n }\n })\n}\n\n/**\n * 获取物流公司\n * @returns\n */\nexport const getLogisticsLists = () => {\n return axios({\n method: 'POST',\n url: '/order-api/order/company/list',\n data: {}\n })\n}\n\n/**\n * 获取售后列表\n * @param options\n * @returns\n */\nexport const getAfterLists = (options: any = {}) => {\n const { limit = 10, page = 1, req = {} } = options\n return axios({\n method: 'POST',\n url: '/order-api/order/refund/app/list/page',\n data: {\n limit,\n page,\n req\n }\n })\n}\n\n/**\n * 保存物流\n * @param data\n * @returns\n */\nexport const saveRefundLogis = (data: any) => {\n return axios({\n method: 'POST',\n url: '/order-api/order/refund/save/delivery',\n data\n })\n}\n\n/**\n * 获取取消原因列表\n * @returns\n */\nexport const fetchReasonList = (mainOrderSn: string) => {\n return axios({\n method: 'get',\n url: `/order-api/order/cancel/reason/list?mainOrderSn=${mainOrderSn}`\n })\n}\n","/*\n * @Descripttion: tengwei\n * @Author: tengwei\n * @Date: 2022-08-23 19:02:41\n * @LastEditors: tengwei\n * @LastEditTime: 2023-04-13 10:32:50\n */\nimport { fetchGetOrderPreview } from '@/apis/order'\n\nconst state = {\n orderList: []\n}\n\nconst getters = {}\n\nconst mutations = {\n SET_ORDERS_LIST(state: { orderList: any }, payload: any) {\n state.orderList = payload\n }\n}\n\nconst actions = {\n async fetchGetOrderPreview({ commit }: any, { addressId, orderSkuBOList }: any) {\n try {\n const { data }: any = await fetchGetOrderPreview({ addressId, orderSkuBOList })\n console.log('====', data, commit)\n } catch (error) {\n console.error('error ----> ', error)\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","/*\n * @Author: your name\n * @Date: 2021-10-25 09:30:08\n * @LastEditTime: 2021-11-11 10:49:46\n * @LastEditors: your name\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/store/index.ts\n */\n// import Vue from 'vue'\nimport { createStore as _createStore } from 'vuex'\nimport home from './modules/home'\nimport good from './modules/good'\nimport cart from './modules/cart'\nimport login from './modules/login'\nimport search from './modules/search'\nimport detail from './modules/detail'\nimport user from './modules/user'\nimport address from './modules/address'\nimport order from './modules/order'\n\n// const modules = import.meta.glob('./modules/*.ts')\n\nconst myPlugin = (store: { subscribe: (arg0: (mutation: any, state: any) => void) => void }) => {\n store.subscribe((mutation: { type: string }, state: { cart: { cartProducts: any } }) => {\n if (mutation.type.startsWith('cart/')) {\n window.localStorage.setItem('cart-products', JSON.stringify(state.cart.cartProducts))\n }\n })\n}\n\nexport function createStore() {\n return _createStore({\n state: {},\n getters: {},\n mutations: {},\n actions: {},\n modules: { home, good, cart, search, detail, user, address, order, login },\n plugins: [myPlugin]\n })\n}\n","/*\n * @Author: your name\n * @Date: 2021-10-25 09:30:08\n * @LastEditTime: 2023-02-15 16:01:26\n * @LastEditors: tengwei\n * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\n * @FilePath: /yufu_h5_ssr/src/main.ts\n */\nimport App from './App.vue'\nimport { createApp as _createApp } from 'vue'\n// import { createRouter } from './router'\nimport { router } from './router'\nimport { createStore } from './store/index'\nimport Vant from 'vant'\nimport 'vant/lib/index.css'\nimport './styles/index.less'\n// 引入js-sdk\nfunction getJsSdk() {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n script.src = './js-sdk-1.6.0.js'\n document.getElementsByTagName('head')[0].appendChild(script)\n\n script.onload = () => {\n // 需要初始化sdk环境,等等...\n }\n}\ngetJsSdk()\n// if (!import.meta.env.SSR) {\n// const script = document.createElement('script')\n// script.type = 'text/javascript'\n// script.src = './js-sdk-1.6.0.js'\n// document.getElementsByTagName('head')[0].appendChild(script)\n\n// script.onload = () => {\n// // 需要初始化sdk环境,等等...\n// }\n// }\n// SSR requires a fresh app instance per request, therefore we export a function\n// that creates a fresh app instance. If using Vuex, we'd also be creating a\n// fresh store here.\nexport function createApp() {\n const app = _createApp(App)\n // const router = createRouter()\n const store = createStore()\n app.use(router).use(store).use(Vant)\n return { app, router, store }\n}\n","// rem等比适配配置文件\n// 基准大小\nconst baseSize = 37.5\n// 注意此值要与postcss.config.js文件中的rootValue保持一致\n// 设置rem函数\nfunction setRem() {\n // 当前页面宽度相对于 375宽的缩放比例,可根据自己需要修改,一般设计稿都是宽750(图方便可以拿到设计图后改过来)。\n const scale = document.documentElement.clientWidth / 375\n // 设置页面根节点字体大小(“Math.min(scale,2)”指最高放大比例为2,可根据实际业务需求调整)\n document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'\n}\n// 初始化\nsetRem()\n// 改变窗口大小时重新设置rem\nwindow.onresize = function () {\n setRem()\n}\n","import { createApp } from './main'\n// import { sync } from 'vuex-router-sync'\nimport './utils/rem.ts'\nimport Vconsole from 'vconsole'\n\nconst { app, router, store } = createApp()\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'release') {\n let vConsole = new Vconsole()\n app.use(vConsole)\n}\n\n// 将 router 注入到 store 中\n// sync(store, router, { moduleName: 'RouteModule' })\n\napp.use(router).use(store)\n\nrouter.beforeResolve((to, from, next) => {\n const matched = router.resolve(to).matched\n if (matched.some((record) => record.meta.requiresAuth)) {\n if (!store.state.user) {\n next({\n name: 'login',\n query: {\n redirect: to.fullPath // 把登录成功需要返回的页面告诉登录页面\n }\n })\n } else {\n next() // 允许通过\n }\n } else {\n next()\n }\n\n if (from && !from.name) {\n return next()\n } else {\n window.document.title = to.meta.title || '福卡商城'\n }\n\n const matchedComponents = []\n // eslint-disable-next-line array-callback-return\n matched.map((route) => {\n matchedComponents.push(...Object.values(route.components))\n })\n // eslint-disable-next-line array-callback-return\n const asyncDataFuncs = matchedComponents.map((component) => {\n const asyncData = component.asyncData || null\n if (asyncData) {\n const config = {\n store,\n route: to\n }\n\n return asyncData(config)\n }\n })\n\n try {\n Promise.all(asyncDataFuncs).then(() => {\n next()\n })\n } catch (error) {\n next(error)\n }\n})\n\n// 路由跳转之后回到顶部\nrouter.afterEach(() => {\n window.scrollTo(0, 0)\n})\n\nif (window.__INIT_STATE__) {\n store.replaceState(window.__INIT_STATE__)\n}\n\nrouter.isReady().then(() => app.mount('#app'))\n"],"names":["relList","document","createElement","supports","link","querySelectorAll","processPreload","MutationObserver","mutations2","mutation","type","node","addedNodes","tagName","rel","observe","childList","subtree","ep","fetchOpts","script","integrity","referrerpolicy","referrerPolicy","crossorigin","credentials","getFetchOpts","fetch","href","p","_export_sfc","sfc","props","target","__vccOpts","key","val","setup","route","useRoute","_openBlock","_createBlock","_component_router_view","$setup","fullPath","class","Component","_Suspense","default","_withCtx","_resolveDynamicComponent","seen","__vitePreload","baseModule","deps","length","Promise","all","map","dep","isCss","endsWith","cssSelector","querySelector","as","crossOrigin","head","appendChild","res","rej","addEventListener","then","isAuth","window","sessionId","localStorage","getItem","isNotSeriesNum","tempStr","test","str","replace","$0","pos","parseInt","getLoginUrl","encodeURIComponent","location","JSON","stringify","channelId","platformId","sessionStorage","source","replaceSpaceStr","backMiniProgram","delta","wx","miniProgram","navigateBack","copyText","input","value","body","select","execCommand","removeChild","Toast","myRegExp","isQQ","isPhone","compareVersion","left","right","regex","leftMatch","match","rightMatch","x","y","z","localstorgeKey","getQueryString","queryObj","defaultParameter","queryString","search","urlParameter","split","reduce","prev","cur","kvArray","decodeURIComponent","Object","assign","getQueryObject","indexOf","setItem","Math","random","toString","slice","BROWSER","ua","navigator","userAgent","toLowerCase","isAndroid","isAndroidOSVersion","isiOSOSVersion","isiOS","Boolean","isiPhone","isiPad","isWeChat","isWeiBo","androidVersion","substr","isAndroidOSVer","isiOSOSVer","isOldMallApp","soureEnum","getRandomCode","result","getDefaultParams","url","hash","operation_system","eventTime","Date","now","isProd","mBuryPoint","eventKeyCode","params","aplus_queue","push","action","arguments","__spreadValues","instance","axios","create","baseURL","headers","loading","requestCount","message","interceptors","request","use","async","config","forbidClick","deviceId","fixVersion","mainVersion","os","pm","screenSize","signVersion","subVersion","systemVersion","error","reject","isRfreshing","requests","response","close","code","msg","data","console","log","resolve","method","Error","forEach","cb","catch","err","finally","removeItem","Dialog","confirm","redirectLogin","status","fail","post","get","delete","put","getUserInfo","fetchGetDefaultAddress","resetPayPwd","savePayPwd","validPayCaptcha","validPayOldPwd","payPassword","validifPayPwd","getResetCaptcha","mobile","validResetCaptcha","captcha","saveResetPwd","password","getRealName","getWechatInit","getUcList","oAuthMeituan","productType","args","this","call","initalEvent","base","user","yfBridge","ret","arg","cbName","dscb","_dscbstub","_dsbridge","_dswk","prompt","parse","register","name","fun","asyn","q","_dsaf","_dsf","_dsInit","setTimeout","_obs","registerAsyn","hasNativeMethod","disableJavascriptDialogBlock","disable","ob","dsBridge","_handleMessageFromNative","info","id","callbackId","complete","f","af","callSyn","f2","ob2","apply","callAsyn","pop","namespace","join","obs","m","attr","tag","routes","path","redirect","component","import","children","meta","index","title","requiresAuth","router","router2","_createRouter","history","createWebHistory","beforeEach","to","from","next","query","Number","token","afterEach","is_auto","AplusQueusSendPV","createRouter","getPageByCondition","limit","orderBy","page","req","count","getPageCondition","fetchGetRecBanner","topicId","fetchHomeInfo","fetchRemmendList","fetchRemmendListDraft","fetchAuthCode","getPageByMerchat","home","namespaced","state","bannerList","tabLists","iconLists","tabBottomList","firstNewDatas","firstRecommendList","nextDatas","nextRecommendList","recommendTopicResList","getters","mutations","SET_ICON_INFO","state2","payload","SET_BANNER_INFO","SET_ICON_BOTTOM","SET_TOPICINFO","concat","SET_FIRST_LISTS","items","SET_NEXT_LISTS","SET_RECOMMEND_TOPIC_RESLIST","actions","commit","bannerInfoRes","menuInfoRes","spuTopicResList","recommendContentResList","good","addCart","getShopCartCount","CART_PRODUCTS","skuLists","cartProducts","allProducts","allChecked","alldelChecked","addCartSuccess","cartsInfo","amount","addressInfo","isEditState","isShopChecked","dispatch","addressId","getCart","skuIdList","success","updateCartNum","newData","item","cartResList","skuId","num","updateNum","list","selectState","updateCartChecked","isShop","changeAddr","includes","filter","isEdit","isEditShop","good2","index2","findIndex","splice","merchantId","every","prod","shopProducts","find","shop","saleState","ifHasStock","cart","totalCount","total","totalPrice","checkedCount","ADD_CART_SUCCESS","GET_CART_PRODUCTS","CHANGE_ADDRESS_INFO","CHANGE_EDIT_STATE","getCaptcha","SESSION","login","codeSuccess","userId","resetPasswordSuccess","authActiveNum","SET_CODE","SET_CODE_SUCCESS","SET_TYPE","SET_TOKEN","VALID_CAPTCHA_SUCCESS","SET_PASSWORD_SUCCESS","SET_AUTH_ACTIVITE_NUM","loginCap","validCaptcha","loginPwd","resetPwd","changeType","setAuthActiviteNum","searchHot","fetchSuggestWords","keyword","resultList","brandList","categoryList","resultCode","finished","reqParams","selectBrands","selectCategories","totalNum","isShowClass","minPrice","maxPrice","traceId","setResultNo","_","isEqual","mergeWith","searchListV3","keyWord","merId","brandIdList","categoryIdList","fetchScreenCodition","chooseBrand","state$4","chooseCategory","resetCondition","onlyresetCondition","isResetClass","setSeachParams","setIsShowClass","setGoodMaxPrice","setGoodMinPrice","resetGoodPrice","SET_RESULT_LIST","SET_RESULT_TRACEID","SET_RESULT_LIST_NO","SET_BRAND_LIST","SET_CATEGORY_LIST","SET_LIST_LOADING","SET_LIST_FINISHED","SELECT_BRANDS","SELECT_CATETORIES","ONLY_RESET_SEARCH_CONDITION","RESET_ALL_CONDITION","SET_SEARCH_PARAMS","SET_SALE_GOOD_NUM","SET_IS_SHOW_CLASS","SET_GOOD_MAXPRICE","SET_GOOD_MINPRICE","RESET_GOOD_PRICE","getShopInfo","detail","defaultData","goodsSku","merchant","salePrice","chooseGoodNum","specGroupList","chooseSkuDetail","selectedTxt","specList","SET_DEFAULT_DETAIL_DATA","SET_SPECGROUP_LIST","SET_GOODS_SKU","SET_MERCHANT_INFO","RESET_GOODS_SKUS","SET_CHOOSE_GOOD_NUM","spuId","getMerchantInfoBySpu","getSpuDetail","getSkuSpec","userInfo","SET_USER_INFO","findAddressById","delAddressById","address","areaLists","saveAddressSuccess","addressList","feeDetail","editAddres","singleAddressInfo","SET_AREA_LIST","SAVE_ADDRESS_SUCCESS","SET_ADDRESS_LIST","SET_FEE_DETAIL","SET_EDIT_ADDRESS","parentCode","getRegion","calculateFee","fetchGetOrderPreview","rechargeAccount","orderSkuBOList","orderSkuResList","fetchCreateOrder","ifIntegral","ifSingleCard","useIntegral","goodsSpuType","rechargeMobile","orderRemarkResList","receiveAddressId","integralPaySmsCode","singleCardSmsCode","integralPlatformOrderId","singleCardList","couponCode","singleCardServiceAmount","realNameAuthenticationId","fetchGetOrderList","options","getAllOrderCount","getOrderMainDetail","orderSn","getOrderSubDetail","cancelOrder","delOrder","cancelOrderReq","fetchGetLogisticsHistory","deliverSn","getMoblieRecharge","confirmGood","subOrderSn","memberId","getHistoryOrders","pageSize","pageIndex","getHistoryOrdersDetail","orderId","fetchGetRefundReasonList","fetchUploadImage","multipartFiles","fetchRefund","refundImageList","refundRemark","refundType","refundReasonType","fetchGetRefundDetail","refundSn","fetchRevokeRefund","confirmHistoryConfirm","validateMobileIsRecharge","lookMobileRegion","getRealTimePrice","getDeliverLists","collectUserInfo","realName","idCard","refundPriceInfo","getLogisticsLists","getAfterLists","saveRefundLogis","fetchReasonList","mainOrderSn","order","orderList","SET_ORDERS_LIST","myPlugin","store2","subscribe","startsWith","src","getElementsByTagName","onload","getJsSdk","setRem","scale","documentElement","clientWidth","style","fontSize","min","onresize","app","store","app2","_createApp","App","_createStore","modules","plugins","Vant","createApp","beforeResolve","matched","some","record","matchedComponents","values","components","asyncDataFuncs","asyncData","scrollTo","__INIT_STATE__","replaceState","isReady","mount"],"mappings":"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"}