Browse Source

Merge branch 'test' into dev_1.0.4

nieyuge 2 years ago
parent
commit
2aedb79c03

File diff suppressed because it is too large
+ 1 - 0
src/assets/svg/icon-website.svg


+ 7 - 2
src/entry/background.js

@@ -21,11 +21,16 @@ setMessageCount();
 
 // 消息通讯
 chrome.runtime.onConnect.addListener(function (port) {
-    port.onDisconnect.addListener(function() {
+    port.onDisconnect.addListener(function () {
         onDisconnectHandler(port);
     });
 });
 
+// 当有可用更新时触发
+chrome.runtime.onUpdateAvailable.addListener(() => {
+    chrome.runtime.reload()
+})
+
 chrome.runtime.onInstalled.addListener(onInstalledMethod);
 
 chrome.runtime.onMessage.addListener(onMessageMethod);
@@ -58,7 +63,7 @@ function onMessageMethod(req, sender, sendResponse) {
             case 'CONTENT_SEND_CODE':
                 twitterPinLoginCode(sender, req.code);
             case 'CONTENT_TWITTER_LOGIN':
-                if(req.data){
+                if (req.data) {
                     twitterPinLoginToken()
                 }
                 break

+ 6 - 0
src/entry/content.js

@@ -35,6 +35,9 @@ window.onmessage = (res) => {
             case "IFRAME_SHOW_TWITTER_PUBLISH_DIALOG":
                 showTwitterPublishDialogHandler(res.data.publishRes);
                 break;
+            // case "IFRAME_DO_TASK":
+            //     findTweetByIdDoTask(res.data.task_data, res.data.task_type)
+            //     break
         }
     }
 };
@@ -53,6 +56,9 @@ chrome.runtime.onMessage.addListener((req, sender, sendResponse) => {
             console.log('BACK_TWITTER_SHORT_URL')
             changeQueueNum(1)
             break
+        case 'TIME':
+            alert('time')
+            break
     }
 })
 

+ 13 - 0
src/http/redPacket.js

@@ -82,3 +82,16 @@ export function terminatedLuckdrop(params){
     data: params
   }) 
 }
+
+
+// 上报红包任务完成事件
+// 1 Twitter follow Twitter ScreenName
+// 2 Tweet like
+// 3 Retweet
+export function addFinishEvent(params){
+  return service({
+    url: `/post/luckdrop/addFinishEvent`,
+    method: 'post',
+    data: params
+  })
+}

+ 2 - 2
src/iframe/home.js

@@ -6,14 +6,14 @@ const app = createApp(App)
 // 引入路由对象实例
 import router from '@/router/popup.js'
 import "ant-design-vue/dist/antd.css"; // or 'ant-design-vue/dist/antd.less'
-import { Button, message } from "ant-design-vue";
+import { Button, message, Tooltip } from "ant-design-vue";
 
 message.config({
     top: `10px`,
     duration: 3,
     maxCount: 1,
 });
-
+app.use(Tooltip);
 app.use(Button);
 app.use(message);
 app.use(router)

+ 3 - 3
src/iframe/publish.js

@@ -3,10 +3,9 @@ import App from '@/view/iframe/publish/publish.vue'
 import ElementPlus from 'element-plus'
 import 'element-plus/dist/index.css'
 
-// import "ant-design-vue/dist/antd.css"; // or 'ant-design-vue/dist/antd.less'
-
-import {Button,message} from "ant-design-vue";
+import "ant-design-vue/dist/antd.css"; // or 'ant-design-vue/dist/antd.less'
 
+import {Button,message,Tooltip} from "ant-design-vue";
 
 message.config({
     top: `10px`,
@@ -17,6 +16,7 @@ message.config({
 const app = createApp(App);
 
 app.use(Button);
+app.use(Tooltip);
 app.use(message);
 app.use(ElementPlus);
 app.mount('#app');

+ 2 - 1
src/iframe/red-packet.js

@@ -5,11 +5,12 @@ const app = createApp(App)
 // 引入路由对象实例
 import "ant-design-vue/dist/antd.css"; // or 'ant-design-vue/dist/antd.less'
 
-import { message } from "ant-design-vue";
+import { message, Tooltip } from "ant-design-vue";
 message.config({
     top: `10px`,
     duration: 3,
     maxCount: 1,
 });
+app.use(Tooltip);
 app.use(message)
 app.mount('#app')

+ 2 - 1
src/logic/background/fetch/twitter.js

@@ -31,7 +31,7 @@ export async function fetchTtwitterRequestToken() {
     })
 }
 
-export async function fetchTwitterLogin(oauthToken, oauthVerifier, receivedIds = []) {
+export async function fetchTwitterLogin(oauthToken,consumerKey, oauthVerifier, receivedIds = []) {
     let storage_mid = await getChromeStorage('mid') || ''
     const { mid } = storage_mid || {}
     return new Promise(function (resolve, reject) {
@@ -49,6 +49,7 @@ export async function fetchTwitterLogin(oauthToken, oauthVerifier, receivedIds =
                 "params": {
                     "oauthToken": oauthToken,
                     "oauthVerifier": oauthVerifier,
+                    "consumerKey":consumerKey,
                     "receivedIds": receivedIds
                 }
             }),

+ 31 - 29
src/logic/background/twitter.js

@@ -1,9 +1,10 @@
 import { fetchTtwitterRequestToken, fetchTwitterLogin, fetchTwitterShortUrl, fetchAllMessageInfo, fetchReadTaskAllMsg, getDiscordUserInfo } from '@/logic/background/fetch/twitter.js'
-import { LANDING_PAGE, LANDING_PAGE_MID, setChromeStorage, setChromeCookie, getChromeCookie ,getChromeStorage, removeChromeCookie} from '@/uilts/chromeExtension.js'
+import { LANDING_PAGE, LANDING_PAGE_MID, setChromeStorage, setChromeCookie, getChromeCookie, getChromeStorage, removeChromeCookie } from '@/uilts/chromeExtension.js'
 import { guid } from '@/uilts/help.js'
 import { pageUrl, discordAuthRedirectUri } from '@/http/configAPI'
 
 let authToken = ''
+let consumerKey = ''
 export function twitterPinLoginToken() {
     // 1.判断是否登陆了
     getChromeStorage('userInfo', (res) => {
@@ -11,6 +12,7 @@ export function twitterPinLoginToken() {
         if (!res) {
             fetchTtwitterRequestToken().then((res) => {
                 authToken = res.data.authToken
+                consumerKey = res.data.consumerKey
                 chrome.tabs.create({
                     url: `https://api.twitter.com/oauth/authorize?oauth_token=${res.data.authToken}`
                 })
@@ -52,7 +54,7 @@ export function twitterPinLoginCode(sender, code) {
         }
         // 发送请求
         // token,code
-        fetchTwitterLogin(authToken, code, receivedIds).then(res => {
+        fetchTwitterLogin(authToken, consumerKey, code, receivedIds).then(res => {
             if (res.code == 0) {
                 setChromeStorage({ userInfo: JSON.stringify(res.data) })
                 // 获取全局消息数据
@@ -64,14 +66,14 @@ export function twitterPinLoginCode(sender, code) {
 }
 
 let discordAuthWindowId = '';
-export function saveDiscordAuthWindowId (params) {
-    let {windowId = ''} = params.data || {};
+export function saveDiscordAuthWindowId(params) {
+    let { windowId = '' } = params.data || {};
     discordAuthWindowId = windowId;
 }
 
-export function discordLoginCode({code}, sender) {
+export function discordLoginCode({ code }, sender) {
     console.log('sender', sender)
-    let {windowId, id} = sender.tab || {};
+    let { windowId, id } = sender.tab || {};
     chrome.tabs.remove(id);
 
     // 发送请求
@@ -82,7 +84,7 @@ export function discordLoginCode({code}, sender) {
         if (res.code == 0) {
             setTimeout(() => {
                 sendActivetabMessage({
-                    actionType: 'BACK_DISCORD_LOGIN_SUCCESS'    
+                    actionType: 'BACK_DISCORD_LOGIN_SUCCESS'
                 });
             })
         }
@@ -92,7 +94,7 @@ export function discordLoginCode({code}, sender) {
     //     chrome.windows.remove(
     //         windowId,
     //         function () {
-                
+
     //         }
     //     )
     // }
@@ -245,19 +247,19 @@ export function popupRePublish(req) {
 }
 
 export function setBadgeInfo(params) {
-    let {text = '', color = '#DF3535'} = params.data || {};
-    chrome.action.setBadgeText({text: text});
-    chrome.action.setBadgeBackgroundColor({color: color });
+    let { text = '', color = '#DF3535' } = params.data || {};
+    chrome.action.setBadgeText({ text: text });
+    chrome.action.setBadgeBackgroundColor({ color: color });
 }
 
 export function hideBadge() {
-    chrome.action.setBadgeText({text: ''});
-    chrome.action.setBadgeBackgroundColor({color: [0, 0, 0, 0]});
+    chrome.action.setBadgeText({ text: '' });
+    chrome.action.setBadgeBackgroundColor({ color: [0, 0, 0, 0] });
 }
 
-export async function setMessageCount () {
+export async function setMessageCount() {
     const { accessToken: token = '', uid = '' } = await getChromeStorage('userInfo') || {}
-    if(token) {
+    if (token) {
         getMessageInfo();
         createAlarm();
     }
@@ -266,32 +268,32 @@ export async function setMessageCount () {
 function createAlarm() {
     let alarmInfo = {
         //1分鐘之後開始(該值不能小於1) 
-        delayInMinutes: 1, 
+        delayInMinutes: 1,
         //與上方等同的寫法是 
         // when : Date.now() + n,
         //開始後每一分鐘執行一次(該值不能小于1) 
-        periodInMinutes : 1 
+        periodInMinutes: 1
     };
 
     //每次加載就清空定時器
     chrome.alarms.clearAll();
-    
-    chrome.alarms.onAlarm.addListener(function(alarm) {
+
+    chrome.alarms.onAlarm.addListener(function (alarm) {
         console.log("onAlarm-", alarm);
         getMessageInfo();
     });
 
     //創造定時器
-    chrome.alarms.create('denetChromeAlarm',alarmInfo);
+    chrome.alarms.create('denetChromeAlarm', alarmInfo);
 }
 
-export  function getMessageInfo () {
+export function getMessageInfo() {
     fetchAllMessageInfo().then(res => {
-        if(res.code == 0) {
-            let {unReadCountTotal = 0 } = res.data;
-            if(unReadCountTotal > 0) {
-                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal+'';
-                setBadgeInfo({data: {text}});
+        if (res.code == 0) {
+            let { unReadCountTotal = 0 } = res.data;
+            if (unReadCountTotal > 0) {
+                let text = unReadCountTotal > 99 ? '99+' : unReadCountTotal + '';
+                setBadgeInfo({ data: { text } });
             } else {
                 hideBadge();
             }
@@ -299,11 +301,11 @@ export  function getMessageInfo () {
     })
 }
 
-export function readTaskAllMsg({msgType}, cb) {
+export function readTaskAllMsg({ msgType }, cb) {
     fetchReadTaskAllMsg({
         msgType // 1:任务红包 2:钱包明细
     }).then(res => {
-        if(res.code == 0) {
+        if (res.code == 0) {
             cb && cb();
         }
     });
@@ -312,7 +314,7 @@ export function readTaskAllMsg({msgType}, cb) {
 export const onDisconnectHandler = (port) => {
     if (port.name === "popup" || port.name === "popup_transactions") {
         let msgType = port.name === "popup" ? 1 : 2;
-        readTaskAllMsg({msgType},() => {
+        readTaskAllMsg({ msgType }, () => {
             getMessageInfo();
         })
     }

+ 104 - 4
src/logic/content/twitter.js

@@ -1,5 +1,5 @@
 import { getChromeStorage, setChromeStorage } from '@/uilts/chromeExtension.js'
-import { throttle } from '@/uilts/help'
+import { throttle, getQueryString } from '@/uilts/help'
 import { discordAuthRedirectUri } from '@/http/configAPI'
 import { reportSrcPublishEvent } from '@/http/publishApi'
 import Report from "@/log-center/log"
@@ -574,6 +574,16 @@ export function initExecuteScript(changes) {
         }
     }
 }
+
+const createIframe = ({ url, tweet_Id }, callback) => {
+    let iframe = document.createElement('iframe')
+    iframe.id = `tweetId${tweet_Id}`
+    iframe.src = url
+    iframe.onload = () => {
+        callback()
+    }
+}
+
 // 初始化
 export function init() {
     getDiscordAuthCode();
@@ -595,7 +605,6 @@ export function init() {
                     onChangePageMain(targetNode)
                     changeQueueNum(1)
                 }
-                console.log('queue_num', queue_num)
                 if (queue_num <= 0) {
                     return
                 }
@@ -606,8 +615,7 @@ export function init() {
         }
     }, 1000);
     renderDom();
-
-
+    checkTwitterTaskState()
     getChromeStorage("popupShowPublishDialog", (res) => {
         console.log("popupShowPublishDialog", res);
         if (res && res.show) {
@@ -629,4 +637,96 @@ export function init() {
             }, 800);
         }
     });
+}
+
+// 根据推特id找到dom,完成任务
+export function findTweetByIdDoTask({ tweet_Id = '', follow_names = [] }, task_type = 'like') {
+    // 1.根据推特ID寻找推文,获取卡片
+    // 获取所有卡片参数
+    let card_json_data = parseCard.parseAllDeNetCardParmas()
+    let result = card_json_data.filter((item) => { return item.tweet_Id == tweet_Id }) || []
+    if (result.length < 1) {
+        return
+    }
+    result = result[0]
+
+    switch (task_type) {
+        case 'like':
+            // https://twitter.com/intent/retweet?tweet_id=1525900221628223491
+            if (result.dom_card) {
+                result.dom_card.querySelector('div[data-testid=like]').click()
+                result.dom_card.querySelector('iframe').contentWindow.postMessage({ actionType: 'CONTENT_DONE_TASK', task_type, }, '*');
+            }
+            break;
+        case 'retweet':
+            if (result.dom_card) {
+                result.dom_card.querySelector('div[data-testid=retweet]').click()
+                result.dom_card.querySelector('div[data-testid=retweetConfirm]').click()
+            }
+            break
+        case 'follow':
+            follow_names.forEach((item) => {
+                window.open(`https://twitter.com/intent/follow?screen_name=${item}&tweet_Id=${tweet_Id}`)
+            })
+            break
+    }
+}
+
+
+
+// 校验关注推特状态 
+export function checkTwitterTaskState() {
+    let task_type = ''
+    let url = window.location.href
+    let tweet_Id
+    let task_data = {
+        follow_name: ''
+    }
+    // 校验当前链接
+    if (url.includes('https://twitter.com/intent/retweet')) {
+        task_type = 'retweet'
+    } else if (url.includes('https://twitter.com/intent/follow')) {
+        task_type = 'follow'
+        task_data.follow_name = getQueryString('screen_name')
+    } else if (url.includes('https://twitter.com/intent/like')) {
+        task_type = 'like'
+    } else {
+        return
+    }
+    tweet_Id = getQueryString('tweet_id')
+
+    // 获取关注名字 获取推特Id    
+    let confirm_btn = document.querySelector('div[data-testid=confirmationSheetConfirm]')
+    let confirm_btn_status
+    // let page_follow_btn = document.querySelector('div[aria-describedby]')
+    // let page_follow_btn_status
+
+    let observer = new MutationObserver(() => {
+        if (confirm_btn && !confirm_btn_status) {
+            confirm_btn_status = true
+            confirm_btn.onclick = (e) => {
+                chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id, task_type, task_data }, () => { })
+            }
+        } else {
+            confirm_btn = document.querySelector('div[data-testid=confirmationSheetConfirm]')
+        }
+        // if (page_follow_btn && page_follow_btn.dataset && page_follow_btn.dataset.testid && !page_follow_btn_status) {
+        //     page_follow_btn_status = true
+        //     if (page_follow_btn.dataset.testid.includes('unfollow')) {
+        //         // 发送
+        //         chrome.runtime.sendMessage({ actionType: "DO_TASK", tweet_Id }, () => { })
+        //     }
+        // } else {
+        //     page_follow_btn = document.querySelector('div[aria-describedby]')
+        // }
+
+        if (confirm_btn_status) {
+            observer.disconnect()
+        }
+    });
+    observer.observe(document.body, { attributes: false, childList: true, subtree: true });
+
+    // 打开iframe 
+    // 点击操作
+    // 删除iframe
 }

+ 5 - 6
src/rules/rules_1.json

@@ -1,20 +1,19 @@
 [
     {
         "id": 1,
+        "priority":1,
         "condition": {
+            "urlFilter": "twitter.com"
         },
         "action": {
             "type": "modifyHeaders",
             "responseHeaders": [
                 {
                     "header": "X-Frame-Options",
-                    "operation": "remove"
-                },
-                {
-                    "header": "Content-Security-Policy",
-                    "operation": "remove"
+                    "operation": "set",
+                    "value":"ALLOW-FROM  https://twitter.com"
                 }
             ]
         }
     }
-]
+]

+ 11 - 0
src/uilts/help.js

@@ -76,4 +76,15 @@ export function scaleNumber(num) {
       val,
       scale
     };
+}
+
+export function getBit (value) {
+  const reg = /([0-9]+\.[0-9]{4})[0-9]*/;
+  if(value) {
+    let str = value.toString();
+    str = str.replace(reg,"$1");
+    return str;
+  } else {
+    return value;
+  }
 }

+ 21 - 5
src/view/components/currency-list.vue

@@ -32,8 +32,16 @@
                                 </div>
                             </div>
                             <div class="right">
-                                <div class="num">{{ data.balance }}</div>
-                                <div class="amount" v-if="data.currencyType == 2">${{ data.usdEstimateBalance }}</div>
+                                <div class="num">
+                                    <a-tooltip :title="data.balance">
+                                        {{ getBit(data.balance) }}
+                                    </a-tooltip>
+                                </div>
+                                <div class="amount" v-if="data.currencyType == 2">
+                                    <a-tooltip :title="'$'+data.usdEstimateBalance">
+                                        ${{ getBit(data.usdEstimateBalance) }}
+                                    </a-tooltip>
+                                </div>
                             </div>
                         </div>
                     </template>
@@ -54,8 +62,16 @@
                         </div>
                     </div>
                     <div class="right">
-                        <div class="num">{{ data.balance }}</div>
-                        <div class="amount" v-if="data.currencyType == 2">${{ data.usdEstimateBalance }}</div>
+                        <div class="num">
+                            <a-tooltip :title="data.balance">
+                                {{ getBit(data.balance) }}
+                            </a-tooltip>
+                        </div>
+                        <div class="amount" v-if="data.currencyType == 2">
+                            <a-tooltip :title="'$'+data.usdEstimateBalance">
+                                ${{ getBit(data.usdEstimateBalance) }}
+                            </a-tooltip>
+                        </div>
                     </div>
                 </div>
                 <div class="no-data" v-if="!searchList.length">
@@ -70,7 +86,7 @@
 /* eslint-disable */
 import { defineEmits, ref, onMounted, defineProps, defineExpose } from "vue";
 import { getCurrencyInfo, searchCurrencyInfo, syncChainTokenRechargeRecord } from "@/http/publishApi";
-import { debounce } from "@/uilts/help";
+import { debounce, getBit } from "@/uilts/help";
 
 const props = defineProps({
     page: {

+ 6 - 1
src/view/components/font-amount.vue

@@ -1,8 +1,13 @@
 <template>
-    <span :style="{ fontSize: amount_font_size + 'px' }">{{ amount }}</span>
+    <div :style="{ fontSize: amount_font_size + 'px' }">
+        <a-tooltip :title="amount">
+            {{ getBit(amount) }}
+        </a-tooltip>
+    </div>
 </template>
 <script setup>
 import { ref, defineProps, onMounted, watch } from 'vue'
+import { getBit } from "@/uilts/help";
 
 let props = defineProps({
     amount: {

+ 37 - 20
src/view/components/popup-transactions.vue

@@ -16,7 +16,7 @@
             <div>
                 <div class="cell" v-for="(item, index) in dataList" :key="index">
                     <red-dot class="red-dots"
-                        v-if="item.unReadMsgCount > 0"></red-dot> 
+                        v-if="item.unReadMsgCount > 0 && isReadMsg"></red-dot> 
                     <div class="img-wrapper">
                         <!-- 收入- 任务红包领取 -->
                         <template v-if="item.bizType == 1">
@@ -89,7 +89,9 @@
                                         <div>
                                             <div class="balance">
                                                 <span class="amount">
-                                                    -{{ item.trxAmountValue || 0 }}
+                                                    <a-tooltip :title="'-'+item.trxAmountValue">
+                                                        -{{ getBit(item.trxAmountValue) || 0 }}
+                                                    </a-tooltip>
                                                 </span>
                                                 <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
                                                 <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
@@ -101,7 +103,11 @@
                                     </template>
                                     <template v-else-if="item.bizData.withdrawStatus == 2">
                                         <div class="balance">
-                                            <span class="amount">-{{ item.trxAmountValue || 0 }}</span>
+                                            <span class="amount">
+                                                <a-tooltip :title="'-'+item.trxAmountValue">
+                                                    -{{ getBit(item.trxAmountValue) || 0 }}
+                                                </a-tooltip>
+                                            </span>
                                             <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
                                             <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
                                         </div>
@@ -109,7 +115,11 @@
                                     <template v-else-if="item.bizData.withdrawStatus == 3">
                                         <div>
                                             <div class="balance">
-                                                <span class="amount">-{{ item.trxAmountValue || 0 }}</span>
+                                                <span class="amount"> 
+                                                    <a-tooltip :title="'-'+item.trxAmountValue">
+                                                        -{{ getBit(item.trxAmountValue) || 0 }}
+                                                    </a-tooltip>
+                                                </span>
                                                 <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
                                                 <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
                                             </div>
@@ -119,7 +129,11 @@
                                         </div>
                                     </template>
                                     <template v-else>
-                                        <span class="amount">-{{ item.trxAmountValue || 0 }}</span>
+                                        <span class="amount">
+                                            <a-tooltip :title="'-'+item.trxAmountValue">
+                                                -{{ getBit(item.trxAmountValue) || 0 }}
+                                            </a-tooltip>
+                                        </span>
                                         <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
                                         <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
                                     </template>
@@ -127,7 +141,10 @@
                                 <!-- 收入 -->
                                 <template v-else>
                                     <span class="amount">
-                                        <template v-if="item.bizType == -2">-</template>{{ item.trxAmountValue || 0 }}
+                                        <template v-if="item.bizType == -2">-</template>
+                                        <a-tooltip :title="item.bizType == -2 ? '-' + item.trxAmountValue : item.trxAmountValue">
+                                            {{ getBit(item.trxAmountValue) || 0 }}
+                                        </a-tooltip>
                                     </span>
                                     <span class="name">{{ item.trxAmountCurrencyInfo.tokenSymbol }}</span>
                                     <img :src="item.trxAmountCurrencyInfo.iconPath" alt="">
@@ -150,6 +167,8 @@ import redDot from "@/view/components/red-dot.vue";
 import { transactionsList } from "@/http/account";
 import { readAllMsgByType, getAllMessageInfo } from "@/http/messageApi"
 import { setBadgeInfo, hideBadge } from "@/logic/background/twitter";
+import { getBit } from "@/uilts/help";
+
 var moment = require('moment');
 
 let dataList = ref([]);
@@ -164,6 +183,8 @@ let listReqParams = {
     loadMore: false,
 };
 
+let isReadMsg = ref(true);
+
 const getTransactionsList = () => {
     transactionsList({
         params: listReqParams.params,
@@ -198,23 +219,19 @@ onMounted(() => {
     }).then(res => {
         setMessageCount();
     });
+    setTimeout(() => {
+        isReadMsg.value = false;
+        readAllMsgByType({
+            params: {
+                msgType: 2 // 1:任务红包 2:钱包明细
+            }
+        }).then(res => {
+            setMessageCount();
+        })
+    }, 2000)
     getTransactionsList();
 });
 
-onBeforeUnmount(() => {
-    readAllMsgByType({
-        params: {
-            msgType: 1 // 1:任务红包 2:钱包明细
-        }
-    });
-    readAllMsgByType({
-        params: {
-            msgType: 2
-        }
-    });
-})
-
-
 const setMessageCount = () => {
     getAllMessageInfo({params: {
     }}).then(res => {

+ 5 - 3
src/view/iframe/publish/give-dialog.vue

@@ -144,7 +144,9 @@
                                         Balance
                                     </div>
                                     <div class="amount">
-                                        {{currentCurrencyInfo.balance}}
+                                        <a-tooltip :title="currentCurrencyInfo.balance">
+                                            {{ getBit(currentCurrencyInfo.balance) }}
+                                        </a-tooltip>
                                         <img
                                             :class="{ 'icon-refresh-rotate': refreshRotate }"
                                             @click="updateCurrencyBanlce"
@@ -404,7 +406,7 @@ import { getInviteGuildInfo, saveInviteGuildInfo } from "@/http/discordApi";
 import { payCalcFee, getPayConfig } from "@/http/pay";
 import { getFrontConfig } from "@/http/account";
 import {setChromeStorage, getChromeStorage} from "@/uilts/chromeExtension"
-import { debounce } from "@/uilts/help"
+import { debounce, getBit } from "@/uilts/help"
 import Report from "@/log-center/log"
 import { ElMessage, ElLoading } from "element-plus";
 import "element-plus/es/components/message/style/css";
@@ -1389,7 +1391,7 @@ onMounted(() => {
     right: 0;
     bottom: 0;
     left: 0;
-    z-index: 2000;
+    z-index: 1000;
     height: 100%;
     background-color: rgba(0, 0, 0, 0.5);
     overflow: auto;

+ 3 - 1
src/view/iframe/publish/publish.vue

@@ -39,6 +39,8 @@ window.addEventListener("message", function (event) {
 </script>
 
 <style>
-.main_app {
+html, body {
+    background-color: rgba(255,255,255,0)!important;
+    line-height: unset !important;
 }
 </style>

+ 171 - 31
src/view/iframe/red-packet/red-packet.vue

@@ -132,9 +132,18 @@
       </div>
       <div class="luck-list-title">
         <div>{{ state.detail.receiveCount || 0 }}/{{ state.detail.totalCount || 0 }} Winners</div>
-        <div> {{ state.detail.receiveAmountValue }} / {{ state.detail.amountValue || '' }} {{
-            state.detail.currencySymbol || ''
-        }}</div>
+        <div class="right">
+          <span class="text">
+            <a-tooltip :title="state.detail.receiveAmountValue">
+              {{ getBit(state.detail.receiveAmountValue) }}
+            </a-tooltip>
+            /
+            <a-tooltip :title="state.detail.amountValue">
+              {{ getBit(state.detail.amountValue) || '' }}
+            </a-tooltip>
+          </span>
+          {{ state.detail.currencySymbol || '' }}
+        </div>
       </div>
       <div class="luck-list max" @scroll="handleScroll($event)">
         <div class="luck-item" v-for="item, i in state.detail.allReceived" v-bind:key="i">
@@ -149,7 +158,11 @@
           </div>
           <div class="luck-money">
             <img :src="state.detail.currencyIconPath" alt />
-            <div class="luck-money-txt">{{ showLastTwoPlace(item.amountValue) || 0 }}</div>
+            <div class="luck-money-txt">
+              <a-tooltip :title="item.amountValue">
+                {{ getBit(item.amountValue) }}
+              </a-tooltip>
+            </div>
           </div>
           <div class="luck-king" v-if="item.maxAmount">
             <img :src="require('@/assets/svg/icon-king-hat.svg')" alt />
@@ -189,9 +202,19 @@
       </div>
       <div class="luck-list-title">
         <div>{{ state.detail.receiveCount || 0 }}/{{ state.detail.totalCount || 0 }} Winners</div>
-        <div> {{ state.detail.receiveAmountValue }} / {{ state.detail.amountValue || '' }} {{
-            state.detail.currencySymbol || ''
-        }}</div>
+        <div class="right">
+          <span class="text">
+            <a-tooltip :title="state.detail.receiveAmountValue">
+              {{ getBit(state.detail.receiveAmountValue) }}
+            </a-tooltip>
+            /
+            <a-tooltip :title="state.detail.amountValue">
+              {{ getBit(state.detail.amountValue) || '' }}
+            </a-tooltip>
+          </span> {{
+              state.detail.currencySymbol || ''
+          }}
+        </div>
       </div>
       <div class="luck-list" @scroll="handleScroll">
         <div class="luck-item" v-for="item, i in state.detail.allReceived" v-bind:key="i">
@@ -205,7 +228,11 @@
           </div>
           <div class="luck-money">
             <img :src="state.detail.currencyIconPath" alt />
-            <div class="luck-money-txt">{{ showLastTwoPlace(item.amountValue) }}</div>
+            <div class="luck-money-txt">
+              <a-tooltip :title="item.amountValue">
+                {{ getBit(item.amountValue) }}
+              </a-tooltip>
+            </div>
           </div>
 
           <div class="luck-king" v-if="item.maxAmount">
@@ -235,9 +262,19 @@
 
       <div class="luck-list-title">
         <div>{{ state.detail.receiveCount || 0 }}/{{ state.detail.totalCount || 0 }} Winners</div>
-        <div> {{ state.detail.receiveAmountValue }} / {{ state.detail.amountValue || '' }} {{
-            state.detail.currencySymbol || ''
-        }}</div>
+        <div class="right">
+          <span class="text">
+            <a-tooltip :title="state.detail.receiveAmountValue">
+              {{ getBit(state.detail.receiveAmountValue) }}
+            </a-tooltip>
+            /
+            <a-tooltip :title="state.detail.amountValue">
+              {{ getBit(state.detail.amountValue || '') }}
+            </a-tooltip>
+          </span> {{
+              state.detail.currencySymbol || ''
+          }}
+        </div>
       </div>
 
       <div class="luck-list max" @scroll="handleScroll">
@@ -252,7 +289,11 @@
           </div>
           <div class="luck-money">
             <img :src="state.detail.currencyIconPath" alt />
-            <div class="luck-money-txt">{{ showLastTwoPlace(item.amountValue) || 0 }}</div>
+            <div class="luck-money-txt">
+              <a-tooltip :title="item.amountValue">
+                {{ getBit(item.amountValue) }}
+              </a-tooltip>
+            </div>
           </div>
           <div class="luck-king" v-if="item.maxAmount">
             <img :src="require('@/assets/svg/icon-king-hat.svg')" alt />
@@ -297,8 +338,8 @@ export default {
 </script>
 <script setup>
 import { onMounted, reactive, ref } from "vue";
-import { getPostDetail, getRedPacket, finishRedPacket, oneKeyLike, oneKeyReTweet, oneKeyFollow, getTaskDetail, getReceivedList } from '@/http/redPacket.js'
-import { getQueryString, guid } from '@/uilts/help.js'
+import { getPostDetail, getRedPacket, finishRedPacket, oneKeyLike, oneKeyReTweet, oneKeyFollow, getTaskDetail, getReceivedList, addFinishEvent } from '@/http/redPacket.js'
+import { getQueryString, guid, getBit } from '@/uilts/help.js'
 import { message } from 'ant-design-vue';
 import FontAmount from '@/view/components/font-amount.vue'
 import GetMore from '@/view/iframe/publish/components/get-more.vue'
@@ -336,12 +377,23 @@ let state = reactive({
 function clickRetry() {
   init()
 }
+
+let follow_open_tabs = []
+
 async function clickLikeBtn() {
   let _userInfo = await checkIsLogin()
   if (!_userInfo) {
     return
   }
   state.loading_show = true
+
+
+  // window.parent.postMessage({
+  //   actionType: "IFRAME_DO_TASK", task_data: {
+  //     tweet_Id: state.tweetId
+  //   }, task_type: 'like'
+  // }, "*");
+
   oneKeyLike({
     params: {
       tweetId: state.srcContentId
@@ -353,10 +405,11 @@ async function clickLikeBtn() {
         state.done.like = true
       } else {
         state.done.like = false
+        window.open(`https://twitter.com/intent/like?tweet_id=${state.tweetId}`)
       }
     } else {
+      window.open(`https://twitter.com/intent/like?tweet_id=${state.tweetId}`)
       state.done.like = false
-      console.log(res)
     }
   })
   // 埋点
@@ -418,8 +471,8 @@ async function clickRetweetBtn() {
   if (!_userInfo) {
     return
   }
-
   state.loading_show = true
+
   oneKeyReTweet({
     params: {
       tweetId: state.srcContentId
@@ -430,11 +483,12 @@ async function clickRetweetBtn() {
       if (res.data.result) {
         state.done.retweet = true
       } else {
+        window.open(`https://twitter.com/intent/retweet?tweet_id=${state.tweetId}`)
         state.done.retweet = false
       }
     } else {
+      window.open(`https://twitter.com/retweet/like?tweet_id=${state.tweetId}`)
       state.done.retweet = false
-      console.log(res)
     }
   })
   // 埋点
@@ -485,8 +539,11 @@ async function clickFollowAll(item, is_all) {
   state.loading_show = true
   let arr_name = []
   for (let i in item) {
-    arr_name.push(item[i].name)
+    if (!item[i].finished) {
+      arr_name.push(item[i].name)
+    }
   }
+
   oneKeyFollow({
     params: {
       names: arr_name
@@ -496,34 +553,42 @@ async function clickFollowAll(item, is_all) {
     if (res.code == 0) {
       res.data.forEach((item1) => {
         state.detail.taskCondition[0].relatedUsers.forEach(item2 => {
-          if (item1.name == item2.name) {
+          if (item1.name == item2.name && item1.following) {
             item2.finished = true
           }
         });
       })
-      let _len = state.detail.taskCondition[0].relatedUsers.filter((item) => { return item.finished == false }).length
-      if (_len > 0) {
+      let array_finish = state.detail.taskCondition[0].relatedUsers.filter((item) => { return item.following == false })
+      let url
+      if (array_finish.length > 0) {
         state.done.follow = false
+        // 打开标签页的方法
+        array_finish.forEach((item) => {
+          url = `https://twitter.com/intent/follow?screen_name=${item.name}&tweet_id=${state.tweetId}`
+          chrome.tabs.create({ url }, (tab) => {
+            if (follow_open_tabs.filter((item) => { return item.url == tab.url }).length == 0) {
+              follow_open_tabs.push(tab)
+            }
+          })
+        })
       } else {
         state.done.follow = true
       }
-    } else {
-      state.detail.taskCondition[0].relatedUsers.forEach(item => {
-        item.finished = false
-      });
+
+
     }
   })
+
+  // -------- 埋点 --------
   let _log_obj = {
     pageSource: Report.pageSource.task_page,
     businessType: Report.businessType.buttonClick,
     objectType: Report.objectType.follow
   }
   if (is_all) {
-    // 埋点
     _log_obj.objectType = Report.objectType.follow_button
   }
   Report.reportLog(_log_obj);
-
 }
 
 
@@ -769,9 +834,72 @@ function initTaskDetail() {
     }
   })
 }
+
+let tab_index = 0
+const doTaskReport = (type, { follow_name = '' }, sender) => {
+  // 1 Twitter follow Twitter ScreenName
+  // 2 Tweet like
+  // 3 Retweet
+  let event_type = 0
+  switch (type) {
+    case 'retweet':
+      event_type = 3
+      state.done.retweet = true
+      chrome.tabs.remove(sender.tab.id)
+      break;
+    case 'like':
+      event_type = 2
+      state.done.like = true
+      chrome.tabs.remove(sender.tab.id)
+
+      break
+    case 'follow':
+      event_type = 1
+      chrome.tabs.remove(sender.tab.id)
+      for (let i = 0; i < follow_open_tabs.length; i++) {
+        if (follow_open_tabs[i].id == sender.tab.id) {
+          follow_open_tabs.splice(i, 1)
+          break
+        }
+      }
+
+      chrome.tabs.getCurrent((tab) => {
+        if (follow_open_tabs.length > 0) {
+          tab_index = follow_open_tabs[follow_open_tabs.length - 1].index
+        } else {
+          tab_index = tab.index
+        }
+        chrome.tabs.highlight({ windowId: tab.windowId, tabs: tab_index })
+      })
+
+      let has_no_finished = false
+      state.detail.taskCondition[0].relatedUsers.forEach((item) => {
+        if (follow_name == item.name) {
+          item.finished = true
+        }
+      })
+      state.detail.taskCondition[0].relatedUsers.forEach((item) => {
+        if (!item.finished) {
+          has_no_finished = true
+        }
+      })
+      if (!has_no_finished) {
+        state.done.follow = true
+        state.done.follow_red = false
+      }
+      break
+  }
+  addFinishEvent({
+    params: {
+      eventData: follow_name,
+      eventType: event_type,
+      luckdropId: state.detail.taskLuckdropId
+    }
+  })
+}
+
 onMounted(() => {
   state.process_mode = process.env.NODE_ENV
-  console.log('state.process_mode',state.process_mode)
   state.postId = getQueryString('postId')
   state.tweetId = getQueryString('tweetId')
   init()
@@ -780,6 +908,7 @@ onMounted(() => {
   // state.close_status = '没有领到钱'
 })
 
+
 // 点击领取
 function clickOpenRedPacket() {
   chrome.runtime.sendMessage({
@@ -1114,6 +1243,12 @@ function onRuntimeMsg() {
       case 'BACK_DISCORD_LOGIN_SUCCESS':
         discordLoginSuccess();
         break;
+      case 'DO_TASK':
+        if (!req.task_type || state.tweetId != req.tweet_Id) {
+          return
+        }
+        state.loading_show = false
+        doTaskReport(req.task_type, req.task_data, sender)
     }
   })
 }
@@ -1182,7 +1317,7 @@ async function joinDiscord() {
           state.done.join_discord = true;
         } else {
           state.done.join_discord = false;
-          if(discordAuthorizeRequired) {
+          if (discordAuthorizeRequired) {
             discordAuth('authAndJoinIng');
           } else {
             openInviteUrl();
@@ -1259,7 +1394,7 @@ function discordLoginSuccess() {
   if (joinDiscordActionState == 'authAndJoinIng') {
     openInviteUrl();
   }
-  if(discordAuthorizeRequired) {
+  if (discordAuthorizeRequired) {
     discordAuthorizeRequired = false;
   }
 }
@@ -1436,6 +1571,7 @@ body {
         }
 
         p {
+          width: 100%;
           margin: 0;
           padding: 0;
           color: #fff;
@@ -1542,6 +1678,10 @@ body {
       div:last-child {
         text-align: right;
       }
+
+      .text {
+        cursor: pointer;
+      }
     }
 
     .luck-list {
@@ -1946,7 +2086,7 @@ body {
         }
 
         span {
-          margin-left: 15px;
+          margin-left: 12px;
           font-weight: 800;
           font-size: 60px;
           line-height: 76px;

+ 42 - 15
src/view/popup/popup.vue

@@ -13,7 +13,11 @@
                         <img :src="require('@/assets/svg/icon-home-bill.svg')" />
                     </div>
                 </div>
-                <div class="amount">${{ canWithdrawBalance }}</div>
+                <div class="amount">
+                    <a-tooltip :title="'$'+canWithdrawBalance">
+                        ${{ getBit(canWithdrawBalance) }}
+                    </a-tooltip>
+                </div>
                 <div class="area-btn">
                     <div class="withdraw-btn" @click="clickWithdraw">Withdraw</div>
                     <div class="top-up-btn" @click="clickTopUp">Deposit</div>
@@ -40,7 +44,7 @@
                             @click="clickListItem(item, index)">
 
                             <red-dot class="red-dots"
-                                v-if="item.unReadMsgCount > 0"></red-dot>
+                                v-if="item.unReadMsgCount > 0 && isReadMsg"></red-dot>
 
                             <div class="img-wrapper">
                                 <!-- 收到红包 -->
@@ -88,7 +92,10 @@
                                                 </template>
                                                 <!-- 已完成 -->
                                                 <template v-else-if="item.status == 1">
-                                                    <span class="blance">{{ item.amount }}</span>
+                                                    <span class="blance">
+                                                        <a-tooltip :title="item.amount">
+                                                            {{ getBit(item.amount) }}</a-tooltip>
+                                                    </span>
                                                     <span class="coin-type">{{ item.currencySymbol || '' }}</span>
                                                     <img :src="item.currencyIconPath" alt="">
                                                 </template>
@@ -99,7 +106,11 @@
                                             </template>
                                             <!-- 发出去的 -->
                                             <template v-else-if="item.type == 2">
-                                                <span class="blance">-{{ item.amount }}</span>
+                                                <span class="blance">
+                                                    <a-tooltip :title="'-' + item.amount">
+                                                        -{{ getBit(item.amount) }}
+                                                    </a-tooltip>
+                                                </span>
                                                 <span class="coin-type">{{ item.currencySymbol || '' }}</span>
                                                 <img :src="item.currencyIconPath" alt="">
                                             </template>
@@ -204,7 +215,7 @@
 </template>
 
 <script setup>
-import { ref, onMounted, inject, onBeforeUnmount } from "vue";
+import { ref, onMounted, inject } from "vue";
 
 import popupLogin from "@/view/popup/components/login.vue";
 import popupTransactions from "@/view/components/popup-transactions";
@@ -221,7 +232,10 @@ import { terminatedLuckdrop } from "@/http/redPacket";
 import { setBadgeInfo, hideBadge } from "@/logic/background/twitter";
 import Report from "@/log-center/log";
 import router from "@/router/popup.js";
-import VHead from '@/view/popup/components/head.vue'
+import { getBit } from "@/uilts/help";
+
+import VHead from '@/view/popup/components/head.vue';
+
 
 let withdraw_info = inject('withdraw_info')
 withdraw_info.paypal = {}
@@ -251,6 +265,7 @@ let giveList = ref([]);
 
 // 钱包未读数
 let unReadCountWallet = ref(0);
+let isReadMsg = ref(true);
 
 let giveReqParams = {
     params: {
@@ -271,12 +286,17 @@ withdraw_info.paypal.wallet_withdraw_config = walletWithdrawConfig
 
 
 let moreTabList = ref([
+    {
+        icon: require("@/assets/svg/icon-website.svg"),
+        label: "Website",
+        href: 'https://denet.me'
+    },
     {
         icon: require("@/assets/svg/icon-twitter.svg"),
         label: "Twitter",
         href: 'https://twitter.com/denet2022'
-    }
-    , {
+    },
+    {
         icon: require("@/assets/svg/icon-discord.svg"),
         label: "Discord",
         href: 'https://discord.gg/wZSz9p8ddG'
@@ -320,19 +340,22 @@ onMounted(() => {
     });
     setMessageCount();
     setTimeout(() => {
-        setMessageCount();
-    }, 1600)
+        isReadMsg.value = false;
+        readAllMsg({msgType: 1}, () => {
+            setMessageCount();
+        });
+    }, 2000);
 });
 
-onBeforeUnmount(() => {
+const readAllMsg = ({msgType}, cb) => {
     readAllMsgByType({
         params: {
-            msgType: 1
+            msgType
         }
     }).then(res => {
-        setMessageCount();
+        cb && cb();
     })
-});
+};
 
 const setMessageCount = () => {
     getAllMessageInfo({params: {
@@ -488,6 +511,8 @@ const withdrawBack = () => {
 const showTransactions = () => {
 //     // homeVisibility.value = false;
 //     // transactionsVisibility.value = true;
+
+    readAllMsg({msgType: 1});
     router.push('/transactions')
 };
 
@@ -816,6 +841,8 @@ body {
                             font-weight: 500;
                             font-size: 14px;
                             margin-bottom: 5px;
+                            max-width: 132px;
+                            word-break: break-all;
                         }
 
                         .time {
@@ -841,7 +868,7 @@ body {
                                 .blance {
                                     margin-left: 3px;
                                     display: inline-block;
-                                    max-width: 68px;
+                                    max-width: 80px;
                                     word-break: break-all;
                                     line-height: 18px;
                                     color: #E29A2E;

+ 2 - 1
src/view/popup/withdraw/info.vue

@@ -59,7 +59,7 @@
       <div class="left">
         <div class="txt">Receive Amount</div>
         <div class="money">{{ state.amount || 0 }} {{ state.currency_code }}</div>
-        <div class="txt"> Network Fee: <a-tooltip :title="state.fee_amount">{{ numToFixed(state.fee_amount) }}</a-tooltip> {{ withdraw_info.token_symbol }} </div>
+        <div class="txt"> Network Fee: <a-tooltip :title="state.fee_amount">{{ getBit(state.fee_amount) }}</a-tooltip> {{ withdraw_info.token_symbol }} </div>
       </div>
       <div class="right">
         <div class="btn" @click="clickBtn" :class="{ enter: state.is_enter_state }">Confirm</div>
@@ -76,6 +76,7 @@ import { reactive, onMounted, inject } from 'vue'
 import { getWithdrawConfig } from "@/http/account";
 import { withdrawCalcFee } from "@/http/pay";
 import Report from "@/log-center/log";
+import { getBit } from "@/uilts/help";
 
 let withdraw_info = inject('withdraw_info')
 

+ 5 - 1
vue.config.js

@@ -99,7 +99,11 @@ module.exports = {
           {
             from: path.resolve(`src/manifest.json`),
             to: `${path.resolve('dist')}/manifest.json`
-          }
+          },
+          // {
+          //   from: path.resolve(`src/rules`),
+          //   to: `${path.resolve('dist')}/rules`
+          // }
         ]
       })
     ],

Some files were not shown because too many files changed in this diff