统一排行榜对齐星雀UI,页面资源后台配置实时刷新

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-06-27 01:26:11 +08:00
parent 1ab2e2080a
commit 21112173f2
292 changed files with 64010 additions and 81 deletions

View File

@@ -1,9 +1,10 @@
/**
* 统一排行榜(打手/管事/组长/商家)
* 统一排行榜(打手/管事/组长/商家)— 对齐星雀 fighter-rank排序按收益/流水
* POST /yonghu/phbhqsj
*/
import request from '../../utils/request.js'
import { resolveAvatarUrl, getDefaultAvatarUrl } from '../../utils/avatar.js'
import { getPaihangImgUrls } from '../../utils/page-assets.js'
const RANK_API = '/yonghu/phbhqsj'
@@ -32,8 +33,8 @@ const ROLE_META = {
mainType: 'money',
metrics: [
{ field: 'jiedan_zongliang', label: '接单量', type: 'int' },
{ field: 'chengjiao_zongliang', label: '成交量', type: 'int' },
{ field: 'jiedan_zonge', label: '接单额', type: 'money' },
{ field: 'chengjiao_zongliang', label: '成交量', type: 'int' },
],
},
guanshi: {
@@ -71,7 +72,7 @@ const ROLE_META = {
function buildAvatar(path, app) {
const def = getDefaultAvatarUrl(app)
if (!path) return def
if (!path || path === 'null' || path === 'undefined') return def
return resolveAvatarUrl(path, app) || def
}
@@ -83,7 +84,7 @@ Page({
currentRole: 'dashou',
currentDate: '今日',
roleMeta: ROLE_META.dashou,
sortLabel: '成交总额',
sortLabel: '收益',
isLoading: true,
rankList: [],
topThree: [],
@@ -95,34 +96,34 @@ Page({
onLoad(options) {
const type = options.type || options.rankType || 'dashou'
const validRole = ROLE_META[type] ? type : 'dashou'
this._onConfigReady = () => this.initPageAssets()
getApp().on('configReady', this._onConfigReady)
this.initPageAssets()
this.applyRole(validRole, false)
this.fetchRankList()
},
onUnload() {
if (this._onConfigReady) {
getApp().off('configReady', this._onConfigReady)
}
},
onPullDownRefresh() {
this.initPageAssets()
this.fetchRankList().finally(() => wx.stopPullDownRefresh())
},
initPageAssets() {
this.syncDefaultAvatar()
const g = getApp().globalData
const oss = (g.ossImageUrl || '').replace(/\/$/, '')
const assets = g.paihangAssets || {}
const url = (p) => (p ? `${oss}/${String(p).replace(/^\//, '')}` : '')
this.setData({
imgUrls: {
pageBg: url(assets.pageBg) || `${oss}/beijing/paihangbang/page-bg.jpg`,
cardBg: url(assets.cardBg) || `${oss}/beijing/paihangbang/list-card-bg.png`,
emptyIcon: url(assets.emptyIcon) || `${oss}/beijing/paihangbang/empty.png`,
refreshIcon: url(assets.refreshIcon) || `${oss}/beijing/paihangbang/icon-refresh.png`,
},
})
this.setData({ imgUrls: getPaihangImgUrls() })
},
syncDefaultAvatar() {
const def = getDefaultAvatarUrl()
if (def) this.setData({ defaultAvatar: def })
if (def && def !== this.data.defaultAvatar) {
this.setData({ defaultAvatar: def })
}
},
ensureAvatars() {
@@ -134,7 +135,8 @@ Page({
this.setData({ defaultAvatar: def })
return
}
const isValid = (url) => url && typeof url === 'string' && (url.startsWith('http') || (oss && url.indexOf(oss) === 0))
const isValid = (url) =>
url && typeof url === 'string' && (url.startsWith('http') || (oss && url.indexOf(oss) === 0))
const fix = (item) => ({ ...item, avatar: isValid(item.avatar) ? item.avatar : def })
this.setData({
defaultAvatar: def,
@@ -165,6 +167,7 @@ Page({
},
onRefreshTap() {
this.initPageAssets()
this.fetchRankList()
},
@@ -256,6 +259,7 @@ Page({
},
onShow() {
this.initPageAssets()
this.syncDefaultAvatar()
this.ensureAvatars()
this.registerNotificationComponent()

View File

@@ -75,6 +75,7 @@ page {
font-weight: 600;
background: rgba(107, 163, 247, 0.45);
border-color: rgba(107, 163, 247, 0.65);
box-shadow: 0 0 20rpx rgba(107, 163, 247, 0.2);
}
.date-grid {
@@ -183,16 +184,19 @@ page {
.badge-first {
color: #fff;
background: linear-gradient(145deg, #6BA3F7, #4A7FD4);
box-shadow: 0 4rpx 16rpx rgba(107, 163, 247, 0.4);
}
.badge-silver {
color: #fff;
background: linear-gradient(145deg, #A8B4C4, #7A8899);
box-shadow: 0 4rpx 12rpx rgba(168, 180, 196, 0.25);
}
.badge-bronze {
color: #fff;
background: linear-gradient(145deg, #C4A882, #9A7858);
box-shadow: 0 4rpx 12rpx rgba(196, 168, 130, 0.25);
}
.p-avatar-wrap {
@@ -201,7 +205,12 @@ page {
margin-bottom: 12rpx;
}
.wrap-first { padding: 5rpx; background: linear-gradient(145deg, #8EB8FF, #5B8FD8); }
.wrap-first {
padding: 5rpx;
background: linear-gradient(145deg, #8EB8FF, #5B8FD8);
box-shadow: 0 6rpx 24rpx rgba(107, 163, 247, 0.3);
}
.wrap-silver { background: linear-gradient(145deg, #C8D0DA, #909AA8); }
.wrap-bronze { background: linear-gradient(145deg, #D4B896, #A88860); }
@@ -222,6 +231,7 @@ page {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: center;
}
.p-name-first { font-size: 28rpx; color: #fff; }
@@ -270,6 +280,16 @@ page {
.p-pedestal {
width: 88%;
border-radius: 20rpx 20rpx 0 0;
position: relative;
}
.p-pedestal::before {
content: '';
position: absolute;
top: 0; left: 10%; right: 10%;
height: 2rpx;
background: rgba(255,255,255,0.15);
border-radius: 2rpx;
}
.pedestal-first {
@@ -335,6 +355,7 @@ page {
align-items: center;
padding: 20rpx 22rpx;
background: rgba(12, 16, 28, 0.92);
backdrop-filter: blur(8px);
}
.lc-rank {