...">
,需要通过父级DOM结构来判断
*/
var trackActionPhone = function (node) {
var nodeInnerText = node.innerText || '';
if (!limitRegLength(nodeInnerText)) return;
var nodeText = trimText(nodeInnerText);
if (nodeText.length < 5 || nodeText.length > 20) return false;
var type =
arguments.length > 1 && arguments[1] !== undefined
? arguments[1]
: 'click';
var str = trimText(node.href || node.innerHTML || '');
if (phoneReg.test(str) && numUseReg.test(str)) {
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
/** 排查父级嵌套非标签场景,并且对dom的正则校验做一个性能兜底,通过控制innerText的长度,来确保正则的性能 */
var fatherText = trimText(node.parentNode.innerText || '');
if (fatherText.length < 5 || fatherText.length > 20) return false;
var fatherDom = trimText(node.parentNode.innerHTML || '');
if (phoneReg.test(fatherDom) && numUseReg.test(fatherDom)) {
_paq.push(['trackEvent', type, 'phone', nodeText]);
return true;
}
return false;
};
window.addEventListener('click', function (e) {
var node = e.target;
/** 社媒点击 */
var appName = '';
var getAppAriaLabel =
node.ariaLabel || node.parentNode.ariaLabel || '';
if (mediaList.includes(getAppAriaLabel.toLowerCase())) {
appName = getAppAriaLabel;
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'a'
) {
appName = getMediaName(node.href) || getMediaName(node.alt);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'img'
) {
appName = getMediaName(node.alt) || getMediaName(node.src);
}
if (
!appName &&
node.nodeName &&
node.nodeName.toLowerCase() === 'i'
) {
appName = getMediaName(node.className);
}
if (appName) {
_paq.push(['trackEvent', 'click', 'contactApp', appName]);
return;
}
/** 联系方式点击 */
if (trackActionPhone(node, 'click')) return;
if (node.nodeName && node.nodeName.toLowerCase() === 'a') {
var val = node.href;
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
if (node.nodeName && node.nodeName.toLowerCase() === 'i') {
var val = node.className;
var content = node.parentNode.href || '';
if (val.includes('email')) {
_paq.push(['trackEvent', 'click', 'email', content]);
return;
}
}
var nodeChildList = node.childNodes;
for (var i = 0; i < nodeChildList.length; i++) {
if (nodeChildList[i].nodeType !== 3) continue;
var val = nodeChildList[i].textContent.replace(/\s?:?/g, '');
if (!limitRegLength(val)) continue;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'click', 'email', val]);
return;
}
}
trackNumberData(node);
});
window.addEventListener('copy', function (e) {
if (trackActionPhone(e.target, 'copy')) return;
var text = e.target.textContent;
if (!text) return;
var val = text.replace(/\s:?/g, '');
if (!limitRegLength(val)) return;
if (emailReg.test(val)) {
_paq.push(['trackEvent', 'copy', 'email', val]);
return;
}
trackNumberData(e.target);
});
}
trackContactInit();
/**
* 基于custom_inquiry_form.js 以及 form.js 对于询盘表单提交的实现,来反推询盘表单的input标签触发,用来收集意向客户
* 1. 缓存的KEY:TRACK_INPUT_ID_MTM_00;
* 2. 缓存策略 - lockTrackInput:单个页面内,10分钟内,不重复上报
*/
function trackActionInput() {
const CACHE_KEY = 'TRACK_INPUT_ID_MTM_00';
const pathName = window.location.hostname + window.location.pathname;
var lockTrackInput = function () {
try {
const lastCacheData = localStorage.getItem(CACHE_KEY);
if (!lastCacheData) return false;
const cacheData = JSON.parse(lastCacheData);
const cacheTime = cacheData[pathName];
if (!cacheTime) return false;
return Date.now() - cacheTime < 1000 * 60 * 10; // 10分钟内,不重复上报
} catch (error) {
console.error('lockTrackInput Error', error);
return false;
}
};
var setInputTrackId = function () {
try {
const curCacheData = localStorage.getItem(CACHE_KEY);
if (curCacheData) {
const cacheData = JSON.parse(curCacheData);
cacheData[pathName] = Date.now();
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
return;
}
const cacheData = {
[pathName]: Date.now(),
};
localStorage.setItem(CACHE_KEY, JSON.stringify(cacheData));
} catch (error) {
console.error('setInputTrackId Error', error);
}
};
var getInputDom = function (initDom) {
var ele = initDom;
while (ele) {
/**
* isWebSiteForm 是站点的表单
* isChatWindowForm 是聊天窗口的表单
*/
/** 旧模板表单 */
var isWebSiteForm = !!(
/crm-form/i.test(ele.className) && ele.querySelector('form')
);
/** 1:新模板自定义表单、2:Get a Quote 弹框表单 */
var isWebSiteFormNew = !!(
/inquiry/i.test(ele.className) && ele.querySelector('form')
);
if (isWebSiteForm || isWebSiteFormNew) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'page']);
setInputTrackId();
return;
}
/** Mkt会话触达-聊天弹框的表单输入: MKT由于是iframe嵌入,所以MKT的上报,会单独写到MKT-form代码上 */
var isInquiryChatForm = !!(
/comp-form/i.test(ele.className) && ele.querySelector('form')
);
if (isInquiryChatForm) {
_paq.push(['trackEvent', 'formInquiry', 'formInput', 'chat']);
setInputTrackId();
return;
}
/** 向上查找父节点 */
ele = ele.parentNode;
}
};
function initInputListener() {
var inputUseDebounce = function (fn, delay) {
var timer = null;
var that = this;
return function () {
var args = Array.prototype.slice.call(arguments);
if (timer) clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(that, args);
}, delay);
};
};
var optimizeGetInputDom = inputUseDebounce(getInputDom, 300);
window.addEventListener('input', function (e) {
/** 如果已经上报过,则不再上报 */
if (lockTrackInput()) return;
optimizeGetInputDom(e.target);
});
}
try {
initInputListener();
} catch (error) {
console.log('initInputListener Error', error);
}
}
trackActionInput();
}
/** 第三方消息上报:目前主要是针对全点托管会话;在msgCollect/index.js中调试,访问test.html */
function thirdMsgCollect() {
/** 先检测是否是stayReal托管:如果stayReal脚本都没有,那么说明当前站点未开启stayReal会话托管 */
const scriptList = Array.prototype.slice.call(
document.querySelectorAll('script'),
);
const checkStayReal = () =>
!!scriptList.find((s) => s.src.includes('stayreal.xiaoman.cn'));
if (!checkStayReal()) return;
/** 缓存当前消息队列的最后一条消息id */
const CACHE_KEY = 'CACHE_KEY_MONITOR';
const setCache = (msgIndex) => {
/** 对缓存KEY进行base64转码处理 */
const cacheMsgIndex = btoa(msgIndex);
localStorage.setItem(CACHE_KEY, cacheMsgIndex);
};
const getCache = () => {
const cacheMsgIndex = localStorage.getItem(CACHE_KEY);
if (cacheMsgIndex) return Number(atob(cacheMsgIndex));
return -1;
};
/** 拉取最新msg列表 */
const pullMsgList = () => {
const msgEleList = Array.prototype.slice.call(
document.querySelectorAll('#chat-list li'),
);
const msgIds = [];
const msgMap = msgEleList.reduce((acc, item) => {
const sendTime = item
.querySelector('.message-data-time')
.textContent.trim();
const sendContent = item.querySelector('.message').textContent.trim();
/** msg带有class:other-message的是访客消息,my-message的是客服消息 */
const isOtherMessage = item
.querySelector('.message')
.classList.contains('other-message');
const msgId = item.querySelector('.message').getAttribute('id');
const msgItemData = {
msgId,
user: isOtherMessage ? 'visitor' : 'official',
time: sendTime,
content: sendContent,
};
msgIds.push(msgId);
acc[msgId] = msgItemData;
return acc;
}, {});
return {
ids: msgIds,
dataMap: msgMap,
};
};
/** 加密并上传消息数据 */
let ENCRYPT_KEY = 'de29f1aab63ab033';
let ENCRYPT_IV = 'b8d2badf875e76ac';
const baseUrl = 'https://cms.xiaoman.cn';
// var getEncryptConfig = function () {
// const url = baseUrl + '/shop-api/innerApi/getKeyIv'
// $.get(
// url,
// function (result) {
// console.log('result', result)
// if (Number(result.code) === 0 && result.data.key && result.data.iv) {
// ENCRYPT_KEY = result.data.key
// ENCRYPT_IV = result.data.iv
// uploadMsgData()
// } else {
// /** 如果获取失败,则重试 */
// setTimeout(() => {
// getEncryptConfig()
// }, 1000)
// }
// },
// 'json'
// )
// }
// getEncryptConfig()
const encryptMsg = function (msgData) {
const enc = new TextEncoder();
// 转字节
const keyBytes = enc.encode(ENCRYPT_KEY);
const ivBytes = enc.encode(ENCRYPT_IV);
const plainBytes = enc.encode(msgData);
// 导入密钥并加密
return crypto.subtle
.importKey('raw', keyBytes, { name: 'AES-CBC' }, false, ['encrypt'])
.then(function (cryptoKey) {
return crypto.subtle.encrypt(
{ name: 'AES-CBC', iv: ivBytes },
cryptoKey,
plainBytes,
);
})
.then(function (encryptedBuffer) {
// 转 base64 返回
return btoa(
String.fromCharCode(...new Uint8Array(encryptedBuffer)),
);
})
.catch((err) => {
return Promise.reject(err);
});
};
let uploadFlag = false;
const uploadMsgData = function () {
if (uploadFlag) return;
uploadFlag = true;
const { ids, dataMap } = pullMsgList();
let cacheMsgIndex = getCache();
const msgLen = ids.length;
if (!msgLen) {
// 消息DOM未挂载 || 消息DOM已挂载,但是消息列表为空
uploadFlag = false;
return;
}
if (msgLen - 1 < cacheMsgIndex) {
/** 针对站点挂后台一段时间,消息列表会自动塞入重复消息,导致消息有重复,刷新后又重置回正常消息列表,所以这里需要更新锚点下标 */
cacheMsgIndex = msgLen - 1;
setCache(cacheMsgIndex);
uploadFlag = false;
return;
}
if (msgLen - 1 === cacheMsgIndex) {
// 缓存的最后一次发送的消息ID是最后一条(说明当前消息均已经上报),则不跳过本地上报
uploadFlag = false;
return;
}
const currentMsgIds = ids.slice(cacheMsgIndex + 1, msgLen);
const currentMsgData = currentMsgIds.map((id) => dataMap[id]);
const mtmId = window.matomo_site_id_cookie_key || ''; // 获取mtm会话id
const msgBody = {
mtmId,
curl: window.location.href,
msgList: currentMsgData,
};
const msgBodyStr = JSON.stringify(msgBody);
encryptMsg(msgBodyStr)
.then(function (encryptedMsg) {
console.log('encryptedMsg:', encryptedMsg, msgBodyStr);
const url = baseUrl + '/shop-api/External/ListenSiteActiveStatus';
$.ajax({
type: 'POST',
url,
data: JSON.stringify({ d_v: encryptedMsg }),
contentType: 'application/json',
success: function (result) {
if (Number(result.code) === 0) {
// 更新消息队列
setCache(msgLen - 1);
}
uploadFlag = false;
},
error: function (err) {
console.error(err, '请求异常');
uploadFlag = false;
},
});
})
.catch((err) => {
console.error(err, '数据加密失败');
uploadFlag = false;
});
};
/** 监控chat-list的DOM变更 */
const initChatListObserver = () => {
// 需要监听的 DOM 节点
const target = document.getElementById('chat-list');
if (!target) return;
// 回调函数
const callback = function (mutationsList, observer) {
for (const mutation of mutationsList) {
console.log('mutation', mutation);
if (mutation.type === 'childList') {
uploadMsgData();
}
}
};
// 配置
const config = {
childList: true, // 监听子节点的增删
subtree: true, // 是否也监听后代节点
};
// 创建 observer
const observer = new MutationObserver(callback);
// 开始监听
observer.observe(target, config);
};
let testCount = 30;
let itv = null;
const checkChatDom = () => !!document.querySelector('#vc-model');
const initTalkCheck = () => {
itv = setTimeout(() => {
console.log('checkChatDom', checkChatDom(), testCount);
if (!checkChatDom() && testCount > 0) {
testCount--;
initTalkCheck();
return;
}
clearTimeout(itv);
uploadMsgData();
initChatListObserver();
}, 1500);
};
initTalkCheck();
}
try {
gtmTrack();
thirdMsgCollect();
console.log('inserted gtm code');
} catch (error) {
console.error('gtmTrack Error', error);
}
});
})();
Rimí Trocaire YAOLILAI do chóirleáin iad scileacht is déanaí donn sinne a chloíonn an méid is fearr agus an tabhairneamh ar a gcóirleán. Tá siad féin déanta as éisc ardchaighdeán, atá ina luach láidre. Fásann meáin fúta agus daoine a bhfuil neartúlacha acu nach bhfuil úsáid acu dóibh ach tá an stíl fíor phopular. Tá béim eile den scoth ar na rimí éisc is é a gcumhacht agus a n-éadromacht. Tá éisc dúthrachtach agus féadfadh sé ginearálta bheith ag saothrú scolb agus cúinne gan mion-damhsa a fháil, ceanna mar atá rimí déanta as nóibéala eile. Is é sin an fáth go bhfuil éisc an rogha ceart nuair a thagann isteach le rimí chóirleáin óir gur gá chóirleáin go háirithe do shaol oibre crua. Bíonn siad ag druidim ar bóithre crua le cloch, buailte agus eileanna eile, a d'fhéadfadh brón a chur ar rímí coitianta. rothaí chóil tá an-bhéim eile ar na rimí éisc de réir cumhachta agus fiontra. Ní hé láidir é an cumhacht agus an éadromacht ach tá sé cinnte go bhféadfadh siad sainiú ar chúlra sprioc agus dul i ngleic le cúpla rud eile. Mar sin féin, bíonn an-tacaíocht againn ó mhuintir na n-uisce agus na n-eolaíochtaí céimithe. Is éigin eile maith faoi bháire traein stailéise é go gcuirfidh siad fúma agus rósta. Ní díríonn sé go hiomlán ar stailéas ná ar bháirí traein i gcás scata uisce nó aimsir dona. Beidh an t-ainmhithe a bhfuil cairt agus a ndéanann bealach i gcás gach seachtain ag obair leis seo go mór. Cuirfí fúma agus bíodh an-bhéil againn chun céim níos faide agus níos féin. Le sin a rá, ní hé ach praiticiúil atá i bhbáirí stailéise traein ach go maith léi freisin. Tá fúam airgead deas ar pháirí stailéise YAOLILAI a chuirfidh do chairt in iarthar ó thaobh na ngnóthaí ar an mbóthar. Nuair a bhfuil cairt agat agus na crainn cothrom féachann sé bríomhar, is féidir leat buan agus maith le fáil chun cúl an phríosúin a thógáil. Ní hé sin ach, tá na gclár seo ar fáil i ranga agus stíleanna éagsúla chun cinntiú a aimsiú an pacaéad comhshóileacht a chomhléitear le do lhrúthar. Ní gceapfaidh siad uile dílseacht uasail nó gniomhacha pláta, ach tá mórán rogha atá níos mó ná ceart as cionn má ba mhaith leat cuma áirithe a thabhairt nó féachaint níos fearr le do bháic. Tá ár gcloch lhrúthar steel fostaíte chun cinntiú go gcuireann siad amach le do lhrúthar. Siad pacaíocht rím agus tiorainn léiríonn patrún scuabtha univerisial chun comhshóileacht a chur in iúl lena n-aghaidh gach dóigh lhrúthar, ag fanacht an chóras chomhshóileachta le do ráid. Ciallaíonn sé go bhfuil tú in ann é a shuiteáil go héadrom, go tapa. Tá na ngearra scigthe ar fáil le hiomlán níos mó san chéim chun spás a chur ar fáil do bhréimeanna níos mó a dhéanfar ériú orthu don lhrúthar níos smua. I gcónaí dátheangachtar an dá cheangal sin bunaithe ar sabháis agus measúnú níos fearr, go háirithe faoi lochd nó os cionn na mbóithre. Ar n-áirneach bheith tréan, tá rímhóiní trocaire de phian a chur amach níos fearr. téann allumain síochúil, mar sin is measa a bhfuil aici faoi dhearcadh fhríochna, mar sin ón gcuspóir gairid, is féidir leo imeartha a bheith amach go tapa. Go dírithe cibé, i dtráthnóna cruthaithe, ní héighlí sna rímhóiní acu pían agus mar sin ní héighlí leo do chruth a thabhairt nó a bhriseadh faoi shlí fríochna. Is speisial don rud é seo go háirithe agus tú ag brú colainn do thighde ar pháircanna os cionn bóthar. Tá rímhóiní trocaire go leor maith ach ceann de na hathruithe is mó atá acu atá truck rims go bhfuil cuidiúchán mór acu timpeall cheadaíocht gan aon fhadhb ar chor ar bith. mar mháterial, is tréan an troscán agus is éasca dó lucht tanaí a chur in iúl, sin é cúis nach bhfuil sé ag úsáid ach do thighde a dhéanfaidh ceartas árda a chur orm. Tá na rímhóiní stál YAOLILAI cruthaithe chun cheadaíochtaí timpeall tíre a chinntiú le neamhspleáchacht agus láidreacht. Sin cibé go bhfuil tú ag cinntiú go ndéanfaidh siad obair go freisin, fiú agus tá lucht tanaí sa chraiceann de do thighde. Tá foireann seirbhís comhionann, cúramach, dúthrachtach agus bródúil againn léi gach cliant. Cén fhad is gur tá tú ag iarraidh comhairle roimh dul i ngleic nó seirbhís tar éis dul i ngleic, tabharfadher seirbhís chrua agus rímí síol duitseála, mar sin nach mbeidh aon cheist ort. Ó roghnú na mbunmhatéar, leanann muid caighdeáin ana-dhócha agus monatóirímid gach céim den phróiseas. Tríolann gach ramh adhmaid cruithneachta iomlán de na próisis inspéicte chun a neart, a fheabhas agus a threo-chaighdeáin a chinntiú, ag cinntiú go bhfuil aitheantas ar ardchaighdeán ar fáil duit. Tugaimid sraith seirbhísí atá deartha go speisialta chun freastal ar riachtanais uathúla gach custaiméir. Is féidir linn raimh a chruthú a bheidh ina mhalairt ar riachtanais shonracha do raimh trucail adhmaid cruithneachta, ar a bhearrthacht agus ar a shonraí teicniúla. Tá fhoireann R&D dírithe agus cruthaitheach againn a thaobh taighde ar theicnící nua, ar mhatáirí nua agus ar dheasghnáithí nua go leanúnach. Is féidir linn freagairt a thabhairt do threo-chaighdeáin an mhargaidh agus an tionscail maidir le raimh trucail adhmaid cruithneachta. Cuireann sé seo ar fáil duit na raimh is éifeachtaí a dhéanann an t-ábhar cruithneachta chun do riachtanais a chur i gcrích.Cuir i gcoinne liom go díreach má thagann difríochtaí arís!
Rimí chóir camóige
Níochan Stíl Duitseála Téad le Rímí Síol

Amach Níos Clos

Cén Fáth Go bhfuil na Rímí Síol an Rogha Chomhaim don Bhfeabhsú Oifigiúil

Conas Faighimid Rímí Camóige Síol Ag Tabhairt Cabhrach I gCás Níos Mó Nádúrtha
Why choose YAOLILAI Rimí chóir camóige?
Seirbhís chóasta:
Rialú cáilíochta drithálach:
Seirbhís Saincheaptha agus Fosta:
Tiomaín Idir-léirithe agus Nuálach:
An bhfuil tú ag iarraidh rud éigin nach bhfuil tú ag fáil?
Iarratas ar Shárú Anois
Déan teagmháil le haghaidh níos mó táirgí ar fáil leis na comhairlí.BÍ I LÉIGE LIOM