zhangwei 3 лет назад
Родитель
Сommit
5ee0b536fb
3 измененных файлов с 189 добавлено и 20 удалено
  1. 44 0
      src/http/redPacket.js
  2. 4 3
      src/logic/twitter.js
  3. 141 17
      src/view/red-packet.vue

+ 44 - 0
src/http/redPacket.js

@@ -29,4 +29,48 @@ export function finishRedPacket(params) {
     method: 'post',
     data: params
   })
+}
+
+// 一键点赞
+export function oneKeyLike(params) {
+  return service({
+    url: `/openapi/favoriteTweet`,
+    method: 'post',
+    data: params
+  })
+}
+
+// 一键转推
+export function oneKeyReTweet(params) {
+  return service({
+    url: `/openapi/retweet`,
+    method: 'post',
+    data: params
+  })
+}
+
+// 一键关注
+export function oneKeyFollow(params) {
+  return service({
+    url: `/openapi/followTwitterUser`,
+    method: 'post',
+    data: params
+  })
+}
+
+export function getTaskDetail(params){
+  return service({
+    url: `/post/luckdrop/getFinishConditionsDetail`,
+    method: 'post',
+    data: params
+  }) 
+}
+
+
+export function getReceivedList(params){
+  return service({
+    url: `/post/luckdrop/getReceivedList`,
+    method: 'post',
+    data: params
+  }) 
 }

+ 4 - 3
src/logic/twitter.js

@@ -389,14 +389,15 @@ function parseDOMRedPacket() {
                 let _postId = item.parentNode.parentNode.innerText || ''
                 _postId = _postId.match(/###([\s\S]*?)###/)[1];
                 let _dom = item.parentNode.parentNode.parentNode.parentNode.parentNode
-                replaceDOMRedPacket(_dom.children[1], _postId)
+                let _tweetId = _dom.children[0].querySelector('a[dir="auto"]').getAttribute('href').split('/status/')[1];
+                replaceDOMRedPacket(_dom.children[1], _postId,_tweetId)
             }
 
         }
     })
 }
 
-function replaceDOMRedPacket(_dom, postId) {
+function replaceDOMRedPacket(_dom, postId,tweetId) {
     if (!_dom || _dom.querySelector('iframe')) {
         return
     }
@@ -407,7 +408,7 @@ function replaceDOMRedPacket(_dom, postId) {
 
     let _iframe = document.createElement('iframe')
     _iframe.id = postId
-    _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + '?postId=' + postId;
+    _iframe.src = chrome.runtime.getURL('/iframe/red-packet.html') + `?postId=${postId}&tweetId=${tweetId}`;
     _iframe.style.cssText = 'border: medium none; width:375px;height:500px;'
     _dom.style = 'height:500px'
     _dom.appendChild(_iframe)

+ 141 - 17
src/view/red-packet.vue

@@ -22,8 +22,7 @@
                 <div v-else class="btn" @click="clickFollowAll(item.relatedUsers)">Follow All</div>
               </div>
               <div class="item-follow-area">
-                <div class="item-follow" v-for="item2, i in item.relatedUsers" v-bind:key="i"
-                  @click="clickFollow(item2)">
+                <div class="item-follow" v-for="item2, i in item.relatedUsers" v-bind:key="i">
                   <span :class="{ finished: item2.finished }">@{{ item2.name }}</span>
                   <img v-if="item2.finished" :src="require('../assets/svg/icon-true-ed.svg')" alt />
                   <img v-else :src="require('../assets/svg/icon-add.svg')" alt />
@@ -38,7 +37,7 @@
             </div>
             <img v-if="data.done.like" :src="require('../assets/svg/icon-true.svg')" alt />
 
-            <div v-else class="btn" @click="clickBtn">Like</div>
+            <div v-else class="btn" @click="clickLickBtn">Like</div>
           </template>
           <template v-if="item.type == 3">
             <img :src="require('../assets/svg/icon-retweet.svg')" alt />
@@ -46,7 +45,7 @@
               <div class="item-title">Retweet</div>
             </div>
             <img v-if="data.done.retweet" :src="require('../assets/svg/icon-true.svg')" alt />
-            <div v-else class="btn" @click="clickBtn">Retweet</div>
+            <div v-else class="btn" @click="clickRetweetBtn">Retweet</div>
           </template>
         </div>
       </div>
@@ -89,7 +88,7 @@
         <div>{{ data.detail.finishCount || 0 }}/{{ data.detail.totalCount || 0 }} People Got</div>
         <div>Total ${{ data.detail.amountValue || '' }} {{ data.detail.amountCurrencyCode || '' }}</div>
       </div>
-      <div class="luck-list">
+      <div class="luck-list" @scroll="handleScroll($event)">
         <div class="luck-item" v-for="item, i in data.detail.allReceived" v-bind:key="i">
           <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
           <img v-else :src="require('../assets/svg/icon-twitter.svg')" alt />
@@ -125,7 +124,7 @@
         <div>{{ data.detail.finishCount || 0 }}/{{ data.detail.totalCount || 0 }} People Got</div>
         <div>Total ${{ data.detail.amountValue || 0 }} {{ data.detail.amountCurrencyCode || '' }}</div>
       </div>
-      <div class="luck-list">
+      <div class="luck-list" @scroll="handleScroll">
         <div class="luck-item" v-for="item, i in data.detail.allReceived" v-bind:key="i">
           <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
           <img v-else :src="require('../assets/svg/icon-twitter.svg')" alt />
@@ -156,7 +155,7 @@
         <div>{{ data.detail.finishCount || 0 }}/{{ data.detail.totalCount || 0 }} People Got</div>
         <div>Total ${{ data.detail.amountValue || 0 }} {{ data.detail.amountCurrencyCode || '' }}</div>
       </div>
-      <div class="luck-list">
+      <div class="luck-list" @scroll="handleScroll">
         <div class="luck-item" v-for="item, i in data.detail.allReceived" v-bind:key="i">
           <img v-if="item.simpleUserInfoVO.avatarUrl" :src="item.simpleUserInfoVO.avatarUrl" alt />
           <img v-else :src="require('../assets/svg/icon-twitter.svg')" alt />
@@ -188,7 +187,6 @@
 </template>
 
 <script>
-
 export default {
   name: 'redPacket',
 }
@@ -196,7 +194,7 @@ export default {
 <script setup>
 /* eslint-disable */
 import { onMounted, reactive } from "vue";
-import { getPostDetail, getRedPacket, finishRedPacket } from '../http/redPacket.js'
+import { getPostDetail, getRedPacket, finishRedPacket, oneKeyLike, oneKeyReTweet, oneKeyFollow, getTaskDetail, getReceivedList } from '../http/redPacket.js'
 import { getQueryString } from '../uilts/help.js'
 import { getChromeCookie, concatChromeCookie, getChromeStorage, LANDING_PAGE } from '../uilts/chromeExtension.js'
 var moment = require('moment');
@@ -204,10 +202,12 @@ var moment = require('moment');
 let data = reactive({
   status: '',
   detail: {},
+  luck_list_end: false,
+  page_index: 1,
+  page_size: 20,
   srcContentId: '',
   close_title: 'Better luck next time!',
-  error_txt: `oops, new accounts cannot participate in this event,
-        better luck next time!`,
+  error_txt: `oops, new accounts cannot participate in this event,`,
   receiveAmount: 0,
   money: 0,
   // 状态
@@ -217,9 +217,75 @@ let data = reactive({
     retweet: false
   }
 })
-function clickBtn() {
+function clickLickBtn() {
+  data.done.like = true
   // 跳转到推文详情
-  window.open(`https://twitter.com/${data.detail.postUserInfo.nickName}/status/${data.srcContentId}`)
+  oneKeyLike({
+    params: {
+      tweetId: data.srcContentId
+    }
+  }).then((res) => {
+    if (res.code == 0) {
+      if (res.data.result) {
+        data.done.like = true
+      } else {
+        data.done.like = false
+      }
+    } else {
+      data.done.like = false
+      console.log(res)
+    }
+  })
+}
+
+function handleScroll(e) {
+  if (data.luck_list_end) {
+    return
+  }
+  e = e.target
+  if ((e.clientHeight + e.scrollTop) / e.scrollHeight > .8) {
+    data.luck_list_end = true
+    data.page_index++
+    getReceivedList({
+      params: {
+        pageNum: data.page_index,
+        pageSize: data.page_size,
+        postId: data.postId
+      }
+    }).then((res) => {
+      if (res.code == 0) {
+        if (res.data.length > 0) {
+          data.detail.allReceived = data.detail.allReceived.concat(res.data)
+          data.luck_list_end = false
+        } else {
+          data.luck_list_end = true
+        }
+      } else {
+        console.log('getReceivedList', res)
+      }
+    })
+  }
+}
+
+
+function clickRetweetBtn() {
+  data.done.retweet = true
+  oneKeyReTweet({
+    params: {
+      tweetId: data.srcContentId
+    }
+  }).then((res) => {
+    if (res.code == 0) {
+      if (res.data.result) {
+        data.done.retweet = true
+      } else {
+        data.done.retweet = false
+      }
+    } else {
+      data.done.retweet = false
+      console.log(res)
+    }
+  })
 }
 
 
@@ -235,13 +301,37 @@ function getValidity() {
 }
 
 function clickFollowAll(item) {
+  let arr_name = []
   for (let i in item) {
-    clickFollow(item[i])
+    arr_name.push(item[i].name)
   }
+  oneKeyFollow({
+    params: {
+      names: arr_name
+    }
+  }).then((res) => {
+    if (res.code == 0) {
+      res.data.forEach((item1) => {
+        data.detail.taskCondition[0].relatedUsers.forEach(item2 => {
+          if (item1.name == item2.name) {
+            item2.finished = true
+          }
+        });
+      })
+      let _len = data.detail.taskCondition[0].relatedUsers.filter((item) => { return item.finished == false }).length
+      if (_len > 0) {
+        data.done.follow = false
+      } else {
+        data.done.follow = true
+      }
+    } else {
+      data.detail.taskCondition[0].relatedUsers.forEach(item => {
+        item.finished = false
+      });
+    }
+  })
 }
-function clickFollow(item) {
-  window.open(`https://twitter.com/${item.name}`)
-}
+
 
 function showLastTwoPlace(n) {
   return n / 100
@@ -269,6 +359,12 @@ function init() {
     switch (res.code.toString()) {
       case "0":
         data.srcContentId = res.data.srcContentId
+        if(data.tweetId != data.srcContentId){
+          data.error_txt = 'Giveways link Error'
+          data.status = 'error'
+          return
+        }
+
         // 未开始
         if (res.data.postType == 0) {
           data.status = 'not-open'
@@ -321,9 +417,36 @@ function init() {
 
     }
   })
+
+  // 任务详情
+  getTaskDetail({
+    params: {
+      postId: data.postId
+    }
+  }).then((res) => {
+    if (res.code == 0) {
+      for (let i in res.data) {
+        switch (res.data[i].type) {
+          case 1:
+            data.done.follow = res.data[i].finished
+            data.detail.taskCondition[0].relatedUsers = res.data[i].detail
+            break
+          case 2:
+            data.done.like = res.data[i].finished
+            break
+          case 3:
+            data.done.retweet = res.data[i].finished
+            break
+        }
+      }
+    } else {
+      console.log(res.msg)
+    }
+  })
 }
 onMounted(() => {
   data.postId = getQueryString('postId')
+  data.tweetId = getQueryString('tweetId')
   init()
 })
 
@@ -434,6 +557,7 @@ function handleFinishRedPacket() {
         }
         break
       case "2009":
+        data.error_txt = `oops, new accounts cannot participate in this event,`
         data.status = 'error'
         break
       default: