초기소스
196
src/main/resources/static/js/adscript/admedia/adscirpt_mobion.js
Normal file
@@ -0,0 +1,196 @@
|
||||
function mobion(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
/*웹, 모바일 각각 공통적으로 호출하는 header 레이아웃에 삽입합니다.
|
||||
*
|
||||
* **디바이스 타입
|
||||
- 웹 W, 모바일 M, 반응형 B**
|
||||
* */
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
|
||||
const deviceTy = $('#adScriptDeviceTy').val()
|
||||
const device = deviceTy==='sopmal'?"W":"M";
|
||||
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
|
||||
let mobionScript = document.createElement('script');
|
||||
mobionScript.async = true;
|
||||
mobionScript.defer = true;
|
||||
mobionScript.src = `https://cdn.megadata.co.kr/dist/prod/v2/mtm.js?adverId=${adMediaId}&device=${device}`
|
||||
|
||||
const header = document.querySelector('header')
|
||||
header.appendChild(mobionScript);
|
||||
|
||||
}//common header end
|
||||
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
//# 상품상세페이지가 로드되면 아래 코드 실행
|
||||
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
|
||||
if(goodsDtlFormAt){
|
||||
|
||||
/*
|
||||
* 상품 상세페이지에 설치.
|
||||
장바구니 버튼에 다음 클래스 추가 : <button class="mobonCart"
|
||||
장바구니 담기 트래킹 목적.
|
||||
장바구니 담기 횟수가 보고서에 나옴.
|
||||
|
||||
스크립트에 취소선 그은 컬럼은 제외하고 삽입
|
||||
|
||||
네이버페이 추적은 자동으로 됨. (클릭을 전환으로 추적. 별도 전환값으로 구분)
|
||||
--> 네이버페이 추적을 제외하고 싶다면 담당자가 모비온에 별도 요청 필요
|
||||
--> 네이버페이 전환값은 모비온 광고관리자에서 주문번호로 구분됨
|
||||
*
|
||||
* */
|
||||
|
||||
const goodsInnb = $('#goodsInnb').val()
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
const cnsmrpric = $('#cnsmrpric').val()
|
||||
const slepric = $('#slepricDscntAmt').val()
|
||||
const goodsSttusCd = $('#goodsSttusCd').val()
|
||||
const ctgryNm = $('#ctgryNm').val()
|
||||
let goodsSttusAt = goodsSttusCd === '01'?'N':'Y'
|
||||
|
||||
//pc일 경우
|
||||
let goodsImg;
|
||||
if(device ==='W'){
|
||||
goodsImg = $('.productDetailGallery__item').find('img').first().prop('src')
|
||||
}else{
|
||||
//mobile일 경우
|
||||
goodsImg = $('.productDetailImages').find('img').first().prop('src')
|
||||
}
|
||||
|
||||
let goodsDtlScript = document.createElement('script');
|
||||
goodsDtlScript.type = 'text/javascript';
|
||||
goodsDtlScript.innerHTML = `
|
||||
window.ENP_VAR = {
|
||||
collect: {}
|
||||
};
|
||||
ENP_VAR.collect.productCode = '${goodsInnb}';
|
||||
ENP_VAR.collect.productName = '${goodsNm}';
|
||||
ENP_VAR.collect.price = '${parseInt(cnsmrpric)}';
|
||||
ENP_VAR.collect.dcPrice = '${parseInt(slepric)}';
|
||||
ENP_VAR.collect.soldOut = '${goodsSttusAt}'; //Y: 품절제품 or N: 판매제품
|
||||
ENP_VAR.collect.imageUrl = '${goodsImg}';
|
||||
ENP_VAR.collect.topCategory = '${ctgryNm}';
|
||||
`;
|
||||
|
||||
document.head.appendChild(goodsDtlScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//장바구니 페이지
|
||||
if(url.includes(selectSpbk)) {
|
||||
|
||||
const cartListFormAt = adScriptCartListFormAt(list)
|
||||
|
||||
if(cartListFormAt){
|
||||
|
||||
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val());
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
let totalQty = 0;
|
||||
|
||||
if(!fn_is_empty(adScriptGoodsList.goodsList)){
|
||||
adScriptGoodsList.goodsList.forEach(optn => {
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
productCode: optn.goodsInnb.toString(),
|
||||
productName: optn.goodsNm,
|
||||
price: optn.subSlepric.toString(),
|
||||
qty: optn.qy.toString()
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
|
||||
totalPrice += optn.subSlepric
|
||||
totalQty += optn.qy;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
const cartScript = document.createElement('script');
|
||||
cartScript.type = 'text/javascript';
|
||||
cartScript.innerHTML = `
|
||||
window.ENP_VAR = { basket: { product: ${JSON.stringify(productDataArray)} } }; // 주문한 각 제품들을 배열에 저장
|
||||
|
||||
ENP_VAR.basket.totalPrice = '${totalPrice}'; // 없는 경우 단일 상품의 정보를 이용해 계산
|
||||
ENP_VAR.basket.totalQty = '${totalQty}'; // 없는 경우 단일 상품의 정보를 이용해 계산
|
||||
`
|
||||
|
||||
document.head.appendChild(cartScript);
|
||||
}
|
||||
|
||||
|
||||
}//장바구니 페이지 END
|
||||
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
|
||||
|
||||
let totalQty = 0;
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
productCode: obj.goodsInnb.toString(),
|
||||
productName: obj.goodsNm,
|
||||
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
qty: obj.ordrQy
|
||||
};
|
||||
totalQty += parseInt(obj.ordrQy)
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
window.ENP_VAR = { conversion: { product: [] } };
|
||||
// 주문한 각 제품들을 배열에 저장
|
||||
ENP_VAR.conversion.product.push(
|
||||
// 주문 상품
|
||||
${JSON.stringify(productDataArray)}
|
||||
);
|
||||
|
||||
ENP_VAR.conversion.ordCode= '${finalOrderNo}';
|
||||
ENP_VAR.conversion.totalPrice = '${price}';
|
||||
ENP_VAR.conversion.totalQty = '${totalQty}';
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
}
|
||||
@@ -0,0 +1,514 @@
|
||||
function loadScript(src) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = src;
|
||||
script.onload = () => resolve();
|
||||
script.onerror = () => reject(new Error(`Failed to load script: ${src}`));
|
||||
document.head.prepend(script);
|
||||
});
|
||||
}
|
||||
|
||||
function adn2dot0(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
/*공통헤더*/
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
/*방문자 스크립트 */
|
||||
const commonFooterAt = adScriptCommonFooterAt(list);
|
||||
|
||||
/*상품상세 스크립트*/
|
||||
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
|
||||
|
||||
//# 장바구니 페이지가 로드되면 아래 코드 실행.
|
||||
const cartListFormAt = adScriptCartListFormAt(list);
|
||||
|
||||
/*주문완료페이지 */
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
|
||||
|
||||
(async function() {
|
||||
// Header 스크립트 로드
|
||||
if (commonHeaderAt) {
|
||||
try {
|
||||
// adn2dot0HeaderScript 로드 및 실행 대기
|
||||
await loadScript('//fin.rainbownine.net/js/across_adn_2.0.1.js');
|
||||
} catch (error) {
|
||||
console.error('error', error);
|
||||
return; // 스크립트 로드 실패 시 이후 진행 중지
|
||||
}
|
||||
}
|
||||
|
||||
// Footer 스크립트 실행 로직
|
||||
if (commonFooterAt) {
|
||||
|
||||
const adMediaId = commonFooterAt.adMediaId;
|
||||
|
||||
let adn2dot0FooterScript = document.createElement('script');
|
||||
adn2dot0FooterScript.type = 'text/x-javascript';
|
||||
adn2dot0FooterScript.innerHTML = `
|
||||
var across_adn_contain = new fn_across_adn_contain();
|
||||
var across_adn_param = [];
|
||||
across_adn_param = {"ut":"Home","ui":"${adMediaId}"};
|
||||
|
||||
var checkAdnInterval = setInterval(() => {
|
||||
|
||||
if(adn_health_flag ==='ok'){
|
||||
|
||||
console.log('adn_health_flag',adn_health_flag);
|
||||
|
||||
clearInterval(checkAdnInterval);
|
||||
|
||||
across_adn_contain.init(across_adn_param);
|
||||
|
||||
}
|
||||
|
||||
}, 100 );
|
||||
`;
|
||||
|
||||
// footer 태그가 없으면 새로 생성
|
||||
let footer = document.getElementsByTagName('footer')[0];
|
||||
if (!footer) {
|
||||
footer = document.createElement('footer');
|
||||
document.body.appendChild(footer);
|
||||
}
|
||||
|
||||
footer.appendChild(adn2dot0FooterScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 상품 상세페이지에 설치.
|
||||
<body></body> 태그 사이 최하단에 설치.
|
||||
* */
|
||||
if(url.includes(selectGoodsDtl) && goodsDtlFormAt) {
|
||||
|
||||
const adMediaId = goodsDtlFormAt.adMediaId
|
||||
const goodsInnb = $('#goodsInnb').val()
|
||||
|
||||
const goodsDtl = document.createElement('script')
|
||||
goodsDtl.type = '';
|
||||
goodsDtl.innerHTML = `
|
||||
var across_adn_item_contain = new fn_across_adn_contain();
|
||||
var across_adn_item_param = [];
|
||||
across_adn_item_param = {"ut":"Item","ui":"${adMediaId}", "items":{"i":"${goodsInnb}","s":""} };
|
||||
|
||||
var checkInterval = setInterval(() => {
|
||||
|
||||
if(adn_health_flag ==='ok'){
|
||||
|
||||
clearInterval(checkInterval);
|
||||
|
||||
across_adn_item_contain.init(across_adn_item_param);
|
||||
|
||||
}
|
||||
|
||||
}, 100 )
|
||||
|
||||
|
||||
|
||||
`;
|
||||
|
||||
document.body.appendChild(goodsDtl)
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* 장바구니 페이지 조회
|
||||
* 장바구니 페이지에 설치.
|
||||
<body></body> 태그 사이 최하단에 설치.
|
||||
→ 장바구니 버튼 클릭이 아니라 페이지 조회로 공유하였음.
|
||||
* */
|
||||
if(url.includes(selectSpbk)){
|
||||
|
||||
if(cartListFormAt){
|
||||
|
||||
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(!fn_is_empty(adScriptGoodsList.goodsList)){
|
||||
adScriptGoodsList.goodsList.forEach(optn => {
|
||||
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
i: optn.goodsInnb, //상품번호
|
||||
c: '',
|
||||
s: optn.optn, //상품명
|
||||
p: optn.subSlepric, //옵션주문단가*옵션주문수량
|
||||
q: optn.qy //옵션주문수량
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
totalPrice += optn.subSlepric
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
let cartListScript = document.createElement('script');
|
||||
|
||||
const adMediaId = cartListFormAt.adMediaId
|
||||
|
||||
cartListScript.innerHTML= `
|
||||
var across_adn_cart_contain = new fn_across_adn_contain();
|
||||
var across_adn_cart_param = [];
|
||||
across_adn_cart_param = {"ut":"Cart","ui":"${adMediaId}", "items":${JSON.stringify(productDataArray)}
|
||||
};
|
||||
|
||||
|
||||
var checkCartInterval = setInterval(() => {
|
||||
|
||||
if(adn_health_flag ==='ok'){
|
||||
|
||||
clearInterval(checkCartInterval);
|
||||
|
||||
across_adn_cart_contain.init(across_adn_cart_param);
|
||||
|
||||
}
|
||||
|
||||
}, 100 )
|
||||
|
||||
|
||||
|
||||
`;
|
||||
|
||||
document.body.appendChild(cartListScript);
|
||||
|
||||
}
|
||||
}//장바구니 페이지 END
|
||||
|
||||
|
||||
/*주문완료 페이지
|
||||
*
|
||||
* <body></body> 태그 사이 최하단에 설치.
|
||||
→ 네이버페이를 전환추적은 제외하기로 하였음.
|
||||
* */
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
let finalOrderNo = adscriptParse.total.ordrInnb
|
||||
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
var across_adn_order_contain = new fn_across_adn_contain();
|
||||
var across_adn_order_param = [];
|
||||
across_adn_order_param = {"ut":"Purchase","ui":"${purchsCompleteFormAt.adMediaId}", "uo":"${finalOrderNo}", "up":"${price}"};
|
||||
|
||||
|
||||
var checkOrderInterval = setInterval(() => {
|
||||
|
||||
if(adn_health_flag ==='ok'){
|
||||
|
||||
clearInterval(checkOrderInterval);
|
||||
|
||||
across_adn_order_contain.init(across_adn_order_param);
|
||||
|
||||
}
|
||||
|
||||
}, 100 )
|
||||
|
||||
|
||||
`;
|
||||
|
||||
document.body.appendChild(purchsComplateFormScript);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
|
||||
/*회원가입 완료 페이지
|
||||
* <body></body> 태그 사이 최하단에 설치.
|
||||
* */
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
|
||||
if(mbrRegstFormAt){
|
||||
|
||||
const adMediaId = mbrRegstFormAt.adMediaId
|
||||
|
||||
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
joinScript.innerHTML = `
|
||||
var across_adn_complete_contain = new fn_across_adn_contain();
|
||||
var across_adn_complete_param = [];
|
||||
across_adn_complete_param = {"ut":"Complete","ui":"${adMediaId}","uo":"types1"};
|
||||
|
||||
|
||||
var checkMemInterval = setInterval(() => {
|
||||
|
||||
if(adn_health_flag ==='ok'){
|
||||
|
||||
clearInterval(checkMemInterval);
|
||||
|
||||
across_adn_complete_contain.init(across_adn_complete_param);
|
||||
|
||||
}
|
||||
|
||||
}, 100 )
|
||||
`;
|
||||
|
||||
document.body.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}//회원가입 완료 페이지 END
|
||||
})();
|
||||
|
||||
/*클로징 패널(MO)
|
||||
*모바일 버전에 설치
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
모든 페이지. <footer></footer> 태그 사이에 설치.
|
||||
→ 실제로 사용
|
||||
* */
|
||||
const mblFooterAt = adScriptMblFooterAt(list)
|
||||
if(mblFooterAt) {
|
||||
|
||||
const instlPgeLbl = mblFooterAt.instlPgeLbl;
|
||||
|
||||
let mblFooterScript = document.createElement('script');
|
||||
|
||||
mblFooterScript.innerHTML = `
|
||||
var adn_mobile_panel_param = adn_mobile_panel_param || [];
|
||||
adn_mobile_panel_param.push([${instlPgeLbl}]);
|
||||
`;
|
||||
|
||||
// footer가 없으면 새로 생성
|
||||
let footer;
|
||||
if (!document.getElementsByTagName('footer').length) {
|
||||
footer = document.createElement('footer');
|
||||
document.body.appendChild(footer); // body에 footer 추가
|
||||
} else {
|
||||
footer = document.getElementsByTagName('footer')[0];
|
||||
}
|
||||
|
||||
footer.appendChild(mblFooterScript);
|
||||
|
||||
let closeMblScript = document.createElement('script')
|
||||
closeMblScript.type = 'text/javascript'
|
||||
closeMblScript.async = true;
|
||||
closeMblScript.src = "//fin.rainbownine.net/js/across_adn_closed_mobile_ad_1.0.4.js";
|
||||
|
||||
footer.appendChild(closeMblScript)
|
||||
|
||||
}
|
||||
|
||||
/*클로징패널 PC
|
||||
* PC 버전에 설치.
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
모든 페이지. <footer></footer> 태그 사이에 설치.
|
||||
→ 실제로 사용
|
||||
* */
|
||||
const pcFooterAt = adScriptPcFooterAt(list)
|
||||
if(pcFooterAt){
|
||||
const instlPgeLbl = pcFooterAt.instlPgeLbl;
|
||||
|
||||
let pcFooterScript = document.createElement('script');
|
||||
|
||||
pcFooterScript.innerHTML = `
|
||||
var adn_panel_param = adn_panel_param || [];
|
||||
adn_panel_param.push([${instlPgeLbl}]);
|
||||
`;
|
||||
|
||||
// footer가 없으면 새로 생성
|
||||
let footer;
|
||||
if (!document.getElementsByTagName('footer').length) {
|
||||
footer = document.createElement('footer');
|
||||
document.body.appendChild(footer); // body에 footer 추가
|
||||
} else {
|
||||
footer = document.getElementsByTagName('footer')[0];
|
||||
}
|
||||
|
||||
footer.appendChild(pcFooterScript);
|
||||
|
||||
let closePcScript = document.createElement('script')
|
||||
closePcScript.type = 'text/javascript'
|
||||
closePcScript.async = true;
|
||||
closePcScript.src = "//fin.rainbownine.net/js/across_adn_closed_pc_ad_1.0.4.js";
|
||||
|
||||
footer.appendChild(closePcScript)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//main page
|
||||
if(url === mainPage || url === mainIndex) {
|
||||
/* 메인 패널(MO)
|
||||
* 모바일 버전에 설치
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
메인 페이지에 설치.
|
||||
<body></body> 태그 사이 최하단에 설치.
|
||||
→ 실제로 사용
|
||||
*
|
||||
* */
|
||||
const mblMainFormAt = adScriptMblMainFormAt(list);
|
||||
if(mblMainFormAt) {
|
||||
let mainMo = document.createElement('script')
|
||||
|
||||
const instlPgeLbl = mblMainFormAt.instlPgeLbl;
|
||||
|
||||
mainMo.type = 'text/javascript'
|
||||
mainMo.innerHTML = `
|
||||
var adn_mobile_pinad_param = adn_mobile_pinad_param || [];
|
||||
adn_mobile_pinad_param.push([${instlPgeLbl}]);
|
||||
`;
|
||||
|
||||
document.body.appendChild(mainMo)
|
||||
|
||||
let mainMoScript = document.createElement('script')
|
||||
mainMoScript.type = 'text/javascript'
|
||||
mainMoScript.async = true;
|
||||
mainMoScript.src = "//fin.rainbownine.net/js/across_adn_mainpanel_mobile_ad_1.0.4.js";
|
||||
|
||||
document.body.appendChild(mainMoScript)
|
||||
}
|
||||
|
||||
/*메인패널 PC
|
||||
* PC 버전에 설치.
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
메인 페이지에 설치.
|
||||
<body></body> 태그 사이 최하단에 설치.
|
||||
→ 실제로 사용
|
||||
* */
|
||||
const pcMainFormAt = adScriptPCMainFormAt(list)
|
||||
if(pcMainFormAt) {
|
||||
|
||||
const instlPgeLbl = pcMainFormAt.instlPgeLbl
|
||||
|
||||
const mainPc = document.createElement('script')
|
||||
mainPc.type = '';
|
||||
mainPc.innerHTML = `
|
||||
var adn_pinad_param = adn_pinad_param || [];
|
||||
adn_pinad_param.push([${instlPgeLbl}]);
|
||||
`;
|
||||
|
||||
document.body.appendChild(mainPc)
|
||||
|
||||
const mainPcScript = document.createElement('script')
|
||||
mainPcScript.type = 'text/javascript'
|
||||
mainPcScript.async = true;
|
||||
mainPcScript.src = "//fin.rainbownine.net/js/across_adn_mainpanel_pc_ad_1.0.5.js";
|
||||
|
||||
document.body.appendChild(mainPcScript)
|
||||
}
|
||||
|
||||
}//main end
|
||||
|
||||
|
||||
|
||||
|
||||
//상품 상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
|
||||
/* 상품 패널(MO)
|
||||
* 모바일 버전에 설치
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
상품 상세페이지에 설치.
|
||||
→ 실제로 사용
|
||||
상품 상세페이지 탭 바로 위에 설치.
|
||||
상세페이지 설명 맨 아래에 설치.
|
||||
→ 상세페이지 탭 바로 위에, 리뷰 아래에 설치
|
||||
* */
|
||||
const mblGoodsDtlFormAt =adScriptMblGoodsDtlFormAt(list)
|
||||
if(mblGoodsDtlFormAt) {
|
||||
|
||||
//상세페이지 탭 바로 위에, 리뷰 아래에 위치
|
||||
const prodDtlTab = document.querySelector('.productDetailTab')
|
||||
const container = document.createElement('div')
|
||||
container.id = 'suggestad_mobie_wrap_container';
|
||||
|
||||
prodDtlTab.parentNode.insertBefore(container, prodDtlTab);
|
||||
|
||||
|
||||
const instlPgeLbl = mblGoodsDtlFormAt.instlPgeLbl
|
||||
|
||||
const mblGoodsDtlForm = document.createElement('script')
|
||||
mblGoodsDtlForm.type='text/javascript'
|
||||
mblGoodsDtlForm.innerHTML = `
|
||||
var adn_suggestad_mobile_param = adn_suggestad_mobile_param || [];
|
||||
adn_suggestad_mobile_param.push([${instlPgeLbl}]);
|
||||
`
|
||||
|
||||
container.appendChild(mblGoodsDtlForm)
|
||||
|
||||
const mblGoodsDtlScript = document.createElement('script')
|
||||
mblGoodsDtlScript.type = 'text/javascript'
|
||||
mblGoodsDtlScript.src = "//fin.rainbownine.net/js/across_adn_recommend_mobile_ad_1.0.5.js";
|
||||
|
||||
container.appendChild(mblGoodsDtlScript)
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*상품패널 PC
|
||||
* PC 버전에 설치.
|
||||
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
|
||||
상품 상세페이지에 설치.
|
||||
→ 실제로 사용
|
||||
상품 상세페이지 탭 바로 위에 설치.
|
||||
상세페이지 설명 맨 아래에 설치.
|
||||
→ 상세페이지 탭 바로 위에, 리뷰 아래에 설치
|
||||
* */
|
||||
const pcGoodsDtlFormAt =adScriptPcGoodsDtlFormAt(list)
|
||||
if(pcGoodsDtlFormAt) {
|
||||
//상세페이지 탭 바로 위에, 리뷰 아래에 위치
|
||||
const prodDtlTab = document.querySelector('.productDetailTab')
|
||||
const container = document.createElement('div')
|
||||
container.id = 'suggestad_wrap_container';
|
||||
|
||||
prodDtlTab.parentNode.insertBefore(container, prodDtlTab);
|
||||
|
||||
const pcGoodsDtlForm = document.createElement('script')
|
||||
|
||||
|
||||
const instlPgeLbl = pcGoodsDtlFormAt.instlPgeLbl
|
||||
|
||||
pcGoodsDtlForm.innerHTML = `
|
||||
var adn_suggestad_param = adn_suggestad_param || [];
|
||||
adn_suggestad_param.push([${instlPgeLbl}]);
|
||||
`
|
||||
|
||||
container.appendChild(pcGoodsDtlForm)
|
||||
|
||||
const pcGoodsDtlScript = document.createElement('script')
|
||||
pcGoodsDtlScript.type = 'text/javascript'
|
||||
pcGoodsDtlScript.src = "//fin.rainbownine.net/js/across_adn_recommend_pc_ad_1.0.5.js";
|
||||
|
||||
container.appendChild(pcGoodsDtlScript)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
118
src/main/resources/static/js/adscript/admedia/adscript_criteo.js
Normal file
@@ -0,0 +1,118 @@
|
||||
function criteo(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Criteo OneTag를 활성화하려면 로더 스크립트(Loader script)가 필요합니다.
|
||||
* 아래 스크립트를 사이트의 '헤드(head)' 부분에 위치시켜 모든 페이지에 포함되도록 해야, 동시에 로딩되는 다른 스크립트로 인해 지연이 발생하지 않습니다.
|
||||
* 페이지에서 한번만 트리거되면 되고, 단일 페이지에서 여러차례 트리거되어도 상관없습니다.
|
||||
* */
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
let criteoScript = document.createElement('script');
|
||||
criteoScript.type ='text/javascript'
|
||||
criteoScript.async = true;
|
||||
criteoScript.src = `//dynamic.criteo.com/js/ld/ld.js?a=${adMediaId}`;
|
||||
document.head.appendChild(criteoScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
if(addCartEventAt){
|
||||
addCartStorage(addCartEventAt)
|
||||
}
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
let adMediaId = purchsCompleteFormAt.adMediaId
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
let finalOrderNo = adscriptParse.total.ordrInnb
|
||||
|
||||
const orderInfo = adscriptParse.order
|
||||
const email = orderInfo.ordrrEmail.trim().replaceAll(' ','').toLowerCase()
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
id: obj.goodsInnb.toString(),
|
||||
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
quantity: obj.ordrQy
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
//우편번호
|
||||
let zipCode = '';
|
||||
for(let obj of adscriptParse.shippingList){
|
||||
if(!fn_is_empty(obj.dlvylcZip)){
|
||||
zipCode = obj.dlvylcZip
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
window.criteo_q = window.criteo_q || [];
|
||||
var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
|
||||
window.criteo_q.push(
|
||||
{ event: "setAccount", account: ${adMediaId}},
|
||||
|
||||
// To Do 1. 현재 유저의 이메일 주소(공백 제거 및 소문자로 변환 후) 전달. 유저의 이메일을 알수 없는 상황이면 빈 문자열로 전달
|
||||
{ event: "setEmail", email: "${email}", hash_method: "sha256" },
|
||||
{ event: "setEmail", email: "${email}", hash_method: "md5" },
|
||||
|
||||
// To Do 2. 현재 유저의 저장된 배송지 우편번호. 유저의 배송지 우편번호를 알수 없는 상황이면 빈 문자열로 전달
|
||||
{ event: "setZipcode", zipcode: "${zipCode}" },
|
||||
|
||||
{ event: "setSiteType", type: deviceType},
|
||||
|
||||
// To Do 3. 확인 또는 주문 번호를 전달. 확인 또는 주문 번호가 없을 경우, Math.floor(Math.random()*99999999999)와 같이 랜덤한 숫자를 만들어 전달
|
||||
{ event: "trackTransaction", id: ${finalOrderNo}
|
||||
, item: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
// To Do 4. 현재 유저가 추가한 상품의 정보(상품 ID, 상품 단가, 추가한 수량)를 아래 객체 포멧으로 전달
|
||||
// 상품 ID는 태그에서 전달되는 상품 ID와 피드에서 전달 주신 상품 ID가 매칭이 되어야 함
|
||||
// 상품 단가는 유저가 선택한 상품의 단가로 전달(옵션 추가 가격 및 할인 가격 포함). 통화 기호 및 천단위 구분자는 제외
|
||||
// 수량은 유저가 선택한 값으로 전달
|
||||
// Tip 1. 복잡한 추가 구성 상품 및 옵션으로 인해 제대로된 상품 단가 및 수량 전달이 어려운 경우, 최종 가격으로 전달 후 수량은 1로 전달 해주셔도 됩니다.
|
||||
// Tip 2. 크리테오는 이 세일즈 태그에서 전달 주는 상품 단가와 수량을 곱하기하여 매출을 리포팅 하오니, 최대한 정확하게 전달이 중요합니다.
|
||||
//{id: "상품번호", price: 옵션주문단가, quantity: 옵션주문수량 }
|
||||
// 장바구니에 추가 된 각 상품에 대한 새 객체 추가. 새 객체를 추가하실때, 객체 사이를 쉼표(,)로 구분
|
||||
}
|
||||
);
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
//구글애즈
|
||||
function googleAds(list, url){
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* * 구글 애즈 공통 헤더
|
||||
<!-- Google tag (gtag.js) -->
|
||||
* */
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
|
||||
let gtagScript = document.createElement('script');
|
||||
gtagScript.async = true;
|
||||
gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + adMediaId;
|
||||
document.head.appendChild(gtagScript);
|
||||
|
||||
// gtag 설정
|
||||
let configScript = document.createElement('script');
|
||||
configScript.innerHTML = `
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '` + adMediaId + `');
|
||||
`;
|
||||
document.head.appendChild(configScript);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//상품 상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
|
||||
if(addCartEventAt){
|
||||
addCartStorage(addCartEventAt)
|
||||
}
|
||||
|
||||
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
|
||||
const nPayEventAt = adScriptNpayEventAt(list)
|
||||
|
||||
if(nPayEventAt){
|
||||
addNpayStorage(nPayEventAt)
|
||||
}
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const PurchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
|
||||
|
||||
|
||||
if(PurchsCompleteFormAt){
|
||||
|
||||
let finalOrderNo = 0;
|
||||
let price = 0;
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
price = parseInt(adscriptParse.total.setleAmt)
|
||||
finalOrderNo = adscriptParse.order.ordrInnb.toString()
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
const adMediaId = PurchsCompleteFormAt.adMediaId
|
||||
const adLbl = PurchsCompleteFormAt.instlPgeLbl
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
gtag('event', 'conversion', {
|
||||
'send_to': '${adMediaId}/${adLbl}',
|
||||
'value': ${price},
|
||||
'currency': 'KRW',
|
||||
'transaction_id':'${finalOrderNo}'
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list)
|
||||
|
||||
if(mbrRegstFormAt){
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
const adMediaId = mbrRegstFormAt.adMediaId
|
||||
const adLbl = mbrRegstFormAt.instlPgeLbl
|
||||
|
||||
// 회원가입 방법 (예: general, kakao 등)
|
||||
joinScript.innerHTML = `
|
||||
gtag('event', 'conversion', {
|
||||
'send_to': '${adMediaId}/${adLbl}',
|
||||
'value': 1.0,
|
||||
'currency': 'KRW'
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}//구글애즈END
|
||||
@@ -0,0 +1,272 @@
|
||||
//구글 애널리틱스
|
||||
function googleAnalytics(list, url){
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* * 구글 애널리틱스 공통 헤더
|
||||
<!-- Google tag (gtag.js) -->
|
||||
태그를 복사한 후 웹사이트의 각 페이지 코드에서 <head> 요소 바로 다음에 붙여넣으세요.
|
||||
* */
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
let gtagScript = document.createElement('script');
|
||||
gtagScript.async = true;
|
||||
gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + adMediaId;
|
||||
document.head.appendChild(gtagScript);
|
||||
|
||||
// gtag 설정
|
||||
let configScript = document.createElement('script');
|
||||
configScript.innerHTML = `
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '` + adMediaId + `');
|
||||
`;
|
||||
document.head.appendChild(configScript);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//상품 상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
const goodsInnb = $('#goodsInnb').val();
|
||||
const goodsNm = $('#goodsNm').val();
|
||||
let price = parseInt($('#slepricDscntAmt').val());
|
||||
|
||||
//# 상품상세페이지가 로드되면 아래 코드 실행
|
||||
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list)
|
||||
if(goodsDtlFormAt){
|
||||
let goodsDtlScript = document.createElement('script')
|
||||
goodsDtlScript.innerHTML=`
|
||||
gtag("event", "view_item", {
|
||||
currency: "KRW",
|
||||
value: ${price},
|
||||
items: [
|
||||
{
|
||||
item_id: ${goodsInnb},
|
||||
item_name: '${goodsNm}',
|
||||
price: ${price},
|
||||
quantity: 1
|
||||
}
|
||||
]
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(goodsDtlScript);
|
||||
}
|
||||
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
|
||||
if(addCartEventAt){
|
||||
|
||||
addCartStorage(addCartEventAt);
|
||||
}
|
||||
|
||||
|
||||
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
|
||||
const npayEventAt = adScriptNpayEventAt(list);
|
||||
if(npayEventAt){
|
||||
|
||||
addNpayStorage(npayEventAt);
|
||||
}
|
||||
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//장바구니 페이지
|
||||
|
||||
if(url.includes(selectSpbk)){
|
||||
|
||||
//# 장바구니 페이지가 로드되면 아래 코드 실행.
|
||||
const cartListFormAt = adScriptCartListFormAt(list)
|
||||
if(cartListFormAt){
|
||||
|
||||
//JSON PARSE
|
||||
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(!fn_is_empty(adScriptGoodsList.goodsList)){
|
||||
adScriptGoodsList.goodsList.forEach(optn => {
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: optn.goodsInnb,
|
||||
item_name: optn.goodsNm,
|
||||
item_variant: optn.optn,
|
||||
price: optn.subSlepric,
|
||||
quantity: optn.qy
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
totalPrice += optn.subSlepric
|
||||
});
|
||||
}
|
||||
|
||||
let cartListScript = document.createElement('script');
|
||||
|
||||
cartListScript.innerHTML= `
|
||||
gtag("event", "view_cart", {
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(cartListScript);
|
||||
}
|
||||
}//장바구니 페이지 END
|
||||
|
||||
|
||||
//주문서 작성 페이지
|
||||
|
||||
if(url.includes(selectNmbrPurchsForm) || url.includes(selectMbrPurchsForm)){
|
||||
//# 주문서 페이지가 로드되면 아래 코드 실행
|
||||
const purchsFormAt = adScriptPurchsFormAt(list);
|
||||
if(purchsFormAt){
|
||||
let purchsFormScript = document.createElement('script');
|
||||
|
||||
// 총 결재 금액
|
||||
let price = $('#setleAmtSapn').text().replace(",","");
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
|
||||
if($('#adScriptDeviceTy').val() ==='sopmal'){ //pc일 경우
|
||||
$('#goodsList tr').each(function(){
|
||||
|
||||
// 객체로 저장
|
||||
let productData1 = {
|
||||
item_id: $(this).find(".goodsInnb").val(),
|
||||
item_name: $(this).find(".cartItem__productTitle").text(),
|
||||
item_variant: $(this).find(".cartItem__productOption").text(),
|
||||
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
|
||||
quantity: $(this).find(".qy").val()
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData1);
|
||||
});
|
||||
}else{ // 모바일 일 경우
|
||||
$('#goodsList .orderInfo__item').each(function(){
|
||||
|
||||
// 객체로 저장
|
||||
let productData1 = {
|
||||
item_id: $(this).find(".goodsInnb").val(),
|
||||
item_name: $(this).find(".cartItem__productTitle").text(),
|
||||
item_variant: $(this).find(".cartItem__productOption").text().replaceAll(' ', '').trim(),
|
||||
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
|
||||
quantity: $(this).find(".qy").val()
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData1);
|
||||
});
|
||||
}
|
||||
|
||||
purchsFormScript.innerHTML= `
|
||||
gtag("event", "begin_checkout", {
|
||||
currency: "KRW",
|
||||
value: ${price}, //총결제금액
|
||||
items: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
});
|
||||
`;
|
||||
document.head.appendChild(purchsFormScript);
|
||||
}
|
||||
}//주문서 작성 페이지 END
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
|
||||
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
// // 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = atob(adscriptVal)
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
item_id: obj.goodsInnb.toString(),
|
||||
item_name: obj.goodsNm,
|
||||
item_variant: obj.optnNm,
|
||||
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
quantity: obj.ordrQy
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
gtag("event", "purchase", {
|
||||
transaction_id: '${finalOrderNo}',
|
||||
currency: "KRW",
|
||||
value: ${price},
|
||||
items: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
|
||||
|
||||
//# 취소/환불 요청 페이지에서 취소/환불 요청을 할 경우 아래 코드 실행
|
||||
const refundReqEventAt = adScriptRefundReqEventAt(list);
|
||||
if(refundReqEventAt){
|
||||
addReturnReqStorage(refundReqEventAt)
|
||||
}
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
|
||||
if(mbrRegstFormAt){
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
// 회원가입 방법 (예: general, kakao 등)
|
||||
const joinMthCd = $('#joinMthCd').val()
|
||||
|
||||
joinScript.innerHTML = `
|
||||
gtag("event", "sign_up", {
|
||||
method: "${joinMthCd}"
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,312 @@
|
||||
//구글태그매니저
|
||||
|
||||
function googleTagManager(list, url){
|
||||
|
||||
|
||||
|
||||
const commonHeaderAt= adScriptCommonHeaderAt(list)
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
//공통헤더
|
||||
//1. 페이지의 <head>에서 최대한 위에 이 코드를 붙여넣으세요.
|
||||
// loadGTMCommonHeader(adMediaId)
|
||||
|
||||
function get_cookie(name) {
|
||||
let value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
|
||||
return value? value[2] : null;
|
||||
}
|
||||
|
||||
const agentId = get_cookie('gc_agent_id')
|
||||
|
||||
let agentScript = document.createElement('script')
|
||||
agentScript.innerHTML=`
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
window.dataLayer.push({
|
||||
agent_id: '${agentId}'
|
||||
});
|
||||
`;
|
||||
|
||||
|
||||
let headFucScript = document.createElement('script')
|
||||
headFucScript.innerHTML='(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\n' +
|
||||
'new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\n' +
|
||||
'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n' +
|
||||
'\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n' +
|
||||
`})(window,document,'script','dataLayer','${adMediaId}');`
|
||||
|
||||
document.head.prepend(headFucScript);
|
||||
|
||||
// 2. 여는 <body> 태그 바로 뒤에 코드를 붙여넣으세요.
|
||||
//<!-- Google Tag Manager (noscript) -->
|
||||
let configScript = document.createElement('noscript');
|
||||
//let configScript;
|
||||
let iframeEle = document.createElement('iframe')
|
||||
iframeEle.src = 'https://www.googletagmanager.com/ns.html?id=' + adMediaId
|
||||
iframeEle.height = '0'
|
||||
iframeEle.width = '0'
|
||||
iframeEle.style = 'display:none; visibility:hidden'
|
||||
configScript.append(iframeEle)
|
||||
|
||||
document.body.prepend(agentScript);
|
||||
document.body.prepend(configScript);
|
||||
}
|
||||
|
||||
|
||||
//상품 상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
const goodsInnb = $('#goodsInnb').val()
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
//# 상품상세페이지가 로드되면 아래 코드 실행
|
||||
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
|
||||
if(goodsDtlFormAt){
|
||||
|
||||
const price = $('#_salesPrice').find('.comma').text().replaceAll(",","")
|
||||
let goodsDtlScript = document.createElement('script')
|
||||
goodsDtlScript.innerHTML=`
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "view_item",
|
||||
ecommerce: {
|
||||
currency: "KRW",
|
||||
value: ${price},
|
||||
items: [
|
||||
{
|
||||
item_id: ${goodsInnb},
|
||||
item_name: '${goodsNm}',
|
||||
price: ${price},
|
||||
quantity: 1
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(goodsDtlScript);
|
||||
}
|
||||
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list)
|
||||
if(addCartEventAt){
|
||||
addCartStorage(addCartEventAt);
|
||||
}
|
||||
|
||||
|
||||
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
|
||||
const npayEventAt= adScriptNpayEventAt(list)
|
||||
if(npayEventAt){
|
||||
addNpayStorage(npayEventAt);
|
||||
}
|
||||
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//장바구니 페이지
|
||||
if(url.includes(selectSpbk)){
|
||||
|
||||
//# 장바구니 페이지가 로드되면 아래 코드 실행.
|
||||
const cartListFormAt = adScriptCartListFormAt(list)
|
||||
if(cartListFormAt){
|
||||
|
||||
//JSON PARSE
|
||||
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
if(!fn_is_empty(adScriptGoodsList.goodsList)){
|
||||
|
||||
adScriptGoodsList.goodsList.forEach(optn => {
|
||||
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: optn.goodsInnb,
|
||||
item_name: optn.goodsNm,
|
||||
item_variant: optn.optn,
|
||||
price: optn.subSlepric,
|
||||
quantity: optn.qy
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
totalPrice += optn.subSlepric
|
||||
});
|
||||
}
|
||||
|
||||
let cartListScript = document.createElement('script');
|
||||
|
||||
cartListScript.innerHTML= `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "view_cart",
|
||||
ecommerce: {
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(cartListScript);
|
||||
}
|
||||
}//장바구니 페이지 END
|
||||
|
||||
|
||||
//주문서 작성 페이지
|
||||
//# 주문서 페이지가 로드되면 아래 코드 실행. order/settle 페이지에 삽입
|
||||
if(url.includes(selectNmbrPurchsForm) || url.includes(selectMbrPurchsForm) ){
|
||||
|
||||
|
||||
//# 주문서 페이지가 로드되면 아래 코드 실행
|
||||
const purchsFormAt = adScriptPurchsFormAt(list)
|
||||
if(purchsFormAt){
|
||||
|
||||
// 총 결재 금액
|
||||
let price = $('#setleAmtSapn').text().replace(",","");
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
if($('#adScriptDeviceTy').val() ==='sopmal'){ //pc일 경우
|
||||
$('#goodsList tr').each(function(){
|
||||
|
||||
// 객체로 저장
|
||||
let productData1 = {
|
||||
item_id: $(this).find(".goodsInnb").val(),
|
||||
item_name: $(this).find(".cartItem__productTitle").text(),
|
||||
item_variant: $(this).find(".cartItem__productOption").text(),
|
||||
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
|
||||
quantity: $(this).find(".qy").val()
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData1);
|
||||
});
|
||||
}else{ // 모바일 일 경우
|
||||
$('#goodsList .orderInfo__item').each(function(){
|
||||
|
||||
// 객체로 저장
|
||||
let productData1 = {
|
||||
item_id: $(this).find(".goodsInnb").val(),
|
||||
item_name: $(this).find(".cartItem__productTitle").text(),
|
||||
item_variant: $(this).find(".cartItem__productOption").text().replaceAll(' ', '').trim(),
|
||||
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
|
||||
quantity: $(this).find(".qy").val()
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData1);
|
||||
});
|
||||
}
|
||||
|
||||
let purchsFormScript = document.createElement('script');
|
||||
|
||||
purchsFormScript.innerHTML= `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "begin_checkout",
|
||||
ecommerce: {
|
||||
currency: "KRW",
|
||||
value: ${price},
|
||||
items: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsFormScript);
|
||||
}
|
||||
|
||||
|
||||
}//주문서 작성 페이지 END
|
||||
|
||||
//# 취소/환불 요청 페이지에서 취소/환불 요청을 할 경우 아래 코드 실행
|
||||
const refundReqEventAt = adScriptRefundReqEventAt(list);
|
||||
if(refundReqEventAt){
|
||||
addReturnReqStorage(refundReqEventAt)
|
||||
}
|
||||
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
|
||||
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
item_id: obj.goodsInnb.toString(),
|
||||
item_name: obj.goodsNm,
|
||||
item_variant: obj.optnNm,
|
||||
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
quantity: obj.ordrQy
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "purchase",
|
||||
ecommerce: {
|
||||
transaction_id: '${finalOrderNo}',
|
||||
currency: "KRW",
|
||||
value: ${price},
|
||||
items: ${JSON.stringify(productDataArray)} /*상품정보*/
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}//주문 완료 페이지 END
|
||||
}
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list)
|
||||
if(mbrRegstFormAt){
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
// 회원가입 방법 (예: general, kakao 등)
|
||||
const joinMthCd = $('#joinMthCd').val()
|
||||
const adscriptMbrId = $('#adscriptMbrId').val()
|
||||
|
||||
joinScript.innerHTML = `
|
||||
dataLayer.push({
|
||||
event: "sign_up",
|
||||
method: "${joinMthCd}",
|
||||
user: {
|
||||
user_id: "${adscriptMbrId}"
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
function kakaoMoments(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
|
||||
(async function() {
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
try {
|
||||
// adn2dot0HeaderScript 로드 및 실행 대기
|
||||
await loadScript('//t1.daumcdn.net/kas/static/kp.js');
|
||||
} catch (error) {
|
||||
console.error('error', error);
|
||||
return; // 스크립트 로드 실패 시 이후 진행 중지
|
||||
}
|
||||
|
||||
let kakaoScript2 = document.createElement('script')
|
||||
kakaoScript2.type ='text/javascript';
|
||||
kakaoScript2.innerHTML = `kakaoPixel('${adMediaId}').pageView();`;
|
||||
document.head.appendChild(kakaoScript2);
|
||||
}//common header end
|
||||
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
const adMediaId = purchsCompleteFormAt.adMediaId
|
||||
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
|
||||
let totalOrdrQy = 0;
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
|
||||
let productData = {
|
||||
id: obj.goodsInnb.toString(),
|
||||
name: obj.goodsNm,
|
||||
quantity: obj.ordrQy,
|
||||
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
};
|
||||
// 배열에 추가
|
||||
totalOrdrQy += obj.ordrQy
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
kakaoPixel('${adMediaId}').pageView();
|
||||
kakaoPixel('${adMediaId}').purchase({
|
||||
total_quantity: "${totalOrdrQy}", // 주문 내 상품 개수(optional)
|
||||
total_price: ${price}, // 주문 총 가격(optional)
|
||||
currency: "KRW", // 주문 가격의 화폐 단위(optional, 기본 값은 KRW)
|
||||
products: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
|
||||
if(mbrRegstFormAt){
|
||||
|
||||
const adMediaId = mbrRegstFormAt.adMediaId
|
||||
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
joinScript.innerHTML = `
|
||||
kakaoPixel('${adMediaId}').pageView();
|
||||
kakaoPixel('${adMediaId}').completeRegistration();
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
if(addCartEventAt){
|
||||
|
||||
addCartStorage(addCartEventAt)
|
||||
}
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
}
|
||||
123
src/main/resources/static/js/adscript/admedia/adscript_meta.js
Normal file
@@ -0,0 +1,123 @@
|
||||
function meta(list, url) {
|
||||
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
let metaScript = document.createElement('script');
|
||||
metaScript.async = true;
|
||||
metaScript.innerHTML = `
|
||||
!function(f,b,e,v,n,t,s)
|
||||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||||
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
||||
'https://connect.facebook.net/en_US/fbevents.js');
|
||||
fbq('init', '${adMediaId}');
|
||||
fbq('track', 'PageView');
|
||||
`;
|
||||
document.head.appendChild(metaScript);
|
||||
|
||||
let configScript = document.createElement('noscript');
|
||||
//let configScript;
|
||||
configScript.innerHTML
|
||||
= '<img height="1" width="1" style="display:none" ' + 'src="https://www.facebook.com/tr?id=' + adMediaId +'&ev=PageView&noscript=1"/>';
|
||||
document.head.appendChild(configScript);
|
||||
}//common header end
|
||||
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
if(addCartEventAt){
|
||||
|
||||
addCartStorage(addCartEventAt)
|
||||
}
|
||||
|
||||
|
||||
|
||||
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
|
||||
const npayEventAt = adScriptNpayEventAt(list);
|
||||
if(npayEventAt){
|
||||
|
||||
addNpayStorage(npayEventAt)
|
||||
}
|
||||
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let price = parseInt(adscriptParse.total.setleAmt)
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
id: obj.goodsInnb.toString(),
|
||||
name: obj.goodsNm,
|
||||
quantity: obj.ordrQy
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
fbq('track', 'Purchase', {
|
||||
value: ${price},
|
||||
currency: 'KRW',
|
||||
contents: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
|
||||
if(mbrRegstFormAt){
|
||||
let joinScript = document.createElement('script');
|
||||
|
||||
joinScript.innerHTML = `
|
||||
fbq('track', 'CompleteRegistration');
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
function naverSrchAds(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
const value = document.cookie.match('(^|;) ?' + "originalHost" + '=([^;]*)(;|$)');
|
||||
let hostCookie = value? value[2] : "";
|
||||
//스키마정보 제거
|
||||
hostCookie = hostCookie.replace(/^(https?:\/\/)/, "");
|
||||
|
||||
// (1) wcslog.js import
|
||||
let naverSrchAddScript = document.createElement('script');
|
||||
naverSrchAddScript.type = 'text/javascript'
|
||||
naverSrchAddScript.src = '//wcs.naver.net/wcslog.js'
|
||||
document.head.appendChild(naverSrchAddScript);
|
||||
|
||||
let naverSrchAdd2Script = document.createElement('script');
|
||||
naverSrchAdd2Script.type = 'text/javascript'
|
||||
naverSrchAdd2Script.innerHTML = `
|
||||
|
||||
|
||||
var checkNaverAdnPurchsInterval = setInterval(() => {
|
||||
|
||||
if (window.wcs) {
|
||||
|
||||
|
||||
if(!wcs_add) var wcs_add = {};
|
||||
|
||||
// (2) 각 사이트별 식별자 설정
|
||||
window.wcs_add = {wa : "${adMediaId}"}; // 사이트 식별자 (=네이버공통키, na_account_id)
|
||||
|
||||
|
||||
// (3) 광고 전환추적을 위한 cookie domain설정
|
||||
wcs.inflow("${hostCookie}"); // ex. abc-motors.com
|
||||
|
||||
// 아래 Script는 개별 이벤트 발생시 로그를 전송하기 위한 구역. 결제 완료 페이지이므로, PV 이벤트 와 결제완료 전환 이벤트를 전송함
|
||||
|
||||
clearInterval(checkNaverAdnPurchsInterval);
|
||||
|
||||
// (4) PV 이벤트 전송
|
||||
wcs_do(); // PV 이벤트 전송
|
||||
|
||||
|
||||
}
|
||||
|
||||
}, 100 );
|
||||
|
||||
|
||||
`;
|
||||
document.head.appendChild(naverSrchAdd2Script);
|
||||
}//common header end
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
|
||||
//장바구니 담기
|
||||
const addCartEventAt = adScriptAddCartEventAt(list);
|
||||
if(addCartEventAt){
|
||||
addCartStorage(addCartEventAt)
|
||||
}
|
||||
|
||||
//위시리스트 등록
|
||||
const wslistEventAt = adScriptAddWslistEventAt(list)
|
||||
if(wslistEventAt){
|
||||
addWslistStorage(wslistEventAt)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
|
||||
let naverSrchAddScript = document.createElement('script');
|
||||
naverSrchAddScript.type = 'text/x-javascript'
|
||||
naverSrchAddScript.src = '//wcs.naver.net/wcslog.js'
|
||||
document.head.appendChild(naverSrchAddScript);
|
||||
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
let totalPrice = parseInt(adscriptParse.total.setleAmt)
|
||||
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
|
||||
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
id: obj.goodsInnb.toString(),
|
||||
name: obj.goodsNm,
|
||||
payAmount: parseInt(obj.applyDscntAmt)
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
|
||||
}
|
||||
|
||||
// (5) 전환 이벤트 전송, (예) 결제완료 이벤트 전송. 페이지뷰 스크립트와 합쳐지면 됨
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
purchsComplateFormScript.innerHTML =`
|
||||
|
||||
var checkNaverAdnMemberInterval = setInterval(() => {
|
||||
if(window.wcs) {
|
||||
if(!wcs_add) var wcs_add = {};
|
||||
|
||||
wcs_add["wa"] = '${purchsCompleteFormAt.adMediaId}';
|
||||
|
||||
var _conv = {}; /*전환 이벤트 정보 담을 object 생성*/
|
||||
|
||||
_conv.type = "purchase"; /*전환 이벤트의 종류 설정*/
|
||||
|
||||
_conv.value = "${totalPrice}";
|
||||
|
||||
_conv.id = "${finalOrderNo}"; /*주문번호*/
|
||||
|
||||
_conv.items = ${JSON.stringify(productDataArray)};
|
||||
|
||||
clearInterval(checkNaverAdnMemberInterval);
|
||||
|
||||
wcs.trans(_conv); /*전환 이벤트 정보를 담은 object를 서버에 전송*/
|
||||
}
|
||||
}, 100 );
|
||||
`;
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
|
||||
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
|
||||
//회원가입 완료 페이지
|
||||
if(url.includes(selectJoinCompleteR)){
|
||||
|
||||
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
|
||||
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
|
||||
if(mbrRegstFormAt){
|
||||
const joinScript = document.createElement('script');
|
||||
joinScript.type = 'text/javascript'
|
||||
|
||||
joinScript.innerHTML = `
|
||||
|
||||
var checkNaverAdnInterval = setInterval(() => {
|
||||
if(window.wcs){
|
||||
if(!wcs_add) var wcs_add = {};
|
||||
wcs_add["wa"] = '${mbrRegstFormAt.adMediaId}';
|
||||
var _conv = {};
|
||||
_conv.type = 'sign_up';
|
||||
|
||||
clearInterval(checkNaverAdnInterval);
|
||||
|
||||
wcs.trans(_conv);
|
||||
}
|
||||
}, 100 );
|
||||
`;
|
||||
|
||||
document.head.appendChild(joinScript);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
function targetingGates(list, url) {
|
||||
if(fn_is_empty(list)){
|
||||
return false;
|
||||
}
|
||||
|
||||
const commonHeaderAt = adScriptCommonHeaderAt(list);
|
||||
if(commonHeaderAt){
|
||||
|
||||
const adMediaId = commonHeaderAt.adMediaId;
|
||||
|
||||
const mbrIdHash = $('#adscriptMbrId').val()
|
||||
|
||||
let tgDiv = document.createElement('div');
|
||||
tgDiv.id = 'wp_tg_cts';
|
||||
tgDiv.style.display ='none';
|
||||
document.body.appendChild(tgDiv);
|
||||
|
||||
let tgScript = document.createElement('script');
|
||||
tgScript.type = 'text/javascript';
|
||||
tgScript.innerHTML = `
|
||||
var wptg_tagscript_vars = wptg_tagscript_vars || [];
|
||||
wptg_tagscript_vars.push(
|
||||
(function() {
|
||||
return {
|
||||
wp_hcuid:"${mbrIdHash}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
|
||||
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
|
||||
ti:"${adMediaId}", /*광고주 코드 */
|
||||
ty:"Home", /*트래킹태그 타입 */
|
||||
device:"web" /*웹,모바일 모두 web으로 통일*/
|
||||
|
||||
};
|
||||
}));
|
||||
`;
|
||||
|
||||
document.head.appendChild(tgScript);
|
||||
|
||||
|
||||
let tgScript2 = document.createElement('script');
|
||||
tgScript2.type = 'text/javascript';
|
||||
tgScript2.async = true;
|
||||
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
|
||||
document.head.appendChild(tgScript2);
|
||||
}//common header end
|
||||
|
||||
|
||||
//상품상세 페이지
|
||||
if(url.includes(selectGoodsDtl)){
|
||||
|
||||
//# 상품상세페이지가 로드되면 아래 코드 실행
|
||||
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
|
||||
if(goodsDtlFormAt){
|
||||
|
||||
let tgDiv = document.createElement('div');
|
||||
tgDiv.id = 'wp_tg_cts';
|
||||
tgDiv.style.display ='none';
|
||||
document.body.appendChild(tgDiv);
|
||||
|
||||
const adMediaId = goodsDtlFormAt.adMediaId
|
||||
|
||||
const adscriptMbrId = $('#adscriptMbrId').val()
|
||||
const goodsInnb = $('#goodsInnb').val()
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
const totalGoodsPrice = $('.productDetailInfo__priceTotal__totalPriceNum').text()
|
||||
let goodsDtlScript = document.createElement('script');
|
||||
goodsDtlScript.type = 'text/javascript';
|
||||
goodsDtlScript.innerHTML = `
|
||||
var wptg_tagscript_vars = wptg_tagscript_vars || [];
|
||||
wptg_tagscript_vars.push(
|
||||
(function() {
|
||||
return {
|
||||
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
|
||||
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
|
||||
ti:"${adMediaId}",
|
||||
ty:"Item",
|
||||
device:"web"
|
||||
,items:[{i:"${goodsInnb}", t:"${goodsNm}", p: "${totalGoodsPrice}", q: "1"}] /* i:<상품 식별번호 (Feed로 제공되는 상품코드(상품번호)와 일치하여야 합니다 .) t:상품명 */
|
||||
};
|
||||
}));
|
||||
`;
|
||||
|
||||
document.head.appendChild(goodsDtlScript);
|
||||
|
||||
let tgScript2 = document.createElement('script');
|
||||
tgScript2.type = 'text/javascript';
|
||||
tgScript2.async = true;
|
||||
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
|
||||
document.head.appendChild(tgScript2);
|
||||
}
|
||||
|
||||
|
||||
}//상품 상세 END
|
||||
|
||||
|
||||
//장바구니 페이지
|
||||
if(url.includes(selectSpbk)){
|
||||
|
||||
//# 장바구니 페이지가 로드되면 아래 코드 실행.
|
||||
const cartListFormAt = adScriptCartListFormAt(list)
|
||||
if(cartListFormAt){
|
||||
|
||||
let tgDiv = document.createElement('div');
|
||||
tgDiv.id = 'wp_tg_cts';
|
||||
tgDiv.style.display ='none';
|
||||
document.body.appendChild(tgDiv);
|
||||
|
||||
const adMediaId = cartListFormAt.adMediaId
|
||||
const adscriptMbrId = $('#adscriptMbrId').val();
|
||||
|
||||
//JSON PARSE
|
||||
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
if(!fn_is_empty(adScriptGoodsList.goodsList)){
|
||||
adScriptGoodsList.goodsList.forEach(optn => {
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
i : optn.goodsInnb,
|
||||
t: optn.goodsNm
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
});
|
||||
}
|
||||
|
||||
let cartListScript = document.createElement('script');
|
||||
cartListScript.type = 'text/javascript';
|
||||
cartListScript.innerHTML = `
|
||||
var wptg_tagscript_vars = wptg_tagscript_vars || [];
|
||||
wptg_tagscript_vars.push(
|
||||
(function() {
|
||||
return {
|
||||
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
|
||||
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
|
||||
ti:"${adMediaId}",
|
||||
ty:"Cart",
|
||||
device:"web"
|
||||
,items:${JSON.stringify(productDataArray)}
|
||||
};
|
||||
}));
|
||||
`;
|
||||
|
||||
document.head.appendChild(cartListScript);
|
||||
|
||||
let tgScript2 = document.createElement('script');
|
||||
tgScript2.type = 'text/javascript';
|
||||
tgScript2.async = true;
|
||||
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
|
||||
document.head.appendChild(tgScript2);
|
||||
|
||||
}
|
||||
}//장바구니 페이지 END
|
||||
|
||||
|
||||
//주문 완료 페이지
|
||||
if(url.includes(selectOrdrCompt)){
|
||||
|
||||
//# 주문완료 페이지가 로드되면 아래 코드 실행.
|
||||
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
|
||||
if(purchsCompleteFormAt){
|
||||
const adMediaId = purchsCompleteFormAt.adMediaId
|
||||
const adscriptMbrId = $('#adscriptMbrId').val()
|
||||
|
||||
|
||||
// 상품정보 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const adscriptVal = $('#adscript').val()
|
||||
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
|
||||
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
||||
}).join(''));
|
||||
|
||||
const adscriptParse = JSON.parse(decode);
|
||||
|
||||
for(let obj of adscriptParse.goodsList){
|
||||
|
||||
let productData = {
|
||||
i: obj.goodsInnb.toString(),
|
||||
t: obj.goodsNm,
|
||||
p: parseInt(obj.applyDscntAmt)/obj.ordrQy,
|
||||
q: obj.ordrQy
|
||||
};
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
|
||||
let tgDiv = document.createElement('div');
|
||||
tgDiv.id = 'wp_tg_cts';
|
||||
tgDiv.style.display ='none';
|
||||
document.body.appendChild(tgDiv);
|
||||
|
||||
|
||||
let purchsComplateFormScript = document.createElement('script');
|
||||
|
||||
purchsComplateFormScript.innerHTML= `
|
||||
var wptg_tagscript_vars = wptg_tagscript_vars || [];
|
||||
wptg_tagscript_vars.push(
|
||||
(function() {
|
||||
return {
|
||||
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
|
||||
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
|
||||
ti:"${adMediaId}",
|
||||
ty:"PurchaseComplete",
|
||||
device:"web"
|
||||
,items: ${JSON.stringify(productDataArray)} // 상품정보
|
||||
/*[
|
||||
{i:"상품번호", t:"상품명", p:"옵션주문단가", q:"옵션주문수량"} 첫번째 상품 - i:상품 식별번호 (Feed로 제공되는 식별번호와 일치 ) t:상품명 p:단가 q:수량
|
||||
,{i:"상품번호", t:"상품명", p:"옵션주문단가", q:"옵션주문수량"}
|
||||
]*/
|
||||
};
|
||||
}));
|
||||
`;
|
||||
|
||||
document.head.appendChild(purchsComplateFormScript);
|
||||
|
||||
let tgScript2 = document.createElement('script');
|
||||
tgScript2.type = 'text/javascript';
|
||||
tgScript2.async = true;
|
||||
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
|
||||
document.head.appendChild(tgScript2);
|
||||
|
||||
}
|
||||
}//주문 완료 페이지 END
|
||||
|
||||
}
|
||||
69
src/main/resources/static/js/adscript/adscript.js
Normal file
@@ -0,0 +1,69 @@
|
||||
$(window).on('load',function() {
|
||||
const adScriptUrl = '/sopmal/adscript/selectAdScriptList';
|
||||
// 여기서 필요한 정보를 담을수 있또록 해야 할것 같음
|
||||
// AJAX 요청 보내기
|
||||
$.ajax({
|
||||
url: adScriptUrl,
|
||||
contentType: 'application/json',
|
||||
method: 'post',
|
||||
data: JSON.stringify({'sopmalCd' : ''}),
|
||||
dataType: 'json',
|
||||
success: function(response) {
|
||||
const result = JSON.parse(response.resBody.result).selectAdScriptList
|
||||
|
||||
|
||||
//현재 경로
|
||||
let locationUrl = window.location.pathname;
|
||||
|
||||
//상품이 존재하지 않을 경우 아래 스크립트에 영향이 있을 수 있음
|
||||
//광고스크립트가 상품상세 js 보다 우선 실행되기 때문에 상품 상세에 걸어도 걸리지 않아 여기서 처리
|
||||
if(locationUrl.includes(selectGoodsDtl) && $('#goodsUseAt').val()==="N"){
|
||||
alert('존재하지 않는 상품 입니다.')
|
||||
history.back()
|
||||
}
|
||||
|
||||
|
||||
if(fn_is_empty(result)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//광고매체 구분
|
||||
|
||||
//구글애즈
|
||||
googleAds(adMediaList(result, '01'), locationUrl)
|
||||
//구글애널리틱스
|
||||
googleAnalytics(adMediaList(result, '02'), locationUrl);
|
||||
//구글태그매니저
|
||||
googleTagManager(adMediaList(result, '03'), locationUrl);
|
||||
//메타
|
||||
meta(adMediaList(result, '04'), locationUrl)
|
||||
//카카오모먼츠
|
||||
kakaoMoments(adMediaList(result, '05'), locationUrl)
|
||||
//크리테오
|
||||
criteo(adMediaList(result, '06'), locationUrl)
|
||||
//TG
|
||||
targetingGates(adMediaList(result, '07'), locationUrl)
|
||||
//틱톡(사용처 없음)
|
||||
|
||||
//애드패커(사용처 없음)
|
||||
|
||||
//모비온
|
||||
mobion(adMediaList(result, '10'), locationUrl)
|
||||
//ADN2
|
||||
adn2dot0(adMediaList(result, '11'), locationUrl)
|
||||
//AND3(GTM으로 관리)
|
||||
|
||||
//리얼클릭(사용처 없음)
|
||||
|
||||
//네이버검색광고
|
||||
naverSrchAds(adMediaList(result, '14'), locationUrl)
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
//광고 매체별 리스트 필터링 함수
|
||||
function adMediaList(list, adMediaDvCd){
|
||||
return list.filter(item => item.adMediaDvCd === adMediaDvCd)
|
||||
}
|
||||
});//window.onload END
|
||||
354
src/main/resources/static/js/adscript/common/adscript_common.js
Normal file
@@ -0,0 +1,354 @@
|
||||
/*******************************************
|
||||
광고 스크립트 공통 함수 START
|
||||
*******************************************/
|
||||
|
||||
//상품상세 조회 페이지
|
||||
const selectGoodsDtl = 'selectGoodsDtl';
|
||||
//장바구니 조회 페이지
|
||||
const selectSpbk = 'selectSpbk';
|
||||
// 주문서 작성 페이지 - 비회원
|
||||
const selectNmbrPurchsForm = 'selectNmbrPurchsForm';
|
||||
// 주문서 작성 페이지- 회원
|
||||
const selectMbrPurchsForm = 'selectMbrPurchsForm';
|
||||
// 회원가입 완료 페이지
|
||||
const selectJoinCompleteR = 'selectJoinCompleteR';
|
||||
//주문 완료 페이지
|
||||
const selectOrdrCompt = 'selectOrdrCompt'
|
||||
//메인페이지
|
||||
const mainPage = '/'
|
||||
const mainIndex = '/index'
|
||||
|
||||
let adScriptAddCart = JSON.parse(sessionStorage.getItem('adscript_addcart'));
|
||||
let adScriptNpayBtn = JSON.parse(sessionStorage.getItem('adscript_npayBtn'));
|
||||
let adScriptReturnReq = JSON.parse(sessionStorage.getItem('adscript_returnReq'));
|
||||
let adScriptWslistBtn = JSON.parse(sessionStorage.getItem('adscript_wslist'));
|
||||
|
||||
//스크립트 구분여부가 존재할 경우 객체정보 반환 함수
|
||||
function adScriptListToObj(item) {
|
||||
if(fn_is_empty(item)){
|
||||
|
||||
//비어있으면 false
|
||||
return false;
|
||||
|
||||
}else{
|
||||
return {
|
||||
'adMediaId': item.adMediaId
|
||||
,'instlPgeLbl': fn_nvl(item.instlPgeLbl,'')
|
||||
,'npayButtonId' : fn_nvl(item.npayButtonId,'')
|
||||
,'adMediaDvCd' : item.adMediaDvCd
|
||||
,'instlPgeDvCd' : item.instlPgeDvCd
|
||||
,'instlPgeEnvrnCd' : item.instlPgeEnvrnCd
|
||||
,'trigrDvCd' : item.trigrDvCd
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*광고스크립트 - 장바구니 클릭 매체 정보 세션스토리지 저장 */
|
||||
function addCartStorage(obj) {
|
||||
|
||||
//세션스토리지에 아이템 없을 경우 빈배열 생성
|
||||
if (!adScriptAddCart) {
|
||||
adScriptAddCart = [];
|
||||
} else {
|
||||
// 존재할 경우 parse
|
||||
adScriptAddCart = JSON.parse(sessionStorage.getItem('adscript_addcart'));
|
||||
//JSON.parse(adscript_addcart);
|
||||
}
|
||||
|
||||
//중복 여부
|
||||
let dupliAt = adScriptAddCart.some(item => {
|
||||
return item.instlPgeDvCd === obj.instlPgeDvCd
|
||||
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
|
||||
&& item.adMediaDvCd === obj.adMediaDvCd
|
||||
&& item.trigrDvCd === obj.trigrDvCd
|
||||
})
|
||||
|
||||
//중복 아닐 경우만 저장
|
||||
if(!dupliAt){
|
||||
adScriptAddCart.push(obj);
|
||||
}
|
||||
|
||||
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
|
||||
sessionStorage.setItem('adscript_addcart', JSON.stringify(adScriptAddCart));
|
||||
}
|
||||
|
||||
/*광고스크립트 - 네이버페이 클릭 매체 정보 세션스토리지 저장 */
|
||||
function addNpayStorage(obj) {
|
||||
//세션스토리지에 아이템 없을 경우 빈배열 생성
|
||||
if (!adScriptNpayBtn) {
|
||||
adScriptNpayBtn = [];
|
||||
} else {
|
||||
// 존재할 경우 parse
|
||||
adScriptNpayBtn = JSON.parse(sessionStorage.getItem('adscript_npayBtn'));
|
||||
}
|
||||
|
||||
//중복 여부
|
||||
let dupliAt = adScriptNpayBtn.some(item => {
|
||||
return item.instlPgeDvCd === obj.instlPgeDvCd
|
||||
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
|
||||
&& item.adMediaDvCd === obj.adMediaDvCd
|
||||
&& item.trigrDvCd === obj.trigrDvCd
|
||||
})
|
||||
|
||||
//중복 아닐 경우만 저장
|
||||
if(!dupliAt){
|
||||
adScriptNpayBtn.push(obj);
|
||||
}
|
||||
|
||||
|
||||
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
|
||||
sessionStorage.setItem('adscript_npayBtn', JSON.stringify(adScriptNpayBtn));
|
||||
}
|
||||
|
||||
/*광고스크립트 - 취소/환불 요청 클릭 매체 정보 세션스토리지 저장 */
|
||||
function addReturnReqStorage(obj) {
|
||||
//세션스토리지에 아이템 없을 경우 빈배열 생성
|
||||
if (!adScriptReturnReq) {
|
||||
adScriptReturnReq = [];
|
||||
} else {
|
||||
// 존재할 경우 parse
|
||||
adScriptReturnReq = JSON.parse(sessionStorage.getItem("adscript_returnReq"));
|
||||
}
|
||||
|
||||
//중복 여부
|
||||
let dupliAt = adScriptReturnReq.some(item => {
|
||||
return item.instlPgeDvCd === obj.instlPgeDvCd
|
||||
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
|
||||
&& item.adMediaDvCd === obj.adMediaDvCd
|
||||
&& item.trigrDvCd === obj.trigrDvCd
|
||||
})
|
||||
|
||||
//중복 아닐 경우만 저장
|
||||
if(!dupliAt){
|
||||
adScriptReturnReq.push(obj);
|
||||
}
|
||||
|
||||
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
|
||||
sessionStorage.setItem('adscript_returnReq', JSON.stringify(adScriptReturnReq));
|
||||
}
|
||||
|
||||
/*광고스크립트 - 상품상세 위시리스트 클릭 매체 정보 세션스토리지 저장 */
|
||||
function addWslistStorage(obj) {
|
||||
//세션스토리지에 아이템 없을 경우 빈배열 생성
|
||||
if (!adScriptWslistBtn) {
|
||||
adScriptWslistBtn = [];
|
||||
} else {
|
||||
// 존재할 경우 parse
|
||||
adScriptWslistBtn = JSON.parse(sessionStorage.getItem("adscript_wslist"));
|
||||
}
|
||||
|
||||
//중복 여부
|
||||
let dupliAt = adScriptWslistBtn.some(item => {
|
||||
return item.instlPgeDvCd === obj.instlPgeDvCd && item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd && item.adMediaDvCd === obj.adMediaDvCd
|
||||
})
|
||||
|
||||
//중복 아닐 경우만 저장
|
||||
if(!dupliAt){
|
||||
adScriptWslistBtn.push(obj);
|
||||
}
|
||||
|
||||
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
|
||||
sessionStorage.setItem('adscript_wslist', JSON.stringify(adScriptWslistBtn));
|
||||
}
|
||||
|
||||
/*********************************
|
||||
공통 스크립트 페이지별 구분
|
||||
instlPgeDvCd : 설치페이지구분코드
|
||||
instlPgeEnvrnCd : 설치페이지 환경코드 (01 공통, 02 PC, 03 모바일)
|
||||
trigrDvCd : 01 페이지로드, 02 버튼
|
||||
********************************/
|
||||
|
||||
//공통헤더 스크립트 존재여부
|
||||
function adScriptCommonHeaderAt(list){
|
||||
const commonHeaders = list.find(item =>
|
||||
item.instlPgeDvCd ==='01' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(commonHeaders)
|
||||
|
||||
}
|
||||
|
||||
//공통푸터 스크립트 존재여부
|
||||
function adScriptCommonFooterAt(list){
|
||||
|
||||
const commonFooter = list.find(item =>
|
||||
item.instlPgeDvCd ==='02' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(commonFooter)
|
||||
}
|
||||
|
||||
//PC푸터 스크립트 존재여부
|
||||
function adScriptPcFooterAt(list){
|
||||
|
||||
const commonFooter = list.find(item =>
|
||||
item.instlPgeDvCd ==='02' &&
|
||||
item.instlPgeEnvrnCd === '02' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(commonFooter)
|
||||
}
|
||||
|
||||
//Mobile 푸터 스크립트 존재여부
|
||||
function adScriptMblFooterAt(list){
|
||||
|
||||
const commonFooter = list.find(item =>
|
||||
item.instlPgeDvCd ==='02' &&
|
||||
item.instlPgeEnvrnCd === '03' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(commonFooter)
|
||||
}
|
||||
|
||||
//공통 상품상세 조회 여부
|
||||
function adScriptGoodsDtlFormAt(list) {
|
||||
const goodsDtl = list.find(item =>
|
||||
item.instlPgeDvCd ==='03' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(goodsDtl)
|
||||
}
|
||||
|
||||
//PC 상품상세 조회 여부
|
||||
function adScriptPcGoodsDtlFormAt(list) {
|
||||
const goodsDtl = list.find(item =>
|
||||
item.instlPgeDvCd ==='03' &&
|
||||
item.instlPgeEnvrnCd === '02' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(goodsDtl)
|
||||
}
|
||||
|
||||
//모바일 상품상세 조회 여부
|
||||
function adScriptMblGoodsDtlFormAt(list) {
|
||||
const goodsDtl = list.find(item =>
|
||||
item.instlPgeDvCd ==='03' &&
|
||||
item.instlPgeEnvrnCd === '03' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(goodsDtl)
|
||||
}
|
||||
|
||||
//상품상세 - 장바구니 담기 클릭 여부
|
||||
function adScriptAddCartEventAt(list) {
|
||||
const cart = list.find(item =>
|
||||
item.instlPgeDvCd ==='08' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='02'
|
||||
)
|
||||
return adScriptListToObj(cart)
|
||||
}
|
||||
|
||||
//상품 상세 - 네이버페이 클릭 여부
|
||||
function adScriptNpayEventAt(list) {
|
||||
const naverpayScript = list.find(item =>
|
||||
item.instlPgeDvCd ==='11' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='02'
|
||||
)
|
||||
return adScriptListToObj(naverpayScript)
|
||||
}
|
||||
|
||||
//상품상세 - 위시리스트 클릭 여부
|
||||
function adScriptAddWslistEventAt(list) {
|
||||
const cart = list.find(item =>
|
||||
item.instlPgeDvCd ==='12' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='02'
|
||||
)
|
||||
return adScriptListToObj(cart)
|
||||
}
|
||||
|
||||
//장바구니 목록 조회 여부
|
||||
function adScriptCartListFormAt(list) {
|
||||
const cartList = list.find(item =>
|
||||
item.instlPgeDvCd ==='08' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
|
||||
return adScriptListToObj(cartList)
|
||||
}
|
||||
|
||||
//주문서 작성 페이지 조회 여부
|
||||
function adScriptPurchsFormAt(list) {
|
||||
const purchsForm = list.find(item =>
|
||||
item.instlPgeDvCd ==='06' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(purchsForm)
|
||||
}
|
||||
|
||||
//주문 완료 페이지 조회 여부
|
||||
function adScriptPurchsCompleteFormAt(list){
|
||||
|
||||
const purchsComplateForm = list.find(item =>
|
||||
item.instlPgeDvCd ==='05' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(purchsComplateForm)
|
||||
}
|
||||
|
||||
//반품 환불 요청 클릭 여부
|
||||
function adScriptRefundReqEventAt(list) {
|
||||
|
||||
const refundReq = list.find(item =>
|
||||
item.instlPgeDvCd ==='09' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='02'
|
||||
)
|
||||
return adScriptListToObj(refundReq)
|
||||
}
|
||||
|
||||
//반품 환불 완료 페이지 여부
|
||||
function adScriptRefundCompleteFormAt(list) {
|
||||
const refundComplete = list.find(item =>
|
||||
item.instlPgeDvCd ==='07' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
return adScriptListToObj(refundComplete)
|
||||
}
|
||||
|
||||
|
||||
//회원가입 페이지 조회 여부
|
||||
function adScriptMbrRegstFormAt(list) {
|
||||
const mbrRegst = list.find(item =>
|
||||
item.instlPgeDvCd ==='04' &&
|
||||
item.instlPgeEnvrnCd === '01' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
|
||||
return adScriptListToObj(mbrRegst)
|
||||
}
|
||||
|
||||
//모바일 메인 페이지
|
||||
function adScriptMblMainFormAt(list) {
|
||||
const mainMblScript = list.find(item =>
|
||||
item.instlPgeDvCd ==='10' &&
|
||||
item.instlPgeEnvrnCd === '03' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
|
||||
return adScriptListToObj(mainMblScript)
|
||||
}
|
||||
|
||||
//PC 메인 페이지
|
||||
function adScriptPCMainFormAt(list) {
|
||||
const mainMblScript = list.find(item =>
|
||||
item.instlPgeDvCd ==='10' &&
|
||||
item.instlPgeEnvrnCd === '02' &&
|
||||
item.trigrDvCd ==='01'
|
||||
)
|
||||
|
||||
return adScriptListToObj(mainMblScript)
|
||||
}
|
||||
/*******************************************
|
||||
광고 스크립트 공통 함수 END
|
||||
*******************************************/
|
||||
@@ -0,0 +1,665 @@
|
||||
|
||||
/*********************************
|
||||
장바구니 담기 버튼
|
||||
********************************/
|
||||
|
||||
$(document).on('click', '.addCart', function() {
|
||||
|
||||
//세션스토리지 없으면 pass
|
||||
if(fn_is_empty(adScriptAddCart)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//세션스토리지에 해당 매체의 장바구니 담기가 있으면 해당 스크립트실행
|
||||
|
||||
adScriptAddCart.forEach(item =>{
|
||||
|
||||
if(item.adMediaDvCd ==='06'){
|
||||
criteoAddCart(item)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='01'){
|
||||
|
||||
googleAdsAddCart(item)
|
||||
}
|
||||
if(item.adMediaDvCd ==='02') {
|
||||
googleAnalyticsAddCart(item)
|
||||
}
|
||||
if(item.adMediaDvCd ==='03'){
|
||||
googleTagManagerAddCart()
|
||||
}
|
||||
if(item.adMediaDvCd ==='05'){
|
||||
kakaoMomentsAddCart(item)
|
||||
}
|
||||
if(item.adMediaDvCd ==='04'){
|
||||
metaAddCart(item)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='14'){
|
||||
naverSrchAdsAddCart(item)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
function criteoAddCart(item) {
|
||||
const adMediaId = item.adMediaId
|
||||
let addCartScript = document.createElement('script');
|
||||
|
||||
let productDataArray = [];
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
|
||||
const productData = {
|
||||
id: productArr[i][4],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
addCartScript.innerHTML = `
|
||||
window.criteo_q = window.criteo_q || [];
|
||||
var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
|
||||
window.criteo_q.push(
|
||||
{ event: "setAccount", account: ${adMediaId}},
|
||||
|
||||
// To Do 1. 현재 유저의 이메일 주소(공백 제거 및 소문자로 변환 후) 전달. 유저의 이메일을 알수 없는 상황이면 빈 문자열로 전달
|
||||
{ event: "setEmail", email: "", hash_method: "sha256" },
|
||||
{ event: "setEmail", email: "", hash_method: "md5" },
|
||||
|
||||
// To Do 2. 현재 유저의 저장된 배송지 우편번호. 유저의 배송지 우편번호를 알수 없는 상황이면 빈 문자열로 전달
|
||||
{ event: "setZipcode", zipcode: "" },
|
||||
|
||||
{ event: "setSiteType", type: deviceType},
|
||||
|
||||
/*// To Do 3. 현재 유저가 추가한 상품의 정보(상품 ID, 상품 단가, 추가한 수량)를 아래 객체 포멧으로 전달
|
||||
// 상품 ID는 태그에서 전달되는 상품 ID와 피드에서 전달 주신 상품 ID가 매칭이 되어야 함
|
||||
// 상품 단가는 유저가 선택한 상품의 단가로 전달(옵션 추가 가격 및 할인 가격 포함). 통화 기호 및 천단위 구분자는 제외
|
||||
// 수량은 유저가 선택한 값으로 전달
|
||||
// Tip 1. 복잡한 추가 구성 상품 및 옵션으로 인해 제대로된 상품 단가 및 수량 전달이 어려운 경우, 최종 가격으로 전달 후 수량은 1로 전달 해주셔도 됩니다.
|
||||
*/
|
||||
{ event: "addToCart", item:${JSON.stringify(productDataArray)}
|
||||
}
|
||||
);
|
||||
`;
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
}
|
||||
|
||||
function googleAdsAddCart(item) {
|
||||
|
||||
let addCartScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val();
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
addCartScript.innerHTML = `
|
||||
gtag("event", "conversion", {
|
||||
send_to: "${item.adMediaId}/${item.instlPgeLbl}",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
|
||||
}
|
||||
|
||||
function googleAnalyticsAddCart(item) {
|
||||
let addCartScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
addCartScript.innerHTML = `
|
||||
gtag("event", "add_to_cart", {
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
|
||||
}
|
||||
|
||||
function googleTagManagerAddCart() {
|
||||
let addCartScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
addCartScript.innerHTML = `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "add_to_cart",
|
||||
ecommerce: {
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function kakaoMomentsAddCart(item) {
|
||||
const adMediaId = item.adMediaId;
|
||||
const goodsInnb = $('#goodsInnb').val();
|
||||
|
||||
let kakaoScript = document.createElement('script');
|
||||
kakaoScript.type = 'text/javascript';
|
||||
kakaoScript.charset = 'UTF-8';
|
||||
kakaoScript.src = '//t1.daumcdn.net/kas/static/kp.js';
|
||||
|
||||
document.head.appendChild(kakaoScript);
|
||||
|
||||
let kakaoScript2 = document.createElement('script')
|
||||
kakaoScript2.type ='text/javascript';
|
||||
kakaoScript2.innerHTML = `kakaoPixel('${adMediaId}').addToCart({
|
||||
id: '${goodsInnb}'
|
||||
});`;
|
||||
document.head.appendChild(kakaoScript2);
|
||||
}
|
||||
|
||||
function metaAddCart(item) {
|
||||
let addCartScript = document.createElement('script');
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
id: productArr[i][4],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
addCartScript.innerHTML = `
|
||||
fbq('track', 'AddToCart', {
|
||||
value: ${totalPrice},
|
||||
currency: 'KRW',
|
||||
contents: ${JSON.stringify(productDataArray)},
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
|
||||
}
|
||||
|
||||
function naverSrchAdsAddCart(item) {
|
||||
const addCartScript = document.createElement('script');
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const category = fn_nvl($('#ctgryNm').val(), '');
|
||||
const goodsNm = $('#goodsNm').val();
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
id: productArr[i][4],
|
||||
name: goodsNm,
|
||||
category: category,
|
||||
quantity: productArr[i][1],
|
||||
payAmount: productArr[i][3],
|
||||
option: productArr[i][0]
|
||||
};
|
||||
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
addCartScript.innerHTML = `
|
||||
if(window.wcs){
|
||||
if(!wcs_add) var wcs_add = {};
|
||||
wcs_add["wa"] = "${item.adMediaId}";
|
||||
var _conv = {};
|
||||
_conv.type = 'add_to_cart'; //(필수)
|
||||
_conv.items = [${JSON.stringify(productDataArray)}];
|
||||
wcs.trans(_conv);
|
||||
}
|
||||
`;
|
||||
|
||||
|
||||
document.head.appendChild(addCartScript);
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
네이버페이 버튼
|
||||
********************************/
|
||||
$(document).on('click', '.npay_btn_link', function() {
|
||||
|
||||
//세션스토리지 없으면 pass
|
||||
if(fn_is_empty(adScriptNpayBtn)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//세션스토리지에 해당 매체의 npay 담기가 있으면 해당 스크립트 실행
|
||||
adScriptNpayBtn.forEach(item => {
|
||||
|
||||
if(item.adMediaDvCd ==='01'){
|
||||
googleAdsNpay(item)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='02'){
|
||||
googleAnalyticNpay(item)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='03'){
|
||||
googleTagManagerNpay(item)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='04'){
|
||||
metaNpay(item)
|
||||
}
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
|
||||
function googleAdsNpay(item) {
|
||||
let npayScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
const npayMediaId = item.adMediaId
|
||||
const npayLbl = item.instlPgeLbl
|
||||
const naverBtnClickId = item.npayButtonId
|
||||
npayScript.innerHTML = `
|
||||
gtag("event", "conversion", {
|
||||
transaction_id: ${naverBtnClickId},
|
||||
'send_to': '${npayMediaId}/${npayLbl}',
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(npayScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function googleAnalyticNpay(item) {
|
||||
let npayScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const npayButtonId = item.npayButtonId
|
||||
npayScript.innerHTML = `
|
||||
gtag("event", "npay_click", {
|
||||
transaction_id: ${npayButtonId},
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(npayScript);
|
||||
|
||||
}
|
||||
|
||||
function googleTagManagerNpay(item) {
|
||||
let npayScript = document.createElement('script');
|
||||
|
||||
const goodsNm = $('#goodsNm').val()
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
item_id: productArr[i][4],
|
||||
item_name: goodsNm,
|
||||
item_variant: productArr[i][0],
|
||||
price: productArr[i][3],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
npayScript.innerHTML = `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "npay_click",
|
||||
ecommerce: {
|
||||
transaction_id: ${item.npayButtonId},
|
||||
currency: "KRW",
|
||||
value: ${totalPrice},
|
||||
items: ${JSON.stringify(productDataArray)}
|
||||
}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(npayScript);
|
||||
|
||||
}
|
||||
|
||||
function metaNpay(item) {
|
||||
let npayScript = document.createElement('script');
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
let totalPrice = 0;
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
id: productArr[i][4],
|
||||
quantity: productArr[i][1]
|
||||
};
|
||||
|
||||
totalPrice += productArr[i][3]
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}
|
||||
|
||||
npayScript.innerHTML = `
|
||||
fbq('trackCustom', 'NpayConversion', {
|
||||
value: ${totalPrice},
|
||||
currency: 'KRW',
|
||||
contents: ${JSON.stringify(productDataArray)},
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(npayScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
취소/환불 요청 버튼
|
||||
********************************/
|
||||
function adscript_btnReturnRegist (data) {
|
||||
|
||||
//세션스토리지 없을 경우 pass
|
||||
if(fn_is_empty(adScriptReturnReq)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//세션스토리지에 해당 매체의 취소/환불요청이 있으면 해당 스크립트 실행
|
||||
adScriptReturnReq.forEach(item =>{
|
||||
if(item.adMediaDvCd ==='02'){
|
||||
googleAnalyticReturnReq(data)
|
||||
}
|
||||
|
||||
if(item.adMediaDvCd ==='03'){
|
||||
googleTagManagerReturnReq(data)
|
||||
}
|
||||
})
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
function googleAnalyticReturnReq(data) {
|
||||
let refundScript = document.createElement('script');
|
||||
|
||||
|
||||
//data -> 취소/환불 완료 후 서버에서 전달받은 data로 (ajax done) 에서 받아서 처리
|
||||
refundScript.innerHTML = `
|
||||
gtag("event", "refund", {
|
||||
${JSON.stringify(data)}
|
||||
});
|
||||
`;
|
||||
|
||||
document.head.appendChild(refundScript);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function googleTagManagerReturnReq(data) {
|
||||
|
||||
|
||||
//data -> 취소/환불 완료 후 서버에서 전달받은 data로 (ajax done) 에서 받아서 처리
|
||||
|
||||
let refundScript = document.createElement('script');
|
||||
|
||||
refundScript.innerHTML = `
|
||||
dataLayer.push({ ecommerce: null });
|
||||
dataLayer.push({
|
||||
event: "refund",
|
||||
ecommerce: {
|
||||
${JSON.stringify(data)}
|
||||
}
|
||||
});`
|
||||
|
||||
document.head.appendChild(refundScript);
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
위시리스트 등록 버튼
|
||||
********************************/
|
||||
$(document).on('click', '#productMyWish', function() {
|
||||
|
||||
|
||||
//이미 찜이 되어있어 찜버튼을 누를 경우 찜이 취소되는 액션의 경우 제외
|
||||
if(!fn_is_empty($('#wslistInnb').val())){
|
||||
return false;
|
||||
}
|
||||
|
||||
//세션스토리지 없으면 pass
|
||||
if(fn_is_empty(adScriptWslistBtn)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//세션스토리지에 해당 매체의 npay 담기가 있으면 해당 스크립트 실행
|
||||
adScriptWslistBtn.forEach(item => {
|
||||
|
||||
if(item.adMediaDvCd ==='14'){
|
||||
naverSrchAdsAddWslist(item)
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
|
||||
function naverSrchAdsAddWslist(item) {
|
||||
|
||||
const wslistScript = document.createElement('script');
|
||||
wslistScript.type = 'text/javascript';
|
||||
|
||||
|
||||
// 데이터를 저장할 배열
|
||||
let productDataArray = [];
|
||||
|
||||
const goodsInnb = $('#goodsInnb').val();
|
||||
const goodsNm = $('#goodsNm').val();
|
||||
const category = fn_nvl($('#ctgryNm').val(), '');
|
||||
|
||||
if(productArr.length > 0){
|
||||
for(let i = 0; i < productArr.length; i++){
|
||||
// 객체로 저장
|
||||
const productData = {
|
||||
id: productArr[i][4],
|
||||
name: productArr[i][1],
|
||||
category: category,
|
||||
quantity: productArr[i][1],
|
||||
payAmount: productArr[i][3],
|
||||
option: productArr[i][0]
|
||||
};
|
||||
|
||||
// 배열에 추가
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
}else{
|
||||
//상품 옵션 선택없이 위시리스트 등록시 기본값 지정
|
||||
const productData = {
|
||||
id: goodsInnb,
|
||||
name: goodsNm,
|
||||
category: category,
|
||||
quantity: '0',
|
||||
payAmount: '0',
|
||||
option: ''
|
||||
};
|
||||
|
||||
productDataArray.push(productData);
|
||||
}
|
||||
|
||||
wslistScript.innerHTML = `
|
||||
if(window.wcs){
|
||||
if(!wcs_add) var wcs_add = {};
|
||||
wcs_add["wa"] = "${item.adMediaId}";
|
||||
var _conv = {};
|
||||
_conv.type = 'add_to_wishlist'; //(필수)
|
||||
_conv.items = [${JSON.stringify(productDataArray)}];
|
||||
wcs.trans(_conv);
|
||||
}
|
||||
`;
|
||||
|
||||
|
||||
document.head.appendChild(wslistScript);
|
||||
}
|
||||
|
||||
61
src/main/resources/static/js/alarmCount.js
Normal file
@@ -0,0 +1,61 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
const authSopmalCd = getCookie("authSopmalCd");
|
||||
|
||||
$.ajax({
|
||||
url: '/mngr/alarm/select/selectAlarmCount',
|
||||
method: 'GET',
|
||||
contentType: 'application/json; charset=UTF-8',
|
||||
data: {"sopmalCd" : authSopmalCd},
|
||||
success: function(data) {
|
||||
if (data.resBody && data.resBody.result) {
|
||||
let parseResult = JSON.parse(data.resBody.result);
|
||||
let status = parseResult.status;
|
||||
|
||||
if (status === 'success') {
|
||||
console.log(parseResult.refundList);
|
||||
console.log(parseResult.answerList);
|
||||
|
||||
show_top_menu_req_cnt(parseResult.refundList);
|
||||
show_top_menu_req_cnt(parseResult.answerList);
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function show_top_menu_req_cnt(list) {
|
||||
if(list.length < 1) return;
|
||||
let menu = list[0].menuName;
|
||||
|
||||
$("div.header-nav__right a").each(function () {
|
||||
if ($(this).text() == menu) {
|
||||
if ($(this).text() == '게시판') {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
let bbsId = list[i].bbsId;
|
||||
let cnt = list[i].cnt;
|
||||
|
||||
if (bbsId == 'goods_qna') {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt'>" + cnt + "</div>");
|
||||
} else {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt2'>" + cnt + "</div>");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (list[0].cnt != 0) {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt'>" + list[0].cnt + "</div>");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getCookie(name) {
|
||||
const value = `; ${document.cookie}`;
|
||||
const parts = value.split(`; ${name}=`);
|
||||
if (parts.length === 2) return parts.pop().split(';').shift();
|
||||
}
|
||||
10
src/main/resources/static/js/common.js
Normal file
@@ -0,0 +1,10 @@
|
||||
$(document).ready(function () {
|
||||
var $headerNav = $('.header-nav__inner');
|
||||
var $fullMenu = $('.full-menu');
|
||||
|
||||
if ($fullMenu.outerWidth() > $headerNav.outerWidth()) {
|
||||
$fullMenu.addClass('wide-menu');
|
||||
} else {
|
||||
$fullMenu.removeClass('wide-menu');
|
||||
}
|
||||
});
|
||||
376
src/main/resources/static/js/dlvylc/dlvylc.js
Normal file
@@ -0,0 +1,376 @@
|
||||
/**********************************************
|
||||
마이페이지 > 배송지 관리
|
||||
***********************************************/
|
||||
const fn_select_dlvylcList = function (pageIndex) {
|
||||
let selectForm = $(".dlvylcList").serialize();
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcManagePopup',
|
||||
data: {
|
||||
selectForm
|
||||
},
|
||||
success: function (data) {
|
||||
$("#content").html(data);
|
||||
$(".mbtlnb").each(function () {
|
||||
if ($(this).text().length > 0) {
|
||||
let mbtlnb = $(this).text();
|
||||
mbtlnb = fn_format_mbtlnb(mbtlnb);
|
||||
$(this).text(mbtlnb);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
기본배송지 수정 (마이페이지 > 배송지 관리)
|
||||
***********************************************/
|
||||
const fn_save_dftDlvylcAt = function (msg, adbkInnb) {
|
||||
if (confirm("기본배송지를 수정하시겠습니까?")) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/updatedftDlvylcAtUpdt',
|
||||
data: {
|
||||
adbkInnb: adbkInnb
|
||||
},
|
||||
success: function () {
|
||||
alert(msg);
|
||||
fn_select_dlvylcList(1);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
배송지 관리 팝업 ()
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_manage_pop = function (pageIndex,callback, formId = '') {
|
||||
if (callback == undefined) {
|
||||
callback = 'fn_set_dlvylc';
|
||||
}
|
||||
console.log("배송지 관리 팝업 : ", formId);
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcManagePopup',
|
||||
data: {
|
||||
isPop: 'Y',
|
||||
pageIndex: pageIndex,
|
||||
callbackNm: callback,
|
||||
formId: formId
|
||||
},
|
||||
success: function (data) {
|
||||
fn_close_modal('dlvylcManage');
|
||||
$('#modalDiv').html(data);
|
||||
$('#dlvylcManage').modal();
|
||||
$(".mbtlnbPop").each(function () {
|
||||
if($(this).text().length > 0){
|
||||
let mbtlnb = $(this).text().replace(/\s+/g, '');
|
||||
mbtlnb = fn_format_mbtlnb(mbtlnb);
|
||||
$(this).text(mbtlnb);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
배송지 관리 풀스크린 모달 ()
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_manage_full = function (pageIndex, callback, formId = '') {
|
||||
if (callback == undefined) {
|
||||
callback = 'fn_set_dlvylc';
|
||||
}
|
||||
console.log("모바일 배송지 팝업 formId : ", formId);
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcManagePopup',
|
||||
data: {
|
||||
isPop: 'Y',
|
||||
isMobile: 'Y',
|
||||
pageIndex: pageIndex,
|
||||
callbackNm: callback,
|
||||
formId: formId
|
||||
},
|
||||
success: function (data) {
|
||||
$('#dlvyDiv').html(data);
|
||||
openModal2("address-management");
|
||||
$(".mbtlnbPop").each(function () {
|
||||
let mbtlnb = $(this).text();
|
||||
if(mbtlnb.length > 0){
|
||||
mbtlnb = fn_format_mbtlnb(mbtlnb);
|
||||
$(this).text(mbtlnb);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
배송지 등록 팝업 호출
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage_pop = function (isPop, dftDlvylcAt) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcRegistForm',
|
||||
success: function (data) {
|
||||
fn_close_modal('dlvylcManage');
|
||||
fn_close_modal('dlvylcRegist');
|
||||
$('#modalDiv').html(data);
|
||||
$('#isPop').val(isPop);
|
||||
$('#dlvylcRegist').modal();
|
||||
if (dftDlvylcAt == 'Y') {
|
||||
$('#dftDlvylcAt').prop("checked", true);
|
||||
}
|
||||
fn_set_event('.telno', 'keyup', fn_fmt_telno);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
배송지 등록 페이지
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_regpage = function (dftDlvylcAt) {
|
||||
const hiddenForm = $("#hiddenForm");
|
||||
hiddenForm.submit();
|
||||
}
|
||||
/**********************************************
|
||||
배송지 등록
|
||||
***********************************************/
|
||||
const fn_insert_dlvylc = function (msg, data, isMobile) {
|
||||
$("#dlvylcUpdate").remove();
|
||||
let paramData = null;
|
||||
const registForm = $("#dlvylcRegistForm").serialize();
|
||||
if (data != null) {
|
||||
paramData = data;
|
||||
} else {
|
||||
paramData = registForm;
|
||||
}
|
||||
/*모바일과 pc 분기*/
|
||||
if (isMobile) {
|
||||
/*등록 마이크로모달 닫기*/
|
||||
MicroModal.close("dlvyConfirmModal");
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/insertDlvylcRegist',
|
||||
data: paramData,
|
||||
success: function () {
|
||||
/*등록 성공 마이크로모달 열기*/
|
||||
MicroModal.show("successModal");
|
||||
}
|
||||
});
|
||||
} else {//
|
||||
if (confirm('배송지를 등록하시겠습니까?')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/insertDlvylcRegist',
|
||||
data: paramData,
|
||||
//contentType: "application/x-www-form-urlencoded; charset=UTF-8",
|
||||
//dataType: "text",
|
||||
success: function () {
|
||||
alert(msg);
|
||||
let pop = $("#isPop").val();
|
||||
fn_close_modal('dlvylcManage');
|
||||
fn_close_modal('dlvylcRegist');
|
||||
if (pop == 'Y') {
|
||||
fn_move_dlvylc_manage_pop(1, 'fn_set_dlvylc');
|
||||
} else {
|
||||
fn_select_dlvylcList(1);
|
||||
//최근 배송지 form, 버튼 활성화 삭제
|
||||
$('#resentDlvylcForm').remove();
|
||||
$("#resentDlvylcBtn").removeClass("active");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
배송지 삭제
|
||||
***********************************************/
|
||||
const fn_delete_dlvylc = function (msg, adbkInnb,isPop,isMobile) {
|
||||
if(isMobile){
|
||||
openModal("confirm_del_alert");
|
||||
$("#delCfrmBtn").attr("adbk-innb", adbkInnb);
|
||||
}else{
|
||||
if (confirm('배송지를 삭제하시겠습니까?')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/deleteDlvylcDel',
|
||||
data: {
|
||||
adbkInnb: adbkInnb
|
||||
},
|
||||
success: function (data) {
|
||||
alert(msg);
|
||||
if (isPop == 'Y') {
|
||||
fn_move_dlvylc_manage_pop(1, 'fn_set_dlvylc');
|
||||
} else {
|
||||
fn_select_dlvylcList(1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
배송지 수정 팝업 이동(페이지)
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_uptpage_pop = function (pageIndex, adbkInnb, isPop) {
|
||||
$("#dlvylcRegist").remove();
|
||||
$.ajax({
|
||||
type: 'get',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcUpdtPopupForm',
|
||||
data: {
|
||||
adbkInnb: adbkInnb,
|
||||
pageIndex: pageIndex
|
||||
},
|
||||
success: function (data) {
|
||||
fn_close_modal('dlvylcManage');
|
||||
fn_close_modal('dlvylcUpdate');
|
||||
$('#modalDiv').html(data);
|
||||
$('#isPop').val(isPop);
|
||||
$('#dlvylcUpdate').modal();
|
||||
fn_set_event('.telno', 'keyup', fn_fmt_telno);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
배송지 수정 팝업 이동(모달)
|
||||
***********************************************/
|
||||
const fn_pop_dlvylc_upt_pop = function (pageIndex, adbkInnb) {
|
||||
$.ajax({
|
||||
type: 'get',
|
||||
url: '/sopmal/mpage/mbr/selectDlvylcUpdtMobilePopupForm',
|
||||
data: {
|
||||
adbkInnb: adbkInnb,
|
||||
pageIndex: pageIndex
|
||||
},
|
||||
success: function (data) {
|
||||
closeModal("address-management");
|
||||
$("#dlvyDiv").html(data);
|
||||
openModal("dlvylcUpdtFormPop");
|
||||
fn_set_event('.telno', 'keyup', fn_fmt_telno);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**********************************************
|
||||
배송지 수정 페이지
|
||||
***********************************************/
|
||||
const fn_move_dlvylc_uptpage = function (pageIndex, adbkInnb, isPop) {
|
||||
const hiddenForm = $("#hiddenForm");
|
||||
if (hiddenForm.length > 0) {
|
||||
hiddenForm.remove();
|
||||
}
|
||||
const form = document.createElement("form");
|
||||
form.id = "hiddenForm";
|
||||
form.action = "/sopmal/mpage/mbr/selectDlvylcUpdtPopupForm";
|
||||
form.method = "POST";
|
||||
fn_create_input("adbkInnb", adbkInnb, form);
|
||||
fn_create_input("pageIndex", pageIndex, form);
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
}
|
||||
|
||||
//input 생성 함수
|
||||
const fn_create_input = (name, value, tgtForm) => {
|
||||
const input = document.createElement('input');
|
||||
input.setAttribute("type", "hidden");
|
||||
input.setAttribute("name", name);
|
||||
input.setAttribute("value", value);
|
||||
tgtForm.appendChild(input);
|
||||
}
|
||||
/**********************************************
|
||||
배송지 수정
|
||||
***********************************************/
|
||||
const fn_update_dlvylc = function (pageIndex,msg,isMobile) {
|
||||
const updateForm = $("#dlvylcUpdtForm").serialize();
|
||||
if (isMobile !== '') {
|
||||
MicroModal.close("updtConfirmModal");
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/updateDlvylcUpdt',
|
||||
data: updateForm,
|
||||
success: function (data) {
|
||||
MicroModal.show("updtsuccessModal");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (confirm('배송지를 수정하시겠습니까?')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '/sopmal/mpage/mbr/updateDlvylcUpdt',
|
||||
data: updateForm,
|
||||
success: function (data) {
|
||||
alert(msg);
|
||||
let pop = $("#isPop").val();
|
||||
fn_close_modal('dlvylcManage');
|
||||
fn_close_modal('dlvylcUpdate');
|
||||
if (pop == 'Y') {
|
||||
fn_move_dlvylc_manage_pop(1,'fn_set_dlvylc');
|
||||
} else {
|
||||
fn_select_dlvylcList(1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
배송지 수정 팝업 밑에 취소 시 배송지 관리 팝업창으로 이동 ok
|
||||
***********************************************/
|
||||
const fn_move_dlvllcManage = function () {
|
||||
if ($("#isPop") == "Y") {
|
||||
fn_move_dlvylc_manage_pop(1);
|
||||
} else if ($("#isPop") == "N") {
|
||||
fn_close_modal('dlvylcUpdate');
|
||||
fn_select_dlvylcList(1);
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
팝업 배송지 등록 시 도로명, 지번 주소 구분 value값 넣기 ok
|
||||
***********************************************/
|
||||
const fn_select_dlvylc_postcode = function (data) {
|
||||
$('#zip').val(data.postcode);
|
||||
$('#adresDv').val(data.addressType);
|
||||
if (data.addressType == '01') {
|
||||
$('#adres').val(data.roadAddress + data.extraAddress);
|
||||
} else {
|
||||
$('#adres').val(data.jibunAddress + data.extraAddress);
|
||||
}
|
||||
if($("#postModal").length > 0){
|
||||
closeModal("postModal");
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
배송지 등록 시 도로명, 지번 주소 구분 value값 넣기 ok
|
||||
***********************************************/
|
||||
const fn_set_mngrOrdrDlvylc_postcode = function (data) {
|
||||
$("#ordrRecpntNm").val(data.recpntNm);
|
||||
$("#ordrDtlAdres").val(data.dtlAdres);
|
||||
$("#ordrRecpntMbtlnb").val(data.mbtlnb);
|
||||
$('#ordrDlvylcZip').val(data.postcode);
|
||||
$('#ordrAdresDvCd').val(data.addressType);
|
||||
if (data.addressType == '01') {
|
||||
$('#ordrAdres').val(data.roadAddress + data.extraAddress);
|
||||
} else {
|
||||
$('#ordrAdres').val(data.jibunAddress + data.extraAddress);
|
||||
}
|
||||
console.log("data.recpntNm", data.recpntNm);
|
||||
if (data.recpntNm == null) {
|
||||
$("#newDlvyLc").prop("checked", true);
|
||||
} else {
|
||||
$("#defaultDlvyLc").prop("checked", true);
|
||||
}
|
||||
}
|
||||
/**********************************************
|
||||
배송지 관리 팝업에서 배송 정보 가져오기
|
||||
***********************************************/
|
||||
const fn_select_mngrOrdr_postcode = function (callback, index, formId = '') {
|
||||
let extraAddress = "";
|
||||
callback({
|
||||
postcode: $(".zip").eq(index).val(),
|
||||
addressType: $(".adresDv").eq(index).val(),
|
||||
roadAddress: $(".rnmAdres").eq(index).val(),
|
||||
jibunAddress: $(".lnbAdres").eq(index).val(),
|
||||
recpntNm: $(".recpntNmR").eq(index).val(),
|
||||
dtlAdres: $(".dtlAdres").eq(index).val(),
|
||||
mbtlnb: $(".mbtlnb").eq(index).val(),
|
||||
extraAddress: extraAddress
|
||||
}, formId);
|
||||
fn_close_modal("dlvylcManage");
|
||||
}
|
||||
275
src/main/resources/static/js/fileupload_comm.js
Normal file
@@ -0,0 +1,275 @@
|
||||
$(document).ready(function () {
|
||||
|
||||
//$("#fileUpload").on("change", addFiles);
|
||||
});
|
||||
|
||||
var filesTempArr = [];
|
||||
|
||||
//파일추가
|
||||
function addFiles(event, mode){
|
||||
addFilesObj(event, mode,"fileList");
|
||||
}
|
||||
|
||||
function addFilesObj(event, mode, objId, represntAt){
|
||||
if(!($(event.target).is('[multiple]'))) filesTempArr.splice(0, filesTempArr.length);
|
||||
|
||||
var files = event.target.files; //선택한 파일들
|
||||
var filesArr = Array.prototype.slice.call(files); //file객체 array추가
|
||||
var filesArrLen = filesArr.length;
|
||||
var filesTempArrSize = filesTempArr.length*1;
|
||||
|
||||
let obj = $('#'+objId);
|
||||
if((mode === 1 && filesArrLen>1) || (mode === 1 && obj.find('li').length>0)){
|
||||
alert("파일은 한개만 첨부할 수 있습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var templist = '';
|
||||
for(var i=0; i<filesArrLen; i++){
|
||||
if(i === filesArrLen-1){ //게시판 대표이미지 배열 첫번째로 이동
|
||||
if(represntAt === 'Y'){
|
||||
filesTempArr.unshift(filesArr[i]); //임시배열에 저장
|
||||
}else{
|
||||
filesTempArr.push(filesArr[i]); //임시배열에 저장
|
||||
}
|
||||
}else{
|
||||
filesTempArr.push(filesArr[i]); //임시배열에 저장
|
||||
}
|
||||
if($(event.target).is('[multiple]')){
|
||||
//templist = "<div id='temp"+(i+filesTempArrSize)+"'><a href='#' onclick='downloadFile(this, "+(i+filesTempArrSize)+");'>"+ filesArr[i].name + "</a><span style='color:red;' onclick='deleteFile(this, event, "+(i+filesTempArrSize)+");'> [X]</span></div>";
|
||||
let fileSize = (filesArr[i].size / 1024).toFixed(2);
|
||||
if(objId=='fileList'){
|
||||
templist ="<li id='temp"+(i+filesTempArrSize)+"'>"
|
||||
+"<a href='#' onclick='downloadFile(this, "+(i+filesTempArrSize)+");'>"
|
||||
+ "<i class='icon icon_file-list mr-2'></i>"
|
||||
+ "<span class='file-list__item-title'>"+ filesArr[i].name + "</span>"
|
||||
+"</a>"
|
||||
+"<button type='button' class='file-list__delete' onclick='deleteFile(this,0,0, "+(i+filesTempArrSize)+");'/>"
|
||||
+"</li>";
|
||||
}else {
|
||||
templist = "<li class = 'uploadList__item' id='temp" + (i + filesTempArrSize) + "'>"
|
||||
+ "<p class = 'uploadList__itemText'>"
|
||||
+ "<span class = 'uploadList__itemName'/> "+ filesArr[i].name + "</span>"
|
||||
+ "<span class ='uploadList__itemSize'>("+ fileSize + " KB)</span>"
|
||||
+ "</p>"
|
||||
+ "<input type = 'hidden' value = '"+ fileSize + "' class = 'filsSize'/>"
|
||||
+ "<button class='uploadList__removeBtn' type='button' onclick='deleteFile(this,0,0," + (i+filesTempArrSize) + ",\"" + objId + "\"); fn_sum_file_size();'/>"
|
||||
+ "<span class ='visually-hidden'>삭제</span>"
|
||||
+ "</button>"
|
||||
+ "</li>"
|
||||
}
|
||||
obj.append(templist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//파일삭제
|
||||
//callbackNm ajax 파일 처리 성공시 실행 할 콜백함수
|
||||
function deleteFile(obj, shopCd, menuGb, orderParam,callbackNm,callbackParam) {
|
||||
deleteFiles(obj, shopCd, menuGb, orderParam, 'fileUpload',callbackNm,callbackParam);
|
||||
}
|
||||
|
||||
//파일삭제
|
||||
function deleteFiles(obj, shopCd, menuGb, orderParam, objId, callbackNm,callbackParam) {
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('li');
|
||||
var $id = $div.attr('id');
|
||||
var obj = "#" + objId;
|
||||
if ($id.indexOf('temp') == 0) { //임시등록파일은 화면에서 삭제
|
||||
$div.remove();
|
||||
$(obj).val('');
|
||||
} else { //업로드된 파일은 서버삭제
|
||||
if (confirm("파일을 삭제하시겠습니까?")) {
|
||||
ajaxFileDelete($div, $id, shopCd, menuGb, orderParam,callbackNm,callbackParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//파일삭제(html 요소 조작 없이 단순 파일 삭제)
|
||||
function dropzoneDeleteFiles(fileId, shopCd, menuGb, orderParam,callbackNm,callbackParam) {
|
||||
if (fileId.indexOf('temp') != 0) { //임시등록파일은 화면에서 삭제
|
||||
if (confirm("파일을 삭제하시겠습니까?")) {
|
||||
ajaxFileDelete('', fileId, shopCd, menuGb, orderParam, callbackNm,callbackParam);
|
||||
return "Y";
|
||||
}else{
|
||||
return "N";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ajaxFileDelete = function (obj, fileId, shopCd, menuGb, orderParam, callbackNm,callbackParam) {
|
||||
|
||||
$.ajax({
|
||||
//url: '/file/deleteUploadedFile/'+shopCd+'/'+menuGb+'/'+fileId+'/ajax',
|
||||
url: '/file/deleteUploadedFile?sopCd=' + shopCd + '&menuGb=' + menuGb + '&fileKey=' + fileId,
|
||||
data: fileId,
|
||||
type: 'get',
|
||||
success: function (data) {
|
||||
if (obj !== '') {
|
||||
obj.remove();
|
||||
}
|
||||
if (callbackNm != null) {
|
||||
callbackNm(callbackParam);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
alert("삭제에 실패하였습니다.");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//다운로드
|
||||
var downloadFile = function(obj,shopCd, menuGb,orderParam){
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('li');
|
||||
var fileId = $div.attr('id'); // <li>태그id - 파일글번호
|
||||
var orgFileId = obj.id; //선택된 파일명. 즉 <a>태그id - 원본파일명
|
||||
|
||||
if(fileId.indexOf('temp') == 0){
|
||||
alert("등록된 파일만 다운로드 가능합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//$(location).attr('href','/file/download/'+shopCd+'/'+menuGb+'/'+fileId+'/'+orgFileId+'/ajax');
|
||||
//$(location).attr('href','/file/download/'+shopCd+'/'+menuGb+'/'+fileId+'/ajax');
|
||||
$(location).attr('href','/file/fileDownload?sopCd='+shopCd+'&menuGb='+menuGb+'&fileKey='+fileId);
|
||||
}
|
||||
|
||||
|
||||
//다운로드
|
||||
var linkDownloadFile = function(key,shopCd, menuGb,orderParam){ //파일글번호, 원본파일명
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
|
||||
if(key.indexOf('temp') == 0){
|
||||
alert("등록된 파일만 다운로드 가능합니다.");
|
||||
return false;
|
||||
}
|
||||
$(location).attr('href','/file/fileDownload?sopCd='+shopCd+'&menuGb='+menuGb+'&fileKey='+key);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// 이미지 업로드 시 이미지 미리보기 , 삭제버튼(배열에서 제거함) 기능
|
||||
//-----------------------------------------------------------
|
||||
|
||||
// let selectedFiles = []; // 선택된 파일을 저장하는 배열
|
||||
function addImgFilesView(event,objId){
|
||||
const previewContainer = document.getElementById(objId);
|
||||
const files = event.target.files; // 선택된 파일들 가져오기
|
||||
// previewContainer.innerHTML = ''; // 기존 미리보기 초기화
|
||||
// filesTempArr = []; // 기존 배열 초기화
|
||||
|
||||
// 파일 개수 제한 확인
|
||||
// const maxFiles = 3; // 최대 파일 개수 제한
|
||||
/*if (filesTempArr.length + files.length > maxFiles) {
|
||||
alert(`최대 ${maxFiles}개의 파일만 업로드할 수 있습니다.`);
|
||||
return;
|
||||
}
|
||||
Array.from(files).forEach((file) => {
|
||||
if (filesTempArr.length < maxFiles) {
|
||||
filesTempArr.push(file); // 파일 추가
|
||||
displayPreview(file, previewContainer);
|
||||
}
|
||||
});*/
|
||||
Array.from(files).forEach((file) => {
|
||||
filesTempArr.push(file); // 파일 추가
|
||||
displayPreview(file, previewContainer);
|
||||
});
|
||||
|
||||
// input 초기화 (같은 파일 재선택 가능)
|
||||
event.target.value = '';
|
||||
}
|
||||
|
||||
function displayPreview(file,obj) {
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
// 미리보기 항목 생성
|
||||
const previewItem = document.createElement('div');
|
||||
previewItem.classList.add('preview-item');
|
||||
|
||||
// 이미지 태그 생성
|
||||
const img = document.createElement('img');
|
||||
img.src = e.target.result;
|
||||
|
||||
// 삭제 버튼 생성
|
||||
const deleteBtn = document.createElement('button');
|
||||
deleteBtn.classList.add('delete-btn');
|
||||
deleteBtn.textContent = '×';
|
||||
deleteBtn.onclick = function () {
|
||||
removeImgFile(file, previewItem);
|
||||
};
|
||||
|
||||
// 미리보기 항목에 이미지와 버튼 추가
|
||||
previewItem.appendChild(img);
|
||||
previewItem.appendChild(deleteBtn);
|
||||
obj.appendChild(previewItem);
|
||||
};
|
||||
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
|
||||
function removeImgFile(file, previewItem) {
|
||||
// 선택된 파일 배열에서 제거
|
||||
filesTempArr = filesTempArr.filter((f) => f !== file);
|
||||
|
||||
// 미리보기 항목 제거
|
||||
previewItem.remove();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------
|
||||
var initFileList = function($files){
|
||||
if(Array.isArray($files)){
|
||||
$.each($files, function(index, item){
|
||||
filesTempArr.push(item);
|
||||
filesTempArr[index].upload = 'disable';
|
||||
});
|
||||
}else{
|
||||
filesTempArr.push(new File([$files], $files+".txt", {
|
||||
type: "text/plain",
|
||||
}));
|
||||
filesTempArr[0].upload = 'disable';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//파일삭제(단건)
|
||||
function deleteSingleFile (obj, eventParam, orderParam){
|
||||
if(confirm('삭제하시겠습니까?')){
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('div')
|
||||
var $id = $div.attr('id');
|
||||
if($id.indexOf('temp') == 0) {
|
||||
$div.remove();
|
||||
}else{
|
||||
$div.remove();
|
||||
|
||||
$('#updateFileDiv').show();
|
||||
filesTempArr = [];
|
||||
$('#imgSavedYn').val("N");
|
||||
//ajaxSingleFileDelete($id);
|
||||
}
|
||||
}
|
||||
}
|
||||
//파일삭제(단건) 후처리
|
||||
var ajaxSingleFileDelete = function(fileId){
|
||||
$.ajax({
|
||||
url: '/bo/comm/file/deleteUploadedFile/'+fileId+"/ajax",
|
||||
data: fileId,
|
||||
type: 'post',
|
||||
success : function(data){
|
||||
//찾아보기 div구역 id = updateFileDiv
|
||||
$('#updateFileDiv').show();
|
||||
filesTempArr = [];
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
alert("삭제에 실패하였습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
1318
src/main/resources/static/js/gcone.js
Normal file
167
src/main/resources/static/js/lotteryScratch.js
Normal file
@@ -0,0 +1,167 @@
|
||||
$(document).ready(function() {
|
||||
setTimeout(function() {
|
||||
let $canvas = $('#scratchCanvas');
|
||||
|
||||
if ($canvas.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const ctx = $canvas[0].getContext('2d');
|
||||
const canvas = $canvas[0];
|
||||
canvas.width = canvas.offsetWidth;
|
||||
canvas.height = canvas.offsetHeight;
|
||||
const gridSize = 30;
|
||||
const cols = Math.ceil(canvas.width / gridSize);
|
||||
const rows = Math.ceil(canvas.height / gridSize);
|
||||
const scratchedGrid = Array.from({ length: rows }, () => Array(cols).fill(false));
|
||||
|
||||
const coverImg = new Image();
|
||||
const imgTag = document.getElementById('coverImg');
|
||||
coverImg.src = imgTag.src;
|
||||
coverImg.onload = function () {
|
||||
ctx.drawImage(coverImg, 0, 0, canvas.width, canvas.height);
|
||||
};
|
||||
|
||||
let isDrawing = false;
|
||||
let isSwitched = false;
|
||||
|
||||
$canvas.on('mousedown touchstart', function () {
|
||||
loginCheck();
|
||||
canvas.style.cursor = 'url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczMicgaGVpZ2h0PSczMicgdmlld0JveD0nMCAwIDMyIDMyJz48Y2lyY2xlIGN4PScxNicgY3k9JzE2JyByPScxNicgZmlsbD0nI2VkYjE2MycvPjwvc3ZnPg=="), auto';
|
||||
isDrawing = true;
|
||||
});
|
||||
|
||||
$canvas.on('mouseup mouseleave touchend', function () {
|
||||
canvas.style.cursor = 'url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSczMicgaGVpZ2h0PSczMicgdmlld0JveD0nMCAwIDMyIDMyJz48Y2lyY2xlIGN4PScxNicgY3k9JzE2JyByPScxNicgZmlsbD0nI2VkYjE2MycvPjwvc3ZnPg=="), auto';
|
||||
isDrawing = false;
|
||||
});
|
||||
|
||||
$canvas.on('mousemove touchmove', function (e) {
|
||||
if (!isDrawing || isSwitched) return;
|
||||
|
||||
e.preventDefault();
|
||||
let x, y;
|
||||
|
||||
const rect = $canvas[0].getBoundingClientRect();
|
||||
if (e.originalEvent.touches) {
|
||||
x = e.originalEvent.touches[0].clientX - rect.left;
|
||||
y = e.originalEvent.touches[0].clientY - rect.top;
|
||||
} else {
|
||||
x = e.clientX - rect.left;
|
||||
y = e.clientY - rect.top;
|
||||
}
|
||||
const col = Math.floor(x / gridSize);
|
||||
const row = Math.floor(y / gridSize);
|
||||
|
||||
scratchedGrid[row][col] = true;
|
||||
|
||||
ctx.globalCompositeOperation = 'destination-out';
|
||||
ctx.beginPath();
|
||||
ctx.arc(x, y, 30, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
const scratchedPercent = calculateScratchedPercent();
|
||||
if (scratchedPercent >= 30) {
|
||||
isSwitched = true;
|
||||
scratchLottery();
|
||||
}
|
||||
});
|
||||
|
||||
// 긁힌 퍼센테이지 구하기
|
||||
function calculateScratchedPercent() {
|
||||
let scratchedCount = 0;
|
||||
let totalCount = rows * cols;
|
||||
|
||||
for (let r = 0; r < rows; r++) {
|
||||
for (let c = 0; c < cols; c++) {
|
||||
if (scratchedGrid[r][c]) scratchedCount++;
|
||||
}
|
||||
}
|
||||
return ((scratchedCount / totalCount) * 100).toFixed(2);
|
||||
}
|
||||
|
||||
// 로그인체크
|
||||
function loginCheck () {
|
||||
var device = $('#adScriptDeviceTy').val();
|
||||
if ($('#mbrInnb').val() == 0) {
|
||||
if (device == 'sopmal_m') {
|
||||
openModal('modal-error-confirm-move-login');
|
||||
return;
|
||||
} else {
|
||||
fn_wish_modal();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 복권긁기 결과
|
||||
function scratchLottery() {
|
||||
const promInnb = $('#promInnb').val();
|
||||
const promRule = $('#promRule').val();
|
||||
$.ajax({
|
||||
url:"/sopmal/prom/promJoin",
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ promInnb: promInnb, promRule: promRule }),
|
||||
success : function(res) {
|
||||
console.log('서버 응답:', res);
|
||||
|
||||
const resBody = res?.resBody;
|
||||
let resultObj = resBody?.result;
|
||||
|
||||
if (typeof resultObj === "string") {
|
||||
try {
|
||||
resultObj = JSON.parse(resultObj);
|
||||
} catch (e) {
|
||||
console.warn('JSON 파싱 실패', e);
|
||||
resultObj = {};
|
||||
}
|
||||
}
|
||||
|
||||
// 오류 방지: 응답이 비정상일 경우 종료
|
||||
if (!resultObj || typeof resultObj.selected === "undefined") {
|
||||
alert("응답이 잘못되었습니다. 다시 시도해주세요.");
|
||||
spinning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const selected = Number(resultObj.selected) || 0;
|
||||
const message = resultObj.message || "";
|
||||
|
||||
if (resultObj.alreadySpun === true) {
|
||||
if (message) alert(message);
|
||||
$canvas.hide();
|
||||
return;
|
||||
} else {
|
||||
$(`.common-winning${selected}`).show();
|
||||
if (getDeviceType() === 'sopmal_m') {
|
||||
$(`.mobile-winning${selected}`).show();
|
||||
} else {
|
||||
$(`.winning${selected}`).show();
|
||||
}
|
||||
showWinningModal(selected);
|
||||
$canvas.hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getDeviceType() {
|
||||
return $('#adScriptDeviceTy').val();
|
||||
}
|
||||
|
||||
function showWinningModal(index) {
|
||||
if (getDeviceType() === 'sopmal_m') {
|
||||
console.log(typeof MicroModal);
|
||||
console.log('모바일 - Micromodal 실행');
|
||||
MicroModal.show('event_winning2');
|
||||
} else {
|
||||
$('#event_winning').modal();
|
||||
}
|
||||
}
|
||||
|
||||
}, 300);
|
||||
|
||||
});
|
||||
61
src/main/resources/static/js/mngr/alarmCount.js
Normal file
@@ -0,0 +1,61 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
const authSopmalCd = getCookie("authSopmalCd");
|
||||
|
||||
$.ajax({
|
||||
url: '/mngr/alarm/select/selectAlarmCount',
|
||||
method: 'GET',
|
||||
contentType: 'application/json; charset=UTF-8',
|
||||
data: {"sopmalCd" : authSopmalCd},
|
||||
success: function(data) {
|
||||
if (data.resBody && data.resBody.result) {
|
||||
let parseResult = JSON.parse(data.resBody.result);
|
||||
let status = parseResult.status;
|
||||
|
||||
if (status === 'success') {
|
||||
console.log(parseResult.refundList);
|
||||
console.log(parseResult.answerList);
|
||||
|
||||
show_top_menu_req_cnt(parseResult.refundList);
|
||||
show_top_menu_req_cnt(parseResult.answerList);
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function show_top_menu_req_cnt(list) {
|
||||
if(list.length < 1) return;
|
||||
let menu = list[0].menuName;
|
||||
|
||||
$("div.header-nav__right a").each(function () {
|
||||
if ($(this).text() == menu) {
|
||||
if ($(this).text() == '게시판') {
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
let bbsId = list[i].bbsId;
|
||||
let cnt = list[i].cnt;
|
||||
|
||||
if (bbsId == 'goods_qna') {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt'>" + cnt + "</div>");
|
||||
} else {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt2'>" + cnt + "</div>");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (list[0].cnt != 0) {
|
||||
$(this).parent().append("<div class='top_menu_req_cnt'>" + list[0].cnt + "</div>");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getCookie(name) {
|
||||
const value = `; ${document.cookie}`;
|
||||
const parts = value.split(`; ${name}=`);
|
||||
if (parts.length === 2) return parts.pop().split(';').shift();
|
||||
}
|
||||
249
src/main/resources/static/js/mngr/css/bnft/style.css
Normal file
@@ -0,0 +1,249 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/*event add 2024-05*/
|
||||
.wd60 {width:60px !important;max-width:120px !important;}
|
||||
.wd70 {width:70px !important;max-width:120px !important;}
|
||||
.wd80 {width:80px !important;max-width:120px !important;}
|
||||
|
||||
.wd90 {width:90px !important;max-width:120px !important;}
|
||||
.wd100 {width:100px !important;max-width:100px !important;}
|
||||
.wd150 {width:150px !important;max-width:150px !important;}
|
||||
.wd200 {width:200px !important;max-width:200px !important;}
|
||||
.wd250 {width:250px !important;max-width:250px !important;}
|
||||
.wd300 {width:300px !important;max-width:300px !important;}
|
||||
.wd400 {width:400px !important;max-width:400px !important;}
|
||||
.wd500 {width:500px !important;max-width:500px !important;}
|
||||
.wd540 {width:540px !important;max-width:580px !important;}
|
||||
.wd580 {width:580px !important;max-width:580px !important;}
|
||||
.wd600 {width:600px !important;max-width:600px !important;}
|
||||
.wd50p {width:50% !important;}
|
||||
.wd100p {width:100% !important;}
|
||||
|
||||
.alignL {text-align:left !important;}
|
||||
.alignR {text-align:right !important;}
|
||||
.alignC {text-align:center !important;}
|
||||
.center {margin:0 auto;}
|
||||
|
||||
.mt0 {margin-top:0 !important;}
|
||||
.mb5 {margin-bottom:5px !important;}
|
||||
|
||||
.pdt0 {padding-top:0 !important;}
|
||||
|
||||
.bar_right {border-right:1px solid #ccc; margin:0 10px 0 0; padding-right:10px; line-height:1;}
|
||||
.table td .td-inner.right {flex-direction: row-reverse;}
|
||||
.table td .td-inner.nowrap {flex-wrap: nowrap;align-items: flex-start;}
|
||||
.table td .ft-12{font-size: 12px;}
|
||||
.table td .cl-{font-size: 12px;}
|
||||
.side-nav {overflow-y: auto;}
|
||||
.textarea_form {
|
||||
width:100%;
|
||||
border:1px solid #dee2e6;
|
||||
padding: 15px;
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
.textarea_form textarea{width:100%; height:150px;}
|
||||
/*출석체크_기간별내역*/
|
||||
.count-wrapper {display: flex;}
|
||||
.count_box {width:25%;text-align:center;border:1px solid #ccc;border-radius: 10px;margin: 10px 10px 30px;position: relative;}
|
||||
.count_box:hover {border-color:#1c7ed6;}
|
||||
.count_box a {display:block;padding:20px 10px;}
|
||||
.count_box .cnt_top {font-size:16px;font-weight: 600;}
|
||||
.count_box .cnt_bm {font-size:24px;font-weight: 600;color:#1864ab;margin-top:10px;}
|
||||
.count_box .cnt_txt {font-size:14px;font-weight: 500;color: #696969;/* margin-top: 15px; */position: absolute;left: 0;bottom: -33px;width: 100%;text-align: center;}
|
||||
|
||||
.count_box.last {background: #f7f7f7;border-color:#3CAB50;}
|
||||
.count_box.last .cnt_bm {color:#3CAB50;}
|
||||
.count_box.last:hover {background: #fff;}
|
||||
|
||||
.count_box.st-01 {background: #edecf9;border-color: #865fdf;}
|
||||
.count_box.st-01 .cnt_bm {color: #797c81;font-size: 18px;/* font-weight: 400; */}
|
||||
.count_box.st-01 .cnt_bm .cc{color: #865fdf;font-size: 24px;font-weight: 600;margin-right: 5px;}
|
||||
.count_box.st-01:hover {background: #fff;}
|
||||
|
||||
.ic_today{background: #228be6;color:#fff;border-radius: 5px;font-size: 0.8em;padding: 1px 9px 5px 9px;vertical-align: 2px;}
|
||||
|
||||
.count-wrapper.cw-01{display: flex;flex-wrap: wrap;}
|
||||
.count-wrapper.cw-01 .count_box{width: 18.7%;}
|
||||
.dropzone-wrapper .dropzone.w200 {min-width: 200px;}
|
||||
|
||||
.ck.ck-content:not(.ck-style-grid__button__preview) {min-height: 200px !important;}
|
||||
|
||||
/*사진작은사이즈*/
|
||||
.dropzone-wrapper.sm {padding:0;}
|
||||
.dropzone-wrapper.sm .dropzone {min-width: 100px; min-height: 100px;}
|
||||
.dropzone-wrapper.sm .dropzone .dz-message {/*display: flex; gap: 20px; */margin: 0;}
|
||||
.dropzone-wrapper.sm .dropzone .dz-message::before {
|
||||
width:60px; height:60px;
|
||||
}
|
||||
th.left-line{border-left: solid 1px #dee2e6;}
|
||||
td.left-line{border-left: solid 1px #f1f3f5;}
|
||||
tr.hr td,
|
||||
tr.hr th{border-top:1px solid #6e6e6e;}
|
||||
.btn.outline.delete {
|
||||
border-color:red
|
||||
}
|
||||
.btn.delete {
|
||||
background-color: #ca0000;
|
||||
color: #ffffff;
|
||||
}
|
||||
.btn.delete:hover {
|
||||
background-color: #ca0000;
|
||||
}
|
||||
.btn.delete.outline {
|
||||
border-color: #ca0000;
|
||||
color: #ca0000;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/*관심분야설정 차트*/
|
||||
.content-chart {display: flex; width: 100%;justify-content: space-between;}
|
||||
.content-chart .left_area{width: 52%;}
|
||||
.content-chart .right_area{width: 44%;}
|
||||
|
||||
.chart-wrapper{min-width: 200px; min-height: 200px;}
|
||||
|
||||
.tf-bg tfoot th,
|
||||
.tf-bg tfoot td{background: #f5fbff;font-weight: 600;color: #416ec3;}
|
||||
.tf-bg tfoot th{/* background: #e8eef3; */color: #50514f;font-weight: 500;}
|
||||
|
||||
.select-box.xs .nice-select {min-width: 128px;height: 36px;line-height: 34px;border: 1px solid #dee2e6;border-radius: 4px;padding-left: 12px;max-width: 200px;}
|
||||
.grp-wrap {
|
||||
display:flex;
|
||||
gap: 20px;
|
||||
height:350px;
|
||||
}
|
||||
.grp-inbox {
|
||||
width:100%;
|
||||
height:100%;
|
||||
background-color:#fafafa;
|
||||
padding:20px;
|
||||
}
|
||||
.grp-tit {
|
||||
font-size: 18px;
|
||||
margin-bottom: 10px;
|
||||
color: #262675;
|
||||
font-weight: 500;
|
||||
}
|
||||
.btn.delete.outline {
|
||||
border-color: #ce1818;
|
||||
color: #ce1818;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.bar_chart {
|
||||
margin:40px 0;
|
||||
}
|
||||
.barWrap {
|
||||
display: flex;
|
||||
position: relative;
|
||||
margin: 0 0 24px;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
.bar {
|
||||
position: relative;
|
||||
width: 80%;
|
||||
height: 15px;
|
||||
background-color: #f7f7f7;
|
||||
border-radius: 25px;
|
||||
border-radius: 25px;
|
||||
}
|
||||
.bar > span {
|
||||
display: block;
|
||||
width: 50%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 15px;
|
||||
background: #4CAF50;
|
||||
border-radius: 999px;
|
||||
font-size: 0;
|
||||
}
|
||||
.bar.blue-8 span {background-color: #1971c2;}
|
||||
.barWrap span.tit {
|
||||
display: block;
|
||||
width: 5%;
|
||||
font-size:16px;
|
||||
font-weight:600;
|
||||
}
|
||||
.barWrap span.per {
|
||||
display: block;
|
||||
width: 15%;
|
||||
text-align: right;
|
||||
font-size: 16px;
|
||||
font-weight: 600
|
||||
}
|
||||
.barWrapSum {
|
||||
margin:30px 0;
|
||||
text-align:right;
|
||||
font-size:18px;
|
||||
font-weight:600;
|
||||
background:#f7f7f7;
|
||||
border-radius: 10px;
|
||||
padding:30px;
|
||||
}
|
||||
.barWrapSum b {
|
||||
font-size:24px;
|
||||
}
|
||||
.tb-top-date {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap:5px;
|
||||
}
|
||||
.btn.outline.green-8 {
|
||||
border-color:#2f9e44 !important
|
||||
}
|
||||
/*테스트발송*/
|
||||
.messege-check-listWrap {
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
margin: 10px 0;
|
||||
background-color: #f7f7f7;
|
||||
border: 1px solid #dedede;
|
||||
}
|
||||
.messege-check-list {
|
||||
|
||||
}
|
||||
.messege-check-list li {
|
||||
padding: 12px;
|
||||
border-bottom: 1px dashed #eee;
|
||||
}
|
||||
.messege-check-list li:hover {
|
||||
background-color: #fff;
|
||||
}
|
||||
/*탭*/
|
||||
.tab_area {
|
||||
display: flex;
|
||||
border-bottom: 2px solid #ddd;
|
||||
}
|
||||
|
||||
.tab_area a {
|
||||
font-size: 20px;
|
||||
padding: 10px 30px;
|
||||
display: block;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
transition: border-color 0.3s, color 0.3s;
|
||||
margin-bottom: -2px;
|
||||
}
|
||||
|
||||
.tab_area a.active {
|
||||
font-weight: 600;
|
||||
color: #228be6;
|
||||
border-bottom: 2px solid #228be6;
|
||||
}
|
||||
|
||||
|
||||
.tab-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tab-content.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
31
src/main/resources/static/js/mngr/css/imgFileupload.css
Normal file
@@ -0,0 +1,31 @@
|
||||
@charset "UTF-8";
|
||||
.preview-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
.preview-item {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
.preview-item img {
|
||||
max-width: 150px;
|
||||
max-height: 150px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.preview-item .delete-btn {
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
right: -5px;
|
||||
background: red;
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
}
|
||||
7
src/main/resources/static/js/mngr/css/jquery-ui.min.css
vendored
Normal file
7900
src/main/resources/static/js/mngr/css/style.css
Normal file
275
src/main/resources/static/js/mngr/fileupload_comm.js
Normal file
@@ -0,0 +1,275 @@
|
||||
$(document).ready(function () {
|
||||
|
||||
//$("#fileUpload").on("change", addFiles);
|
||||
});
|
||||
|
||||
var filesTempArr = [];
|
||||
|
||||
//파일추가
|
||||
function addFiles(event, mode){
|
||||
addFilesObj(event, mode,"fileList");
|
||||
}
|
||||
|
||||
function addFilesObj(event, mode, objId, represntAt){
|
||||
if(!($(event.target).is('[multiple]'))) filesTempArr.splice(0, filesTempArr.length);
|
||||
|
||||
var files = event.target.files; //선택한 파일들
|
||||
var filesArr = Array.prototype.slice.call(files); //file객체 array추가
|
||||
var filesArrLen = filesArr.length;
|
||||
var filesTempArrSize = filesTempArr.length*1;
|
||||
|
||||
let obj = $('#'+objId);
|
||||
if((mode === 1 && filesArrLen>1) || (mode === 1 && obj.find('li').length>0)){
|
||||
alert("파일은 한개만 첨부할 수 있습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
var templist = '';
|
||||
for(var i=0; i<filesArrLen; i++){
|
||||
if(i === filesArrLen-1){ //게시판 대표이미지 배열 첫번째로 이동
|
||||
if(represntAt === 'Y'){
|
||||
filesTempArr.unshift(filesArr[i]); //임시배열에 저장
|
||||
}else{
|
||||
filesTempArr.push(filesArr[i]); //임시배열에 저장
|
||||
}
|
||||
}else{
|
||||
filesTempArr.push(filesArr[i]); //임시배열에 저장
|
||||
}
|
||||
if($(event.target).is('[multiple]')){
|
||||
//templist = "<div id='temp"+(i+filesTempArrSize)+"'><a href='#' onclick='downloadFile(this, "+(i+filesTempArrSize)+");'>"+ filesArr[i].name + "</a><span style='color:red;' onclick='deleteFile(this, event, "+(i+filesTempArrSize)+");'> [X]</span></div>";
|
||||
let fileSize = (filesArr[i].size / 1024).toFixed(2);
|
||||
if(objId=='fileList'){
|
||||
templist ="<li id='temp"+(i+filesTempArrSize)+"'>"
|
||||
+"<a href='#' onclick='downloadFile(this, "+(i+filesTempArrSize)+");'>"
|
||||
+ "<i class='icon icon_file-list mr-2'></i>"
|
||||
+ "<span class='file-list__item-title'>"+ filesArr[i].name + "</span>"
|
||||
+"</a>"
|
||||
+"<button type='button' class='file-list__delete' onclick='deleteFile(this,0,0, "+(i+filesTempArrSize)+");'/>"
|
||||
+"</li>";
|
||||
}else {
|
||||
templist = "<li class = 'uploadList__item' id='temp" + (i + filesTempArrSize) + "'>"
|
||||
+ "<p class = 'uploadList__itemText'>"
|
||||
+ "<span class = 'uploadList__itemName'/> "+ filesArr[i].name + "</span>"
|
||||
+ "<span class ='uploadList__itemSize'>("+ fileSize + " KB)</span>"
|
||||
+ "</p>"
|
||||
+ "<input type = 'hidden' value = '"+ fileSize + "' class = 'filsSize'/>"
|
||||
+ "<button class='uploadList__removeBtn' type='button' onclick='deleteFile(this,0,0," + (i+filesTempArrSize) + ",\"" + objId + "\"); fn_sum_file_size();'/>"
|
||||
+ "<span class ='visually-hidden'>삭제</span>"
|
||||
+ "</button>"
|
||||
+ "</li>"
|
||||
}
|
||||
obj.append(templist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//파일삭제
|
||||
//callbackNm ajax 파일 처리 성공시 실행 할 콜백함수
|
||||
function deleteFile(obj, shopCd, menuGb, orderParam,callbackNm,callbackParam) {
|
||||
deleteFiles(obj, shopCd, menuGb, orderParam, 'fileUpload',callbackNm,callbackParam);
|
||||
}
|
||||
|
||||
//파일삭제
|
||||
function deleteFiles(obj, shopCd, menuGb, orderParam, objId, callbackNm,callbackParam) {
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('li');
|
||||
var $id = $div.attr('id');
|
||||
var obj = "#" + objId;
|
||||
if ($id.indexOf('temp') == 0) { //임시등록파일은 화면에서 삭제
|
||||
$div.remove();
|
||||
$(obj).val('');
|
||||
} else { //업로드된 파일은 서버삭제
|
||||
if (confirm("파일을 삭제하시겠습니까?")) {
|
||||
ajaxFileDelete($div, $id, shopCd, menuGb, orderParam,callbackNm,callbackParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//파일삭제(html 요소 조작 없이 단순 파일 삭제)
|
||||
function dropzoneDeleteFiles(fileId, shopCd, menuGb, orderParam,callbackNm,callbackParam) {
|
||||
if (fileId.indexOf('temp') != 0) { //임시등록파일은 화면에서 삭제
|
||||
if (confirm("파일을 삭제하시겠습니까?")) {
|
||||
ajaxFileDelete('', fileId, shopCd, menuGb, orderParam, callbackNm,callbackParam);
|
||||
return "Y";
|
||||
}else{
|
||||
return "N";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ajaxFileDelete = function (obj, fileId, shopCd, menuGb, orderParam, callbackNm,callbackParam) {
|
||||
|
||||
$.ajax({
|
||||
//url: '/file/deleteUploadedFile/'+shopCd+'/'+menuGb+'/'+fileId+'/ajax',
|
||||
url: '/mngr/file/deleteUploadedFile?sopCd=' + shopCd + '&menuGb=' + menuGb + '&fileKey=' + fileId,
|
||||
data: fileId,
|
||||
type: 'get',
|
||||
success: function (data) {
|
||||
if (obj !== '') {
|
||||
obj.remove();
|
||||
}
|
||||
if (callbackNm != null) {
|
||||
callbackNm(callbackParam);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
alert("삭제에 실패하였습니다.");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//다운로드
|
||||
var downloadFile = function(obj,shopCd, menuGb,orderParam){
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('li');
|
||||
var fileId = $div.attr('id'); // <li>태그id - 파일글번호
|
||||
var orgFileId = obj.id; //선택된 파일명. 즉 <a>태그id - 원본파일명
|
||||
|
||||
if(fileId.indexOf('temp') == 0){
|
||||
alert("등록된 파일만 다운로드 가능합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//$(location).attr('href','/file/download/'+shopCd+'/'+menuGb+'/'+fileId+'/'+orgFileId+'/ajax');
|
||||
//$(location).attr('href','/file/download/'+shopCd+'/'+menuGb+'/'+fileId+'/ajax');
|
||||
$(location).attr('href','/mngr/file/fileDownload?sopCd='+shopCd+'&menuGb='+menuGb+'&fileKey='+fileId);
|
||||
}
|
||||
|
||||
|
||||
//다운로드
|
||||
var linkDownloadFile = function(key,shopCd, menuGb,orderParam){ //파일글번호, 원본파일명
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
|
||||
if(key.indexOf('temp') == 0){
|
||||
alert("등록된 파일만 다운로드 가능합니다.");
|
||||
return false;
|
||||
}
|
||||
$(location).attr('href','/mngr/file/fileDownload?sopCd='+shopCd+'&menuGb='+menuGb+'&fileKey='+key);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// 이미지 업로드 시 이미지 미리보기 , 삭제버튼(배열에서 제거함) 기능
|
||||
//-----------------------------------------------------------
|
||||
|
||||
// let selectedFiles = []; // 선택된 파일을 저장하는 배열
|
||||
function addImgFilesView(event,objId){
|
||||
const previewContainer = document.getElementById(objId);
|
||||
const files = event.target.files; // 선택된 파일들 가져오기
|
||||
// previewContainer.innerHTML = ''; // 기존 미리보기 초기화
|
||||
// filesTempArr = []; // 기존 배열 초기화
|
||||
|
||||
// 파일 개수 제한 확인
|
||||
// const maxFiles = 3; // 최대 파일 개수 제한
|
||||
/*if (filesTempArr.length + files.length > maxFiles) {
|
||||
alert(`최대 ${maxFiles}개의 파일만 업로드할 수 있습니다.`);
|
||||
return;
|
||||
}
|
||||
Array.from(files).forEach((file) => {
|
||||
if (filesTempArr.length < maxFiles) {
|
||||
filesTempArr.push(file); // 파일 추가
|
||||
displayPreview(file, previewContainer);
|
||||
}
|
||||
});*/
|
||||
Array.from(files).forEach((file) => {
|
||||
filesTempArr.push(file); // 파일 추가
|
||||
displayPreview(file, previewContainer);
|
||||
});
|
||||
|
||||
// input 초기화 (같은 파일 재선택 가능)
|
||||
event.target.value = '';
|
||||
}
|
||||
|
||||
function displayPreview(file,obj) {
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
// 미리보기 항목 생성
|
||||
const previewItem = document.createElement('div');
|
||||
previewItem.classList.add('preview-item');
|
||||
|
||||
// 이미지 태그 생성
|
||||
const img = document.createElement('img');
|
||||
img.src = e.target.result;
|
||||
|
||||
// 삭제 버튼 생성
|
||||
const deleteBtn = document.createElement('button');
|
||||
deleteBtn.classList.add('delete-btn');
|
||||
deleteBtn.textContent = '×';
|
||||
deleteBtn.onclick = function () {
|
||||
removeImgFile(file, previewItem);
|
||||
};
|
||||
|
||||
// 미리보기 항목에 이미지와 버튼 추가
|
||||
previewItem.appendChild(img);
|
||||
previewItem.appendChild(deleteBtn);
|
||||
obj.appendChild(previewItem);
|
||||
};
|
||||
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
|
||||
function removeImgFile(file, previewItem) {
|
||||
// 선택된 파일 배열에서 제거
|
||||
filesTempArr = filesTempArr.filter((f) => f !== file);
|
||||
|
||||
// 미리보기 항목 제거
|
||||
previewItem.remove();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------
|
||||
var initFileList = function($files){
|
||||
if(Array.isArray($files)){
|
||||
$.each($files, function(index, item){
|
||||
filesTempArr.push(item);
|
||||
filesTempArr[index].upload = 'disable';
|
||||
});
|
||||
}else{
|
||||
filesTempArr.push(new File([$files], $files+".txt", {
|
||||
type: "text/plain",
|
||||
}));
|
||||
filesTempArr[0].upload = 'disable';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//파일삭제(단건)
|
||||
function deleteSingleFile (obj, eventParam, orderParam){
|
||||
if(confirm('삭제하시겠습니까?')){
|
||||
filesTempArr.splice(orderParam, 1);
|
||||
var $div = $(obj).closest('div')
|
||||
var $id = $div.attr('id');
|
||||
if($id.indexOf('temp') == 0) {
|
||||
$div.remove();
|
||||
}else{
|
||||
$div.remove();
|
||||
|
||||
$('#updateFileDiv').show();
|
||||
filesTempArr = [];
|
||||
$('#imgSavedYn').val("N");
|
||||
//ajaxSingleFileDelete($id);
|
||||
}
|
||||
}
|
||||
}
|
||||
//파일삭제(단건) 후처리
|
||||
var ajaxSingleFileDelete = function(fileId){
|
||||
$.ajax({
|
||||
url: '/mngr/file/deleteUploadedFile/'+fileId+"/ajax",
|
||||
data: fileId,
|
||||
type: 'post',
|
||||
success : function(data){
|
||||
//찾아보기 div구역 id = updateFileDiv
|
||||
$('#updateFileDiv').show();
|
||||
filesTempArr = [];
|
||||
},
|
||||
error: function(xhr, status, error){
|
||||
alert("삭제에 실패하였습니다.");
|
||||
}
|
||||
});
|
||||
}
|
||||
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Black.otf
Normal file
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Bold.otf
Normal file
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Light.otf
Normal file
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Medium.otf
Normal file
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Regular.otf
Normal file
BIN
src/main/resources/static/js/mngr/fonts/NotoSansKR-Thin.otf
Normal file
1916
src/main/resources/static/js/mngr/gcone.js
Normal file
BIN
src/main/resources/static/js/mngr/images/icon_calendar.png
Normal file
|
After Width: | Height: | Size: 656 B |
BIN
src/main/resources/static/js/mngr/images/icon_check-white.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_chevron.png
Normal file
|
After Width: | Height: | Size: 182 B |
BIN
src/main/resources/static/js/mngr/images/icon_chevron2.png
Normal file
|
After Width: | Height: | Size: 733 B |
BIN
src/main/resources/static/js/mngr/images/icon_clock.png
Normal file
|
After Width: | Height: | Size: 1019 B |
BIN
src/main/resources/static/js/mngr/images/icon_comment-user.png
Normal file
|
After Width: | Height: | Size: 601 B |
BIN
src/main/resources/static/js/mngr/images/icon_draggable.png
Normal file
|
After Width: | Height: | Size: 319 B |
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_emoji.png
Normal file
|
After Width: | Height: | Size: 711 B |
BIN
src/main/resources/static/js/mngr/images/icon_excel.png
Normal file
|
After Width: | Height: | Size: 934 B |
BIN
src/main/resources/static/js/mngr/images/icon_file-delete.png
Normal file
|
After Width: | Height: | Size: 706 B |
BIN
src/main/resources/static/js/mngr/images/icon_file-list.png
Normal file
|
After Width: | Height: | Size: 832 B |
BIN
src/main/resources/static/js/mngr/images/icon_gift-badge.png
Normal file
|
After Width: | Height: | Size: 572 B |
BIN
src/main/resources/static/js/mngr/images/icon_headerCart.png
Normal file
|
After Width: | Height: | Size: 756 B |
BIN
src/main/resources/static/js/mngr/images/icon_headerLaptop.png
Normal file
|
After Width: | Height: | Size: 410 B |
BIN
src/main/resources/static/js/mngr/images/icon_headerSetting.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_hot-badge.png
Normal file
|
After Width: | Height: | Size: 369 B |
BIN
src/main/resources/static/js/mngr/images/icon_image-badge.png
Normal file
|
After Width: | Height: | Size: 481 B |
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_info.png
Normal file
|
After Width: | Height: | Size: 903 B |
BIN
src/main/resources/static/js/mngr/images/icon_kakao-id.png
Normal file
|
After Width: | Height: | Size: 699 B |
BIN
src/main/resources/static/js/mngr/images/icon_link.png
Normal file
|
After Width: | Height: | Size: 521 B |
BIN
src/main/resources/static/js/mngr/images/icon_lock.png
Normal file
|
After Width: | Height: | Size: 680 B |
BIN
src/main/resources/static/js/mngr/images/icon_logout.png
Normal file
|
After Width: | Height: | Size: 504 B |
|
After Width: | Height: | Size: 1004 B |
BIN
src/main/resources/static/js/mngr/images/icon_modal-close.png
Normal file
|
After Width: | Height: | Size: 377 B |
BIN
src/main/resources/static/js/mngr/images/icon_new-badge.png
Normal file
|
After Width: | Height: | Size: 531 B |
BIN
src/main/resources/static/js/mngr/images/icon_notification.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 401 B |
|
After Width: | Height: | Size: 364 B |
BIN
src/main/resources/static/js/mngr/images/icon_pencil.png
Normal file
|
After Width: | Height: | Size: 244 B |
BIN
src/main/resources/static/js/mngr/images/icon_print.png
Normal file
|
After Width: | Height: | Size: 579 B |
BIN
src/main/resources/static/js/mngr/images/icon_question.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_rating-star.png
Normal file
|
After Width: | Height: | Size: 614 B |
BIN
src/main/resources/static/js/mngr/images/icon_reset.png
Normal file
|
After Width: | Height: | Size: 846 B |
BIN
src/main/resources/static/js/mngr/images/icon_search-blue.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_search.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_setting.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_stats.png
Normal file
|
After Width: | Height: | Size: 234 B |
BIN
src/main/resources/static/js/mngr/images/icon_unfold.png
Normal file
|
After Width: | Height: | Size: 827 B |
BIN
src/main/resources/static/js/mngr/images/icon_user-info-big.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_user-info.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
src/main/resources/static/js/mngr/images/icon_window.png
Normal file
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 648 B |
|
After Width: | Height: | Size: 518 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge01.png
Normal file
|
After Width: | Height: | Size: 672 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge02.png
Normal file
|
After Width: | Height: | Size: 642 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge03.png
Normal file
|
After Width: | Height: | Size: 437 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge04.png
Normal file
|
After Width: | Height: | Size: 599 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge05.png
Normal file
|
After Width: | Height: | Size: 634 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge06.png
Normal file
|
After Width: | Height: | Size: 558 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge07.png
Normal file
|
After Width: | Height: | Size: 640 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge08.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge09.png
Normal file
|
After Width: | Height: | Size: 586 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge10.png
Normal file
|
After Width: | Height: | Size: 826 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge11.png
Normal file
|
After Width: | Height: | Size: 568 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge12.png
Normal file
|
After Width: | Height: | Size: 441 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge13.png
Normal file
|
After Width: | Height: | Size: 605 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge14.png
Normal file
|
After Width: | Height: | Size: 507 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge15.png
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge16.png
Normal file
|
After Width: | Height: | Size: 771 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 772 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge_kcp.png
Normal file
|
After Width: | Height: | Size: 483 B |
|
After Width: | Height: | Size: 479 B |
BIN
src/main/resources/static/js/mngr/images/icon_word-badge_pos.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 450 B |
BIN
src/main/resources/static/js/mngr/images/image_placeholder.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |