|
@@ -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;
|