소스 검색

[edit] at

A\An 2 년 전
부모
커밋
38c429b76f
4개의 변경된 파일115개의 추가작업 그리고 10개의 파일을 삭제
  1. 5 1
      src/entry/content.js
  2. 46 1
      src/logic/content/twitter.js
  3. 8 1
      src/view/iframe/publish/give-dialog.vue
  4. 56 7
      src/view/iframe/red-packet/red-packet.vue

+ 5 - 1
src/entry/content.js

@@ -11,7 +11,8 @@ import {
     showPinTips,
     init,
     initExecuteScript,
-    changeQueueNum
+    changeQueueNum,
+    replyHandle
 } from "@/logic/content/twitter.js";
 
 import {
@@ -40,6 +41,9 @@ window.onmessage = (res) => {
             case "IFRAME_SHOW_TWITTER_PUBLISH_DIALOG":
                 showTwitterPublishDialogHandler(res.data.publishRes);
                 break;
+            case "IFRAME_RED_PACKET_REPLY_CLICK":
+                replyHandle(res.data.data || {});
+                break;
         }
     }
 };

+ 46 - 1
src/logic/content/twitter.js

@@ -3,7 +3,7 @@ import { throttle } from '@/uilts/help'
 import { discordAuthRedirectUri } from '@/http/configAPI'
 import { reportSrcPublishEvent } from '@/http/publishApi'
 import Report from "@/log-center/log"
-
+import { fetchAddFinishEvent } from '@/logic/background/fetch/facebook';
 
 let dom = {};
 
@@ -636,4 +636,49 @@ export function init() {
             }, 800);
         }
     });
+}
+
+export function replyHandle(params) {
+    let iframe = window.parent.document.getElementById(params.postId);
+    let replyBtn = iframe.parentNode.parentNode.querySelector('div[data-testid="reply"]') || 
+                    iframe.parentNode.parentNode.parentNode.querySelector('div[data-testid="reply"]');
+    if(replyBtn) {
+        replyBtn.click();
+    }
+
+    setTimeout(() => {
+        let dialog = document.querySelector('div[role="dialog"]');
+        if(dialog) {
+            let replyBtn = dialog.querySelector('div[data-testid="toolBar"]').querySelector('div[data-testid="tweetButton"]');
+            replyBtn.addEventListener('click', function() {
+                let eleList = dialog.querySelector('div[contenteditable="true"]').querySelectorAll('span[data-text="true"]');
+                if(eleList && eleList.length) {
+                    let atList = [];
+                    for(let i = 0; i < eleList.length; i++) {
+                        let item = eleList[i];
+                        // 是否有中文
+                        let reg = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/g;  
+
+                        if(item && item.innerText.startsWith('@') && !reg.test(item.innerText)) {
+                            atList.push({
+                                text: item.innerText
+                            })
+                        }
+                    }
+
+                    if(atList.length >= 3) {
+                        fetchAddFinishEvent({
+                            eventType: params.type,
+                            luckdropId: params.taskLuckdropId
+                        }).then(res => {
+                            if (res.code == 0) {
+                                // 上報完成
+                                iframe.contentWindow.postMessage({ actionType: 'CONTENT_RED_PACKET_REPLY_RASK_FINSH', data: {} }, '*');
+                            }
+                        })
+                    }
+                }
+            });
+        }
+    }, 1000)
 }

+ 8 - 1
src/view/iframe/publish/give-dialog.vue

@@ -207,7 +207,7 @@
                                         </div>
                                     </div>
                                     <el-switch
-                                        v-if="item.type == 2 || item.type == 7 || item.type == 8"
+                                        v-if="item.type == 2 || item.type == 7 || item.type == 8 || item.type == 9"
                                         v-model="item.checked"
                                         @change="formSwitchChange($event, item, index)"
                                     />
@@ -471,6 +471,13 @@ let formList = reactive([
         type: 2,
         checked: true,
     },
+    {
+        label: "Comment and tag 3 friends",
+        icon: require("@/assets/svg/icon-task-twitter.svg"),
+        nodeType: "div",
+        type: 9,
+        checked: true,
+    },
     {
         label: "Repost to Facebook",
         icon: require("@/assets/svg/icon-task-facebook.svg"),

+ 56 - 7
src/view/iframe/red-packet/red-packet.vue

@@ -66,6 +66,17 @@
             <img v-if="state.done.retweet" :src="require('@/assets/svg/icon-true.svg')" alt />
             <div v-else class="btn" @click="clickRetweetBtn">Retweet</div>
           </template>
+          <!-- Comment、艾特 friends -->
+          <template v-if="item.type == 9">
+            <img :src="require('@/assets/svg/icon-task-twitter.svg')" alt />
+            <div class="item-content">
+              <div class="item-title">Comment and tag 3 friends</div>
+            </div>
+            <img :src="require('@/assets/gif/red-right.gif')" alt class="red-right"
+              v-show="!state.done.reply && state.done.reply_red" />
+            <img v-if="state.done.reply" :src="require('@/assets/svg/icon-true.svg')" alt />
+            <div v-else class="btn" @click="clickReply(item)">Comment</div>
+          </template>
           <!-- repost feacebook -->
           <template v-if="item.type == 8">
             <img :src="require('@/assets/svg/icon-task-facebook.svg')" alt />
@@ -350,6 +361,7 @@ let state = reactive({
     retweet: false,
     join_discord: false,
     repost_facebook: false,
+    reply: false
   }
 })
 function clickRetry() {
@@ -464,6 +476,19 @@ async function clickRetweetBtn() {
   });
 }
 
+async function clickReply(params) {
+    let _userInfo = await checkIsLogin()
+    if (!_userInfo) {
+      return
+    }
+
+    window.parent.postMessage({ actionType: "IFRAME_RED_PACKET_REPLY_CLICK",  data: {
+      postId: state.postId,
+      type: params.type,
+      taskLuckdropId: state.detail.taskLuckdropId
+    }}, "*");
+}
+
 /**
  * 点击repost facebook
  */
@@ -803,6 +828,7 @@ function setFrontConfig() {
 function init() {
   onRuntimeMsg();
   onPageVisbile();
+  onWindowMessage();
   setFrontConfig();
   getPostDetail({
     params: {
@@ -1002,6 +1028,17 @@ function handleFinishRedPacket() {
                 state.done.retweet = false
               }
               break
+            case '7':
+              //join discord
+              discordAuthorizeRequired = _data[i].discordAuthorizeRequired;
+              if (_data[i].finished) {
+                state.done.join_discord = true
+                state.done.join_discord_red = false
+              } else {
+                state.done.join_discord = false;
+                state.done.join_discord_red = true
+              }
+              break
             case '8':
               //repost feacebook
               if (_data[i].finished) {
@@ -1011,15 +1048,15 @@ function handleFinishRedPacket() {
                 state.done.repost_facebook = false;
                 state.done.repost_facebook_red = true
               }
-            case '7':
-              //join discord
-              discordAuthorizeRequired = _data[i].discordAuthorizeRequired;
+              break
+            case '9':
+              //reply
               if (_data[i].finished) {
-                state.done.join_discord = true
-                state.done.join_discord_red = false
+                state.done.reply = true
+                state.done.reply_red = false
               } else {
-                state.done.join_discord = false;
-                state.done.join_discord_red = true
+                state.done.reply = false;
+                state.done.reply_red = true
               }
               break
           }
@@ -1198,6 +1235,18 @@ function handleErrorCode(res) {
 //     businessType: Report.businessType.pageView
 //   });
 // }
+function onWindowMessage() {
+  window.addEventListener("message", function (event) {
+      if (event.data) {
+        switch(event.data.actionType) {
+          case 'CONTENT_RED_PACKET_REPLY_RASK_FINSH':
+            state.done.reply = true;
+            state.done.reply_red = false;
+            break;
+        }
+      }
+  });
+}
 
 function onPageVisbile() {
   document.addEventListener('visibilitychange', function () {