fix(MyPopup): 修复收藏和发布列表显示问题,优化数据更新逻辑
refactor(app): 改进用户信息获取方式,使用事件监听替代轮询 style(details): 移除多余空格,优化HTML结构 perf(index): 替换nextTick为setTimeout延迟布局计算,提升性能 chore: 更新依赖和构建文件,清理无用资源
This commit is contained in:
@@ -654,8 +654,7 @@
|
||||
</div>
|
||||
<template v-else>
|
||||
<div class="respond-pop-title">
|
||||
共<span class="respond-pop-amount">{{ ripostecount.user }}</span
|
||||
>人回应
|
||||
共<span class="respond-pop-amount">{{ ripostecount.user }}</span>人回应
|
||||
<img class="respond-title-icon" @click="closePopList()" src="@/assets/img/cross-grey.png" />
|
||||
</div>
|
||||
<div class="respond-list">
|
||||
|
||||
@@ -21,169 +21,168 @@
|
||||
<div class="in-end" v-if="page == 0 && list.length > 0">- 到底了 -</div>
|
||||
|
||||
<div class="right-returnTop" v-if="returnTopState" @click="returnTop()">
|
||||
<img src="@/assets/img/returnTop-icon.png" style="width: 24px; height: 24px;" />
|
||||
<img src="@/assets/img/returnTop-icon.png" style="width: 24px; height: 24px" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ElMessage } from "element-plus"
|
||||
let isNeedLogin = inject("isNeedLogin")
|
||||
const goLogin = inject("goLogin")
|
||||
import { ElMessage } from "element-plus";
|
||||
let isNeedLogin = inject("isNeedLogin");
|
||||
const goLogin = inject("goLogin");
|
||||
|
||||
useHead({ script: [{ src: "https://app.gter.net/bottom?tpl=header&menukey=mj" }, { src: "https://app.gter.net/bottom?tpl=footer,popupnotification", body: true }] })
|
||||
useHead({ script: [{ src: "https://app.gter.net/bottom?tpl=header&menukey=mj" }, { src: "https://app.gter.net/bottom?tpl=footer,popupnotification", body: true }] });
|
||||
|
||||
const gridContainer = ref(null)
|
||||
let masonryInstance = null
|
||||
const gridContainer = ref(null);
|
||||
let masonryInstance = null;
|
||||
|
||||
const route = useRoute()
|
||||
let keyword = ref("") // 搜索
|
||||
keyword.value = route.query["keyword"]
|
||||
const route = useRoute();
|
||||
let keyword = ref(""); // 搜索
|
||||
keyword.value = route.query["keyword"];
|
||||
|
||||
watchEffect(() => {
|
||||
if (keyword.value != route.query["keyword"]) {
|
||||
list.value = []
|
||||
page.value = 1
|
||||
keyword.value = route.query["keyword"]
|
||||
getList(route.query["keyword"])
|
||||
list.value = [];
|
||||
page.value = 1;
|
||||
keyword.value = route.query["keyword"];
|
||||
getList(route.query["keyword"]);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
let Masonry = await import("masonry-layout")
|
||||
let Masonry = await import("masonry-layout");
|
||||
|
||||
masonryInstance = new Masonry.default(gridContainer.value, {
|
||||
itemSelector: ".box",
|
||||
gutter: 22.5,
|
||||
})
|
||||
});
|
||||
|
||||
// masonryInstance.reloadItems()
|
||||
// masonryInstance.layout()
|
||||
|
||||
window.addEventListener("scroll", handleScroll)
|
||||
window.addEventListener("scroll", handleScroll);
|
||||
|
||||
getList()
|
||||
})
|
||||
getList();
|
||||
});
|
||||
|
||||
const handleScroll = () => {
|
||||
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
|
||||
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
||||
|
||||
if (scrollTop > 200) returnTopState.value = true
|
||||
else returnTopState.value = false
|
||||
if (scrollTop > 200) returnTopState.value = true;
|
||||
else returnTopState.value = false;
|
||||
|
||||
const scrollHeight = document.documentElement.scrollHeight
|
||||
const clientHeight = document.documentElement.clientHeight
|
||||
const scrollHeight = document.documentElement.scrollHeight;
|
||||
const clientHeight = document.documentElement.clientHeight;
|
||||
|
||||
// 列表下 滑动到底部 获取新数据
|
||||
if (scrollTop + clientHeight >= scrollHeight - 40) getList()
|
||||
}
|
||||
if (scrollTop + clientHeight >= scrollHeight - 40) getList();
|
||||
};
|
||||
|
||||
let page = ref(1)
|
||||
let count = ref(0)
|
||||
let list = ref([]) // 列表数据
|
||||
let loading = false // 加载中
|
||||
let page = ref(1);
|
||||
let count = ref(0);
|
||||
let list = ref([]); // 列表数据
|
||||
let loading = false; // 加载中
|
||||
|
||||
const getList = () => {
|
||||
if (page.value == 0 || loading) return
|
||||
if (page.value == 0 || loading) return;
|
||||
|
||||
loading = true
|
||||
loading = true;
|
||||
getListHttp({ page: page.value, keyword: keyword.value })
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res.code != 200) {
|
||||
page.value = 0
|
||||
page.value = 0;
|
||||
ElMessage({
|
||||
message: res.message,
|
||||
type: "error",
|
||||
})
|
||||
return
|
||||
});
|
||||
return;
|
||||
}
|
||||
let data = res.data
|
||||
let data = res.data;
|
||||
// list.value = data.data
|
||||
|
||||
list.value = list.value.concat(data.data || [])
|
||||
list.value = list.value.concat(data.data || []);
|
||||
|
||||
if (data.count > list.value.length) page.value++
|
||||
else page.value = 0
|
||||
if (data.count > list.value.length) page.value++;
|
||||
else page.value = 0;
|
||||
|
||||
count.value = data["count"]
|
||||
count.value = data["count"];
|
||||
|
||||
nextTick(() => {
|
||||
if (masonryInstance) {
|
||||
masonryInstance.reloadItems()
|
||||
masonryInstance.layout()
|
||||
}
|
||||
})
|
||||
setTimeout(() => {
|
||||
if (!masonryInstance) return;
|
||||
masonryInstance.reloadItems();
|
||||
masonryInstance.layout();
|
||||
}, 500);
|
||||
})
|
||||
.finally(() => (loading = false))
|
||||
}
|
||||
.finally(() => (loading = false));
|
||||
};
|
||||
|
||||
let user = inject("userInfo");
|
||||
let openAttest = inject("openAttest");
|
||||
const realname = inject("realname");
|
||||
|
||||
const handleLike = token => {
|
||||
const handleLike = (token) => {
|
||||
console.log(realname.value == 0, user.value.uin > 0);
|
||||
|
||||
|
||||
if (realname.value == 0 && user.value.uin > 0) {
|
||||
openAttest();
|
||||
return;
|
||||
}
|
||||
|
||||
if (isNeedLogin.value) {
|
||||
goLogin()
|
||||
return
|
||||
goLogin();
|
||||
return;
|
||||
}
|
||||
|
||||
operateLikeHttp({ token }).then(res => {
|
||||
if (res.code != 200) return
|
||||
let data = res.data
|
||||
operateLikeHttp({ token }).then((res) => {
|
||||
if (res.code != 200) return;
|
||||
let data = res.data;
|
||||
|
||||
list.value.forEach(element => {
|
||||
list.value.forEach((element) => {
|
||||
if (element["token"] == token) {
|
||||
element["islike"] = data["status"]
|
||||
element["likenum"] = data["count"]
|
||||
element["islike"] = data["status"];
|
||||
element["likenum"] = data["count"];
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
ElMessage.success(res.message)
|
||||
})
|
||||
}
|
||||
ElMessage.success(res.message);
|
||||
});
|
||||
};
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener("scroll", handleScroll)
|
||||
})
|
||||
window.removeEventListener("scroll", handleScroll);
|
||||
});
|
||||
|
||||
const router = useRouter()
|
||||
const router = useRouter();
|
||||
|
||||
// 清除搜索
|
||||
// const clearKeyword = () => router.push(`/index.html`)
|
||||
const clearKeyword = () => goToURL(`/index.html`, false)
|
||||
const clearKeyword = () => goToURL(`/index.html`, false);
|
||||
|
||||
try {
|
||||
if (process.server) {
|
||||
await getListHttp({ page: 1, keyword: keyword.value }).then(res => {
|
||||
await getListHttp({ page: 1, keyword: keyword.value }).then((res) => {
|
||||
if (res.code != 200) {
|
||||
page.value = 0
|
||||
page.value = 0;
|
||||
ElMessage({
|
||||
message: res.message,
|
||||
type: "error",
|
||||
})
|
||||
return
|
||||
});
|
||||
return;
|
||||
}
|
||||
let data = res.data
|
||||
let data = res.data;
|
||||
|
||||
list.value = list.value.concat(data.data || [])
|
||||
})
|
||||
list.value = list.value.concat(data.data || []);
|
||||
});
|
||||
}
|
||||
} catch (error) {}
|
||||
|
||||
let returnTopState = ref(false)
|
||||
let returnTopState = ref(false);
|
||||
|
||||
const returnTop = () => {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: "smooth",
|
||||
})
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
||||
Reference in New Issue
Block a user