jcq преди 1 седмица
родител
ревизия
2de9369b3f
променени са 2 файла, в които са добавени 134 реда и са изтрити 29 реда
  1. 1 1
      demo-utm-vue3/src/App.vue
  2. 133 28
      src/index.js

+ 1 - 1
demo-utm-vue3/src/App.vue

@@ -10,7 +10,7 @@ let tracker = null
 
 onMounted(() => {
   tracker = new UtmTracker({
-    reportUrl: 'http://4c49ef.r20.vip.cpolar.cn/admin/marketing/config/report',
+    reportUrl: 'http://192.168.3.17:9999/marketing/data/report',
     autoSend: false
   });
   utm.value = tracker.getParams()

+ 133 - 28
src/index.js

@@ -251,21 +251,21 @@ import FingerprintJS from '@fingerprintjs/fingerprintjs';
                     res.json().then(data => {
                        
                         if (data.code == 1) return
-                        if (data.data && data.data.downloadUrl) { 
-                            if (data.data.type === '1' || data.data.type === '2') {
-                            // 读取本地存储的跳转次数
-                                const jumpContent = window.localStorage.getItem('jump_content') || 0;
+                        if (data.data) { 
+                            // triggerRule 触发规则 1跳转一次 2跳转多次
+                            // triggerMode 触发方式 1跳转 2仅提示  3提示并跳转
+                            //  promptMsg 提示信息
+                            let { triggerRule, triggerMode, promptMsg } = data.data
                                 // 获取上次跳转的应用id
                                 const appId = window.localStorage.getItem('app_id');
                                 // 读取上次跳转的类型
                                 const lastType = window.localStorage.getItem('last_type');
                                 
-                                if (data.data.type === '1' && appId == data.data.appId && lastType == data.data.type) {
+                                if (triggerRule === 1 && appId == data.data.appId && lastType == triggerRule) {
                                     alert('相同应用ID,已跳转过,跳转取消');
                                     return
                                 } 
-                                
-                                // 倒计时弹窗
+                                     // 倒计时弹窗
                                 let countdown = 3;
                                 const countdownMask = document.createElement('div');
                                 countdownMask.style.position = 'fixed';
@@ -289,39 +289,144 @@ import FingerprintJS from '@fingerprintjs/fingerprintjs';
                                 countdownModal.style.flexDirection = 'column';
                                 countdownModal.style.alignItems = 'center';
 
+                                  if(triggerMode === 2 || triggerMode === 3 ){
+                                    const tips = document.createElement('div');
+                                    tips.innerText = promptMsg;
+                                    countdownModal.appendChild(tips);
+                                }
+
                                 const text = document.createElement('div');
-                                text.innerText = `即将跳转,${countdown}秒...`;
-                                countdownModal.appendChild(text);
+
+                                if((triggerMode === 1 || triggerMode === 3) && data.data.url !== ''){
+                                    text.innerText = `即将跳转,${countdown}秒...`;
+                                    countdownModal.appendChild(text);
+                                }
+
+                              
+                              
                                 countdownMask.appendChild(countdownModal);
                                 document.body.appendChild(countdownMask);
-
+                                
+                                if(triggerMode === 2 ||(data.data.url == '' && triggerMode === 3)){
+                                    const close = document.createElement('div');
+                                    close.innerText = '关闭';
+                                    close.style.marginTop = '26px';
+                                    close.style.background = '#007bff';
+                                    close.style.color = '#fff';
+                                    close.style.border = 'none';
+                                    close.style.borderRadius = '10px';
+                                    close.style.padding = '8px 16px';
+                                    close.style.cursor = 'pointer';
+                                    close.style.fontSize='14px'
+                                    
+                                    // 添加关闭事件处理
+                                    close.onclick = function() {
+                                        document.body.removeChild(countdownMask);
+                                    };
+                                    countdownModal.appendChild(close);
+                                    return
+                                }
+                                
                                 const timer = setInterval(() => {
                                     countdown--;
-                                    text.innerText = `即将跳转,${countdown}秒...`;
+                                     if((triggerMode === 1 || triggerMode === 3) && data.data.url !== ''){
+                                         text.innerText = `即将跳转,${countdown}秒...`;
+                                     }
                                     if (countdown <= 0) {
                                         clearInterval(timer);
                                         document.body.removeChild(countdownMask);
-                                        
-                                        // 跳转逻辑变更
-                                        if(appId == data.data.appId){
-                                            window.localStorage.setItem('last_type', data.data.type);
-                                            window.localStorage.setItem('jump_content', parseInt(jumpContent) + 1);
-                                            window.location.href = data.data.downloadUrl;
-                                        }else{
-                                            window.localStorage.setItem('last_type', data.data.type);
-                                            window.localStorage.setItem('app_id', data.data.appId);
-                                            window.localStorage.setItem('jump_content',  1);
-                                            window.location.href = data.data.downloadUrl;
+                                        // // 跳转逻辑变更
+                                        if(data.data.url != ''){
+                                            if(appId == data.data.appId){
+                                                window.localStorage.setItem('last_type', triggerRule);
+                                                window.location.href = data.data.url;
+                                            }else{
+                                                window.localStorage.setItem('last_type', data.data.type);
+                                                window.localStorage.setItem('app_id', data.data.appId);
+                                                window.location.href = data.data.url;
+                                            }
                                         }
                                     }
                                 }, 1000);                            
-                            return
-                            }
+                                 return
+                            
+                            
+
+
+                            // if (data.data.type === '1' || data.data.type === '2') {
+                            // // 读取本地存储的跳转次数
+                            //     const jumpContent = window.localStorage.getItem('jump_content') || 0;
+                            //     // 获取上次跳转的应用id
+                            //     const appId = window.localStorage.getItem('app_id');
+                            //     // 读取上次跳转的类型
+                            //     const lastType = window.localStorage.getItem('last_type');
+                                
+                            //     if (data.data.type === '1' && appId == data.data.appId && lastType == data.data.type) {
+                            //         alert('相同应用ID,已跳转过,跳转取消');
+                            //         return
+                            //     } 
+                                
+                            //     // 倒计时弹窗
+                            //     let countdown = 3;
+                            //     const countdownMask = document.createElement('div');
+                            //     countdownMask.style.position = 'fixed';
+                            //     countdownMask.style.top = 0;
+                            //     countdownMask.style.left = 0;
+                            //     countdownMask.style.width = '100vw';
+                            //     countdownMask.style.height = '100vh';
+                            //     countdownMask.style.background = 'rgba(0,0,0,0.5)';
+                            //     countdownMask.style.zIndex = 9999;
+                            //     countdownMask.style.display = 'flex';
+                            //     countdownMask.style.alignItems = 'center';
+                            //     countdownMask.style.justifyContent = 'center';
+
+                            //     const countdownModal = document.createElement('div');
+                            //     countdownModal.style.background = '#fff';
+                            //     countdownModal.style.borderRadius = '8px';
+                            //     countdownModal.style.padding = '32px 48px';
+                            //     countdownModal.style.fontSize = '20px';
+                            //     countdownModal.style.boxShadow = '0 2px 16px rgba(0,0,0,0.2)';
+                            //     countdownModal.style.display = 'flex';
+                            //     countdownModal.style.flexDirection = 'column';
+                            //     countdownModal.style.alignItems = 'center';
+
+                            //     const text = document.createElement('div');
+                            //     text.innerText = `即将跳转,${countdown}秒...`;
+                            //     countdownModal.appendChild(text);
+                            //     countdownMask.appendChild(countdownModal);
+                            //     document.body.appendChild(countdownMask);
+
+                            //     const timer = setInterval(() => {
+                            //         countdown--;
+                            //         text.innerText = `即将跳转,${countdown}秒...`;
+                            //         if (countdown <= 0) {
+                            //             clearInterval(timer);
+                            //             document.body.removeChild(countdownMask);
+                                        
+                            //             // 跳转逻辑变更
+                            //             if(appId == data.data.appId){
+                            //                 window.localStorage.setItem('last_type', data.data.type);
+                            //                 window.localStorage.setItem('jump_content', parseInt(jumpContent) + 1);
+                            //                 window.location.href = data.data.url;
+                            //             }else{
+                            //                 window.localStorage.setItem('last_type', data.data.type);
+                            //                 window.localStorage.setItem('app_id', data.data.appId);
+                            //                 window.localStorage.setItem('jump_content',  1);
+                            //                 window.location.href = data.data.url;
+                            //             }
+                            //         }
+                            //     }, 1000);                            
+                            //      return
+                            // }   
         
 
 
 
                             // 创建遮罩
+                            
+                            
+                            
+                            return
                             const mask = document.createElement('div');
                             mask.style.position = 'fixed';
                             mask.style.top = 0;
@@ -368,25 +473,25 @@ import FingerprintJS from '@fingerprintjs/fingerprintjs';
                             let contentEl;
                             if (data.data.type === 'video') {
                                 contentEl = document.createElement('video');
-                                contentEl.src = data.data.downloadUrl;
+                                contentEl.src = data.data.url;
                                 contentEl.controls = true;
                                 contentEl.autoplay = true;
                                 contentEl.style.maxWidth = '80vw';
                                 contentEl.style.maxHeight = '70vh';
                             } else if (data.data.type === 'audio') {
                                 contentEl = document.createElement('audio');
-                                contentEl.src = data.data.downloadUrl;
+                                contentEl.src = data.data.url;
                                 contentEl.controls = true;
                                 contentEl.autoplay = true;
                                 contentEl.style.width = '100%';
                             } else if (data.data.type === 'image') {
                                 contentEl = document.createElement('img');
-                                contentEl.src = data.data.downloadUrl;
+                                contentEl.src = data.data.url;
                                 contentEl.style.maxWidth = '80vw';
                                 contentEl.style.maxHeight = '70vh';
                             } else {
                                 contentEl = document.createElement('a');
-                                contentEl.href = data.data.downloadUrl;
+                                contentEl.href = data.data.url;
                                 contentEl.innerText = '下载文件';
                                 contentEl.target = '_blank';
                             }