Commit 2eb69578 authored by 郝聪敏's avatar 郝聪敏

feature: 添加组件埋点指令

parent 0cd2c2f9
...@@ -2,8 +2,10 @@ import { Vue, Component, Prop } from 'vue-property-decorator'; ...@@ -2,8 +2,10 @@ import { Vue, Component, Prop } from 'vue-property-decorator';
import { Getter } from 'vuex-class'; import { Getter } from 'vuex-class';
import Raven from 'raven-js'; import Raven from 'raven-js';
import RavenVue from 'raven-js/plugins/vue'; import RavenVue from 'raven-js/plugins/vue';
import 'intersection-observer';
import { release } from '@/.sentryclirc'; import { release } from '@/.sentryclirc';
import '@/service/qg.service'; import '@/service/qg.service';
import Exposure from '@/service/exposure.service';
// 初始化sentry // 初始化sentry
if (process.env.SENTRY_ENV !== 'test' && process.env.NODE_ENV === 'production') { if (process.env.SENTRY_ENV !== 'test' && process.env.NODE_ENV === 'production') {
...@@ -15,6 +17,16 @@ if (process.env.SENTRY_ENV !== 'test' && process.env.NODE_ENV === 'production') ...@@ -15,6 +17,16 @@ if (process.env.SENTRY_ENV !== 'test' && process.env.NODE_ENV === 'production')
.install(); .install();
} }
if (EASY_ENV_IS_BROWSER) {
const exp = new Exposure();
Vue.directive('exp-dot', {
bind(el, binding, vnode) {
exp.add({el, val: binding.value});
}
});
}
@Component({ @Component({
name: 'Layout' name: 'Layout'
}) })
......
...@@ -71,6 +71,10 @@ export default class Activity extends Mixins(TransformStyleMixin) { ...@@ -71,6 +71,10 @@ export default class Activity extends Mixins(TransformStyleMixin) {
this.setPageElement(elements); this.setPageElement(elements);
} }
dot(title) {
console.log(title, '点击了');
}
modfiTabsStyle() { modfiTabsStyle() {
const tabsEle = document.querySelector('.tabs'); const tabsEle = document.querySelector('.tabs');
if (tabsEle) { if (tabsEle) {
......
...@@ -19,8 +19,10 @@ ...@@ -19,8 +19,10 @@
:w="item.point.w" :w="item.point.w"
:h="item.point.h" :h="item.point.h"
:i="item.point.i" :i="item.point.i"
:key="item.point.i"> :key="item.point.i"
<component :data-index="index" :containerIndex="index" :childItem="item" :is="item.name" :key="item.id" v-bind="item.props"></component> @click.native="dot(item.title)"
>
<component v-exp-dot :data-dot="item.title" :data-index="index" :containerIndex="index" :childItem="item" :is="item.name" :key="item.id" v-bind="item.props"></component>
</grid-item> </grid-item>
</grid-layout> </grid-layout>
<cr-back-top v-if="showBackTop && pageData.props.showBackTop" /> <cr-back-top v-if="showBackTop && pageData.props.showBackTop" />
......
import 'intersection-observer';
export default class Exposure {
observer;
constructor() {
this.init();
}
init() {
this.observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
this.dot(entry?.target?.attributes?.['data-dot']?.value);
}
});
});
}
add(entry) {
if (this.observer) { this.observer.observe(entry.el); }
}
dot(title) {
console.log(title, '进入了');
}
}
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment