准备0726版本

This commit is contained in:
yuyongdong 2024-07-25 13:53:48 +08:00
parent 3c53269ca2
commit 15715d28cf
12 changed files with 425 additions and 67 deletions

View File

@ -1,7 +1,7 @@
VUE_APP_BASE_API='https://market.cebg.games'
VUE_APP_BASE_API2='https://invitation.counterfire.games'
//VUE_APP_BASE_API2='http://192.168.100.83:3000/'
VUE_APP_GPAL_API='https://game2006api.cebggame.com/'
VUE_APP_GPAL_API='https://game2006sapi.cebggame.com/'
# VUE_APP_PASSPORT_PUBLISHABLE_KEY=pk_imapik-test-8c2FAlWxWAoRITk1v9rH
VUE_APP_PASSPORT_PUBLISHABLE_KEY=pk_imapik-test-eRr-kyOKaZ0jIdrvrPCn
VUE_APP_PASSPORT_REDIRECT_URI=http://localhost:4000
@ -9,7 +9,7 @@ VUE_APP_PASSPORT_LOGOUT_URI=http://localhost:4000
# VUE_APP_PASSPORT_CLIENT_ID=eTmUah69p7ZdRhRYzBta6lZRKXXeXDYj
VUE_APP_PASSPORT_CLIENT_ID=0FNfXxQywm7wjdbyLTDzWt4txc53yRrT
VUE_APP_PASSPORT_MARKET_ADDRESS=0x7d117aA8BD6D31c4fa91722f246388f38ab1942c
VUE_APP_UAW_API='https://oauth-svr.cebggame.com'
VUE_APP_UAW_API='https://oauth-svr.cebggame.com/task'
VUE_APP_MKT_API='https://market-test.kingsome.cn'
VUE_APP_NET_ID='13473'
VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34'

View File

@ -1,7 +1,7 @@
VUE_APP_BASE_API='https://market.cebg.games'
VUE_APP_BASE_API2='https://invitation.counterfire.games'
//VUE_APP_BASE_API2='http://192.168.100.83:3000/'
VUE_APP_GPAL_API='https://game2006api.cebggame.com/'
VUE_APP_GPAL_API='https://game2006sapi.cebggame.com/'
# VUE_APP_PASSPORT_PUBLISHABLE_KEY=pk_imapik-test-8c2FAlWxWAoRITk1v9rH
VUE_APP_PASSPORT_PUBLISHABLE_KEY=pk_imapik-test-eRr-kyOKaZ0jIdrvrPCn
VUE_APP_PASSPORT_REDIRECT_URI=https://market.kingsome.cn
@ -9,7 +9,7 @@ VUE_APP_PASSPORT_LOGOUT_URI=https://market.kingsome.cn
# VUE_APP_PASSPORT_CLIENT_ID=eTmUah69p7ZdRhRYzBta6lZRKXXeXDYj
VUE_APP_PASSPORT_CLIENT_ID=0FNfXxQywm7wjdbyLTDzWt4txc53yRrT
VUE_APP_PASSPORT_MARKET_ADDRESS=0x7d117aA8BD6D31c4fa91722f246388f38ab1942c
VUE_APP_UAW_API='https://oauth-svr.cebggame.com'
VUE_APP_UAW_API='https://oauth-svr.cebggame.com/task'
VUE_APP_MKT_API='https://market-test.kingsome.cn'
VUE_APP_NET_ID='13473'
VUE_APP_MARKET_CURRENCY='0xFd42bfb03212dA7e1A4608a44d7658641D99CF34'

View File

@ -4,6 +4,7 @@
"version": "0.0.0",
"scripts": {
"task": "vite --host --mode dev",
"test": "vite --host --mode test",
"dev": "vite --host --mode development",
"prod": "vite --host --mode production",
"build:task": "vite build --mode dev",

View File

@ -300,10 +300,12 @@ onMounted(() => {
height: 30px;
top: 20px;
left: 20px;
font-size: 18px;
}
.img-btm {
bottom: 30px;
left: 30px;
font-size: 18px;
>div {
width: 120px;
height: 40px;

View File

@ -139,9 +139,9 @@ const getMyAssets = async () => {
reqData.value.cursor = next_cursor.value.next_cursor
// let res = await apiLockState(myADdress, reqData.value)
let res = await apiActivity(data, myADdress)
console.log(res,'--------------------------------')
return
// nftList.value = [...nftList.value, ...res.rows]
// console.log(res,'--------------------------------')
// return
nftList.value = [...nftList.value, ...res.rows]
// nftListBox = nftList.value.reduce((acc, obj) => {
// const existingObj = acc.find(item => item.token_id == obj.token_id)
// if(!existingObj) {

View File

@ -10,7 +10,7 @@
<div class="total">
<p>Total Contribution Credits:&nbsp; <span>{{ contributionPointTotal }}</span></p>
<img src="@/assets/img/marketplace/totalContribution.png" alt="">
<img class="icon" @click="rulesDialogVisible = true" src="@/assets/img/marketplace/History.png" alt="">
<img class="icon" @click="conLogDialogVisible = true" src="@/assets/img/marketplace/History.png" alt="">
</div>
<div class="day">
<p>Daily Expected:&nbsp;&nbsp; <span>+{{ contributionPoint }}/d</span></p>
@ -42,17 +42,59 @@
<div class="uaw-cec-amount">
<p>
CEC:
<span v-if="cecInfo?.total != 0">{{ priceCalculated(BigInt(cecInfo?.total),18) }}</span>
<span v-if="cecInfo?.total != 0">{{ priceCalculated(BigInt(cecInfo?.total),18).toString().match(/^\d+(?:\.\d{0,2})?/)[0] }}</span>
<span v-else>0</span>
</p>
</div>
<div class="btn">
<span class="yes" v-if="cecInfo?.stages[0]?.unlocked || cecInfo?.stages[1]?.unlocked" @click="confirmDialogVisible = false">Collection</span>
<span class="no" v-else @click="confirmCec">Collection</span>
<!-- <span class="yes" v-if="cecInfo?.stages[0]?.unlocked || cecInfo?.stages[1]?.unlocked" @click="confirmDialogVisible = false">Collection</span>
<span class="no" v-else @click="confirmCec">Collection</span> -->
</div>
<div ref="logModal">
<a-modal :class="'logModal'" :getContainer="() => $refs.logModal" v-model:open="logDialogVisible" :closable="false" :footer="null" :maskClosable="false">
<div class="log-title">CEC Incentives Record</div>
<div ref="conLogModal">
<a-modal :class="'conLogModal'" :getContainer="() => $refs.conLogModal" v-model:open="conLogDialogVisible" :closable="false" :footer="null" :maskClosable="false">
<div class="log-title">Staking Contribution Credits Record</div>
<div class="closable" @click="conLogDialogVisible = false">
<img src="@/assets/img/marketplace/Close_counter.png" alt="">
</div>
<div class="log-content">
<div class="log-header">
<!-- <li>
Event
</li> -->
<li>
Date
</li>
<li>
Reward
</li>
</div>
<div class="log-body">
<div v-if="contributionList == undefined || contributionList.length <= 0" class="no-data">
<div>
<img src="@/assets/img/marketplace/Empty_state.png" alt="">
</div>
<p>No Data</p>
</div>
<div v-else class="pages" v-for="(item, index) in contributionList" :key="index">
<!-- <li>
<span>contributionList</span>
</li> -->
<li>
{{ timeFormat(item.date*1000) }}
</li>
<li class="cec-amount">
<!-- <span>{{ priceCalculated(BigInt(item.contribution_point),18).toString().match(/^\d+(?:\.\d{0,2})?/)[0] }}</span> -->
<span>{{item.contribution_point.match(/^\d+(?:\.\d{0,.})?/)[0]}}</span>
<img src="@/assets/img/marketplace/totalContribution.png" alt="">
</li>
</div>
</div>
</div>
</a-modal>
</div>
<div ref="cecLogModal">
<a-modal :class="'cecLogModal'" :getContainer="() => $refs.cecLogModal" v-model:open="logDialogVisible" :closable="false" :footer="null" :maskClosable="false">
<div class="log-title">CEC Allocation Record</div>
<div class="closable" @click="logDialogVisible = false">
<img src="@/assets/img/marketplace/Close_counter.png" alt="">
</div>
@ -74,13 +116,14 @@
<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 == 'game test parse 1'">P2E Season 1</span>
<span v-else>{{ item.desc }}</span>
</li>
<li>
{{ item.earnTime }}
</li>
<li class="cec-amount">
<span v-if="item.desc != ''">{{ priceCalculated(BigInt(item.amount),18) }}</span>
<img v-if="item.desc != ''" src="@/assets/img/marketplace/Icon_Points.png" alt="">
<span v-if="item.desc != ''">{{ priceCalculated(BigInt(item.amount),18).toString().match(/^\d+(?:\.\d{0,2})?/)[0] }}</span>
<img v-if="item.desc != ''" src="@/assets/img/marketplace/CECIcon.png" alt="">
</li>
</div>
<div class="no-data" v-if="cecInfo?.total == 0">
@ -266,8 +309,8 @@
import { ref, watch, computed, onMounted } from "vue"
import ConfirmDialog from "@/components/Dialogs/confirmDialog.vue";
import {createModal} from "@/utils/model.util";
import { apiCecInfo, apiExpected, apiUserData } from "@/utils/marketplace"
import { priceCalculated } from "@/configs/priceCalculate"
import { apiCecInfo, apiExpected, apiUserData, apiContribution } from "@/utils/marketplace"
import { priceCalculated, timeFormat } from "@/configs/priceCalculate"
import { useMarketplaceStore } from "@/store/marketplace"
import {walletStore} from "@/store/wallet";
@ -338,6 +381,20 @@ const getCecInfo = async () => {
}
}
const conLogDialogVisible = ref(false)
const contributionList = ref()
const getContribution = async () => {
let address = localWalletStore.address
if(address) {
const {Rows, errcode} = await apiContribution(address)
if(errcode == 0) {
contributionList.value = Rows
}
} else {
return
}
}
const contributionPoint = ref(0)
const getExpected = async () => {
let address = localWalletStore.address
@ -367,6 +424,7 @@ const getUserData = async () => {
const dataInfo = async () => {
await getCecInfo()
await getContribution()
await getExpected()
await getUserData()
}
@ -458,6 +516,11 @@ onMounted(() => {
height: 23px;
margin-left: 10px;
}
.icon {
width: 27px;
height: 27px;
cursor: pointer;
}
}
.day {
font-family: 'Poppins';
@ -589,7 +652,250 @@ onMounted(() => {
}
}
}
:deep(.logModal) {
:deep(.conLogModal) {
width: 1052px !important;
height: 714px;
background: #1A1821;
box-shadow: 0px 15px 28px 3px rgba(22,22,22,0.13);
border-radius: 100px;
border: 1px solid #B966FF;
.ant-modal-content {
padding: 0 99px;
color: #FFF;
background: #1A1821;
box-shadow: 0px 0px 0px 0px rgba(22,22,22,0.13);
border-radius: 100px;
.ant-modal-body {
overflow: hidden;
.log-title {
font-family: 'Anton';
font-weight: 400;
font-size: 48px;
color: #FFFFFF;
margin-top: 23px;
}
.closable {
position: absolute;
right: -30px;
top: -30px;
z-index: 99;
cursor: pointer;
img {
width: 120px;
height: 120px;
}
}
.log-content {
min-height: 510px;
.log-header {
display: flex;
li {
width: 50%;
height: 48px;
line-height: 48px;
text-align: center;
font-family: 'Poppins';
font-weight: 400;
font-size: 14px;
color: #A8A5AC;
background: #2d2738;
&:nth-child(1) {
border-radius: 50px 0 0 50px;
}
// &:nth-child(2) {
// width: 40%;
// }
&:nth-child(2) {
border-radius: 0 50px 50px 0;
}
}
}
.log-body {
width: 100%;
height: 520px;
overflow-y: auto;
.pages {
display: flex;
width: 100%;
li {
width: 50%;
height: 60px;
line-height: 60px;
font-weight: 600;
font-size: 16px;
font-family: 'Poppins';
text-align: center;
}
.cec-amount {
display: flex;
justify-content: center;
align-items: center;
color: #9950FA;
span {
display: flex;
justify-content: end;
// width: 80px;
text-align: right;
}
img {
width: 28px;
height: 25px;
margin-left: 15px;
}
}
}
.no-data {
position: relative;
margin-top: 60px;
div {
width: 260px;
height: 260px;
margin: 0 auto;
}
p {
position: absolute;
bottom: 50px;
left: 52%;
transform: translateX(-50%);
font-family: 'Poppins';
font-weight: bold;
font-size: 28px;
color: #8587B2;
}
}
&::-webkit-scrollbar {
width: 5px;
}
&::-webkit-scrollbar-track {
background: #171220;
border-radius: 2px;
}
&::-webkit-scrollbar-corner {
display: block;
}
&::-webkit-scrollbar-thumb {
height: 15px;
background: #9950fd;
border-radius: 10px;
}
}
}
.pagination {
display: flex;
align-items: center;
justify-content: space-between;
// background: #1778f1;
// .prev {
// // width: 100px;
// // height: 100px;
// display: flex;
// align-items: center;
// div {
// width: 100px;
// height: 100px;
// }
// }
.pager {
span {
display: inline-block;
width: 29px;
height: 29px;
line-height: 29px;
text-align: center;
border-radius: 10px;
margin: 0 5px;
background: #2d2738;
font-family: 'Poppins';
font-weight: 200;
font-size: 14px;
cursor: pointer;
}
.active {
background: #5d5275;
}
}
.prev, .next {
// width: 100px;
// height: 100px;
display: flex;
align-items: center;
font-family: 'Poppins';
font-weight: 600;
font-size: 16px;
color: #9950FD;
cursor: pointer;
div {
width: 100px;
height: 100px;
}
}
img {
width: 100%;
height: 100%;
}
}
.ant-table-wrapper {
.ant-spin-nested-loading {
.ant-spin-container {
.ant-table {
background: #2d2738;
border-bottom: 0px solid #2d2738;
color: #FFF;
.ant-table-container {
.ant-table-content {
.ant-table-thead {
border-radius: 60px;
tr {
border-radius: 60px;
overflow: hidden;
height: 40px;
line-height: 40px;
th {
background: #2d2738;
border-color: rgba(0,0,0,0);
text-align: center;
font-family: 'Poppins';
font-weight: 400;
font-size: 14px;
color: #A8A5AC;
border-radius: 50px !important;
padding: 0;
overflow: hidden;
&::before {
display: none;
}
}
.ant-table-cell {
overflow: hidden;
border-radius: 50px !important;
}
}
.ant-table-cell {
overflow: hidden;
border-radius: 50px !important;
}
}
.ant-table-tbody {
tr {
background: #16141b;
td {
border-color: rgba(0,0,0,0);
background: #16141b !important;
overflow: visible !important;
vertical-align: middle;
}
}
}
}
}
}
}
}
}
}
}
}
:deep(.cecLogModal) {
width: 1052px !important;
height: 714px;
background: #1A1821;
@ -626,7 +932,7 @@ onMounted(() => {
.log-header {
display: flex;
li {
width: 33%;
width: 30%;
height: 48px;
line-height: 48px;
text-align: center;
@ -638,6 +944,9 @@ onMounted(() => {
&:nth-child(1) {
border-radius: 50px 0 0 50px;
}
&:nth-child(2) {
width: 40%;
}
&:nth-child(3) {
border-radius: 0 50px 50px 0;
}
@ -649,13 +958,16 @@ onMounted(() => {
display: flex;
width: 100%;
li {
width: 33%;
width: 30%;
height: 60px;
line-height: 60px;
font-weight: 600;
font-size: 16px;
font-family: 'Poppins';
text-align: center;
&:nth-child(2) {
width: 40%;
}
}
.cec-amount {
display: flex;
@ -663,7 +975,7 @@ onMounted(() => {
align-items: center;
color: #9950FA;
img {
width: 20px;
width: 25px;
height: 28px;
margin-left: 15px;
}
@ -671,6 +983,7 @@ onMounted(() => {
}
.no-data {
position: relative;
margin-top: 60px;
div {
width: 260px;
height: 260px;

View File

@ -43,7 +43,7 @@
</div>
<div class="card-btn" v-if="nftData.type != 13 && LOCKER_ADDRESS.toLowerCase() != nftData.owner_address.toLowerCase()">
<div class="card-sell" v-if="nftData.on_sale == 0">
<span v-if="nftData?.status">loading</span>
<span v-if="nftData?.status" class="bgC">loading</span>
<span v-else @click="sellNft(nftData)">List</span>
</div>
<div class="card-cancel" v-if="nftData.on_sale == 1" @click="cancelNft(nftData)">Cancel listing</div>
@ -53,10 +53,10 @@
<span v-if="nftData?.status">loading</span>
<span @click="unStake(nftData)">Unstake</span>
</div>
<div class="card-sell" v-else>
<!-- <div class="card-sell" v-else>
<span v-if="nftData?.status">loading</span>
<span v-else @click="lockToGame('founder')">Stake</span>
</div>
</div> -->
</div>
<SellDialog :sellDialogVisible="sellDialogVisible" :floorPrice="floorPrice" :sellDataArr="sellDataArr" @handleClose="sellHandleClose" />
<LoadingDialog :loadingDialogVisible="loadingDialogVisible" />
@ -504,6 +504,16 @@ onMounted(() => {
width: 140px;
height: 48px;
}
span {
display: flex;
justify-content: center;
border-radius: 10px;
align-items: center;
width: 100%;
height: 100%;
color: #FF6271;
border: 2px solid #ff6978;
}
}
.enabled {
justify-content: center;
@ -548,6 +558,12 @@ onMounted(() => {
.card-cancel {
background: #ff6271;
}
.card-sell {
.bgC {
background: #ff6271;
border-radius: 12px;
}
}
.card-cat {
width: 71px;
display: flex;

View File

@ -11,11 +11,14 @@
</div>
</template>
</a-table-column>
<a-table-column title="Status" data-index="nft" :width="400">
<template #default="{ text: nft }">
<a-table-column title="Status" data-index="type" :width="400">
<template #default="{ text: type }">
<div class="status">
<div class="nft-status" v-if="nft.item_id == '10017' || nft.item_id == '10018'">Redeem</div>
<div class="nft-status" v-else>Stake</div>
<!-- <div class="nft-status" v-if="nft.item_id == '10017' || nft.item_id == '10018'">Redeem</div>
<div class="nft-status" v-else>Stake</div> -->
<div class="nft-status" v-if="type == 1">Mint</div>
<div class="nft-status" v-else-if="type == 2">Stake</div>
<div class="nft-status" v-else-if="type == 3">UnStake</div>
</div>
</template>
</a-table-column>
@ -27,10 +30,10 @@
</div>
</template>
</a-table-column>
<a-table-column title="From" data-index="event" :width="400">
<template #default="{ text: event }">
<a-table-column title="From" data-index="from" :width="400">
<template #default="{ text: from }">
<div class="sender">
<div class="nft-sender">{{ sliceAddress(localWalletStore.address) }}</div>
<div class="nft-sender">{{ sliceAddress(from) }}</div>
</div>
</template>
</a-table-column>
@ -41,17 +44,17 @@
</div>
</template>
</a-table-column>
<a-table-column title="To" data-index="nft" :width="400">
<template #default="{ text: nft }">
<a-table-column title="To" data-index="to" :width="400">
<template #default="{ text: to }">
<div class="recipient">
<div class="nft-recipient">{{ sliceAddress(nft.owner_address) }}</div>
<div class="nft-recipient">{{ sliceAddress(to) }}</div>
</div>
</template>
</a-table-column>
<a-table-column title="Date" data-index="nft" :width="400">
<template #default="{ text: nft }">
<a-table-column title="Date" data-index="date" :width="400">
<template #default="{ text: date }">
<div class="date">
<div class="nft-date">{{ timeFormat(nft.last_lock_time*1000) }}</div>
<div class="nft-date">{{ timeFormat(date*1000) }}</div>
</div>
</template>
</a-table-column>

View File

@ -1,6 +1,6 @@
<template>
<div class="price">
<h2>Price</h2>
<h2>Price (USDT)</h2>
<div class="sort-price">
<a-input v-model:value="minPriceValue" placeholder="Min" />
<span>to</span>

View File

@ -109,11 +109,7 @@ const navList = reactive([
{ id: 0, name: "ABOUT", path: "/about" },
// { id: 1, name: "ASSETS", path: "https://pledge.kingsome.cn/" },
// { id: 1, name: "planet", path: "https://planet.kingsome.cn/" },
// {
// id: 2,
// name: "STAKE",
// path: "https://pledge.kingsome.cn",
// },
// {
// id: 3,
// name: "hashrate",
@ -139,18 +135,6 @@ const navList = reactive([
{ label: "Discord", link: "https://discord.gg/counterfire" },
],
},
// {
// id: 5,
// name: "EVENT",
// path: "/contact",
// submenu: [
// { label: "Badge", link: "https://badge.counterfire.games/" },
// {
// label: "Gacha",
// link: "https://gacha.counterfire.games/",
// },
// ],
// },
{
id: 2,
name: "MARKETPLACE",
@ -160,12 +144,36 @@ const navList = reactive([
id: 3,
name: "ASSETS",
path: "/assets",
submenu: [
{ label: "Before 2024", link: "https://pledge.kingsome.cn" },
{
label: "After 2024",
path: "/assets",
},
],
},
{
id: 4,
name: "NOTICE",
path: "/notice",
}
},
{
id: 5,
name: "EVENT",
path: "/contact",
submenu: [
{ label: "Badge", link: "https://badge.counterfire.games/" },
{
label: "Gacha",
link: "https://gacha.counterfire.games/",
},
],
},
// {
// id: 6,
// name: "STAKE",
// path: "https://pledge.kingsome.cn",
// },
]);
function click(event) {
router.push(event.key);
@ -185,6 +193,8 @@ const handlHome = () => {
};
function handNavCurent(nav) {
// console.log(nav)
// return
activeIndex.value = nav.id;
// if (nav.id == 1) {
// window.open(nav.path, "_blank");
@ -194,9 +204,13 @@ function handNavCurent(nav) {
} else if(nav.id == 2) {
router.push(nav.path);
} else if(nav.id == 3) {
router.push(nav.path);
if(nav.submenu[1]?.path) {
router.push(nav.submenu[1]?.path)
}
} else if(nav.id == 4) {
router.push(nav.path);
// } else if(nav.id == 6) {
// window.open(nav.path, "_blank");
}
// if (nav.id == 1 || nav.id == 2 || nav.id == 3) {
// window.open(nav.path, "_blank");

View File

@ -115,7 +115,7 @@ export const nftDetail = async(address, tokenId) => {
// UAW查询领取
export const apiCecInfo = async(address) => {
let res = await axios.get(`${API_UAW}/task/api/cec/info/${address}`)
let res = await axios.get(`${API_UAW}/api/cec/info/${address}`)
return res.data
}
@ -156,6 +156,12 @@ export const apiTxHash = async (net_id, account_address) => {
// 活动交易记录
export const apiActivity = async (data, account_address) => {
const url = `${API_BASE}/api/chain/activity/${account_address}`
const url = `${API_BASE}/api/chain/event/activity/${account_address}`
return httpPost(url, data)
}
// 贡献值记录
export const apiContribution = async (account_address) => {
const url = `${API_BASE}/api/activity/stacking/history/${account_address}`
return httpGet(url, {})
}

View File

@ -85,17 +85,20 @@
<div v-if="myAddress == detailData.nft.owner_address && detailData.nft?.status != 1">
<div class="sell" @click="beginSell" v-if="detailData.nft.on_sale == 0 && detailData.nft.type != 13">List</div>
<div class="cancel" @click="cancelSell" v-if="detailData.nft.on_sale == 1">Cancel listing</div>
<div v-if="detailData.nft?.status == 1" class="cancel">
<span>Loading</span>
</div>
<div class="redeem" v-else-if="detailData.nft.on_sale == 0 && (detailData.nft.type == 1 || detailData.nft.type == 12)">
<span @click="lockToGame('convert')">Stake</span>
<div class="redeem" v-if="detailData.nft.on_sale == 0 && (detailData.nft.type == 1 || detailData.nft.type == 12)" @click="lockToGame('convert')">
<span>Stake</span>
</div>
<div class="redeem" v-else-if="detailData.nft.type == 13">
<span @click="lockToGame('founder')">Stake</span>
<span v-if="detailData.nft?.status == 1" @click="lockToGame('founder')">Loading</span>
<span v-else @click="lockToGame('founder')">Stake</span>
</div>
<!-- <div class="redeem" @click="lockToGame('redeem')" v-if="detailData.nft.on_sale == 0 && detailData.nft.type == 11">Redeem</div> -->
</div>
<!-- <div v-else-if="detailData.nft?.status == 1">
<div class="cancel">
<span>Loading</span>
</div>
</div> -->
</div>
<div class="info">
<h2>Info</h2>