|
@@ -1,53 +1,60 @@
|
|
|
<template>
|
|
|
<div class="tab-group-page" ref="pageWrapperDom" @scroll="pageScroll">
|
|
|
<div class="list-wrapper" ref="listWrapperDom">
|
|
|
- <div class="list-item"
|
|
|
- v-for="(item, index) in listData"
|
|
|
- :key="index"
|
|
|
- @click="clickItem(item, index)">
|
|
|
- <div class="left">
|
|
|
- <img :src="item.avatarUrl" class="icon-avatar">
|
|
|
- </div>
|
|
|
- <div class="right">
|
|
|
- <div class="top">
|
|
|
- <div class="icon-nft-wrapper">
|
|
|
- <el-popover
|
|
|
- :width="340"
|
|
|
- placement="right"
|
|
|
- trigger="hover"
|
|
|
- popper-style="background: #FFFFFF;
|
|
|
- box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.2);
|
|
|
- border-radius: 20px;
|
|
|
- padding: 20px;
|
|
|
- box-sizing: border-box;">
|
|
|
- <template #reference>
|
|
|
- <img :src="item.nftItem.imagePath" class="icon-nft" @click.stop="">
|
|
|
- </template>
|
|
|
- <template #default>
|
|
|
- <div class="preview-nft">
|
|
|
- <img :src="item.nftItem.imagePath" class="icon-nft-big">
|
|
|
- <div class="content">
|
|
|
- <div class="nft-name">
|
|
|
- {{item.nftItem.nftItemName}}
|
|
|
- </div>
|
|
|
- <div class="nft-desc">
|
|
|
- <div v-html="item.nftItem.metadata.description"></div>
|
|
|
+
|
|
|
+ <template v-if="listData.length">
|
|
|
+ <div class="list-item"
|
|
|
+ v-for="(item, index) in listData"
|
|
|
+ :key="index"
|
|
|
+ @click="clickItem(item, index)">
|
|
|
+ <div class="left">
|
|
|
+ <img :src="item.avatarUrl" class="icon-avatar">
|
|
|
+ </div>
|
|
|
+ <div class="right">
|
|
|
+ <div class="top">
|
|
|
+ <div class="icon-nft-wrapper">
|
|
|
+ <el-popover
|
|
|
+ :width="340"
|
|
|
+ placement="right"
|
|
|
+ trigger="hover"
|
|
|
+ popper-style="background: #FFFFFF;
|
|
|
+ box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.2);
|
|
|
+ border-radius: 20px;
|
|
|
+ padding: 20px;
|
|
|
+ box-sizing: border-box;">
|
|
|
+ <template #reference>
|
|
|
+ <img :src="item.nftItem.imagePath" class="icon-nft" @click.stop="">
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <div class="preview-nft">
|
|
|
+ <img :src="item.nftItem.imagePath" class="icon-nft-big">
|
|
|
+ <div class="content">
|
|
|
+ <div class="nft-name">
|
|
|
+ {{item.nftItem.nftItemName}}
|
|
|
+ </div>
|
|
|
+ <div class="nft-desc">
|
|
|
+ <div v-html="item.nftItem.metadata.description"></div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-popover>
|
|
|
- </div>
|
|
|
- <div class="nick-name">
|
|
|
- {{item.nickName}}{{index}}
|
|
|
- </div>
|
|
|
- <div class="screen-name">
|
|
|
- {{item.screenName}}
|
|
|
+ </template>
|
|
|
+ </el-popover>
|
|
|
+ </div>
|
|
|
+ <div class="nick-name">
|
|
|
+ {{item.nickName}}{{index}}
|
|
|
+ </div>
|
|
|
+ <div class="screen-name">
|
|
|
+ {{item.screenName}}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <div class="post-content" v-html="item.textContent"></div>
|
|
|
</div>
|
|
|
- <div class="post-content" v-html="item.textContent"></div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </template>
|
|
|
+ <template v-else >
|
|
|
+ <img :src="require('@/assets/svg/icon-tweet-loading.svg')"
|
|
|
+ class="icon-loading" >
|
|
|
+ </template>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -65,6 +72,7 @@ let groupInfo = {};
|
|
|
let listData = ref([])
|
|
|
let listWrapperDom = ref(null);
|
|
|
let pageWrapperDom = ref(null);
|
|
|
+let loading = ref(false);
|
|
|
|
|
|
let listReqParams = {
|
|
|
params: {
|
|
@@ -72,6 +80,7 @@ let listReqParams = {
|
|
|
preTimestamp: ''
|
|
|
},
|
|
|
loadMore: false,
|
|
|
+ isInit: false,
|
|
|
};
|
|
|
|
|
|
const clickItem = (data, index) => {
|
|
@@ -165,7 +174,6 @@ const sendMessageToContent = (params) => {
|
|
|
}
|
|
|
|
|
|
const getListData = () => {
|
|
|
- if(!groupInfo.nftGroupId) return;
|
|
|
getGroupPostList({
|
|
|
params: {
|
|
|
pageSize: listReqParams.params.pageSize,
|
|
@@ -173,6 +181,7 @@ const getListData = () => {
|
|
|
groupId: groupInfo.nftGroupId
|
|
|
}
|
|
|
}).then(res => {
|
|
|
+ loading.value = false;
|
|
|
if (res.code == 0) {
|
|
|
let resData = res.data;
|
|
|
if (resData.length) {
|
|
@@ -210,6 +219,8 @@ const initData = () => {
|
|
|
}).then(res => {
|
|
|
if(res.code == 0) {
|
|
|
groupInfo = res.data || {};
|
|
|
+ if(!groupInfo.nftGroupId) return;
|
|
|
+ loading.value = true;
|
|
|
getListData()
|
|
|
}
|
|
|
})
|
|
@@ -405,5 +416,22 @@ html, body, #app {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ .icon-loading {
|
|
|
+ width: 26px;
|
|
|
+ height: 26px;
|
|
|
+ display: block;
|
|
|
+ margin: 20px auto;
|
|
|
+ animation: loading infinite 0.8s linear;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes loading {
|
|
|
+ 0% {
|
|
|
+ transform: rotate(0);
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ transform: rotate(360deg);
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|