diff --git a/packages/analytics/index.html b/packages/analytics/index.html index 2ee13d0958d28e9520a551366c3df8c55ead754f..834405306aa63fcb1b8c457b287437097ff73c84 100644 --- a/packages/analytics/index.html +++ b/packages/analytics/index.html @@ -15,14 +15,16 @@
+ + + + + open link
123
- - -
diff --git a/packages/analytics/src/open-analytics.ts b/packages/analytics/src/open-analytics.ts index 1cfeacb8f5114d9ea9307cd15f6ea8147c7ba4b9..6a9ccf59fc917ee16f36aeb3a8b501e5584ddf5d 100644 --- a/packages/analytics/src/open-analytics.ts +++ b/packages/analytics/src/open-analytics.ts @@ -3,7 +3,7 @@ import { whenDocumentReady, isFunction, isPromise, uniqueId, isClient } from './ import { Constant } from './constant'; import { reportInnerEvent, isInnerEvent } from './events'; import packageJson from '../package.json'; -import { EventContent, EventData, EventHeader, OpenAnalyticsParams, ReportRequest, EventParams } from './types'; +import { EventContent, EventData, EventHeader, OpenAnalyticsParams, ReportRequest, EventParams, Environment } from './types'; class AnalyticsStoreKey { appPrefix: string; @@ -82,7 +82,9 @@ export class OpenAnalytics { save: false, }).value; - this.#header = {}; + this.#header = { + env: params.env ?? 'production', + }; this.enabled = false; } @@ -207,6 +209,18 @@ export class OpenAnalytics { setHeader(header: Record) { Object.assign(this.#header, header); } + /** + * 设置运行环境 + */ + setEnvironment(env: Environment) { + // 如果环境切换,需将之前环境数据上报,避免旧环境数据记录到新环境 + if (this.#header.env !== env) { + this.#runRequestPlan(true); + } + Object.assign(this.#header, { + env: env, + }); + } /** * 控制是否发送数据上报 * @param enabled diff --git a/packages/analytics/src/types.ts b/packages/analytics/src/types.ts index ac1f744110a7adf34c2defd20ab0fd22e2589c35..9f188b80ff1da854afc5ff932d26c355dd3df057 100644 --- a/packages/analytics/src/types.ts +++ b/packages/analytics/src/types.ts @@ -10,7 +10,10 @@ export interface EventData { sId: string; // 会话id } +export type Environment = 'development' | 'production' | (string & {}); + export interface EventHeader { + env?: Environment; // 当前运行环境 cId?: string; // 客户端匿名标识,清除浏览器缓存销毁 aId?: string; // 应用id oa_version?: string; // OA版本 @@ -35,6 +38,7 @@ export interface ReportData { export type ReportRequest = (data: ReportData) => Promise | void; export interface OpenAnalyticsParams { + env?: Environment; // 当前环境 request: (data: ReportData) => Promise | void; // 上报数据的接口 appKey?: string; // 采集app的key,用于区分多app上报 immediate?: boolean; // 全局设置是否立即上报 diff --git a/packages/analytics/test/main.ts b/packages/analytics/test/main.ts index 876dd9993003009926f11a26b58b903d85cc1fa0..b9d70b6ca4e6af4de44b047fa0d75a70104b42b3 100644 --- a/packages/analytics/test/main.ts +++ b/packages/analytics/test/main.ts @@ -4,11 +4,17 @@ import { getClientInfo } from '../src/plugins'; const btn1 = document.querySelector('#btn1'); const btnOpen = document.querySelector('#btn-open'); const btnClose = document.querySelector('#btn-close'); +const btnEnvDev = document.querySelector('#btn-env-dev'); +const btnEnvProd = document.querySelector('#btn-env-prod'); const oa = new OpenAnalytics({ appKey: 'test', request: (data) => { - console.log('request to send content', data); + console.log( + 'request to send content', + data.header.env, + data.body.map((item) => item.event) + ); // return fetch('report', { // method: 'POST', // body: JSON.stringify(data), @@ -65,3 +71,9 @@ btnOpen?.addEventListener('click', () => { btnClose?.addEventListener('click', () => { enabledOA(false); }); +btnEnvDev?.addEventListener('click', () => { + oa.setEnvironment('development'); +}); +btnEnvProd?.addEventListener('click', () => { + oa.setEnvironment('prodution'); +});