{"version":3,"sources":["jsdelivr-header.js","/npm/@dcloudio/uni-stat@2.0.2-4080420251103001/dist/uni-stat.es.js"],"names":[],"mappings":"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","file":"/npm/@dcloudio/uni-stat@2.0.2-4080420251103001/dist/uni-stat.es.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@dcloudio/uni-stat@2.0.2-4080420251103001/dist/uni-stat.es.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n * 获取系统信息\r\n */\r\nconst sys = uni.getSystemInfoSync();\n\n// 访问开始即启动小程序，访问结束结分为：进入后台超过5min、在前台无任何操作超过30min、在新的来源打开小程序；\nconst STAT_VERSION = process.env.UNI_COMPILER_VERSION;\nconst STAT_URL = 'https://tongji.dcloud.io/uni/stat';\nconst STAT_H5_URL = 'https://tongji.dcloud.io/uni/stat.gif';\nconst PAGE_PVER_TIME = 1800; // 页面在前台无操作结束访问时间 单位s\nconst APP_PVER_TIME = 300; // 应用在后台结束访问时间 单位s\nconst OPERATING_TIME = 10; // 数据上报时间 单位s\nconst DIFF_TIME = 60 * 1000 * 60 * 24;\n\nconst appid = process.env.UNI_APP_ID; // 做应用隔离\r\nconst dbSet = (name, value) => {\r\n  let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {};\r\n\r\n  if (!data) {\r\n    data = {};\r\n  }\r\n  data[name] = value;\r\n  uni.setStorageSync('$$STAT__DBDATA:'+appid, data);\r\n};\r\n\r\nconst dbGet = (name) => {\r\n  let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {};\r\n  if (!data[name]) {\r\n    let dbdata = uni.getStorageSync('$$STAT__DBDATA:'+appid);\r\n    if (!dbdata) {\r\n      dbdata = {};\r\n    }\r\n    if (!dbdata[name]) {\r\n      return undefined\r\n    }\r\n    data[name] = dbdata[name];\r\n  }\r\n  return data[name]\r\n};\r\n\r\nconst dbRemove = (name) => {\r\n  let data = uni.getStorageSync('$$STAT__DBDATA:'+appid) || {};\r\n  if (data[name]) {\r\n    delete data[name];\r\n    uni.setStorageSync('$$STAT__DBDATA:'+appid, data);\r\n  } else {\r\n    data = uni.getStorageSync('$$STAT__DBDATA:'+appid);\r\n    if (data[name]) {\r\n      delete data[name];\r\n      uni.setStorageSync('$$STAT__DBDATA:'+appid, data);\r\n    }\r\n  }\r\n};\n\n// 获取 manifest.json 中统计配置\r\nconst uniStatisticsConfig = process.env.UNI_STATISTICS_CONFIG;\r\nlet statConfig = {\r\n  appid: process.env.UNI_APP_ID,\r\n};\r\nlet titleJsons = {};\r\nlet debug = !!process.env.UNI_STAT_DEBUG || false;\r\n// #ifdef VUE3\r\ntitleJsons = process.env.UNI_STAT_TITLE_JSON;\r\n// #endif\r\n\r\n// #ifndef VUE3\r\n\r\n// eslint-disable-next-line no-restricted-globals\r\nconst pagesTitle = require('uni-pages?{\"type\":\"style\"}').default;\r\nlet pagesData = pagesTitle.pages;\r\nfor (let i in pagesData) {\r\n  const style = pagesData[i];\r\n  const titleText =\r\n    // MP\r\n    style.navigationBarTitleText ||\r\n    // ali\r\n    style.defaultTitle ||\r\n    // H5 || App\r\n    style.navigationBar?.titleText ||\r\n    '';\r\n  if (titleText) {\r\n    titleJsons[i] = titleText;\r\n  }\r\n}\r\n// #endif\r\n\r\n// TODO 在云函数中获取，暂时注释\r\nconst UUID_KEY = '__DC_STAT_UUID';\r\nconst UUID_VALUE = '__DC_UUID_VALUE';\r\nfunction getUuid() {\r\n  let uuid = '';\r\n  if (get_platform_name() === 'n') {\r\n    try {\r\n      uuid = plus.runtime.getDCloudId();\r\n    } catch (e) {\r\n      uuid = '';\r\n    }\r\n    return uuid\r\n  }\r\n\r\n  try {\r\n    uuid = uni.getStorageSync(UUID_KEY);\r\n  } catch (e) {\r\n    uuid = UUID_VALUE;\r\n  }\r\n\r\n  if (!uuid) {\r\n    uuid = Date.now() + '' + Math.floor(Math.random() * 1e7);\r\n    try {\r\n      uni.setStorageSync(UUID_KEY, uuid);\r\n    } catch (e) {\r\n      uni.setStorageSync(UUID_KEY, UUID_VALUE);\r\n    }\r\n  }\r\n  return uuid\r\n}\r\n\r\nconst get_uuid = (statData) => {\r\n  // 有可能不存在 deviceId（一般不存在就是出bug了），就自己生成一个\r\n  return sys.deviceId || getUuid()\r\n};\r\n\r\n/**\r\n * 获取老版的 deviceid ,兼容以前的错误 deviceid\r\n * @param {*} statData \r\n * @returns \r\n */\r\nconst get_odid = (statData) => {\r\n  let odid  = '';\r\n  if (get_platform_name() === 'n') {\r\n    try {\r\n      odid = plus.device.uuid;\r\n    } catch (e) {\r\n      odid = '';\r\n    }\r\n    return odid\r\n  }\r\n  return sys.deviceId || getUuid()\r\n};\r\n\r\n/**\r\n * 获取配置信息 如 appid\r\n */\r\nconst stat_config = statConfig;\r\n\r\nconst get_sgin = (statData) => {\r\n  let arr = Object.keys(statData);\r\n  let sortArr = arr.sort();\r\n  let sgin = {};\r\n  let sginStr = '';\r\n  for (var i in sortArr) {\r\n    sgin[sortArr[i]] = statData[sortArr[i]];\r\n    sginStr += sortArr[i] + '=' + statData[sortArr[i]] + '&';\r\n  }\r\n\r\n  return {\r\n    sign: '',\r\n    options: sginStr.substr(0, sginStr.length - 1),\r\n  }\r\n};\r\n\r\nconst get_encodeURIComponent_options = (statData) => {\r\n  let data = {};\r\n  for (let prop in statData) {\r\n    data[prop] = encodeURIComponent(statData[prop]);\r\n  }\r\n  return data\r\n};\r\n\r\n/**\r\n * 获取当前平台\r\n * 移动端  : 'n',\r\n * h5\t  : 'h5',\r\n * 微信\t  : 'wx',\r\n * 阿里\t  : 'ali',\r\n * 百度\t  : 'bd',\r\n * 头条\t  : 'tt',\r\n * qq\t  : 'qq',\r\n * 快应用  : 'qn',\r\n * 快手\t  : 'ks',\r\n * 飞书\t  : 'lark',\r\n * 快应用  : 'qw',\r\n * 钉钉\t  : 'dt'\r\n */\r\nconst get_platform_name = () => {\r\n  // 苹果审核代码中禁止出现 alipay 字样 ，需要特殊处理一下\r\n  const aliArr = ['y', 'a', 'p', 'mp-ali'];\r\n  const platformList = {\r\n    app: 'n',\r\n    'app-plus': 'n',\r\n    h5: 'h5',\r\n    'mp-weixin': 'wx',\r\n    [aliArr.reverse().join('')]: 'ali',\r\n    'mp-baidu': 'bd',\r\n    'mp-toutiao': 'tt',\r\n    'mp-qq': 'qq',\r\n    'quickapp-native': 'qn',\r\n    'mp-kuaishou': 'ks',\r\n    'mp-lark': 'lark',\r\n    'quickapp-webview': 'qw',\r\n  };\r\n  if (platformList[process.env.VUE_APP_PLATFORM] === 'ali') {\r\n    if (my && my.env) {\r\n      const clientName = my.env.clientName;\r\n      if (clientName === 'ap') return 'ali'\r\n      if (clientName === 'dingtalk') return 'dt'\r\n      // TODO 缺少 ali 下的其他平台\r\n    }\r\n  }\r\n  return platformList[process.env.VUE_APP_PLATFORM]\r\n};\r\n\r\n/**\r\n * 获取小程序 appid\r\n */\r\nconst get_pack_name = () => {\r\n  let packName = '';\r\n  if (get_platform_name() === 'wx' || get_platform_name() === 'qq') {\r\n    // 兼容微信小程序低版本基础库\r\n    if (uni.canIUse('getAccountInfoSync')) {\r\n      packName = uni.getAccountInfoSync().miniProgram.appId || '';\r\n    }\r\n  }\r\n  if (get_platform_name() === 'n') ;\r\n  return packName\r\n};\r\n\r\n/**\r\n * 应用版本\r\n */\r\nconst get_version = () => {\r\n  return get_platform_name() === 'n' ? plus.runtime.version : ''\r\n};\r\n\r\n/**\r\n * 获取渠道\r\n */\r\nconst get_channel = () => {\r\n  const platformName = get_platform_name();\r\n  let channel = '';\r\n  if (platformName === 'n') {\r\n    channel = plus.runtime.channel;\r\n  }\r\n  return channel\r\n};\r\n\r\n/**\r\n * 获取小程序场景值\r\n * @param {Object} options 页面信息\r\n */\r\nconst get_scene = (options) => {\r\n  const platformName = get_platform_name();\r\n  let scene = '';\r\n  if (options) {\r\n    return options\r\n  }\r\n  if (platformName === 'wx') {\r\n    scene = uni.getLaunchOptionsSync().scene;\r\n  }\r\n  return scene\r\n};\r\n\r\n/**\r\n * 获取拼接参数\r\n */\r\nconst get_splicing = (data) => {\r\n  let str = '';\r\n  for (var i in data) {\r\n    str += i + '=' + data[i] + '&';\r\n  }\r\n  return str.substr(0, str.length - 1)\r\n};\r\n\r\n/**\r\n * 获取页面url，不包含参数\r\n */\r\nconst get_route$1 = (pageVm) => {\r\n  let _self = pageVm || get_page_vm();\r\n  if (get_platform_name() === 'bd') {\r\n    let mp_route = _self.$mp && _self.$mp.page && _self.$mp.page.is;\r\n    let scope_route = _self.$scope && _self.$scope.is;\r\n    return mp_route || scope_route || ''\r\n  } else {\r\n    return (\r\n      _self.route ||\r\n      (_self.$scope && _self.$scope.route) ||\r\n      (_self.$mp && _self.$mp.page.route)\r\n    )\r\n  }\r\n};\r\n\r\n/**\r\n * 获取页面url, 包含参数\r\n */\r\nconst get_page_route = (pageVm) => {\r\n  // 从 app 进入应用 ，没有 $page ,获取不到路由 ，需要获取页面 尝试从 getCurrentPages 获取也页面实例\r\n  // FIXME 尽量不使用 getCurrentPages ，大部分获取路由是从 onHide 获取 ，这时可以获取到，如果是 onload ,则可能获取不到，比如 百度\r\n\r\n  let page = pageVm && (pageVm.$page || (pageVm.$scope && pageVm.$scope.$page));\r\n  let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE');\r\n  if (!page) return lastPageRoute || ''\r\n  // 如果找不到 fullPath 就取 route 的值\r\n  return page.fullPath === '/' ? page.route : page.fullPath || page.route\r\n};\r\n\r\n/**\r\n * 获取页面实例\r\n */\r\nconst get_page_vm = () => {\r\n  let pages = getCurrentPages();\r\n  let $page = pages[pages.length - 1];\r\n  if (!$page) return null\r\n  return $page.$vm\r\n};\r\n\r\n/**\r\n * 获取页面类型\r\n */\r\nconst get_page_types = (self) => {\r\n  // XXX 百度有问题 ，获取的都是 componet ,等待修复\r\n  if (\r\n    self.mpType === 'page' ||\r\n    self.$mpType === 'page' ||\r\n    (self.$mp && self.$mp.mpType === 'page') ||\r\n    self.$options.mpType === 'page'\r\n  ) {\r\n    return 'page'\r\n  }\r\n  if (\r\n    self.mpType === 'app' ||\r\n    self.$mpType === 'app' ||\r\n    (self.$mp && self.$mp.mpType === 'app') ||\r\n    self.$options.mpType === 'app'\r\n  ) {\r\n    return 'app'\r\n  }\r\n  return null\r\n};\r\n\r\n/**\r\n * 处理上报参数\r\n * @param {Object}  需要处理的数据\r\n */\r\nconst handle_data = (statData) => {\r\n  let firstArr = [];\r\n  let contentArr = [];\r\n  let lastArr = [];\r\n  for (let i in statData) {\r\n    const rd = statData[i];\r\n    rd.forEach((elm) => {\r\n      let newData = '';\r\n      {\r\n        newData = get_splicing(elm);\r\n      }\r\n      if (i === 0) {\r\n        firstArr.push(newData);\r\n      } else if (i === 3) {\r\n        lastArr.push(newData);\r\n      } else {\r\n        contentArr.push(newData);\r\n      }\r\n    });\r\n  }\r\n\r\n  firstArr.push(...contentArr, ...lastArr);\r\n  // 参数需要处理成字符串，方便上传\r\n  return JSON.stringify(firstArr)\r\n};\r\n\r\n/**\r\n * 自定义事件参数校验\r\n */\r\nconst calibration = (eventName, options) => {\r\n  //  login 、 share 、pay_success 、pay_fail 、register 、title\r\n  if (!eventName) {\r\n    console.error(`uni.report Missing [eventName] parameter`);\r\n    return true\r\n  }\r\n  if (typeof eventName !== 'string') {\r\n    console.error(\r\n      `uni.report [eventName] Parameter type error, it can only be of type String`\r\n    );\r\n    return true\r\n  }\r\n  if (eventName.length > 255) {\r\n    console.error(\r\n      `uni.report [eventName] Parameter length cannot be greater than 255`\r\n    );\r\n    return true\r\n  }\r\n\r\n  if (typeof options !== 'string' && typeof options !== 'object') {\r\n    console.error(\r\n      'uni.report [options] Parameter type error, Only supports String or Object type'\r\n    );\r\n    return true\r\n  }\r\n\r\n  if (typeof options === 'string' && options.length > 255) {\r\n    console.error(\r\n      `uni.report [options] Parameter length cannot be greater than 255`\r\n    );\r\n    return true\r\n  }\r\n\r\n  if (eventName === 'title' && typeof options !== 'string') {\r\n    console.error(\r\n      `uni.report [eventName] When the parameter is title, the [options] parameter can only be of type String`\r\n    );\r\n    return true\r\n  }\r\n};\r\n\r\nconst get_page_name = (routepath) => {\r\n  return (titleJsons && titleJsons[routepath]) || ''\r\n};\r\n\r\nconst Report_Data_Time = 'Report_Data_Time';\r\nconst Report_Status = 'Report_Status';\r\nconst is_report_data = () => {\r\n  return new Promise((resolve, reject) => {\r\n    let start_time = '';\r\n    let end_time = new Date().getTime();\r\n    let diff_time = DIFF_TIME;\r\n    let report_status = 1;\r\n    try {\r\n      start_time = uni.getStorageSync(Report_Data_Time);\r\n      report_status = uni.getStorageSync(Report_Status);\r\n    } catch (e) {\r\n      start_time = '';\r\n      report_status = 1;\r\n    }\r\n\r\n    if (report_status === '') {\r\n      requestData(({ enable }) => {\r\n        uni.setStorageSync(Report_Data_Time, end_time);\r\n        uni.setStorageSync(Report_Status, enable);\r\n        if (enable === 1) {\r\n          resolve();\r\n        }\r\n      });\r\n      return\r\n    }\r\n\r\n    if (report_status === 1) {\r\n      resolve();\r\n    }\r\n\r\n    if (!start_time) {\r\n      uni.setStorageSync(Report_Data_Time, end_time);\r\n      start_time = end_time;\r\n    }\r\n\r\n    if (end_time - start_time > diff_time) {\r\n      requestData(({ enable }) => {\r\n        uni.setStorageSync(Report_Data_Time, end_time);\r\n        uni.setStorageSync(Report_Status, enable);\r\n      });\r\n    }\r\n  })\r\n};\r\n\r\nconst requestData = (done) => {\r\n  const appid = process.env.UNI_APP_ID;\r\n  let formData = {\r\n    usv: STAT_VERSION,\r\n    conf: JSON.stringify({\r\n      ak: appid,\r\n    }),\r\n  };\r\n  uni.request({\r\n    url: STAT_URL,\r\n    method: 'GET',\r\n    data: formData,\r\n    success: (res) => {\r\n      const { data } = res;\r\n      if (data.ret === 0) {\r\n        typeof done === 'function' &&\r\n          done({\r\n            enable: data.enable,\r\n          });\r\n      }\r\n    },\r\n    fail: (e) => {\r\n      let report_status_code = 1;\r\n      try {\r\n        report_status_code = uni.getStorageSync(Report_Status);\r\n      } catch (e) {\r\n        report_status_code = 1;\r\n      }\r\n      if (report_status_code === '') {\r\n        report_status_code = 1;\r\n      }\r\n      typeof done === 'function' &&\r\n        done({\r\n          enable: report_status_code,\r\n        });\r\n    },\r\n  });\r\n};\r\n\r\n/**\r\n * 是否开启 debug 模式\r\n */\r\nconst is_debug = debug;\r\n\r\n/**\r\n * 日志输出\r\n * @param {*} data\r\n */\r\nconst log = (data, type) => {\r\n  let msg_type = '';\r\n  switch (data.lt) {\r\n    case '1':\r\n      msg_type = '应用启动';\r\n      break\r\n    case '3':\r\n      msg_type = '应用进入后台';\r\n      break\r\n\r\n    case '11':\r\n      msg_type = '页面切换';\r\n      break\r\n    case '21':\r\n      msg_type = '事件触发';\r\n      break\r\n    case '31':\r\n      msg_type = '应用错误';\r\n      break\r\n    case '101':\r\n      msg_type = 'PUSH';\r\n      break\r\n  }\r\n\r\n  // #ifdef APP\r\n  // 在 app 中，日志转为 字符串\r\n  if (typeof data === 'object') {\r\n    data = JSON.stringify(data);\r\n  }\r\n  // #endif\r\n\r\n  if (type) {\r\n    console.log(`=== 统计队列数据上报 ===`);\r\n    console.log(data);\r\n    console.log(`=== 上报结束 ===`);\r\n    return\r\n  }\r\n\r\n  if (msg_type) {\r\n    console.log(`=== 统计数据采集：${msg_type} ===`);\r\n    console.log(data);\r\n    console.log(`=== 采集结束 ===`);\r\n  }\r\n};\r\n\r\n/**\r\n * 获取上报时间间隔\r\n * @param {*} defaultTime 默认上报间隔时间 单位s\r\n */\r\nconst get_report_Interval = (defaultTime) => {\r\n  let time = uniStatisticsConfig.reportInterval;\r\n  // 如果上报时间配置为0 相当于立即上报\r\n  if (Number(time) === 0) return 0\r\n  time = time || defaultTime;\r\n  let reg = /(^[1-9]\\d*$)/;\r\n  // 如果不是整数，则默认为上报间隔时间\r\n  if (!reg.test(time)) return defaultTime\r\n  return Number(time)\r\n};\r\n\r\n/**\r\n * 获取隐私协议配置\r\n */\r\nconst is_push_clientid = () => {\r\n  if (uniStatisticsConfig.collectItems) {\r\n    const ClientID = uniStatisticsConfig.collectItems.uniPushClientID;\r\n    return typeof ClientID === 'boolean' ? ClientID : false\r\n  }\r\n  return false\r\n};\r\n\r\n/**\r\n * 是否上报页面数据\r\n * @returns \r\n */\r\nconst is_page_report = ()=>{\r\n  if(uniStatisticsConfig.collectItems){\r\n    const statPageLog = uniStatisticsConfig.collectItems.uniStatPageLog;\r\n    // 如果字段不存在返回 true , 如果是boolean 值按原值返回，如果是其他类型 返回false\r\n    if(statPageLog === undefined) return true\r\n    return typeof statPageLog === 'boolean' ? statPageLog : true\r\n  }\r\n  return true\r\n};\n\n// 首次访问时间\r\nconst FIRST_VISIT_TIME_KEY = '__first__visit__time';\r\n// 最后访问时间\r\nconst LAST_VISIT_TIME_KEY = '__last__visit__time';\r\n/**\r\n * 获取当前时间\r\n */\r\nconst get_time = () => {\r\n\treturn parseInt(new Date().getTime() / 1000)\r\n};\r\n\r\n/**\r\n * 获取首次访问时间\r\n */\r\nconst get_first_visit_time = () => {\r\n\tconst timeStorge = dbGet(FIRST_VISIT_TIME_KEY);\r\n\tlet time = 0;\r\n\tif (timeStorge) {\r\n\t\ttime = timeStorge;\r\n\t} else {\r\n\t\ttime = get_time();\r\n\t\tdbSet(FIRST_VISIT_TIME_KEY, time);\r\n\t\t// 首次访问需要 将最后访问时间置 0\r\n\t\tdbRemove(LAST_VISIT_TIME_KEY);\r\n\t}\r\n\treturn time\r\n};\r\n\r\n/**\r\n * 最后访问时间\r\n */\r\nconst get_last_visit_time = () => {\r\n\tconst timeStorge = dbGet(LAST_VISIT_TIME_KEY);\r\n\tlet time = 0;\r\n\tif (timeStorge) {\r\n\t\ttime = timeStorge;\r\n\t}\r\n\tdbSet(LAST_VISIT_TIME_KEY, get_time());\r\n\treturn time\r\n};\r\n\r\n// 页面停留时间记录key\r\nconst PAGE_RESIDENCE_TIME = '__page__residence__time';\r\nlet First_Page_Residence_Time = 0;\r\nlet Last_Page_Residence_Time = 0;\r\n\r\n/**\r\n * 设置页面停留时间\r\n */\r\nconst set_page_residence_time = () => {\r\n\tFirst_Page_Residence_Time = get_time();\r\n\tdbSet(PAGE_RESIDENCE_TIME, First_Page_Residence_Time);\r\n\treturn First_Page_Residence_Time\r\n};\r\n\r\n/**\r\n * 获取页面停留时间\r\n */\r\nconst get_page_residence_time = () => {\r\n\tLast_Page_Residence_Time = get_time();\r\n\tFirst_Page_Residence_Time = dbGet(PAGE_RESIDENCE_TIME);\r\n\treturn Last_Page_Residence_Time - First_Page_Residence_Time\r\n};\r\n\r\n/**\r\n * 获取总访问次数\r\n */\r\nconst TOTAL_VISIT_COUNT = '__total__visit__count';\r\nconst get_total_visit_count = () => {\r\n\tconst timeStorge = dbGet(TOTAL_VISIT_COUNT);\r\n\tlet count = 1;\r\n\tif (timeStorge) {\r\n\t\tcount = timeStorge;\r\n\t\tcount++;\r\n\t}\r\n\tdbSet(TOTAL_VISIT_COUNT, count);\r\n\treturn count\r\n};\r\n\r\n\r\nconst FIRST_TIME = '__first_time';\r\n/**\r\n * 设置页面首次访问时间，用户获取页面/应用停留时常\r\n */\r\nconst set_first_time = () => {\r\n\t// 获取当前时间 ，以下代码获取到是毫秒级时间戳 ，实际上用到是秒级时间戳，所以需要除以1000\r\n\t// const time = new Date().getTime()\r\n\tlet time = get_time();\r\n\tconst timeStorge = dbSet(FIRST_TIME,time);\r\n\treturn timeStorge\r\n};\r\n\r\n/**\r\n * 获取最后一次时间 ，暂时用不到，直接获取当前时间即可\r\n */\r\n// export const get_last_time = () => {\r\n// \tlet time = new Date().getTime()\r\n// \tSet__Last__Time = time\r\n// \treturn time\r\n// }\r\n\r\n/**\r\n * 获取页面 \\ 应用停留时间\r\n */\r\nconst get_residence_time = (type) => {\r\n\tlet residenceTime = 0;\r\n\tconst first_time = dbGet(FIRST_TIME);\r\n\tconst last_time = get_time();\r\n\tif (first_time !== 0) {\r\n\t\tresidenceTime = last_time - first_time;\r\n\t}\r\n\t// 将毫秒级时间戳转换为秒级时间戳，因为直接获取的是秒级时间戳，所以不需要转换\r\n\t// residenceTime = parseInt(residenceTime / 1000)\r\n\tresidenceTime = residenceTime < 1 ? 1 : residenceTime;\r\n\tif (type === 'app') {\r\n\t\tlet overtime = residenceTime > APP_PVER_TIME ? true : false;\r\n\t\treturn {\r\n\t\t\tresidenceTime,\r\n\t\t\tovertime,\r\n\t\t}\r\n\t}\r\n\tif (type === 'page') {\r\n\t\tlet overtime = residenceTime > PAGE_PVER_TIME ? true : false;\r\n\t\treturn {\r\n\t\t\tresidenceTime,\r\n\t\t\tovertime,\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\tresidenceTime,\r\n\t}\r\n};\n\nconst eport_Interval = get_report_Interval(OPERATING_TIME);\r\n// 统计数据默认值\r\nlet statData = {\r\n  uuid: get_uuid(), // 设备标识\r\n  ak: stat_config.appid, // uni-app 应用 Appid\r\n  p: sys.platform === 'android' ? 'a' : 'i', // 手机系统\r\n  ut: get_platform_name(), // 平台类型\r\n  mpn: get_pack_name(), // 原生平台包名、小程序 appid\r\n  usv: STAT_VERSION, // 统计 sdk 版本\r\n  v: get_version(), // 应用版本，仅app\r\n  ch: get_channel(), // 渠道信息\r\n  cn: '', // 国家\r\n  pn: '', // 省份\r\n  ct: '', // 城市\r\n  t: get_time(), // 上报数据时的时间戳\r\n  tt: '',\r\n  brand: sys.brand || '', // 手机品牌\r\n  md: sys.model, // 手机型号\r\n  sv: sys.system?.replace(/(Android|iOS)\\s/, '') ?? '', // 手机系统版本\r\n  mpsdk: sys.SDKVersion || '', // x程序 sdk version\r\n  mpv: sys.version || '', // 小程序平台版本 ，如微信、支付宝\r\n  lang: sys.language, // 语言\r\n  pr: sys.pixelRatio, // pixelRatio 设备像素比\r\n  ww: sys.windowWidth, // windowWidth 可使用窗口宽度\r\n  wh: sys.windowHeight, // windowHeight 可使用窗口高度\r\n  sw: sys.screenWidth, // screenWidth 屏幕宽度\r\n  sh: sys.screenHeight, // screenHeight 屏幕高度\r\n};\r\nclass Report {\r\n  constructor() {\r\n    // 页面实例\r\n    this.self = '';\r\n    // 进入应用标识\r\n    this.__licationShow = false;\r\n    // 离开应用标识\r\n    this.__licationHide = false;\r\n    // 统计默认值\r\n    this.statData = statData;\r\n    // 标题默认值\r\n    this._navigationBarTitle = {\r\n      config: '',\r\n      page: '',\r\n      report: '',\r\n      lt: '',\r\n    };\r\n\r\n    // 页面参数\r\n    this._query = {};\r\n    // 页面最后停留页面的 url\r\n    // this._lastPageRoute = ''\r\n\r\n    // 注册拦截器\r\n    let registerInterceptor = typeof uni.addInterceptor === 'function';\r\n    if (registerInterceptor) {\r\n      this.addInterceptorInit();\r\n      this.interceptLogin();\r\n      this.interceptShare(true);\r\n      this.interceptRequestPayment();\r\n    }\r\n  }\r\n\r\n  addInterceptorInit() {\r\n    let self = this;\r\n    uni.addInterceptor('setNavigationBarTitle', {\r\n      invoke(args) {\r\n        self._navigationBarTitle.page = args.title;\r\n      },\r\n    });\r\n  }\r\n\r\n  interceptLogin() {\r\n    let self = this;\r\n    uni.addInterceptor('login', {\r\n      complete() {\r\n        self._login();\r\n      },\r\n    });\r\n  }\r\n\r\n  interceptShare(type) {\r\n    let self = this;\r\n    if (!type) {\r\n      self._share();\r\n      return\r\n    }\r\n    uni.addInterceptor('share', {\r\n      success() {\r\n        self._share();\r\n      },\r\n      fail() {\r\n        self._share();\r\n      },\r\n    });\r\n  }\r\n\r\n  interceptRequestPayment() {\r\n    let self = this;\r\n    uni.addInterceptor('requestPayment', {\r\n      success() {\r\n        self._payment('pay_success');\r\n      },\r\n      fail() {\r\n        self._payment('pay_fail');\r\n      },\r\n    });\r\n  }\r\n\r\n  _login() {\r\n    this.sendEventRequest(\r\n      {\r\n        key: 'login',\r\n      },\r\n      0\r\n    );\r\n  }\r\n\r\n  _share() {\r\n    this.sendEventRequest(\r\n      {\r\n        key: 'share',\r\n      },\r\n      0\r\n    );\r\n  }\r\n  _payment(key) {\r\n    this.sendEventRequest(\r\n      {\r\n        key,\r\n      },\r\n      0\r\n    );\r\n  }\r\n\r\n  /**\r\n   * 进入应用触发\r\n   */\r\n  applicationShow() {\r\n    // 通过 __licationHide 判断保证是进入后台后在次进入应用，避免重复上报数据\r\n    if (this.__licationHide) {\r\n      const time = get_residence_time('app');\r\n      // 需要判断进入后台是否超过时限 ，默认是 30min ，是的话需要执行进入应用的上报\r\n      if (time.overtime) {\r\n        let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE');\r\n        let options = {\r\n          path: lastPageRoute,\r\n          scene: this.statData.sc,\r\n          cst: 2,\r\n        };\r\n        this.sendReportRequest(options);\r\n      }\r\n      // 状态重置\r\n      this.__licationHide = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 离开应用触发\r\n   * @param {Object} self\r\n   * @param {Object} type\r\n   */\r\n  applicationHide(self, type) {\r\n    if (!self) {\r\n      // 表示应用切换到后台 ，此时需要从页面栈获取页面实例\r\n      self = get_page_vm();\r\n    }\r\n    // 进入应用后台保存状态，方便进入前台后判断是否上报应用数据\r\n    this.__licationHide = true;\r\n    const time = get_residence_time();\r\n    const route = get_page_route(self);\r\n    uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route);\r\n    this.sendHideRequest(\r\n      {\r\n        urlref: route,\r\n        urlref_ts: time.residenceTime,\r\n      },\r\n      type\r\n    );\r\n    // 更新页面首次访问时间\r\n    set_first_time();\r\n  }\r\n\r\n  /**\r\n   * 进入页面触发\r\n   */\r\n  pageShow(self) {\r\n    // 清空值 ，初始化 ，避免污染后面的上报数据\r\n    this._navigationBarTitle = {\r\n      config: '',\r\n      page: '',\r\n      report: '',\r\n      lt: '',\r\n    };\r\n\r\n    const route = get_page_route(self);\r\n    const routepath = get_route$1(self);\r\n\r\n    this._navigationBarTitle.config = get_page_name(routepath);\r\n    // 表示应用触发 ，页面切换不触发之后的逻辑\r\n    if (this.__licationShow) {\r\n      // 更新页面首次访问时间\r\n      set_first_time();\r\n      // this._lastPageRoute = route\r\n      uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route);\r\n      this.__licationShow = false;\r\n      return\r\n    }\r\n\r\n    const time = get_residence_time('page');\r\n    // 停留时间\r\n    if (time.overtime) {\r\n      let options = {\r\n        path: route,\r\n        scene: this.statData.sc,\r\n        cst: 3,\r\n      };\r\n      this.sendReportRequest(options);\r\n    }\r\n    // 更新页面首次访问时间\r\n    set_first_time();\r\n  }\r\n\r\n  /**\r\n   * 离开页面触发\r\n   */\r\n  pageHide(self) {\r\n    if (!this.__licationHide) {\r\n      const time = get_residence_time('page');\r\n      let route = get_page_route(self);\r\n      let lastPageRoute = uni.getStorageSync('_STAT_LAST_PAGE_ROUTE');\r\n      if (!lastPageRoute) {\r\n        lastPageRoute = route;\r\n      }\r\n      uni.setStorageSync('_STAT_LAST_PAGE_ROUTE', route);\r\n      this.sendPageRequest({\r\n        url: route,\r\n        urlref: lastPageRoute,\r\n        urlref_ts: time.residenceTime,\r\n      });\r\n      // this._lastPageRoute = route\r\n      return\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 发送请求,应用维度上报\r\n   * @param {Object} options 页面信息\r\n   * @param {Boolean} type 是否立即上报\r\n   */\r\n  sendReportRequest(options, type) {\r\n    this._navigationBarTitle.lt = '1';\r\n    this._navigationBarTitle.config = get_page_name(options.path);\r\n    let is_opt = options.query && JSON.stringify(options.query) !== '{}';\r\n    let query = is_opt ? '?' + JSON.stringify(options.query) : '';\r\n    const last_time = get_last_visit_time();\r\n    // 非老用户\r\n    if(last_time !== 0 || !last_time){\r\n      const odid = get_odid();\r\n      // 1.0 处理规则\r\n      {\r\n        this.statData.odid = odid;\r\n      }\r\n    }\r\n\r\n    Object.assign(this.statData, {\r\n      lt: '1',\r\n      url: options.path + query || '',\r\n      t: get_time(),\r\n      sc: get_scene(options.scene),\r\n      fvts: get_first_visit_time(),\r\n      lvts: last_time,\r\n      tvc: get_total_visit_count(),\r\n      // create session type  上报类型 ，1 应用进入 2.后台30min进入 3.页面30min进入\r\n      cst: options.cst || 1,\r\n    });\r\n    if (get_platform_name() === 'n') {\r\n      this.getProperty(type);\r\n    } else {\r\n      this.getNetworkInfo(type);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 发送请求,页面维度上报\r\n   * @param {Object} opt\r\n   */\r\n  sendPageRequest(opt) {\r\n    let { url, urlref, urlref_ts } = opt;\r\n    this._navigationBarTitle.lt = '11';\r\n    let options = {\r\n      ak: this.statData.ak,\r\n      uuid: this.statData.uuid,\r\n      p: this.statData.p,\r\n      lt: '11',\r\n      ut: this.statData.ut,\r\n      url,\r\n      tt: this.statData.tt,\r\n      urlref,\r\n      urlref_ts,\r\n      ch: this.statData.ch,\r\n      usv: this.statData.usv,\r\n      t: get_time(),\r\n    };\r\n    this.request(options);\r\n  }\r\n\r\n  /**\r\n   * 进入后台上报数据\r\n   * @param {Object} opt\r\n   * @param {Object} type\r\n   */\r\n  sendHideRequest(opt, type) {\r\n    let { urlref, urlref_ts } = opt;\r\n    let options = {\r\n      ak: this.statData.ak,\r\n      uuid: this.statData.uuid,\r\n      p: this.statData.p,\r\n      lt: '3',\r\n      ut: this.statData.ut,\r\n      urlref,\r\n      urlref_ts,\r\n      ch: this.statData.ch,\r\n      usv: this.statData.usv,\r\n      t: get_time(),\r\n    };\r\n    this.request(options, type);\r\n  }\r\n\r\n  /**\r\n   * 自定义事件上报\r\n   */\r\n  sendEventRequest({ key = '', value = '' } = {}) {\r\n    let routepath = '';\r\n\r\n    try {\r\n      routepath = get_route$1();\r\n    } catch (error) {\r\n      const launch_options = dbGet('__launch_options');\r\n      routepath = launch_options.path;\r\n    }\r\n\r\n    this._navigationBarTitle.config = get_page_name(routepath);\r\n    this._navigationBarTitle.lt = '21';\r\n    let options = {\r\n      ak: this.statData.ak,\r\n      uuid: this.statData.uuid,\r\n      p: this.statData.p,\r\n      lt: '21',\r\n      ut: this.statData.ut,\r\n      url: routepath,\r\n      ch: this.statData.ch,\r\n      e_n: key,\r\n      e_v: typeof value === 'object' ? JSON.stringify(value) : value.toString(),\r\n      usv: this.statData.usv,\r\n      t: get_time(),\r\n    };\r\n    this.request(options);\r\n  }\r\n\r\n  sendPushRequest(options, cid) {\r\n    let time = get_time();\r\n\r\n    const statData = {\r\n      lt: '101',\r\n      cid: cid,\r\n      t: time,\r\n      ut: this.statData.ut,\r\n    };\r\n\r\n    // debug 打印打点信息\r\n    if (is_debug) {\r\n      log(statData);\r\n    }\r\n\r\n    const stat_data = handle_data({\r\n      101: [statData],\r\n    });\r\n    let optionsData = {\r\n      usv: STAT_VERSION, //统计 SDK 版本号\r\n      t: time, //发送请求时的时间戮\r\n      requests: stat_data,\r\n    };\r\n\r\n    {\r\n      if (statData.ut === 'h5') {\r\n        this.imageRequest(optionsData);\r\n        return\r\n      }\r\n    }\r\n\r\n    // XXX 安卓需要延迟上报 ，否则会有未知错误，需要验证处理\r\n    if (get_platform_name() === 'n' && this.statData.p === 'a') {\r\n      setTimeout(() => {\r\n        this.sendRequest(optionsData);\r\n      }, 200);\r\n      return\r\n    }\r\n\r\n    this.sendRequest(optionsData);\r\n  }\r\n\r\n  /**\r\n   * 获取wgt资源版本\r\n   */\r\n  getProperty(type) {\r\n    plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {\r\n      this.statData.v = wgtinfo.version || '';\r\n      this.getNetworkInfo(type);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 获取网络信息\r\n   */\r\n  getNetworkInfo(type) {\r\n    uni.getNetworkType({\r\n      success: (result) => {\r\n        this.statData.net = result.networkType;\r\n        this.getLocation(type);\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * 获取位置信息\r\n   */\r\n  getLocation(type) {\r\n    if (stat_config.getLocation) {\r\n      uni.getLocation({\r\n        type: 'wgs84',\r\n        geocode: true,\r\n        success: (result) => {\r\n          if (result.address) {\r\n            this.statData.cn = result.address.country;\r\n            this.statData.pn = result.address.province;\r\n            this.statData.ct = result.address.city;\r\n          }\r\n\r\n          this.statData.lat = result.latitude;\r\n          this.statData.lng = result.longitude;\r\n          this.request(this.statData, type);\r\n        },\r\n      });\r\n    } else {\r\n      this.statData.lat = 0;\r\n      this.statData.lng = 0;\r\n      this.request(this.statData, type);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 发送请求\r\n   * @param {Object} data 上报数据\r\n   * @param {Object} type 类型\r\n   */\r\n  request(data, type) {\r\n    let time = get_time();\r\n    const title = this._navigationBarTitle;\r\n    Object.assign(data, {\r\n      ttn: title.page,\r\n      ttpj: title.config,\r\n      ttc: title.report,\r\n    });\r\n\r\n    let uniStatData = dbGet('__UNI__STAT__DATA') || {};\r\n    if (!uniStatData[data.lt]) {\r\n      uniStatData[data.lt] = [];\r\n    }\r\n    // 加入队列\r\n    uniStatData[data.lt].push(data);\r\n    dbSet('__UNI__STAT__DATA', uniStatData);\r\n\r\n    let page_residence_time = get_page_residence_time();\r\n    // debug 打印打点信息\r\n    if (is_debug) {\r\n      log(data);\r\n    }\r\n    // 判断时候到达上报时间 ，默认 10 秒上报\r\n    if (page_residence_time < eport_Interval && !type) return\r\n\r\n    // 时间超过，重新获取时间戳\r\n    set_page_residence_time();\r\n    const stat_data = handle_data(uniStatData);\r\n    let optionsData = {\r\n      usv: STAT_VERSION, //统计 SDK 版本号\r\n      t: time, //发送请求时的时间戮\r\n      requests: stat_data,\r\n    };\r\n\r\n    // 重置队列\r\n    dbRemove('__UNI__STAT__DATA');\r\n\r\n    {\r\n      if (data.ut === 'h5') {\r\n        this.imageRequest(optionsData);\r\n        return\r\n      }\r\n    }\r\n\r\n    // XXX 安卓需要延迟上报 ，否则会有未知错误，需要验证处理\r\n    if (get_platform_name() === 'n' && this.statData.p === 'a') {\r\n      setTimeout(() => {\r\n        this.sendRequest(optionsData);\r\n      }, 200);\r\n      return\r\n    }\r\n\r\n    this.sendRequest(optionsData);\r\n  }\r\n\r\n  getIsReportData() {\r\n    return is_report_data()\r\n  }\r\n\r\n  /**\r\n   * 数据上报\r\n   * @param {Object} optionsData 需要上报的数据\r\n   */\r\n  sendRequest(optionsData) {\r\n\r\n    {\r\n      this.getIsReportData().then(() => {\r\n        uni.request({\r\n          url: STAT_URL,\r\n          method: 'POST',\r\n          data: optionsData,\r\n          success: () => {\r\n            if (is_debug) {\r\n              log(optionsData, true);\r\n            }\r\n          },\r\n          fail: (e) => {\r\n            if (++this._retry < 3) {\r\n              if (is_debug) {\r\n                console.warn('=== 统计上报错误，尝试重新上报！');\r\n                console.error(e);\r\n              }\r\n              setTimeout(() => {\r\n                this.sendRequest(optionsData);\r\n              }, 1000);\r\n            }\r\n          },\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * h5 请求\r\n   */\r\n  imageRequest(data) {\r\n    this.getIsReportData().then(() => {\r\n      let image = new Image();\r\n      let options = get_sgin(get_encodeURIComponent_options(data)).options;\r\n      image.src = STAT_H5_URL + '?' + options;\r\n      if (is_debug) {\r\n        log(data, true);\r\n      }\r\n    });\r\n  }\r\n\r\n  sendEvent(key, value) {\r\n    // 校验 type 参数\r\n    if (calibration(key, value)) return\r\n\r\n    if (key === 'title') {\r\n      this._navigationBarTitle.report = value;\r\n      return\r\n    }\r\n    this.sendEventRequest(\r\n      {\r\n        key,\r\n        value: typeof value === 'object' ? JSON.stringify(value) : value,\r\n      },\r\n      1\r\n    );\r\n  }\r\n}\n\nclass Stat extends Report {\n  static getInstance() {\n    if (!uni.__stat_instance) {\n      uni.__stat_instance = new Stat();\n    }\n\n    return uni.__stat_instance\n  }\n  constructor() {\n    super();\n  }\n\n  /**\n   * 获取推送id\n   */\n  pushEvent(options) {\n    const ClientID = is_push_clientid();\n    if (uni.getPushClientId && ClientID) {\n      uni.getPushClientId({\n        success: (res) => {\n          const cid = res.cid || false;\n          //  只有获取到才会上传\n          if (cid) {\n            this.sendPushRequest(options, cid);\n          }\n        },\n      });\n    }\n  }\n\n  /**\n   * 进入应用\n   * @param {Object} options 页面参数\n   * @param {Object} self\t当前页面实例\n   */\n  launch(options, self) {\n    // 初始化页面停留时间  start\n    set_page_residence_time();\n    this.__licationShow = true;\n    dbSet('__launch_options', options);\n    // 应用初始上报参数为1\n    options.cst = 1;\n    this.sendReportRequest(options, true);\n  }\n  load(options, self) {\n    this.self = self;\n    this._query = options;\n  }\n\n  appHide(self) {\n    this.applicationHide(self, true);\n  }\n\n  appShow(self) {\n    this.applicationShow(self);\n  }\n\n  show(self) {\n    this.self = self;\n    if (get_page_types(self) === 'page') {\n      const isPageReport = is_page_report();\n      if (isPageReport) {\n        this.pageShow(self);\n      }\n    }\n\n    // #ifdef VUE3\n    if (get_platform_name() === 'h5' || get_platform_name() === 'n') {\n      if (get_page_types(self) === 'app') {\n        this.appShow();\n      }\n    }\n    // #endif\n\n    // #ifndef VUE3\n    if (get_page_types(self) === 'app') {\n      this.appShow();\n    }\n    // #endif\n  }\n\n  hide(self) {\n    this.self = self;\n    if (get_page_types(self) === 'page') {\n      const isPageReport = is_page_report();\n      if (isPageReport) {\n        this.pageHide(self);\n      }\n    }\n\n    // #ifdef VUE3\n    if (get_platform_name() === 'h5' || get_platform_name() === 'n') {\n      if (get_page_types(self) === 'app') {\n        this.appHide();\n      }\n    }\n    // #endif\n\n    // #ifndef VUE3\n    if (get_page_types(self) === 'app') {\n      this.appHide();\n    }\n    // #endif\n  }\n\n  error(em) {\n    // 开发工具内不上报错误\n    // if (this._platform === 'devtools') {\n    //   if (process.env.NODE_ENV === 'development') {\n    //     console.info('当前运行环境为开发者工具，不上报数据。')\n    //     return\n    //   }\n    // }\n    let emVal = '';\n    if (!em.message) {\n      emVal = JSON.stringify(em);\n    } else {\n      emVal = em.stack;\n    }\n\n    let route = '';\n    try {\n      route = get_route();\n    } catch (e) {\n      // 未获取到页面路径\n      route = '';\n    }\n\n    let options = {\n      ak: this.statData.ak,\n      uuid: this.statData.uuid,\n      p: this.statData.p,\n      lt: '31',\n      url: route,\n      ut: this.statData.ut,\n      ch: this.statData.ch,\n      mpsdk: this.statData.mpsdk,\n      mpv: this.statData.mpv,\n      v: this.statData.v,\n      em: emVal,\n      usv: this.statData.usv,\n      t: parseInt(new Date().getTime() / 1000),\n    };\n    this.request(options);\n  }\n}\nvar Stat$1 = Stat;\n\nconst stat = Stat$1.getInstance();\r\n\r\n// 用于判断是隐藏页面还是卸载页面\r\nlet isHide = false;\r\n\r\nconst lifecycle = {\r\n  onLaunch(options) {\r\n    // 进入应用上报数据\r\n    stat.launch(options, this);\r\n    // 上报push推送id\r\n    stat.pushEvent(options);\r\n  },\r\n  onLoad(options) {\r\n    stat.load(options, this);\r\n    // 重写分享，获取分享上报事件\r\n    if (this.$scope && this.$scope.onShareAppMessage) {\r\n      let oldShareAppMessage = this.$scope.onShareAppMessage;\r\n      this.$scope.onShareAppMessage = function (options) {\r\n        stat.interceptShare(false);\r\n        return oldShareAppMessage.call(this, options)\r\n      };\r\n    }\r\n  },\r\n  onShow() {\r\n    isHide = false;\r\n    stat.show(this);\r\n  },\r\n  onHide() {\r\n    isHide = true;\r\n    stat.hide(this);\r\n  },\r\n  onUnload() {\r\n    if (isHide) {\r\n      isHide = false;\r\n      return\r\n    }\r\n    stat.hide(this);\r\n  },\r\n  onError(e) {\r\n    stat.error(e);\r\n  },\r\n};\r\n\r\n// 加载统计代码\r\nfunction load_stat() {\r\n  // #ifdef VUE3\r\n  uni.onCreateVueApp((app) => {\r\n    app.mixin(lifecycle);\r\n    uni.report = function (type, options) {\r\n      stat.sendEvent(type, options);\r\n    };\r\n  });\r\n\r\n  if (get_platform_name() !== 'h5' && get_platform_name() !== 'n') {\r\n    uni.onAppHide(() => {\r\n      stat.appHide(get_page_vm());\r\n    });\r\n    uni.onAppShow(() => {\r\n      stat.appShow(get_page_vm());\r\n    });\r\n  }\r\n  // #endif\r\n\r\n  // #ifndef VUE3\r\n  // eslint-disable-next-line no-restricted-globals\r\n  const Vue = require('vue')\r\n  ;(Vue.default || Vue).mixin(lifecycle);\r\n  uni.report = function (type, options) {\r\n    stat.sendEvent(type, options);\r\n  };\r\n  // #endif\r\n}\r\n\r\nfunction main() {\r\n  if (is_debug) {\r\n    {\r\n      // #ifndef APP-NVUE\r\n      console.log('=== uni统计开启,version:1.0 ===');\r\n      // #endif\r\n    }\r\n    load_stat();\r\n  } else {\r\n    if (process.env.NODE_ENV === 'development') {\r\n      uni.report = function (type, options) {};\r\n    } else {\r\n      load_stat();\r\n    }\r\n  }\r\n}\r\n\r\nmain();\n"]}