2.4.4 更改主播上限

This commit is contained in:
2026-03-26 13:38:35 +08:00
parent 1c67cbc5ea
commit b81a0377b8
7 changed files with 562 additions and 78 deletions

View File

@@ -55,10 +55,10 @@
<div class="content-area">
<!-- 列表面板 -->
<div class="list-panel">
<div v-infinite-scroll="loadMore" :infinite-scroll-distance="100" :infinite-scroll-disabled="loading || noMore"
class="pk-list">
<div v-for="(item, index) in pkList" :key="index" class="pk-card" :class="{ selected: selectedItem === item }"
@click="handleItemClick(item)">
<div v-infinite-scroll="loadMore" :infinite-scroll-distance="50" :infinite-scroll-disabled="loading || noMore"
:infinite-scroll-immediate="true" class="pk-list">
<div v-for="item in pkList" :key="item.id || item.anchorId" class="pk-card"
:class="{ selected: selectedItem === item }" @click="handleItemClick(item)">
<!-- 头像 -->
<div class="pk-avatar">
<img :src="item.anchorIcon" alt="" />
@@ -67,8 +67,8 @@
<!-- 个人信息 -->
<div class="pk-personal">
<span class="pk-name">{{ item.disPlayId }}</span>
<span class="pk-gender" :class="item.sex === 1 ? 'male' : 'female'">
{{ item.sex === 1 ? '男' : '女' }}
<span class="pk-gender" :class="item.sex === '1' ? 'male' : 'female'">
{{ item.sex === '1' ? '男' : '女' }}
</span>
<span class="pk-country">{{ item.country }}</span>
</div>
@@ -89,6 +89,14 @@
</div>
<div v-if="pkList.length === 0" class="empty-tip">暂无数据</div>
<!-- 加载状态提示 -->
<div v-if="loading" class="loading-tip">
<span class="loading-spinner"></span>
<span>加载中...</span>
</div>
<div v-else-if="noMore && pkList.length > 0" class="no-more-tip">
已加载全部数据
</div>
</div>
</div>
@@ -152,8 +160,8 @@
<div class="anchor-info">
<div class="anchor-name">{{ anchor.anchorId }}</div>
<div class="anchor-detail">
<span class="anchor-gender" :class="anchor.sex === 1 ? 'male' : 'female'">
{{ anchor.sex === 1 ? '男' : '女' }}
<span class="anchor-gender" :class="anchor.sex === '1' ? 'male' : 'female'">
{{ anchor.sex === '1' ? '男' : '女' }}
</span>
<span class="anchor-coin">{{ anchor.coin }}K</span>
</div>
@@ -249,11 +257,20 @@ const formatTime = TimestamptolocalTime
function switchMode() {
isHallMode.value = !isHallMode.value
selectedItem.value = null
// 重置分页和加载状态
page.value = 0
loading.value = false
noMore.value = false
// 清空当前模式的数据
if (isHallMode.value) {
hallList.value = []
pkList.value = hallList.value
} else {
todayList.value = []
pkList.value = todayList.value
}
// 重新加载数据
loadPkList()
}
// 搜索
@@ -281,6 +298,7 @@ function handleReset() {
// 加载更多
function loadMore() {
console.log('[PkHall] loadMore 被调用')
loadPkList()
}
@@ -341,9 +359,27 @@ async function loadPkList() {
}
} catch (e) {
console.error('加载 PK 列表失败', e)
noMore.value = true
ElMessage.error('加载失败,请稍后重试')
} finally {
loading.value = false
// 数据加载完成后,使用 nextTick 强制重新计算滚动位置
nextTick(() => {
const pkListEl = document.querySelector('.pk-list')
if (pkListEl) {
// 触发一次滚动事件,确保无限滚动指令能够正确检测滚动位置
pkListEl.dispatchEvent(new Event('scroll'))
// 手动检查是否已经滚动到底部,如果是,则直接调用 loadMore
const { scrollTop, scrollHeight, clientHeight } = pkListEl
const isAtBottom = scrollTop + clientHeight >= scrollHeight - 10
if (isAtBottom && !loading.value && !noMore.value) {
console.log('[PkHall] 检测到已滚动到底部,手动调用 loadMore')
setTimeout(() => {
loadMore()
}, 100)
}
}
})
}
}
@@ -546,7 +582,7 @@ async function confirmInvite() {
}
}
onMounted(() => {
onMounted(async () => {
countryOptions.value = getCountryNamesArray()
currentUser.value = getMainUserData() || {}
const userId = getUserId(currentUser.value)
@@ -556,7 +592,27 @@ onMounted(() => {
// 初始加载 PK 大厅数据(通过 loadPkList 统一管理 page/loading/noMore 状态)
if (userId) {
loadPkList()
await loadPkList()
// 延迟一段时间,确保无限滚动指令已经完全初始化
setTimeout(() => {
const pkListEl = document.querySelector('.pk-list')
if (pkListEl) {
const { scrollTop, scrollHeight, clientHeight } = pkListEl
console.log('[PkHall] pk-list 元素信息:', {
scrollTop,
scrollHeight,
clientHeight,
isAtBottom: scrollTop + clientHeight >= scrollHeight - 10
})
// 手动滚动到底部,然后触发滚动事件
pkListEl.scrollTop = scrollHeight - clientHeight
setTimeout(() => {
pkListEl.dispatchEvent(new Event('scroll'))
console.log('[PkHall] 手动滚动到底部并触发滚动事件')
}, 100)
}
}, 500)
} else {
console.warn('[PkHall] 未找到用户 ID无法加载数据')
}
@@ -860,6 +916,43 @@ onUnmounted(() => {
font-size: 16px;
}
// 加载状态提示
.loading-tip {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
padding: 20px;
color: #2563eb; // blue-600
font-size: 14px;
}
.loading-spinner {
width: 16px;
height: 16px;
border: 2px solid #e2e8f0;
border-top: 2px solid #2563eb;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.no-more-tip {
text-align: center;
padding: 20px;
color: #94a3b8; // slate-400
font-size: 14px;
}
// 聊天面板
.chat-panel {
width: 350px;