|
|
|
|
|
import qs from 'yoho-qs';
|
|
|
const yoho = require('js/yoho-app');
|
|
|
const _ = require('lodash');
|
|
|
|
|
|
class ResourceShowYasRpter {
|
|
|
constructor() {
|
|
|
this.timer = null;
|
|
|
this.reportParams = {
|
|
|
C_ID: qs.physical_channel || 1,
|
|
|
DATA: []
|
|
|
};
|
|
|
this.lastShowSkns = [];
|
|
|
|
|
|
window.onscroll = _.throttle(() => {
|
|
|
this.reportCtl();
|
|
|
}, 100);
|
|
|
|
|
|
this.report();
|
|
|
}
|
|
|
|
|
|
getPname() {
|
|
|
let isiOS = yoho.isiOS;
|
|
|
let isAndroid = yoho.isAndroid;
|
|
|
|
|
|
let P_NAME = 'h5FP_CollageHome';
|
|
|
|
|
|
if (isAndroid) {
|
|
|
P_NAME = 'aFP_CollageHome';
|
|
|
}
|
|
|
if (isiOS) {
|
|
|
P_NAME = 'iFP_CollageHome';
|
|
|
}
|
|
|
|
|
|
return P_NAME;
|
|
|
}
|
|
|
|
|
|
reportCtl() {
|
|
|
if (this.timer) {
|
|
|
clearTimeout(this.timer);
|
|
|
}
|
|
|
|
|
|
this.timer = setTimeout(() => {
|
|
|
this.reportParams.DATA = [];
|
|
|
this.report();
|
|
|
}, 300);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 这个链接是否是商品
|
|
|
*/
|
|
|
theAisGoods(slideClass, aIndex) {
|
|
|
if (
|
|
|
slideClass.indexOf('swiper-slide-active') !== -1 ||
|
|
|
slideClass.indexOf('swiper-slide-next') !== -1
|
|
|
) {
|
|
|
this.aIndex = aIndex;
|
|
|
return true;
|
|
|
} else if (this.aIndex) {
|
|
|
this.aIndex = false;
|
|
|
return true;
|
|
|
} else {
|
|
|
this.aIndex = false;
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
report() {
|
|
|
let cacheTheShowSkns = []; // 暂存此次上报的楼层,上报后复制给 lastReportSkns
|
|
|
|
|
|
$('.templates').each((floorIndex, theFloor) => {
|
|
|
let $theFloor = $(theFloor);
|
|
|
let F_INDEX = $theFloor.data('id') + 1;
|
|
|
let floorsRawArr = []; // 当前展示楼层
|
|
|
let F_ID = $theFloor.data('f-id');
|
|
|
let F_NAME = $theFloor.data('f-name');
|
|
|
|
|
|
|
|
|
if ($.inviewport($theFloor, { threshold: 0 })) {
|
|
|
// 楼层可见
|
|
|
$theFloor.find('ul > li').each((aIndex, theA) => {
|
|
|
let $theA = $(theA);
|
|
|
let href = $theA.attr('data-href');
|
|
|
|
|
|
F_INDEX = $theFloor.data('id') + 1;
|
|
|
|
|
|
if ($.inviewport($theA, { threshold: 0 }) && href) {
|
|
|
floorsRawArr.push({
|
|
|
href: href,
|
|
|
I_INDEX: aIndex + 1,
|
|
|
F_INDEX,
|
|
|
F_ID,
|
|
|
F_NAME
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
$theFloor.find('.split-item').each((aIndex, theA) => {
|
|
|
let $theA = $(theA);
|
|
|
let href = $theA.data('href');
|
|
|
|
|
|
F_INDEX = $theFloor.data('id') + 1;
|
|
|
|
|
|
if ($.inviewport($theA, { threshold: 0 }) && href) {
|
|
|
floorsRawArr.push({
|
|
|
href: href,
|
|
|
I_INDEX: aIndex + 1,
|
|
|
F_INDEX,
|
|
|
F_ID,
|
|
|
F_NAME
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
$theFloor.find('.swiper-slide-1').each((aIndex, theA) => {
|
|
|
let $theA = $(theA);
|
|
|
let productSkn = $theA.data('product-skn');
|
|
|
let itemIndex = $theA.data('item-idx');
|
|
|
|
|
|
F_INDEX = $theFloor.data('id') + 1;
|
|
|
|
|
|
if (
|
|
|
$.inviewport($theA, { threshold: 0 }) &&
|
|
|
productSkn &&
|
|
|
this.theAisGoods($(theA).attr('class'), aIndex)
|
|
|
) {
|
|
|
floorsRawArr.push({
|
|
|
href: '',
|
|
|
PRD_SKN: productSkn,
|
|
|
I_INDEX: itemIndex + 1,
|
|
|
F_INDEX,
|
|
|
F_ID,
|
|
|
F_NAME
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (floorsRawArr.length) { // 本楼层有符合上报条件的商品
|
|
|
for (let goodsRawObj of floorsRawArr) {
|
|
|
let newParams = {
|
|
|
P_NAME: this.getPname(),
|
|
|
P_PARAM: goodsRawObj.href && goodsRawObj.href.split('?')[0] || '',
|
|
|
F_INDEX: goodsRawObj.F_INDEX,
|
|
|
I_INDEX: goodsRawObj.I_INDEX,
|
|
|
F_ID: goodsRawObj.F_ID,
|
|
|
F_NAME: goodsRawObj.F_NAME
|
|
|
};
|
|
|
|
|
|
if (goodsRawObj.PRD_SKN) {
|
|
|
newParams.PRD_SKN = goodsRawObj.PRD_SKN;
|
|
|
newParams.ACTION_URL = '';
|
|
|
} else {
|
|
|
newParams.ACTION_URL = goodsRawObj.href;
|
|
|
}
|
|
|
this.reportParams.DATA.push(newParams);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
$('.new-goods-list').each((floorIndex, theFloor) => {
|
|
|
let currentState = history.state;
|
|
|
let $theFloor = $(theFloor);
|
|
|
let F_INDEX = (currentState.index_idx || 0) + 2;
|
|
|
let TAB_NAME = currentState.tab_name;
|
|
|
let F_ID = currentState.template_id;
|
|
|
let F_NAME = currentState.template_name;
|
|
|
let floorsRawArr = [];
|
|
|
|
|
|
$theFloor.find('.new-index-filter-list-item').each((aIndex, theA) => {
|
|
|
let $theA = $(theA);
|
|
|
let productSkn = $theA.data('product-skn');
|
|
|
let itemIndex = $theA.data('item-idx');
|
|
|
|
|
|
if (
|
|
|
$.inviewport($theA, { threshold: 0 }) &&
|
|
|
productSkn
|
|
|
) {
|
|
|
floorsRawArr.push({
|
|
|
href: '',
|
|
|
PRD_SKN: productSkn,
|
|
|
I_INDEX: itemIndex + 1,
|
|
|
F_INDEX,
|
|
|
F_ID,
|
|
|
TAB_NAME,
|
|
|
F_NAME
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
if (floorsRawArr.length) { // 本楼层有符合上报条件的商品
|
|
|
for (let goodsRawObj of floorsRawArr) {
|
|
|
let indexInLast = this.lastShowSkns.indexOf(goodsRawObj.PRD_SKN);
|
|
|
|
|
|
if (indexInLast < 0) {
|
|
|
let newParams = {
|
|
|
P_NAME: this.getPname(),
|
|
|
P_PARAM: goodsRawObj.href && goodsRawObj.href.split('?')[0] || '',
|
|
|
F_INDEX: goodsRawObj.F_INDEX,
|
|
|
I_INDEX: goodsRawObj.I_INDEX,
|
|
|
F_ID: goodsRawObj.F_ID,
|
|
|
F_NAME: goodsRawObj.F_NAME,
|
|
|
TAB_NAME: goodsRawObj.TAB_NAME,
|
|
|
PRD_SKN: goodsRawObj.PRD_SKN,
|
|
|
ACTION_URL: ''
|
|
|
};
|
|
|
|
|
|
this.reportParams.DATA.push(newParams);
|
|
|
}
|
|
|
|
|
|
cacheTheShowSkns.push(goodsRawObj.PRD_SKN);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
this.lastShowSkns = cacheTheShowSkns;
|
|
|
|
|
|
setTimeout(() => {
|
|
|
if (typeof window._yas !== 'undefined' && window._yas.sendCustomInfo &&
|
|
|
this.reportParams.DATA && this.reportParams.DATA.length) {
|
|
|
window._yas.sendCustomInfo({
|
|
|
op: 'YB_SHOW_EVENT',
|
|
|
appop: 'YB_SHOW_EVENT',
|
|
|
param: JSON.stringify(this.reportParams)
|
|
|
}, true);
|
|
|
}
|
|
|
}, 1000);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
export default new ResourceShowYasRpter(); |
...
|
...
|
|