This commit is contained in:
zhx 2026-07-14 14:07:20 +08:00
parent c2a681ea2b
commit ee32247f4a
2 changed files with 1326 additions and 380 deletions

File diff suppressed because it is too large Load Diff

View File

@ -232,6 +232,7 @@
.badges img { .badges img {
width: 12px; width: 12px;
height: 12px; height: 12px;
object-fit: contain;
} }
.score-pill { .score-pill {
position: absolute; position: absolute;
@ -377,6 +378,7 @@
.row-badges img { .row-badges img {
width: 12px; width: 12px;
height: 12px; height: 12px;
object-fit: contain;
} }
.row-score { .row-score {
display: flex; display: flex;
@ -925,6 +927,14 @@
function byId(id) { function byId(id) {
return document.getElementById(id); return document.getElementById(id);
} }
function escapeAttr(value) {
return String(value || '')
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}
function queryValue(name) { function queryValue(name) {
return new URLSearchParams(window.location.search).get( return new URLSearchParams(window.location.search).get(
name name
@ -994,11 +1004,22 @@
}; };
}); });
} }
function badges() { function badges(item) {
var html = ''; var covers =
for (var i = 0; i < 4; i += 1) item && item.user
html += '<img src="assets/vip.webp" alt="">'; ? item.user.short_badge_cover_urls || []
return html; : [];
// 榜单设计最多预留四个短徽章位;没有真实封面时返回空串,不再展示占位徽章。
return covers
.slice(0, 4)
.map(function (coverURL) {
return (
'<img src="' +
escapeAttr(coverURL) +
'" alt="">'
);
})
.join('');
} }
function score(value, className) { function score(value, className) {
return ( return (
@ -1015,6 +1036,13 @@
var room = item.room || {}; var room = item.room || {};
var userId = item.user_id || user.user_id || ''; var userId = item.user_id || user.user_id || '';
var roomId = item.room_id || room.room_id || ''; var roomId = item.room_id || room.room_id || '';
var shortBadgeCovers =
user.short_badge_cover_urls ||
user.shortBadgeCoverUrls ||
[];
if (!Array.isArray(shortBadgeCovers)) {
shortBadgeCovers = [];
}
return { return {
rank: Number(item.rank || 0), rank: Number(item.rank || 0),
user_id: String(userId || ''), user_id: String(userId || ''),
@ -1048,6 +1076,13 @@
user.avatar_url || user.avatar_url ||
user.avatarUrl || user.avatarUrl ||
'', '',
short_badge_cover_urls:
shortBadgeCovers.filter(function (url) {
return (
typeof url === 'string' &&
url.trim()
);
}),
} }
: null, : null,
room: roomId room: roomId
@ -1108,7 +1143,7 @@
'" alt=""><img class="podium-frame" src="assets/top-frame.webp" alt=""><div class="podium-name">' + '" alt=""><img class="podium-frame" src="assets/top-frame.webp" alt=""><div class="podium-name">' +
userName(top[0]) + userName(top[0]) +
'</div><div class="badges">' + '</div><div class="badges">' +
badges() + badges(top[0]) +
'</div>' + '</div>' +
score(top[0].gift_value, 'score-pill') + score(top[0].gift_value, 'score-pill') +
'</button>'; '</button>';
@ -1120,7 +1155,7 @@
'" alt=""><img class="podium-frame" src="assets/side-frame-blue.webp" alt=""><div class="podium-name">' + '" alt=""><img class="podium-frame" src="assets/side-frame-blue.webp" alt=""><div class="podium-name">' +
userName(top[1]) + userName(top[1]) +
'</div><div class="badges">' + '</div><div class="badges">' +
badges() + badges(top[1]) +
'</div>' + '</div>' +
score(top[1].gift_value, 'score-pill') + score(top[1].gift_value, 'score-pill') +
'</button>'; '</button>';
@ -1132,7 +1167,7 @@
'" alt=""><img class="podium-frame" src="assets/side-frame-red.webp" alt=""><div class="podium-name">' + '" alt=""><img class="podium-frame" src="assets/side-frame-red.webp" alt=""><div class="podium-name">' +
userName(top[2]) + userName(top[2]) +
'</div><div class="badges">' + '</div><div class="badges">' +
badges() + badges(top[2]) +
'</div>' + '</div>' +
score(top[2].gift_value, 'score-pill') + score(top[2].gift_value, 'score-pill') +
'</button>'; '</button>';
@ -1151,7 +1186,7 @@
'" alt=""><div class="row-main"><div class="row-name">' + '" alt=""><div class="row-main"><div class="row-name">' +
userName(item) + userName(item) +
'</div><div class="row-badges">' + '</div><div class="row-badges">' +
badges() + badges(item) +
'</div></div>' + '</div></div>' +
score(item.gift_value, 'row-score') + score(item.gift_value, 'row-score') +
'</button>' '</button>'