import { request } from "@/utils/request"; // 生成并缓存 device_id function getOrCreateDeviceId() { let deviceId = uni.getStorageSync("device_id"); if (!deviceId) { deviceId = Date.now() + "_" + Math.random().toString(36).substr(2, 9); uni.setStorageSync("device_id", deviceId); } return deviceId; } // 获取网络类型 function getNetworkType() { return new Promise((resolve) => { uni.getNetworkType({ success: (res) => resolve(res.networkType || "unknown"), fail: () => resolve("unknown"), }); }); } // 获取系统平台 function getSystemInfo() { return new Promise((resolve) => { uni.getSystemInfo({ success: (res) => resolve(res), fail: () => resolve({}), }); }); } // 获取当前页面路径 function getCurrentPagePath() { const pages = getCurrentPages(); const currentPage = pages[pages.length - 1]; return currentPage?.route || ""; } function getMiniProgramVersion() { const platform = process.env.UNI_PLATFORM; let version = ""; let envVersion = ""; try { if (platform === "mp-weixin") { // 微信小程序 const info = wx.getAccountInfoSync(); version = info?.miniProgram?.version || ""; envVersion = info?.miniProgram?.envVersion || ""; } else if (platform === "mp-alipay") { // 支付宝小程序 const info = my.getAppInfoSync(); version = info?.version || ""; } else if (platform === "mp-toutiao" || platform === "mp-jd") { // 抖音/头条/京东小程序 const info = tt.getAccountInfoSync?.(); version = info?.miniProgram?.version || ""; envVersion = info?.miniProgram?.envVersion || ""; } else if (platform === "mp-baidu") { // 百度小程序(无标准方法获取版本号) version = ""; // 百度不支持获取版本号 } else { version = ""; } } catch (e) { version = ""; envVersion = ""; } return { platform, // 当前小程序平台 version, // 小程序版本号 envVersion, // develop / trial / release(微信等支持) }; } // 构造埋点对象 async function buildEventData( eventName, eventType = "click", customParams = {} ) { const deviceId = getOrCreateDeviceId(); const systemInfo = await getSystemInfo(); const networkType = await getNetworkType(); // const location = await getLocation() const appVersion = typeof plus !== "undefined" ? plus?.runtime?.version : ""; const { envVersion, platform, version } = getMiniProgramVersion(); return { userId: uni.getStorageSync("user_id") || null, deviceId: deviceId, eventName: eventName, eventType: eventType, eventTime: new Date(), page: getCurrentPagePath(), elementId: customParams.element_id || null, elementContent: customParams.element_content || null, customParams: customParams, networkType: networkType, os: systemInfo.platform || "unknown", appVersion: version || "unknown", envVersion: envVersion || "", platform: platform || "", }; } // 发送埋点数据到服务器 async function sendTrack(eventName, eventType = "click", customParams = {}) { const eventData = await buildEventData(eventName, eventType, customParams); request({ url: "/api/common/tracking/create", method: "POST", data: eventData, }); } export default { sendTrack, };