修正了 pages 名为拼音的问题

This commit is contained in:
2026-06-13 10:44:02 +08:00
parent 76cc4ac55e
commit 296e41a8a7
249 changed files with 29660 additions and 29505 deletions

1184
pages/fighter/fighter.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
{
"usingComponents": {
"global-notification": "/components/global-notification/global-notification",
"chenghao-tag": "/components/chenghao-tag/chenghao-tag",
"custom-tab-bar": "/custom-tab-bar/index"
},
"navigationBarBackgroundColor": "#e8ecf4",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "我的",
"backgroundColor": "#e8ecf4",
"backgroundTextStyle": "light",
"enablePullDownRefresh": false,
"onReachBottomDistance": 50
}

384
pages/fighter/fighter.wxml Normal file
View File

@@ -0,0 +1,384 @@
<image class="page-bg" src="{{imgUrls.pageBg}}" mode="aspectFill" />
<!-- 未注册打手(无任何服务身份时显示) -->
<block wx:if="{{!isDashou && !isGuanshi && !isZuzhang && !isKaoheguan}}">
<view class="unreg-area">
<view class="unreg-card">
<text class="unreg-title">打手认证</text>
<input class="unreg-input" type="text" placeholder="输入邀请码" maxlength="100" value="{{inviteCode}}" bindinput="onInviteCodeInput" placeholder-class="ph" />
<view class="unreg-btn" bindtap="onRegister">
<text class="unreg-btn-text">立即注册</text>
</view>
<view class="unreg-btn unreg-btn-secondary" bindtap="quickRegisterAsPlatform">
<text class="unreg-btn-text">平台直签注册</text>
</view>
<view class="unreg-clear" bindtap="clearCache">
<image class="unreg-clear-icon" src="{{imgUrls.iconClear}}" mode="aspectFit" />
<text class="unreg-clear-text">清除缓存,回到点单端</text>
</view>
</view>
</view>
</block>
<!-- 已注册 -->
<block wx:else>
<view class="main-body {{layoutSparse ? 'layout-sparse-padding' : ''}}">
<view class="refresh-btn" bindtap="onTapRefresh">
<image class="refresh-icon" src="{{imgUrls.iconRefresh}}" mode="aspectFit" />
</view>
<view class="user-card">
<image class="user-card-bg" src="{{imgUrls.userCardBg}}" mode="aspectFill" />
<view class="user-card-inner">
<image class="user-avatar" src="{{avatarUrl || imgUrls.avatarDefault}}" mode="aspectFill" bindtap="previewAvatar" />
<view class="user-info">
<view class="name-row">
<text class="user-name">{{dashouNicheng || '打手'}}</text>
<view class="role-tags">
<view class="role-tag role-tag-dashou">打手</view>
<view class="role-tag role-tag-guanshi" wx:if="{{isGuanshi}}">管事</view>
<view class="role-tag role-tag-zuzhang" wx:if="{{isZuzhang}}">组长</view>
<view class="role-tag role-tag-kaohe" wx:if="{{isKaoheguan}}">考核</view>
</view>
</view>
<view class="uid-row" bindtap="copyUid">
<text class="uid-text">UID: {{uid || '--'}}</text>
<image class="copy-icon" src="{{imgUrls.iconCopy}}" mode="aspectFit" />
</view>
</view>
</view>
</view>
<!-- 联系客服(企业微信) -->
<view class="kefu-banner" bindtap="goToKefu">
<image class="kefu-banner-bg" src="{{imgUrls.kefuBannerBg}}" mode="aspectFill" />
<view class="kefu-banner-overlay"></view>
<view class="kefu-banner-content">
<view class="kefu-banner-left">
<image class="kefu-banner-icon" src="{{imgUrls.iconKefu}}" mode="aspectFit" />
<view class="kefu-banner-text">
<text class="kefu-banner-title">在线客服</text>
<text class="kefu-banner-sub">企业微信 · 即时响应</text>
</view>
</view>
<view class="kefu-banner-btn">联系</view>
</view>
</view>
<view class="badge-zone" wx:if="{{chenghaoList.length > 0 || (isGuanshi && guanshiChenghaoList.length > 0)}}">
<scroll-view scroll-x class="badge-scroll" wx:if="{{chenghaoList.length > 0}}">
<view class="badge-tag-wrap" wx:for="{{chenghaoList}}" wx:key="index">
<chenghao-tag mingcheng="{{item.mingcheng}}" texiaoJson="{{item.texiao_json}}" />
</view>
</scroll-view>
<scroll-view scroll-x class="badge-scroll badge-scroll-sub" wx:if="{{isGuanshi && guanshiChenghaoList.length > 0}}">
<view class="badge-tag-wrap" wx:for="{{guanshiChenghaoList}}" wx:key="index">
<chenghao-tag mingcheng="{{item.mingcheng}}" texiaoJson="{{item.texiao_json}}" />
</view>
</scroll-view>
</view>
<!-- 我的资产 -->
<view class="section-card section-asset">
<!-- 黑卡 VIP -->
<view class="vip-black-card" bindtap="goToRecharge">
<image class="vip-black-bg" src="{{imgUrls.vipCardBg}}" mode="aspectFill" />
<view class="vip-black-overlay"></view>
<view class="vip-black-body">
<view class="vip-black-text">
<text class="vip-black-title">会员充值</text>
<text class="vip-black-sub">VIP 专属权益 · 尊享服务</text>
</view>
<view class="vip-black-action">
<text class="vip-black-go">去充值</text>
</view>
</view>
</view>
<view class="asset-panel">
<view class="asset-panel-fallback"></view>
<image class="asset-panel-bg" src="{{imgUrls.assetPanelBg}}" mode="aspectFill" />
<view class="asset-panel-inner">
<view class="asset-panel-head">
<image class="asset-panel-head-icon" src="{{imgUrls.iconSectionAsset}}" mode="aspectFit" />
<text class="asset-panel-head-title">我的资产</text>
</view>
<view class="total-asset-row">
<view class="total-asset-fallback"></view>
<image class="total-asset-bg" src="{{imgUrls.totalAssetBg}}" mode="aspectFill" />
<view class="total-asset-inner">
<view class="total-asset-left">
<text class="total-asset-label">总资产(可提现)</text>
<text class="total-asset-val">¥{{totalAssets}}</text>
<view class="asset-breakdown-list">
<view class="asset-breakdown-line" wx:for="{{assetBreakdown}}" wx:key="label">
<text class="breakdown-name">{{item.label}}</text>
<text class="breakdown-amt">¥{{item.amount}}</text>
</view>
</view>
</view>
<view class="withdraw-btn" catchtap="goToTotalWithdraw">提现</view>
</view>
</view>
<view class="stats-grid">
<view class="mini-stat">
<text class="mini-val">{{jinfen || '0'}}</text>
<text class="mini-lbl">积分</text>
</view>
<view class="mini-stat">
<text class="mini-val">{{yajin || '0.00'}}</text>
<text class="mini-lbl">保证金</text>
</view>
<view class="mini-stat" wx:if="{{isGuanshi}}">
<text class="mini-val">{{yaoqingzongshu || 0}}</text>
<text class="mini-lbl">邀请总数</text>
</view>
<view class="mini-stat" wx:if="{{isGuanshi}}">
<text class="mini-val">{{yichongzhiDashou || 0}}</text>
<text class="mini-lbl">已充值</text>
</view>
<view class="mini-stat" wx:if="{{isGuanshi}}">
<text class="mini-val">{{fenyongzonge || '0.00'}}</text>
<text class="mini-lbl">分成总额</text>
</view>
<view class="mini-stat" wx:if="{{isGuanshi}}">
<text class="mini-val">{{zhuanhualv || 0}}%</text>
<text class="mini-lbl">有效率</text>
</view>
<view class="mini-stat" wx:if="{{isZuzhang}}">
<text class="mini-val">{{guanshiCount || 0}}</text>
<text class="mini-lbl">邀请管事</text>
</view>
<view class="mini-stat" wx:if="{{isZuzhang}}">
<text class="mini-val">{{fenhongZonge || '0.00'}}</text>
<text class="mini-lbl">分红总额</text>
</view>
<view class="mini-stat" wx:if="{{isKaoheguan}}">
<text class="mini-val">{{shenheZongshu || 0}}</text>
<text class="mini-lbl">审核总数</text>
</view>
<view class="mini-stat" wx:if="{{isKaoheguan}}">
<text class="mini-val">{{tongguoZongshu || 0}}</text>
<text class="mini-lbl">通过总数</text>
</view>
<view class="mini-stat" wx:if="{{isKaoheguan}}">
<text class="mini-val">{{pendingShenheCount || 0}}</text>
<text class="mini-lbl">待审核</text>
</view>
</view>
</view>
</view>
</view>
<!-- 荣耀排行榜(无外层大框,梯形榜格) -->
<view class="rank-section">
<view class="rank-hub-head">
<image class="rank-hub-head-icon" src="{{imgUrls.iconSectionRank}}" mode="aspectFit" />
<view class="rank-hub-head-text">
<text class="rank-hub-title">荣耀排行榜</text>
<text class="rank-hub-sub">四榜实时更新</text>
</view>
</view>
<view class="rank-grid">
<view
class="rank-cell {{item.shapeClass}} {{item.themeClass}}"
wx:for="{{rankBoardList}}"
wx:key="type"
bindtap="goToRanking"
data-type="{{item.type}}"
>
<view class="rank-cell-inner">
<image class="rank-bg-icon" src="{{item.icon}}" mode="aspectFit" />
<view class="rank-content">
<image class="rank-main-icon" src="{{item.icon}}" mode="aspectFit" />
<text class="rank-cell-name">{{item.name}}</text>
<text class="rank-cell-sub">{{item.sub}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 打手功能 -->
<view class="section-card">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionFunc}}" mode="aspectFit" />
<text class="section-title section-title-sm">打手功能</text>
</view>
<view class="func-panel">
<image class="func-panel-bg" src="{{imgUrls.funcPanelBg}}" mode="aspectFill" />
<view class="func-grid {{layoutSparse ? 'func-grid-sparse' : ''}}">
<view class="func-cell" bindtap="goToReceiveOrder">
<image class="func-icon" src="{{imgUrls.iconGame}}" mode="aspectFit" />
<text class="func-label">抢单大厅</text>
</view>
<view class="func-cell" bindtap="goToMyOrders">
<image class="func-icon" src="{{imgUrls.iconOrders}}" mode="aspectFit" />
<text class="func-label">我的订单</text>
</view>
<view class="func-cell" bindtap="goToMyPunishment">
<image class="func-icon" src="{{imgUrls.iconPunish}}" mode="aspectFit" />
<text class="func-label">我的处罚</text>
</view>
<view class="func-cell" bindtap="goToKaohe">
<image class="func-icon" src="{{imgUrls.iconMedal}}" mode="aspectFit" />
<text class="func-label">考核金牌</text>
</view>
<view class="func-cell" bindtap="goToGuanzhuKs">
<image class="func-icon" src="{{imgUrls.iconKuaishou}}" mode="aspectFit" />
<text class="func-label">关注快手</text>
</view>
</view>
</view>
</view>
<!-- 管事功能 -->
<view class="section-card" wx:if="{{isGuanshi}}">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionGuanshi}}" mode="aspectFit" />
<text class="section-title section-title-sm">管事功能</text>
</view>
<view class="func-panel">
<image class="func-panel-bg" src="{{imgUrls.funcPanelBg}}" mode="aspectFill" />
<view class="func-grid">
<view class="func-cell" bindtap="goToInviteUser">
<image class="func-icon" src="{{imgUrls.iconInvite}}" mode="aspectFit" />
<text class="func-label">邀请用户</text>
</view>
<view class="func-cell" bindtap="goToMySubordinate">
<image class="func-icon" src="{{imgUrls.iconSub}}" mode="aspectFit" />
<text class="func-label">我的下级</text>
</view>
<view class="func-cell" bindtap="goToRechargeRecord">
<image class="func-icon" src="{{imgUrls.iconRecord}}" mode="aspectFit" />
<text class="func-label">会员记录</text>
</view>
<view class="func-cell" bindtap="goToPromoPoster">
<image class="func-icon" src="{{imgUrls.iconPoster}}" mode="aspectFit" />
<text class="func-label">推广海报</text>
</view>
<view class="func-cell" bindtap="contactZuzhang">
<image class="func-icon" src="{{imgUrls.iconContact}}" mode="aspectFit" />
<text class="func-label">联系组长</text>
</view>
</view>
</view>
</view>
<!-- 组长功能 -->
<view class="section-card" wx:if="{{isZuzhang}}">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionZuzhang}}" mode="aspectFit" />
<text class="section-title section-title-sm">组长功能</text>
</view>
<view class="func-panel">
<image class="func-panel-bg" src="{{imgUrls.funcPanelBg}}" mode="aspectFill" />
<view class="func-grid">
<view class="func-cell" bindtap="goToFenhongJilu">
<image class="func-icon" src="{{imgUrls.iconRecord}}" mode="aspectFit" />
<text class="func-label">分红记录</text>
</view>
<view class="func-cell" bindtap="goToYaoqingGuanshi">
<image class="func-icon" src="{{imgUrls.iconInvite}}" mode="aspectFit" />
<text class="func-label">邀请管事</text>
</view>
</view>
</view>
</view>
<!-- 考核官功能 -->
<view class="section-card" wx:if="{{isKaoheguan}}">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionKaohe}}" mode="aspectFit" />
<text class="section-title section-title-sm">考核官功能</text>
</view>
<view class="func-panel">
<image class="func-panel-bg" src="{{imgUrls.funcPanelBg}}" mode="aspectFill" />
<view class="func-grid">
<view class="func-cell" bindtap="goToKaoheDafen">
<image class="func-icon" src="{{imgUrls.iconKaoheDafen}}" mode="aspectFit" />
<text class="func-label">考核打分</text>
</view>
<view class="func-cell" bindtap="goToKaoheJilu">
<image class="func-icon" src="{{imgUrls.iconKaoheJilu}}" mode="aspectFit" />
<text class="func-label">考核记录</text>
</view>
<view class="func-cell" bindtap="goToKaoheZhongxin">
<image class="func-icon" src="{{imgUrls.iconKaoheZhongxin}}" mode="aspectFit" />
<text class="func-label">考核中心</text>
</view>
<view class="func-cell" bindtap="goToKaoheWithdraw">
<image class="func-icon" src="{{imgUrls.iconWithdraw}}" mode="aspectFit" />
<text class="func-label">考核提现</text>
</view>
</view>
</view>
</view>
<!-- 身份认证:仅未认证身份 + 商家(已认证可进商家端) -->
<view class="section-card" wx:if="{{showAuthSection}}">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionMore}}" mode="aspectFit" />
<text class="section-title section-title-sm">身份认证</text>
</view>
<view class="func-panel">
<image class="func-panel-bg" src="{{imgUrls.authPanelBg}}" mode="aspectFill" />
<view class="auth-grid auth-grid-dynamic">
<view
class="auth-cell"
wx:for="{{pendingAuthList}}"
wx:key="type"
bindtap="onTapAuthItem"
data-type="{{item.type}}"
>
<image class="auth-cell-icon" src="{{item.icon}}" mode="aspectFit" />
<text class="auth-cell-name">{{item.name}}</text>
<text class="auth-cell-tag {{item.done ? 'auth-cell-tag-done' : ''}}">{{item.tag}}</text>
</view>
</view>
</view>
</view>
<!-- 更多 -->
<view class="section-card section-last">
<view class="section-head-line">
<image class="section-head-icon" src="{{imgUrls.iconSectionMore}}" mode="aspectFit" />
<text class="section-title section-title-sm">更多</text>
</view>
<view class="list-card">
<image class="list-card-bg" src="{{imgUrls.listBg}}" mode="aspectFill" />
<view class="list-card-inner">
<view class="list-item" bindtap="contactInviter">
<image class="list-icon" src="{{imgUrls.iconInvite}}" mode="aspectFit" />
<text class="list-text">联系邀请人</text>
<image class="list-arrow" src="{{imgUrls.iconArrow}}" mode="aspectFit" />
</view>
<view class="list-item" bindtap="goToModifyInfo">
<image class="list-icon" src="{{imgUrls.iconEdit}}" mode="aspectFit" />
<text class="list-text">修改个人信息</text>
<image class="list-arrow" src="{{imgUrls.iconArrow}}" mode="aspectFit" />
</view>
<view class="list-item" bindtap="goToRules">
<image class="list-icon" src="{{imgUrls.iconBook}}" mode="aspectFit" />
<text class="list-text">用户规则</text>
<image class="list-arrow" src="{{imgUrls.iconArrow}}" mode="aspectFit" />
</view>
<view class="list-item" bindtap="clearCache">
<image class="list-icon" src="{{imgUrls.iconClear}}" mode="aspectFit" />
<text class="list-text">清除缓存</text>
<text class="list-sub">回点单端</text>
<image class="list-arrow" src="{{imgUrls.iconArrow}}" mode="aspectFit" />
</view>
</view>
</view>
</view>
</view>
</block>
<view class="loading-mask" wx:if="{{isLoading}}">
<view class="loading-spinner"></view>
</view>
<global-notification id="global-notification" />
<custom-tab-bar />
<popup-notice id="popupNotice" />

982
pages/fighter/fighter.wxss Normal file
View File

@@ -0,0 +1,982 @@
page {
background: #F8FAFE;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', sans-serif;
color: #1A1A1A;
}
/* .page-bg 与全局相同,仅保留差异 */
.page-bg {
opacity: 0.42;
}
.unreg-area {
position: relative;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 0 40rpx;
}
.unreg-card {
width: 100%;
background: rgba(255, 255, 255, 0.78);
backdrop-filter: blur(25rpx);
border-radius: 32rpx;
padding: 40rpx 32rpx;
box-shadow: 0 12rpx 40rpx rgba(0, 0, 0, 0.05);
border: 1rpx solid rgba(255, 255, 255, 0.6);
}
.unreg-title,
.section-title {
font-size: 30rpx;
font-weight: 700;
color: #1A1A1A;
display: block;
margin-bottom: 16rpx;
}
.section-title-sm {
font-size: 26rpx;
margin-bottom: 12rpx;
color: #444;
}
/* .unreg-input 与 .input-rounded 类似,仅保留差异 */
.unreg-input {
height: 80rpx;
border-radius: 40rpx;
margin-bottom: 16rpx;
}
.ph { color: #999; }
/* .unreg-btn 与 .btn .btn-secondary 类似,仅保留差异 */
.unreg-btn {
width: 100%;
height: 80rpx;
background: rgba(255, 255, 255, 0.65);
border-radius: 40rpx;
border: 1rpx solid rgba(0, 0, 0, 0.06);
margin-bottom: 16rpx;
}
/* .unreg-btn-secondary 与 .btn-secondary 类似,仅保留差异 */
.unreg-btn-secondary {
margin-bottom: 0;
background: rgba(255, 255, 255, 0.45);
}
.unreg-btn-text {
font-size: 28rpx;
font-weight: 600;
}
.unreg-clear {
display: flex;
align-items: center;
justify-content: center;
margin-top: 28rpx;
padding-top: 20rpx;
border-top: 1rpx solid rgba(0, 0, 0, 0.05);
}
.unreg-clear-icon {
width: 28rpx;
height: 28rpx;
margin-right: 10rpx;
opacity: 0.65;
}
.unreg-clear-text {
font-size: 22rpx;
color: #888;
}
.main-body {
position: relative;
z-index: 2;
padding: 0 24rpx 150rpx;
}
/* .refresh-btn 与全局 .refresh-btn .refresh-btn--light 完全相同,删除 */
/* .refresh-icon 与全局 .refresh-icon 完全相同,删除 */
.user-card {
position: relative;
margin-top: 48rpx;
margin-bottom: 20rpx;
border-radius: 28rpx;
overflow: hidden;
min-height: 120rpx;
box-shadow: 0 8rpx 28rpx rgba(0, 0, 0, 0.06);
}
.user-card-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.user-card-inner {
position: relative;
z-index: 1;
display: flex;
align-items: center;
padding: 20rpx 24rpx;
background: rgba(255, 255, 255, 0.72);
backdrop-filter: blur(12rpx);
}
/* .user-avatar 与 .avatar-circle .avatar-md 类似,仅保留差异 */
.user-avatar {
margin-right: 20rpx;
}
.user-info { flex: 1; min-width: 0; }
.name-row {
display: flex;
align-items: center;
flex-wrap: wrap;
margin-bottom: 8rpx;
}
.user-name {
font-size: 30rpx;
font-weight: 700;
margin-right: 6rpx;
}
.role-tags {
display: flex;
flex-wrap: wrap;
gap: 2rpx;
align-items: center;
margin-left: 2rpx;
}
.role-tag {
font-size: 18rpx;
padding: 4rpx 12rpx;
border-radius: 12rpx;
font-weight: 600;
line-height: 1.35;
border: 1rpx solid transparent;
}
.role-tag-dashou { background: #e8edf3; color: #2c3e50; border-color: #b8c4d0; }
.role-tag-guanshi { background: #edf0ea; color: #3d5238; border-color: #c2d0bc; }
.role-tag-zuzhang { background: #f0ece8; color: #5c4a38; border-color: #d4c8b8; }
.role-tag-kaohe { background: #eceef3; color: #3a4460; border-color: #c0c8d8; }
.uid-row {
display: inline-flex;
align-items: center;
background: rgba(0, 0, 0, 0.03);
border-radius: 20rpx;
padding: 4rpx 14rpx;
}
.uid-text { font-size: 22rpx; margin-right: 8rpx; }
.copy-icon { width: 22rpx; height: 22rpx; }
.badge-zone { margin-bottom: 12rpx; }
.badge-scroll { white-space: nowrap; }
.badge-scroll-sub { margin-top: 6rpx; }
.badge-tag-wrap {
display: inline-block;
transform: scale(0.68);
transform-origin: left center;
margin-right: -12rpx;
}
.section-card { margin-bottom: 22rpx; }
.section-last { margin-bottom: 32rpx; }
.section-head-line {
display: flex;
align-items: center;
margin-bottom: 12rpx;
}
.section-head-icon {
width: 32rpx;
height: 32rpx;
margin-right: 8rpx;
opacity: 0.88;
}
.section-title-sm {
font-size: 22rpx;
margin-bottom: 0;
color: #555;
font-weight: 600;
}
/* 黑卡 VIP */
.vip-black-card {
position: relative;
height: 152rpx;
border-radius: 28rpx;
overflow: hidden;
margin-bottom: 16rpx;
box-shadow: 0 12rpx 40rpx rgba(20, 20, 24, 0.18);
}
.vip-black-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.vip-black-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
background: linear-gradient(135deg, rgba(18, 18, 22, 0.72) 0%, rgba(38, 38, 44, 0.55) 100%);
pointer-events: none;
}
.vip-black-body {
position: relative;
z-index: 2;
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 28rpx;
box-sizing: border-box;
}
.vip-black-text {
flex: 1;
min-width: 0;
}
.vip-black-title {
display: block;
font-size: 30rpx;
font-weight: 700;
color: #f3ead8;
letter-spacing: 1rpx;
}
.vip-black-sub {
display: block;
font-size: 20rpx;
color: rgba(243, 234, 216, 0.62);
margin-top: 6rpx;
}
.vip-black-action {
flex-shrink: 0;
padding: 14rpx 28rpx;
background: linear-gradient(135deg, rgba(243, 234, 216, 0.22) 0%, rgba(243, 234, 216, 0.1) 100%);
border: 1rpx solid rgba(243, 234, 216, 0.35);
border-radius: 999rpx;
}
.vip-black-go {
font-size: 24rpx;
font-weight: 600;
color: #f3ead8;
}
/* 资产面板 */
.asset-panel {
position: relative;
border-radius: 28rpx;
overflow: hidden;
box-shadow: 0 12rpx 40rpx rgba(26, 43, 80, 0.1);
border: 1rpx solid rgba(212, 175, 110, 0.28);
}
.asset-panel-fallback {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
background: linear-gradient(145deg, #faf6ee 0%, #ece4d4 45%, #e6edf8 100%);
}
.asset-panel-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
.asset-panel-inner {
position: relative;
z-index: 2;
padding: 20rpx 18rpx 14rpx;
background: rgba(255, 255, 255, 0.62);
backdrop-filter: blur(20rpx);
}
.asset-panel-head {
display: flex;
align-items: center;
margin-bottom: 14rpx;
}
.asset-panel-head-icon {
width: 30rpx;
height: 30rpx;
margin-right: 8rpx;
}
.asset-panel-head-title {
font-size: 28rpx;
font-weight: 700;
color: #222;
}
.money-strip {
display: flex;
gap: 12rpx;
margin-bottom: 14rpx;
overflow-x: auto;
}
.money-block {
flex: 1;
min-width: 200rpx;
border-radius: 20rpx;
padding: 16rpx 14rpx;
background: rgba(0, 0, 0, 0.025);
border: 1rpx solid rgba(0, 0, 0, 0.05);
}
.money-label {
font-size: 20rpx;
color: #888;
display: block;
}
.money-val {
font-size: 34rpx;
font-weight: 800;
display: block;
margin: 6rpx 0 4rpx;
line-height: 1.15;
color: #1A1A1A;
}
.money-tip {
font-size: 18rpx;
color: #AAA;
}
.stats-grid {
display: flex;
flex-wrap: wrap;
border-top: 1rpx solid rgba(0, 0, 0, 0.05);
padding-top: 12rpx;
}
.mini-stat {
width: 20%;
text-align: center;
padding: 8rpx 0;
box-sizing: border-box;
}
.mini-val {
font-size: 24rpx;
font-weight: 700;
color: #333;
display: block;
}
.mini-lbl {
font-size: 18rpx;
color: #999;
display: block;
margin-top: 4rpx;
}
/* 排行榜 */
.rank-section {
margin-bottom: 22rpx;
padding: 0 2rpx;
}
.rank-hub-head {
display: flex;
align-items: center;
margin-bottom: 18rpx;
}
.rank-hub-head-icon {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
}
.rank-hub-title {
font-size: 28rpx;
font-weight: 700;
color: #222;
display: block;
}
.rank-hub-sub {
font-size: 20rpx;
color: #999;
margin-top: 2rpx;
display: block;
}
.rank-grid {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
row-gap: 18rpx;
}
.rank-cell {
width: 48.5%;
height: 156rpx;
position: relative;
border-radius: 24rpx;
overflow: hidden;
filter: drop-shadow(0 8rpx 18rpx rgba(0, 0, 0, 0.08));
}
.rank-shape-left {
clip-path: polygon(
0 8%,
5% 0,
95% 0,
100% 5%,
87% 95%,
5% 100%,
0 92%
);
}
.rank-shape-right {
clip-path: polygon(
14% 5%,
5% 0,
95% 0,
100% 5%,
100% 95%,
95% 100%,
5% 100%,
0 95%,
14% 8%
);
}
.rank-cell-inner {
width: 100%;
height: 100%;
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
padding: 0 22rpx 0 20rpx;
box-sizing: border-box;
border-radius: 24rpx;
overflow: hidden;
}
.rank-bg-icon {
position: absolute;
width: 148rpx;
height: 148rpx;
right: -18rpx;
top: 50%;
transform: translateY(-50%) rotate(-10deg);
opacity: 0.2;
z-index: 0;
pointer-events: none;
}
.rank-content {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
}
.rank-main-icon {
width: 76rpx;
height: 76rpx;
margin-bottom: 8rpx;
filter: drop-shadow(0 6rpx 16rpx rgba(0, 0, 0, 0.22));
}
.rank-shape-right .rank-cell-inner {
padding: 0 20rpx 0 28rpx;
align-items: flex-end;
}
.rank-shape-right .rank-bg-icon {
right: auto;
left: -18rpx;
transform: translateY(-50%) rotate(10deg);
}
.rank-shape-right .rank-content {
align-items: flex-end;
}
.rank-theme-blue .rank-cell-inner {
background: linear-gradient(135deg, #7ec4ff 0%, #4d9ef5 55%, #3b82e8 100%);
}
.rank-theme-gold .rank-cell-inner {
background: linear-gradient(135deg, #ffe28a 0%, #ffc94d 55%, #f5a623 100%);
}
.rank-theme-purple .rank-cell-inner {
background: linear-gradient(135deg, #c4b5fd 0%, #9b87f5 55%, #7c6be8 100%);
}
.rank-theme-orange .rank-cell-inner {
background: linear-gradient(135deg, #ffb896 0%, #ff8f6b 55%, #f56a4a 100%);
}
.rank-cell-name {
font-size: 26rpx;
font-weight: 700;
color: #fff;
text-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.15);
line-height: 1.2;
}
.rank-cell-sub {
font-size: 18rpx;
color: rgba(255, 255, 255, 0.88);
margin-top: 2rpx;
}
.rank-shape-right .rank-cell-name,
.rank-shape-right .rank-cell-sub {
text-align: right;
}
/* 功能面板 */
.func-panel {
position: relative;
border-radius: 28rpx;
overflow: hidden;
box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.04);
}
.func-panel-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.func-grid {
position: relative;
z-index: 1;
display: flex;
flex-wrap: wrap;
padding: 10rpx 4rpx;
background: rgba(255, 255, 255, 0.85);
backdrop-filter: blur(12rpx);
}
.func-cell {
width: 25%;
display: flex;
flex-direction: column;
align-items: center;
padding: 16rpx 0;
box-sizing: border-box;
}
.func-icon {
width: 52rpx;
height: 52rpx;
margin-bottom: 10rpx;
}
.func-label {
font-size: 20rpx;
color: #444;
text-align: center;
line-height: 1.25;
padding: 0 4rpx;
}
.func-grid-sparse .func-cell {
width: 25%;
padding: 22rpx 0;
}
.func-grid-sparse .func-icon {
width: 58rpx;
height: 58rpx;
margin-bottom: 12rpx;
}
.func-grid-sparse .func-label {
font-size: 24rpx;
}
.layout-sparse-padding {
padding-bottom: 80rpx;
}
.money-strip-single .money-block {
min-width: 100%;
}
.money-strip-single .money-val {
font-size: 44rpx;
}
.auth-inline {
display: flex;
align-items: center;
gap: 12rpx;
background: rgba(255, 255, 255, 0.72);
border-radius: 24rpx;
padding: 12rpx 16rpx;
border: 1rpx solid rgba(255, 255, 255, 0.5);
}
.auth-input {
flex: 1;
height: 64rpx;
background: #fff;
border-radius: 32rpx;
padding: 0 24rpx;
font-size: 26rpx;
}
.auth-btn {
flex-shrink: 0;
height: 64rpx;
line-height: 64rpx;
padding: 0 28rpx;
background: rgba(0, 0, 0, 0.06);
border-radius: 32rpx;
font-size: 26rpx;
font-weight: 600;
}
/* .list-card 与 .card 类似,仅保留差异 */
.list-card {
position: relative;
border-radius: 28rpx;
box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.04);
}
.list-card-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.list-card-inner {
position: relative;
z-index: 1;
background: rgba(255, 255, 255, 0.88);
backdrop-filter: blur(12rpx);
}
/* .list-item 与全局 .list-item 类似,仅保留差异 */
.list-item {
padding: 22rpx 20rpx;
}
.list-item:last-child { border-bottom: none; }
/* .list-icon 与全局 .list-icon 类似,仅保留差异(缺少 flex-shrink:0 */
.list-icon {
width: 36rpx;
height: 36rpx;
margin-right: 16rpx;
}
/* .list-text 与全局 .list-text 类似,仅保留差异 */
.list-text {
font-size: 26rpx;
}
.list-sub {
font-size: 20rpx;
color: #999;
margin-right: 8rpx;
}
/* .list-arrow 与全局 .list-arrow 类似,仅保留差异 */
.list-arrow {
opacity: 0.45;
}
/* 客服入口 */
.kefu-banner {
position: relative;
margin-bottom: 18rpx;
border-radius: 28rpx;
overflow: hidden;
box-shadow: 0 10rpx 32rpx rgba(44, 62, 80, 0.14);
}
.kefu-banner-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
}
.kefu-banner-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
background: linear-gradient(135deg, rgba(36, 48, 62, 0.82) 0%, rgba(52, 68, 88, 0.68) 100%);
}
.kefu-banner-content {
position: relative;
z-index: 2;
display: flex;
align-items: center;
justify-content: space-between;
padding: 22rpx 24rpx;
}
.kefu-banner-left {
display: flex;
align-items: center;
flex: 1;
min-width: 0;
}
.kefu-banner-icon {
width: 44rpx;
height: 44rpx;
margin-right: 16rpx;
flex-shrink: 0;
}
.kefu-banner-title {
display: block;
font-size: 28rpx;
font-weight: 700;
color: #fff;
}
.kefu-banner-sub {
display: block;
font-size: 20rpx;
color: rgba(255, 255, 255, 0.72);
margin-top: 4rpx;
}
.kefu-banner-btn {
flex-shrink: 0;
padding: 12rpx 26rpx;
font-size: 24rpx;
color: #2c3e50;
font-weight: 600;
background: rgba(255, 255, 255, 0.92);
border-radius: 999rpx;
margin-left: 16rpx;
}
/* 总资产 */
.total-asset-row {
position: relative;
border-radius: 24rpx;
overflow: hidden;
margin-bottom: 14rpx;
border: 1rpx solid rgba(212, 175, 110, 0.38);
box-shadow: inset 0 1rpx 0 rgba(255, 255, 255, 0.85), 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
}
.total-asset-fallback {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
background: linear-gradient(135deg, #faf6ee 0%, #f0e8d8 50%, #ebeef5 100%);
}
.total-asset-bg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
}
.total-asset-inner {
position: relative;
z-index: 2;
display: flex;
align-items: center;
justify-content: space-between;
padding: 22rpx 20rpx;
background: rgba(255, 255, 255, 0.52);
backdrop-filter: blur(14rpx);
}
.total-asset-left {
flex: 1;
min-width: 0;
padding-right: 16rpx;
}
.total-asset-label {
display: block;
font-size: 22rpx;
color: #777;
}
.total-asset-val {
display: block;
font-size: 46rpx;
font-weight: 800;
color: #3d3420;
margin: 6rpx 0 10rpx;
line-height: 1.1;
letter-spacing: -0.5rpx;
}
.asset-breakdown-list {
display: flex;
flex-direction: column;
gap: 4rpx;
}
.asset-breakdown-line {
display: flex;
align-items: center;
justify-content: space-between;
padding-right: 8rpx;
}
.breakdown-name {
font-size: 20rpx;
color: #888;
}
.breakdown-amt {
font-size: 20rpx;
color: #666;
font-weight: 500;
}
/* .withdraw-btn 与 .btn-sm--dark 类似,仅保留差异 */
.withdraw-btn {
flex-shrink: 0;
min-width: 120rpx;
height: 72rpx;
line-height: 72rpx;
text-align: center;
padding: 0 28rpx;
font-weight: 700;
border-radius: 999rpx;
box-shadow: 0 6rpx 20rpx rgba(44, 62, 80, 0.22);
}
.auth-grid-dynamic {
flex-wrap: wrap;
justify-content: flex-start;
gap: 0 24rpx;
}
.auth-grid-dynamic .auth-cell {
width: auto;
flex: 0 0 auto;
min-width: 140rpx;
box-sizing: border-box;
}
/* 身份认证 */
.auth-grid {
position: relative;
z-index: 1;
display: flex;
padding: 12rpx 8rpx;
background: rgba(255, 255, 255, 0.88);
backdrop-filter: blur(12rpx);
}
.auth-cell {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
padding: 14rpx 6rpx;
}
.auth-cell-icon {
width: 48rpx;
height: 48rpx;
margin-bottom: 8rpx;
}
.auth-cell-name {
font-size: 22rpx;
color: #444;
margin-bottom: 6rpx;
}
.auth-cell-tag {
font-size: 18rpx;
color: #888;
padding: 2rpx 10rpx;
border-radius: 999rpx;
background: rgba(0, 0, 0, 0.04);
}
.auth-cell-tag-done {
color: #5a6b57;
background: rgba(90, 107, 87, 0.1);
}
/* .loading-mask 与全局 .loading-mask .loading-mask--light 完全相同,删除 */
/* .loading-spinner 与 .spinner--md 类似,仅保留差异 */
.loading-spinner {
width: 52rpx;
height: 52rpx;
border: 3rpx solid rgba(0, 0, 0, 0.08);
border-top-color: #1A1A1A;
}