소스 검색

运营埋点

任一存 1 년 전
부모
커밋
bd4d63ceba
12개의 변경된 파일111개의 추가작업 그리고 11개의 파일을 삭제
  1. 2 2
      README.md
  2. 1 0
      src/App.vue
  3. 10 0
      src/api.js
  4. 10 7
      src/components/OtherRelicDetail.vue
  5. 46 0
      src/store/index.js
  6. 5 0
      src/views/CharityHall.vue
  7. 5 0
      src/views/CityOfXishan.vue
  8. 5 0
      src/views/CloudSchool.vue
  9. 13 1
      src/views/HomeView.vue
  10. 5 0
      src/views/LoveForest.vue
  11. 4 1
      src/views/MuseumView.vue
  12. 5 0
      src/views/SquareView.vue

+ 2 - 2
README.md

@@ -7,10 +7,10 @@
 appId: wx0bc995dace29b2ba
 
 ## 待办
-对接unity
-
 埋点
 
+对接unity
+
 真正的登录功能
 
 ## 微信扫码页面url

+ 1 - 0
src/App.vue

@@ -141,6 +141,7 @@ window.navigateBack = function() {
   router.go(-1)
 }
 
+store.commit('getPageVisitRecordFromStorage')
 // checkLoginStatusAndProcess()
 getUserFromStorageIfNeed()
 

+ 10 - 0
src/api.js

@@ -14,6 +14,16 @@ axios.interceptors.response.use(function (response) {
   return error
 })
 
+export function reportVisitPage(pageId) {
+  return axios({
+    method: 'post',
+    url: `${process.env.VUE_APP_DEPLOY_ORIGIN}/api/show/visit/addVisit`,
+    data: {
+      device: 'pc',
+      id: pageId,
+    }
+  })
+}
 export async function checkLoginStatusAndProcess() {
   const lastToken = localStorage.getItem('token')
   const lastUserInfoStr = localStorage.getItem('userInfo')

+ 10 - 7
src/components/OtherRelicDetail.vue

@@ -20,18 +20,13 @@
     <div class="btn-group">
       <button
         v-if="data.link.includes('4dkankan')"
-        @click="iframeUrl = props.data.link, isShowIframeWrap = true"
+        @click="onClickSceneEntry"
       >
         场景漫游
       </button>
       <button
         v-else
-        @click="router.push({
-          name: 'IframeWrap',
-          query: {
-            url: encodeURI(data.link)
-          }
-        })"
+        @click="onClickSceneEntry"
       >
         全景浏览
       </button>
@@ -72,6 +67,14 @@ const props = defineProps({
 
 const isShowIframeWrap = ref(false)
 const iframeUrl = ref('')
+
+function onClickSceneEntry() {
+  // 运营埋点
+  store.dispatch('recordPageVisitIfNeeded', {
+    pageId: props.data.id,
+  })
+  iframeUrl.value = props.data.link, isShowIframeWrap.value = true
+}
 </script>
 
 <style lang="less" scoped>

+ 46 - 0
src/store/index.js

@@ -1,4 +1,5 @@
 import { createStore } from 'vuex'
+import { reportVisitPage } from '@/api.js'
 
 const loginStatusEnum = {
   notLogin: 'not-login',
@@ -13,7 +14,9 @@ export default createStore({
     token: '',
     userInfo: {
       userName: '',
+      userId: null,
     },
+    pageVisitRecord: {},
   },
   getters: {
     loginStatusEnum() {
@@ -48,8 +51,51 @@ export default createStore({
       state.userInfo = {}
       localStorage.removeItem('userInfo')
     },
+    getPageVisitRecordFromStorage(state) {
+      let pageVisitRecordStr = localStorage.getItem('pageVisitRecord')
+      if (pageVisitRecordStr) {
+        state.pageVisitRecord = JSON.parse(pageVisitRecordStr)
+      }
+    },
+    setPageVisitRecord(state, value) {
+      state.pageVisitRecord = value
+    }
   },
   actions: {
+    recordPageVisitIfNeeded({ state, commit }, { pageId }) {
+      let needUpdateStorage = false
+
+      let userId = undefined
+      if (state.loginStatus !== loginStatusEnum.wxLogin) {
+        userId = 'visitor'
+      } else {
+        userId = state.userInfo.userId
+      }
+
+      if (!state.pageVisitRecord[userId]) {
+        state.pageVisitRecord[userId] = {}
+        needUpdateStorage = true
+      }
+
+      let lastVisitTime = undefined
+      lastVisitTime = state.pageVisitRecord[userId][pageId]
+      if (lastVisitTime === undefined) {
+        state.pageVisitRecord[userId][pageId] = 0
+        needUpdateStorage = true
+      }
+
+      let lastVisitTimeObj = new Date(lastVisitTime)
+      let thisVisitTimeObj = new Date()
+      if (!(lastVisitTimeObj.getFullYear() === thisVisitTimeObj.getFullYear() && lastVisitTimeObj.getMonth() === thisVisitTimeObj.getMonth() && lastVisitTimeObj.getDay() === thisVisitTimeObj.getDay())) {
+        state.pageVisitRecord[userId][pageId] = thisVisitTimeObj.getTime()
+        needUpdateStorage = true
+        reportVisitPage(pageId)
+      }
+
+      if (needUpdateStorage) {
+        localStorage.setItem('pageVisitRecord', JSON.stringify(state.pageVisitRecord))
+      }
+    }
   },
   modules: {
   }

+ 5 - 0
src/views/CharityHall.vue

@@ -17,6 +17,11 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 5,
+})
+
 const url = ref(`https://app.4dage.com/projects/wxcs/web/index.html?platform=h5&name=${store.state.userInfo.userName}&scene=1`)
 
 </script>

+ 5 - 0
src/views/CityOfXishan.vue

@@ -17,6 +17,11 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 2,
+})
+
 const url = computed(() => {
   let temp = `https://app.4dage.com/projects/wxcs/web/index.html?platform=h5&name=${store.state.userInfo.userName}`
   if (route.query.scene !== undefined) {

+ 5 - 0
src/views/CloudSchool.vue

@@ -17,6 +17,11 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 7,
+})
+
 const url = ref(`https://app.4dage.com/projects/wxcs/web/index.html?platform=h5&name=${store.state.userInfo.userName}&scene=0`)
 
 </script>

+ 13 - 1
src/views/HomeView.vue

@@ -104,7 +104,7 @@
             <!-- <button class="pano"/> -->
             <button
               class="vr"
-              @click="iframeUrl = activeHotRelicDetail?.link, isShowIframeWrap = true"
+              @click="onClickHotRelicSceneEntry"
             />
           </div>
         </div>
@@ -213,6 +213,11 @@ const store = useStore()
 
 const $env = inject('$env')
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 1,
+})
+
 const otherRelicList = ref([])
 getRelicList().then((res) => {
   otherRelicList.value = res
@@ -610,6 +615,13 @@ watch(activeHotRelicIdx, (v) => {
 }, {
   immediate: true,
 })
+function onClickHotRelicSceneEntry() {
+  // 运营埋点
+  store.dispatch('recordPageVisitIfNeeded', {
+    pageId: activeHotRelicDetail.value.id,
+  })
+  iframeUrl.value = activeHotRelicDetail.value?.link, isShowIframeWrap.value = true
+}
 
 const isShowAreaList = ref(true)
 const areaList = ref([

+ 5 - 0
src/views/LoveForest.vue

@@ -17,6 +17,11 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 6,
+})
+
 const url = ref(`https://app.4dage.com/projects/wxcs/web/index.html?platform=h5&name=${store.state.userInfo.userName}&scene=3`)
 
 </script>

+ 4 - 1
src/views/MuseumView.vue

@@ -21,7 +21,10 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
-
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 4,
+})
 </script>
 
 <style lang="less" scoped>

+ 5 - 0
src/views/SquareView.vue

@@ -17,6 +17,11 @@ const route = useRoute()
 const router = useRouter()
 const store = useStore()
 
+// 运营埋点
+store.dispatch('recordPageVisitIfNeeded', {
+  pageId: 3,
+})
+
 const url = ref(`https://app.4dage.com/projects/wxcs/web/index.html?platform=h5&name=${store.state.userInfo.userName}&scene=2`)
 
 </script>