贡献值已完成

This commit is contained in:
yuyongdong 2024-07-19 20:12:03 +08:00
parent 6f2cd47476
commit 1a8f90a5e5
13 changed files with 147 additions and 69 deletions

View File

@ -15,6 +15,7 @@ VUE_APP_NET_ID='13473'
VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34' VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34'
VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39' VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39'
VUE_APP_LOCKER_ADDRESS='0xC8607507451059CfAe6Ca4D07EC6f631ce8ef9f9' VUE_APP_LOCKER_ADDRESS='0xC8607507451059CfAe6Ca4D07EC6f631ce8ef9f9'
VUE_APP_FOUNDER_ADDRESS='0x7f2b4db626d878778e178b4f0c7ba3a2870c6dd0'
VUE_APP_EXPLORER_URL='https://explorer.testnet.immutable.com' VUE_APP_EXPLORER_URL='https://explorer.testnet.immutable.com'
VUE_APP_PRODUCTION=sandbox VUE_APP_PRODUCTION=sandbox

View File

@ -15,6 +15,7 @@ VUE_APP_NET_ID='13473'
VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34' VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34'
VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39' VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39'
VUE_APP_LOCKER_ADDRESS='0xC8607507451059CfAe6Ca4D07EC6f631ce8ef9f9' VUE_APP_LOCKER_ADDRESS='0xC8607507451059CfAe6Ca4D07EC6f631ce8ef9f9'
VUE_APP_FOUNDER_ADDRESS='0x7f2b4db626d878778e178b4f0c7ba3a2870c6dd0'
VUE_APP_EXPLORER_URL='https://explorer.testnet.immutable.com' VUE_APP_EXPLORER_URL='https://explorer.testnet.immutable.com'
VUE_APP_PRODUCTION=sandbox VUE_APP_PRODUCTION=sandbox

View File

@ -15,6 +15,7 @@ VUE_APP_NET_ID='13371'
VUE_APP_MARKET_CURRENCY='0x52A6c53869Ce09a731CD772f245b97A4401d3348' VUE_APP_MARKET_CURRENCY='0x52A6c53869Ce09a731CD772f245b97A4401d3348'
VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39' VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39'
VUE_APP_LOCKER_ADDRESS='0x2034e51e1a24f8b488610aBBDCc74F3e0cA833df' VUE_APP_LOCKER_ADDRESS='0x2034e51e1a24f8b488610aBBDCc74F3e0cA833df'
VUE_APP_FOUNDER_ADDRESS='0x7f2b4db626d878778e178b4f0c7ba3a2870c6dd0'
VUE_APP_EXPLORER_URL='https://explorer.immutable.com' VUE_APP_EXPLORER_URL='https://explorer.immutable.com'
VUE_APP_PRODUCTION=production VUE_APP_PRODUCTION=production

View File

@ -15,5 +15,6 @@ VUE_APP_NET_ID='13371'
VUE_APP_MARKET_CURRENCY='0x52A6c53869Ce09a731CD772f245b97A4401d3348' VUE_APP_MARKET_CURRENCY='0x52A6c53869Ce09a731CD772f245b97A4401d3348'
VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39' VUE_APP_MAKEFEE_ADDRESS='0x50A8e60041A206AcaA5F844a1104896224be6F39'
VUE_APP_LOCKER_ADDRESS='0x2034e51e1a24f8b488610aBBDCc74F3e0cA833df' VUE_APP_LOCKER_ADDRESS='0x2034e51e1a24f8b488610aBBDCc74F3e0cA833df'
VUE_APP_FOUNDER_ADDRESS='0x7f2b4db626d878778e178b4f0c7ba3a2870c6dd0'
VUE_APP_EXPLORER_URL='https://explorer.immutable.com' VUE_APP_EXPLORER_URL='https://explorer.immutable.com'
VUE_APP_PRODUCTION=production VUE_APP_PRODUCTION=production

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 MiB

View File

@ -8,8 +8,8 @@
<div class="assets-user-name"> <div class="assets-user-name">
<div>{{ localWalletStore.showAddress ? localWalletStore.showAddress : 'User Address' }}</div> <div>{{ localWalletStore.showAddress ? localWalletStore.showAddress : 'User Address' }}</div>
<div class="total"> <div class="total">
<img src="@/assets/img/marketplace/totalContribution.png" alt="">
<p>Total Contribution Credits:&nbsp; {{ contributionPointTotal }}</p> <p>Total Contribution Credits:&nbsp; {{ contributionPointTotal }}</p>
<img src="@/assets/img/marketplace/totalContribution.png" alt="">
</div> </div>
<div class="day"> <div class="day">
<p>Daily Expected:&nbsp;&nbsp; <span>+{{ contributionPoint }}/d</span></p> <p>Daily Expected:&nbsp;&nbsp; <span>+{{ contributionPoint }}/d</span></p>
@ -72,6 +72,7 @@
<li> <li>
<span v-if="item.desc == 'uaw'">Hill's Treasure Hunt</span> <span v-if="item.desc == 'uaw'">Hill's Treasure Hunt</span>
<span v-else-if="item.desc == 'p2a'">Wheel of Fortune</span> <span v-else-if="item.desc == 'p2a'">Wheel of Fortune</span>
<span v-else-if="item.desc == 'game test parse 1'">P2E Season 1</span>
</li> </li>
<li> <li>
{{ item.earnTime }} {{ item.earnTime }}
@ -448,7 +449,7 @@ onMounted(() => {
img { img {
width: 27px; width: 27px;
height: 23px; height: 23px;
margin-right: 10px; margin-left: 10px;
} }
} }
.day { .day {

View File

@ -25,21 +25,18 @@
</span> </span>
<img :src="icon" alt=""> <img :src="icon" alt="">
</div> </div>
<div v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()"> <div v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase() || FOUNDER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()">
<span class="expected">+{{contribution(nftData.detail.quality)}}/d</span> <span class="expected" v-if="nftData.type == 13">+{{contribution(nftData.quality, nftData.type)}}/d</span>
<span class="expected" v-if="nftData.type == 1 || nftData.type == 12">+{{contribution(nftData.detail.quality, nftData.type)}}/d</span>
<img src="@/assets/img/marketplace/totalContribution.png" alt=""> <img src="@/assets/img/marketplace/totalContribution.png" alt="">
</div> </div>
</div> </div>
<div v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()" class="link-staking" @click="unStake(nftData)"> <div v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase() || FOUNDER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()" class="link-staking" @click="unStake(nftData)">
<img src="@/assets/img/marketplace/Staking.png" alt=""> <img src="@/assets/img/marketplace/Staking.png" alt="">
</div> </div>
<!-- <div v-if="LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase() && nftData.type == 11 && nftData.on_sale == 0" class="enabled" @click="lockToGame('redeem')">
Redeem
</div> -->
<div v-if="LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase() && (nftData.type == 1 || nftData.type == 12) && nftData.on_sale == 0" class="link-below" @click="lockToGame('convert')"> <div v-if="LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase() && (nftData.type == 1 || nftData.type == 12) && nftData.on_sale == 0" class="link-below" @click="lockToGame('convert')">
Stake Stake
</div> </div>
<!-- <div>{{ nftData.owner_address.substr(0,6) }}...{{ nftData.owner_address.substr(-6) }}</div> -->
</div> </div>
</div> </div>
<div class="card-btn" v-if="nftData.type != 13 && LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase()"> <div class="card-btn" v-if="nftData.type != 13 && LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase()">
@ -47,8 +44,8 @@
<div class="card-cancel" v-if="nftData.on_sale == 1" @click="cancelNft(nftData)">Cancel listing</div> <div class="card-cancel" v-if="nftData.on_sale == 1" @click="cancelNft(nftData)">Cancel listing</div>
</div> </div>
<div class="card-btn" v-else> <div class="card-btn" v-else>
<div class="card-cancel" v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()" @click="unStake(nftData)">Unstake</div> <div class="card-cancel" v-if="LOCKER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase() || FOUNDER_ADDRESS.toLowerCase() == nftData.owner_address.toLowerCase()" @click="unStake(nftData)">Unstake</div>
<div class="card-sell" v-if="LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase()" @click="lockToGame('founder')">Stake</div> <div class="card-sell" v-else @click="lockToGame('founder')">Stake</div>
</div> </div>
<SellDialog :sellDialogVisible="sellDialogVisible" :floorPrice="floorPrice" :sellDataArr="sellDataArr" @handleClose="sellHandleClose" /> <SellDialog :sellDialogVisible="sellDialogVisible" :floorPrice="floorPrice" :sellDataArr="sellDataArr" @handleClose="sellHandleClose" />
<LoadingDialog :loadingDialogVisible="loadingDialogVisible" /> <LoadingDialog :loadingDialogVisible="loadingDialogVisible" />
@ -84,6 +81,7 @@ const props = defineProps({
}, },
}); });
const LOCKER_ADDRESS = ref(import.meta.env.VUE_APP_LOCKER_ADDRESS) const LOCKER_ADDRESS = ref(import.meta.env.VUE_APP_LOCKER_ADDRESS)
const FOUNDER_ADDRESS = ref(import.meta.env.VUE_APP_FOUNDER_ADDRESS)
// //
const floorPrice = ref('0') const floorPrice = ref('0')
@ -225,13 +223,20 @@ const cardPrice = async (val) => {
// //
const unStake = async (data) => { const unStake = async (data) => {
console.log(marketplaceStore.userGold)
if(marketplaceStore.userGold < 0) { if(marketplaceStore.userGold < 0) {
const confirmResult = await createModal(ConfirmDialog, { const confirmResult = await createModal(ConfirmDialog, {
title: '', title: '',
message: 'Unstake Failed - Negative in-game gold balance. Please adjust your balance to continue.' message: 'Unstake Failed - Negative in-game gold balance. Please adjust your balance to continue.'
}).show() }).show()
} else { } else {
if(toRaw(data).type == 13) {
founderLock(toRaw(data))
} else if(toRaw(data).type == 1 || toRaw(data).type == 12) {
heroLock(data)
}
}
}
const heroLock = async (data) => {
try { try {
const bc = new BlockChain() const bc = new BlockChain()
let res = await bc.locker.unlockOrMintGameNft(toRaw(data).contract_address,[toRaw(data).token_id]) let res = await bc.locker.unlockOrMintGameNft(toRaw(data).contract_address,[toRaw(data).token_id])
@ -242,6 +247,28 @@ const unStake = async (data) => {
clearTimeout(timer); clearTimeout(timer);
}, 2000); }, 2000);
} }
} catch (e) {
if(e.message.indexOf('rejected') > -1) {
message.error('User rejected the request')
} else if (e.message.indexOf('select wallet') > -1) {
message.error('user cancel select wallet')
} else {
message.error('Unstake fail')
}
}
}
const founderLock = async (data) => {
console.log(data)
try {
const bc = new BlockChain()
let res = await bc.locker.unlockMain(toRaw(data).contract_address,[toRaw(data).token_id])
if(res) {
let timer = setTimeout(() => {
message.success('Unstake success.')
emit('renewMyNft')
clearTimeout(timer);
}, 2000);
}
} catch (e) { } catch (e) {
console.log(e) console.log(e)
if(e.message.indexOf('rejected') > -1) { if(e.message.indexOf('rejected') > -1) {
@ -253,7 +280,7 @@ const unStake = async (data) => {
} }
} }
} }
}
// //
const toDetail = () => { const toDetail = () => {

View File

@ -1,7 +1,9 @@
<template> <template>
<div class="card-img-common"> <div class="card-img-common">
<li v-if="props.nftData.type == 13"> <li v-if="props.nftData.type == 13">
<LazyLoadImg class="founder" :src="props.nftData.image" :src-placeholder="placeholderImg" alt="图片"/> <img v-if="props.nftData.quality == 1" class="founder" src="@/assets/img/marketplace/hero/Normal_GIF.gif" alt="">
<img v-else-if="props.nftData.quality == 2" class="founder" src="@/assets/img/marketplace/hero/Purple_GIF.gif" alt="">
<img v-else-if="props.nftData.quality == 3" class="founder" src="@/assets/img/marketplace/hero/Golden_GIF.gif" alt="">
</li> </li>
<li v-else-if="props.nftData.type == 1 || props.nftData.type == 12"> <li v-else-if="props.nftData.type == 1 || props.nftData.type == 12">
<LazyLoadImg :src="props.nftData.image" :src-placeholder="placeholderImg" alt="图片"/> <LazyLoadImg :src="props.nftData.image" :src-placeholder="placeholderImg" alt="图片"/>

View File

@ -5,7 +5,7 @@
<a-radio value="0">All</a-radio> <a-radio value="0">All</a-radio>
<a-radio value="1">Listed</a-radio> <a-radio value="1">Listed</a-radio>
<a-radio value="2">Unlisted</a-radio> <a-radio value="2">Unlisted</a-radio>
<!-- <a-radio value="3">Staking</a-radio> --> <a-radio value="3">Staking</a-radio>
</a-radio-group> </a-radio-group>
</div> </div>
</template> </template>

View File

@ -54,19 +54,29 @@ export const showTime = (time) => {
} }
// 处理贡献值 // 处理贡献值
export const contribution = (quality) => { export const contribution = (quality, type) => {
let str let str
if(type == 13) {
if(quality == 1) {
str = 20
} else if(quality == 2) {
str = 40
} else if(quality == 3) {
str = 100
}
} else {
if(quality == 1) { if(quality == 1) {
str = 10 str = 10
} else if(quality == 2) { } else if(quality == 2) {
str = 20 str = 20
} else if(quality == 3) { } else if(quality == 3) {
str = 30
} else if(quality == 4) {
str = 40 str = 40
} else if(quality == 4) {
str = 80
} else if(quality == 5) { } else if(quality == 5) {
str = 160 str = 160
} }
}
return str return str
} }

View File

@ -32,22 +32,23 @@
</div> </div>
</li> </li>
</div> </div>
<div class="back-time" v-if="localWalletStore.token && LOCKER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase()"> <div class="back-time" v-if="FOUNDER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase() || LOCKER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase()">
<div> <div>
<img src="@/assets/img/marketplace/time.png" alt=""> <img src="@/assets/img/marketplace/time.png" alt="">
<span>Time remaining : &nbsp; <span>Time remaining : &nbsp;
{{ timeStaking(detailData.nft.last_lock_time)[0] }}:d {{ timeStaking(detailData.nft.last_lock_time)[0] }}d:
{{ timeStaking(detailData.nft.last_lock_time)[1] }}:h {{ timeStaking(detailData.nft.last_lock_time)[1] }}h:
{{ timeStaking(detailData.nft.last_lock_time)[2] }}:m {{ timeStaking(detailData.nft.last_lock_time)[2] }}m
</span> </span>
</div> </div>
<div> <div>
<span>+{{ contribution(detailData.nft.detail.quality) }}/d</span> <span class="expected" v-if="detailData.nft.type == 1 || detailData.nft.type == 12">+{{contribution(detailData.nft.detail.quality, detailData.nft.type)}}/d</span>
<span class="expected" v-if="detailData.nft.type == 13">+{{contribution(detailData.nft.quality, detailData.nft.type)}}/d</span>
<img src="@/assets/img/marketplace/totalContribution.png" alt=""> <img src="@/assets/img/marketplace/totalContribution.png" alt="">
</div> </div>
</div> </div>
<div class="top-right-btns"> <div class="top-right-btns">
<div v-if="localWalletStore.token && LOCKER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase()"> <div v-if="FOUNDER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase() || LOCKER_ADDRESS.toLowerCase() == detailData.nft.owner_address.toLowerCase()">
<div class="cancel" @click="localWalletStore.token == '' ? cardLogin() : backStaking()">Unstake</div> <div class="cancel" @click="localWalletStore.token == '' ? cardLogin() : backStaking()">Unstake</div>
</div> </div>
<div v-if="(detailData.nft.type == 1 && !detailData.nft.contract_address) && LOCKER_ADDRESS.toLowerCase() != detailData.nft.owner_address.toLowerCase()"> <div v-if="(detailData.nft.type == 1 && !detailData.nft.contract_address) && LOCKER_ADDRESS.toLowerCase() != detailData.nft.owner_address.toLowerCase()">
@ -225,7 +226,7 @@ const usd = ref('')
const price = ref('') const price = ref('')
const loadingDialogVisible = ref(false) const loadingDialogVisible = ref(false)
const LOCKER_ADDRESS = ref(import.meta.env.VUE_APP_LOCKER_ADDRESS) const LOCKER_ADDRESS = ref(import.meta.env.VUE_APP_LOCKER_ADDRESS)
const FOUNDER_ADDRESS = ref(import.meta.env.VUE_APP_FOUNDER_ADDRESS)
// //
const cardLogin = async () => { const cardLogin = async () => {
@ -373,6 +374,15 @@ const backStaking = async () => {
message: 'Unstake Failed - Negative in-game gold balance. Please adjust your balance to continue.' message: 'Unstake Failed - Negative in-game gold balance. Please adjust your balance to continue.'
}).show() }).show()
} else { } else {
if(detailData.value.nft.type == 13) {
founderLock()
} else if(detailData.value.nft.type == 1 || detailData.value.nft.type == 12) {
heroLock()
}
}
}
const heroLock = async () => {
try { try {
const bc = new BlockChain() const bc = new BlockChain()
let res = await bc.locker.unlockOrMintGameNft(detailData.value.nft.contract_address,[detailData.value.nft.token_id]) let res = await bc.locker.unlockOrMintGameNft(detailData.value.nft.contract_address,[detailData.value.nft.token_id])
@ -393,6 +403,26 @@ const backStaking = async () => {
} }
} }
} }
const founderLock = async () => {
try {
const bc = new BlockChain()
let res = await bc.locker.unlockMain(detailData.value.nft.contract_address,[detailData.value.nft.token_id])
if(res) {
let timer = setTimeout(() => {
message.success('Unstake success.')
router.go(-1)
clearTimeout(timer);
}, 2000);
}
} catch (e) {
if(e.message.indexOf('rejected') > -1) {
message.error('User rejected the request')
} else if (e.message.indexOf('select wallet') > -1) {
message.error('user cancel select wallet')
} else {
message.error('Unstake fail')
}
}
} }
@ -686,6 +716,7 @@ onMounted(() => {
line-height: 40px; line-height: 40px;
color: #9A50FF; color: #9A50FF;
} }
&:nth-child(2) { &:nth-child(2) {
margin-left: 20px; margin-left: 20px;
span { span {
@ -694,6 +725,9 @@ onMounted(() => {
font-size: 20px; font-size: 20px;
color: #F3F0FF; color: #F3F0FF;
} }
.expected {
color: #00DEFF;
}
img { img {
width: 25px; width: 25px;
margin-left: 10px; margin-left: 10px;