">
,需要通过父级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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
phone: nodeText,
},
}, '*');
_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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: 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')) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: content,
},
}, '*');
_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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: 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)) {
window.postMessage({
type: 'SHOPS_CONTACT_TRACK',
data: {
email: 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);
}
});
})();
Bạn chỉ cần bước vào cửa hàng và nhận thấy mọi thứ được sắp xếp gọn gàng trên kệ như thế nào. Nó thực sự trở thành một màn hình khổng lồ! Nhưng bạn đã từng nghĩ về hộp bao bì giấy những hộp chứa đựng các sản phẩm này chưa? Bạn có biết những hộp đó được gọi là gì không? Hộp Bán Lẻ! Nguồn ảnh: Illume Packaging Các hộp容器 thực sự đóng vai trò quan trọng trong việc bán sản phẩm vì hộp bán lẻ giúp truyền tải thông điệp thương hiệu của bạn. Việc xây dựng thương hiệu bao gồm một quá trình mà trong đó các công ty, vào thời điểm quảng cáo, khiến mọi người nhớ đến tên, logo hoặc màu sắc của họ. Ví dụ, ngay khi bạn nhìn thấy một logo nổi tiếng, bạn có thể lập tức liên tưởng đến một hashtag của công ty nào đó. Một số công ty đầu tư rất nhiều thời gian và chắc chắn là tiền bạc vào việc xây dựng thương hiệu vì điều này giúp họ phân biệt mình với các tổ chức khác. Càng nhớ rõ một thương hiệu, khả năng cao hơn là lần tới khi đi mua sắm thay vì chọn Atta 5kg, bạn sẽ chọn Ashirwad. Những hộp đựng bán lẻ của Shunho phục vụ mục đích xây dựng thương hiệu vì chúng có thể được tùy chỉnh theo bảng màu và logo của công ty bạn. Nói cách khác, ngay khi người tiêu dùng nhìn thấy hộp bán lẻ đã được branding, họ sẽ bị "nhồi nhét" tên công ty của bạn và đây chính là điều chúng ta gọi là độ hiển thị thương hiệu, nghĩa là khách hàng có khả năng cao hơn sẽ muốn mua từ bạn do dễ dàng nhớ đến thương hiệu. Bạn có từng mua thứ gì đó chỉ vì hộp đựng quá đẹp mắt không? Trong trường hợp này, các hộp bán lẻ Shunho thực sự có thể mang lại may mắn với sức hút đối với khách hàng. Chúng có thể điều chỉnh: hình dạng, màu sắc hoặc vật liệu được sử dụng trong giấy bao bì hộp để thu hút ánh nhìn của người mua sắm. Đôi khi bạn có thể ngay lập tức bắt gặp một hộp sáng bóng hoặc thú vị ngay từ đầu! Một hộp bán lẻ hấp dẫn có thể thu hút khách hàng mua nó. Khi điều này xảy ra, đó được gọi là mua sắm theo xung động. Nếu chúng ta xét đến việc mua sắm theo xung động: Đó là khi khách hàng ban đầu không có kế hoạch mua, nhưng lấy một món đồ từ những gì bạn cung cấp khi họ đang ở cửa hàng. Thường thì bao bì bán lẻ thu hút khách hàng và lượng người đi bộ qua trở thành khách mua hàng. Nếu một chiếc hộp được thiết kế tốt được đặt trước mặt khách hàng, họ có thể sẽ phản ứng: "Ô, trông thật đẹp! Tôi muốn thử nó!" Bao bì thân thiện với môi trường — Bao bì bán lẻ được sản xuất bằng vật liệu thân thiện với môi trường và có thể tái chế hoặc tái sử dụng. Vì vậy, bạn có hộp và khi nó đã hết vòng đời trong các chu kỳ bên trong một cấu trúc. Bạn tái chế thay vì vứt bỏ chúng. Có những công ty cung cấp vật liệu hoàn toàn phân hủy sinh học, phân hủy nhanh chóng trong môi trường. Điều này thật tuyệt vời vì ít chất thải hơn! Chúng tôi cam kết cung cấp bán lẻ bền vững. giấy gói hộp và giúp khách hàng của chúng tôi có giải pháp thân thiện với môi trường trong khi vẫn sử dụng những hộp chất lượng và trông đẹp mắt. Hộp bán lẻ tùy chỉnh là những mặt hàng cụ thể được tạo ra từ hộp giấy dùng để đóng gói đó bao gồm một số tính năng chính. Chúng làm cho sản phẩm trông có giá trị hơn vì là duy nhất, và truyền tải đến khách hàng rằng công ty này coi trọng việc làm cho sản phẩm của họ trở nên độc đáo. Nếu một doanh nghiệp tạo ra hộp riêng của mình, họ sẽ ít bị nhìn nhận là spam hơn. Thiết kế tùy chỉnh hộp giấy Kraft đóng gói được tạo ra để vừa vặn với sản phẩm như một chiếc găng tay và do đó cung cấp sự bảo vệ tốt hơn trong quá trình vận chuyển. Ngoài ra, chúng có thể được thiết kế với thương hiệu để giữ cho sản phẩm luôn ở vị trí hàng đầu trong tâm trí khách hàng. Khi hộp đựng màu sắc và được thiết kế đẹp mắt, chẳng hạn như vậy thì khách hàng sẽ có xu hướng mong đợi việc mua nó hơn. Shunho cung cấp cho bạn hộp bán lẻ cá nhân hóa, giúp người tiêu dùng phá vỡ mô hình thị trường và thu hút thêm nhiều khách hàng. Hỗ trợ tiếng Anh, tiếng Tây Ban Nha và tiếng Nhật cho hộp bán lẻ. Đại đa số khách hàng đến từ các doanh nghiệp hàng đầu thế giới trong lĩnh vực hộp bán lẻ. Đạt chứng nhận FSC, REACH, FDA 21 CFR 176.170, (EU) No 10/2011, HỘP BÁN LẺ ĐẠT CHUẨN PHÂN HỦY TẠI NHÀ (OK COMPOST HOME), CÓ THỂ TÁI CHẾ, ISO 9001/14001/45001, CNAS, BẰNG SÁNG CHẾ và các chứng chỉ bảo vệ môi trường khác. Có hơn 20 năm kinh nghiệm trong thương mại quốc tế. Công suất sản xuất hộp bán lẻ từ giấy laser có thể đạt tới 200.000 tấn.Hộp bán lẻ
Tối đa hóa doanh số với bao bì bán lẻ hấp dẫn"

Một giải pháp bền vững"

Hiểu về các loại hộp bán lẻ khác nhau"

Cách các hộp bán lẻ tùy chỉnh tăng cường giá trị sản phẩm của bạn
Why choose Shunho
Hộp bán lẻ?
Đội tuyệt vời.
Độ mạnh của khách hàng
Chứng chỉ chất lượng
Sức mạnh của công ty
Không tìm thấy sản phẩm bạn cần?
Yêu cầu Báo giá Ngay
Liên hệ với các chuyên viên tư vấn của chúng tôi để biết thêm các sản phẩm có sẵn.Liên hệ với chúng tôi