jihuaqiang 2 years ago
parent
commit
aa612eafdd
6 changed files with 130 additions and 56 deletions
  1. 17 1
      components/MobileLandPage.vue
  2. 1 1
      http/index.js
  3. 16 12
      log-center/logEnum.js
  4. 34 30
      log-center/logger.js
  5. 61 10
      pages/course/index.vue
  6. 1 2
      pages/index.vue

+ 17 - 1
components/MobileLandPage.vue

@@ -69,10 +69,11 @@
 </template>
 <script>
 import { RewardType, PlayType } from '../types';
-import { getStorage, setStorage, removeStorage, storageKey, getOauthUrl } from '../utils/help';
+import { getStorage, setStorage, removeStorage, storageKey, getMid, getOauthUrl, appType } from '../utils/help';
 import { postRequest } from '../http';
 import FontZoom from './FontZoom';
 import { Toast } from 'vant';
+import Report from './../log-center/log';
 
 const overTimePic = require('../static/img/icon-h5-denet.svg');
 const giveawayPic = require('../static/img/icon-h5-giveaway.svg');
@@ -191,6 +192,21 @@ export default {
 	methods: {
 		toLogin() {
 			let userInfo = getStorage(storageKey.userInfo);
+			Report.reportLog({
+				baseInfo: {
+					mid: getMid(),
+					pageSource: Report.pageSource.mobileLandingPage,
+					appType,
+					machineCode: getMid(),
+				},
+				params: {
+					eventData: {
+						businessType: Report.businessType.buttonClick,
+						objectType: userInfo ? Report.businessType.cliamRewardButton : Report.businessType.loginTwitterButton,
+						postId: this.postId,
+					},
+				},
+			});
 			if (userInfo) {
 				location.href = `/course?useful=${this.useFul ? '1' : '0'}&playType=${this.playType}&rewardType=${this.rewardType}&postId=${this.postId}`;
 			} else {

+ 1 - 1
http/index.js

@@ -21,7 +21,7 @@ instance.interceptors.response.use(
 		if (res.data.code === -107) {
 			// token失效
 			removeStorage(storageKey.userInfo);
-			location.href = `/`;
+			location.reload();
 		} else {
 			return res.data;
 		}

+ 16 - 12
log-center/logEnum.js

@@ -1,19 +1,23 @@
 export const logType = {
-    'denet': '150',//denet-event-log
-}
+	denet: '150', //denet-event-log
+};
 
 export const businessType = {
-    buttonView: "buttonView",
-    buttonClick: "buttonClick",
-    pageView: "pageView",
-}
+	buttonView: 'buttonView',
+	buttonClick: 'buttonClick',
+	pageView: 'pageView',
+};
 
 export const objectType = {
-    installButton: "install-button",
-    copyLinkButton: "copy-link-button"
-}
+	installButton: 'install-button',
+	copyLinkButton: 'copy-link-button',
+	loginTwitterButton: 'login-twitter-button',
+	cliamRewardButton: 'cliam-reward-button',
+	rtButton: 'rt-button',
+};
 
 export const pageSource = {
-    newUserLandingPage: "new-user-landing-page",
-    mobileLandingPage: "mobile-landing-page"
-}
+	newUserLandingPage: 'new-user-landing-page',
+	mobileLandingPage: 'mobile-landing-page',
+	tutorialPage: 'tutorial-page',
+};

+ 34 - 30
log-center/logger.js

@@ -1,55 +1,59 @@
 import axios from 'axios';
 import { logType } from './logEnum.js';
-import { getBrowser } from '../utils/help';
+import { getBrowser, getUserInfo, appVersionCode } from '../utils/help';
 
 const logApi = {
 	prod: 'https://log.weiqumeta.com',
 	pre: 'https://prelog.weiqumeta.com',
-	test: 'https://testlog.weiqumeta.com'
-}
+	test: 'https://testlog.weiqumeta.com',
+};
 
-const logAPIUrl = logApi[process.env.NUXT_ENV.MODE] + '/log-center'
+const logAPIUrl = logApi[process.env.NUXT_ENV.MODE] + '/log-center';
 
 /**
  * @eventData 以键值对存储,会在最终上报里解开的参数
  * @extParams 最终上报到阿里云以json字符串存储的参数,如果extparams传入的不是obj会转换成obj
  */
 export function reportLog(params) {
-    paramsPretreatmentAndRequest(logType.denet, params)
+	paramsPretreatmentAndRequest(logType.denet, params);
 }
 
 function paramsPretreatmentAndRequest(logType, params) {
-    let {eventData = {}, extParams = {}} = params.params ||  {
-        params: {
-        }
-    }
-    let isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
-    let platform = isMobile ? `mobile` : `pc`;
-    let browser = getBrowser();
-    let extData = {
-        url: location.href,
-        browser,
-        platform,
-        ...eventData,
-    }
-    eventData = wrapObject(extData)
-    params.params.logType = logType;
-    params.params.eventData = JSON.stringify(eventData)
-    params.params.extParams  = JSON.stringify(extParams)
-    
-    axios.post(`${logAPIUrl}/statistics/uploadLogFromFrontend`, params)
+	let { eventData = {}, extParams = {} } = params.params || {
+		params: {},
+	};
+	const userInfo = getUserInfo();
+	if (userInfo) {
+		params.baseInfo.loginUid = userInfo.uid;
+	}
+	params.baseInfo.appVersionCode = appVersionCode;
+	let isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
+	let platform = isMobile ? `mobile` : `pc`;
+	let browser = getBrowser();
+	let extData = {
+		url: location.href,
+		browser,
+		platform,
+		...eventData,
+	};
+	eventData = wrapObject(extData);
+	params.params.logType = logType;
+	params.params.eventData = JSON.stringify(eventData);
+	params.params.extParams = JSON.stringify(extParams);
+
+	axios.post(`${logAPIUrl}/statistics/uploadLogFromFrontend`, params);
 }
 
 function wrapObject(extParams) {
-    if (typeDecide(extParams, 'Object')) {
-        return extParams
-    }
-    return { 'defaultExt': extParams }
+	if (typeDecide(extParams, 'Object')) {
+		return extParams;
+	}
+	return { defaultExt: extParams };
 }
 
 /**
  * 检测对象类型
  */
 function typeDecide(o, type) {
-    return Object.prototype.toString.call(o) === `[object ${type}]`;
-}
+	return Object.prototype.toString.call(o) === `[object ${type}]`;
+}

+ 61 - 10
pages/course/index.vue

@@ -5,8 +5,10 @@
 			<img class="tip-icon" src="./../../static/img/icon-h5-topc.png" />
 			<span class="tip-text">{{ tipTextCpd }}</span>
 		</div>
-		<div class="course-page-pics-wrap" :style="{ transform: translastCpd }">
-			<img class="pic" v-for="(item, index) in course" :key="index" :src="item" />
+		<div class="course-page-pics-contail">
+			<div class="course-page-pics-contail-wrap" :style="{ transform: translastCpd }">
+				<img class="pic" v-for="(item, index) in course" :key="index" :src="item" />
+			</div>
 		</div>
 		<div class="course-page-pagination">
 			<div class="spon" v-for="(item, index) in course" :key="index" :class="active === index ? 'active' : ''"></div>
@@ -22,7 +24,8 @@
 <script>
 import { PlayType, UsefulType } from '../../types';
 import axios from 'axios';
-import { getQueryString, baseURL, appVersionCode } from '../../utils/help';
+import Report from '../../log-center/log';
+import { getQueryString, baseURL, appVersionCode, getMid, appType } from '../../utils/help';
 
 export default {
 	name: 'course',
@@ -50,9 +53,11 @@ export default {
 			return this.useful === '1';
 		},
 		tipTextCpd() {
-			if (this.isLottaryCpd) {
+			if (this.isUsefulCpd) {
+				return 'How to install Denet Chrome Extension';
+			} else if (this.isCommonCpd) {
 				return 'Install DeNet chrome extension to claim your prize';
-			} else if (this.isCommonCpd || this.isTreasureCpd) {
+			} else if (this.isLottaryCpd || this.isTreasureCpd) {
 				return 'Install Denet Chrome Extension to complete the quest';
 			} else {
 				return 'How to install Denet Chrome Extension';
@@ -62,15 +67,54 @@ export default {
 	methods: {
 		next() {
 			this.active++;
+			this.reportLog();
 		},
 		back() {
 			this.active--;
+			this.reportLog();
 		},
 		retweer() {
+			Report.reportLog({
+				baseInfo: {
+					mid: getMid(),
+					pageSource: Report.pageSource.tutorialPage,
+					appType,
+					machineCode: getMid(),
+				},
+				params: {
+					eventData: {
+						businessType: Report.businessType.buttonClick,
+						objectType: Report.objectType.rtButton,
+						postId: getQueryString('postId'),
+					},
+					extParams: {
+						pageindex: this.active + 1,
+					},
+				},
+			});
 			if (getQueryString('postId')) {
 				window.open(`https://twitter.com/intent/retweet?tweet_id=${getQueryString('postId')}`);
 			}
 		},
+		reportLog() {
+			Report.reportLog({
+				baseInfo: {
+					mid: getMid(),
+					pageSource: Report.pageSource.tutorialPage,
+					appType,
+					machineCode: getMid(),
+				},
+				params: {
+					eventData: {
+						businessType: Report.businessType.pageView,
+						postId: getQueryString('postId'),
+					},
+					extParams: {
+						pageindex: this.active + 1,
+					},
+				},
+			});
+		},
 	},
 	async asyncData(params) {
 		let { route } = params;
@@ -88,6 +132,9 @@ export default {
 			};
 		}
 	},
+	mounted() {
+		this.reportLog();
+	},
 };
 </script>
 
@@ -133,11 +180,15 @@ body {
 			margin-right: 20px;
 		}
 	}
-	&-pics-wrap {
-		display: flex;
-		transition: all 0.5s;
-		.pic {
-			width: 100%;
+	&-pics-contail {
+		flex: 1;
+		overflow: hidden;
+		&-wrap {
+			display: flex;
+			transition: all 0.5s;
+			.pic {
+				width: 100%;
+			}
 		}
 	}
 	&-pagination {

+ 1 - 2
pages/index.vue

@@ -221,7 +221,7 @@
 <script>
 import axios from 'axios';
 import Cookies from 'js-cookie';
-import { isBrowser } from '../utils/help.js';
+import { isBrowser, appType } from '../utils/help.js';
 import Report from '../log-center/log';
 import { Toast } from 'vant';
 import FontAmount from '../components/FontAmount.vue';
@@ -244,7 +244,6 @@ const page = {
 };
 const jumpUrl = page[process.env.NUXT_ENV.MODE] + '/';
 const baseURL = api[process.env.NUXT_ENV.MODE];
-const appType = 1;
 
 let appVersionCode = 6;
 export default {