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');
+});