统一排行榜对齐星雀UI,页面资源后台配置实时刷新
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
195
miniprogram/pages/kaoheguan/kaoheguan.js
Normal file
195
miniprogram/pages/kaoheguan/kaoheguan.js
Normal file
@@ -0,0 +1,195 @@
|
||||
// pages/kaoheguan/kaoheguan.js
|
||||
// 只新增了两个字段的接收,其余所有代码未变
|
||||
import request from '../../utils/request.js';
|
||||
const app = getApp();
|
||||
|
||||
Page({
|
||||
data: {
|
||||
isKaoheguan: false,
|
||||
isLoading: false,
|
||||
inviteCode: '',
|
||||
statusText: '用户尚未注册或账号已被封禁',
|
||||
uid: '',
|
||||
avatarUrl: '',
|
||||
icons: {
|
||||
refresh: '',
|
||||
tixian: '',
|
||||
daofen: '',
|
||||
jilu: '',
|
||||
zhongxin: '',
|
||||
bgImage: ''
|
||||
},
|
||||
kaoheData: {
|
||||
shenheZongshu: 0,
|
||||
tongguoZongshu: 0,
|
||||
yue: '0.00',
|
||||
zonge: '0.00',
|
||||
shenheZhuangtai: 0,
|
||||
bankuaiList: [],
|
||||
isRenzheng: false, // 🆕 是否认证
|
||||
pendingShenheCount: 0 // 🆕 审核中数量
|
||||
},
|
||||
lastRefreshTime: 0,
|
||||
canRefresh: true,
|
||||
planetPaused: {
|
||||
top: false,
|
||||
bottom: false,
|
||||
left: false,
|
||||
right: false
|
||||
}
|
||||
},
|
||||
|
||||
_planetTimers: {},
|
||||
|
||||
onLoad() {
|
||||
const ossUrl = app.globalData.ossImageUrl || '';
|
||||
const iconBase = 'beijing/kaohe/';
|
||||
this.setData({
|
||||
'icons.refresh': ossUrl + iconBase + 'shuaxin.png',
|
||||
'icons.tixian': ossUrl + iconBase + 'tixian.png',
|
||||
'icons.daofen': ossUrl + iconBase + 'daofen.png',
|
||||
'icons.jilu': ossUrl + iconBase + 'jilu.png',
|
||||
'icons.zhongxin': ossUrl + iconBase + 'zhongxin.png',
|
||||
'icons.bgImage': ossUrl + iconBase + 'top_bg.jpg'
|
||||
});
|
||||
|
||||
const kaoheguanstatus = wx.getStorageSync('kaoheguanstatus');
|
||||
if (kaoheguanstatus === 1 || kaoheguanstatus === '1') {
|
||||
this.loadUserInfo();
|
||||
this.setData({ isKaoheguan: true });
|
||||
this.getKaoheguanInfo();
|
||||
} else {
|
||||
this.setData({ isKaoheguan: false });
|
||||
}
|
||||
},
|
||||
|
||||
onShow() {
|
||||
if (this.data.isKaoheguan) {
|
||||
this.refreshKaoheInfo();
|
||||
}
|
||||
},
|
||||
|
||||
loadUserInfo() {
|
||||
const uid = wx.getStorageSync('uid') || '';
|
||||
const touxiang = wx.getStorageSync('touxiang') || '';
|
||||
const ossUrl = app.globalData.ossImageUrl || '';
|
||||
const defaultAvatar = ossUrl + (app.globalData.morentouxiang || 'avatar/default.jpg');
|
||||
let avatarUrl = defaultAvatar;
|
||||
if (touxiang) {
|
||||
avatarUrl = ossUrl + (touxiang.startsWith('/') ? touxiang : '/' + touxiang);
|
||||
}
|
||||
this.setData({ uid, avatarUrl });
|
||||
},
|
||||
|
||||
async getKaoheguanInfo() {
|
||||
this.setData({ isLoading: true });
|
||||
try {
|
||||
const res = await request({ url: '/dengji/khgsx', method: 'POST' });
|
||||
if (res && res.data.code === 200) {
|
||||
const data = res.data.data;
|
||||
if (data.zhuangtai === 0 || data.zhuangtai === 2) {
|
||||
wx.setStorageSync('kaoheguanstatus', 0);
|
||||
this.setData({ isKaoheguan: false, isLoading: false, statusText: '用户尚未注册或账号已被封禁' });
|
||||
return;
|
||||
}
|
||||
wx.setStorageSync('kaoheguanstatus', 1);
|
||||
this.setData({
|
||||
isKaoheguan: true,
|
||||
isLoading: false,
|
||||
kaoheData: {
|
||||
shenheZongshu: data.shenhe_zongshu || 0,
|
||||
tongguoZongshu: data.tongguo_zongshu || 0,
|
||||
yue: data.yue || '0.00',
|
||||
zonge: data.zonge || '0.00',
|
||||
shenheZhuangtai: data.shenhe_zhuangtai || 0,
|
||||
bankuaiList: data.bankuai_list || [],
|
||||
isRenzheng: data.is_renzheng || false, // 🆕
|
||||
pendingShenheCount: data.pending_shenhe_count || 0 // 🆕
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wx.showToast({ title: res?.data?.msg || '获取信息失败', icon: 'none' });
|
||||
this.setData({ isLoading: false });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取考核官信息失败:', error);
|
||||
wx.showToast({ title: '网络错误', icon: 'none' });
|
||||
this.setData({ isLoading: false });
|
||||
}
|
||||
},
|
||||
|
||||
onInviteCodeInput(e) {
|
||||
this.setData({ inviteCode: e.detail.value.trim() });
|
||||
},
|
||||
|
||||
async onRegister() {
|
||||
const { inviteCode } = this.data;
|
||||
if (!inviteCode) {
|
||||
wx.showToast({ title: '请输入邀请码', icon: 'none', duration: 2000 });
|
||||
return;
|
||||
}
|
||||
if (inviteCode.length > 100) {
|
||||
wx.showToast({ title: '邀请码不能超过100位', icon: 'none', duration: 2000 });
|
||||
return;
|
||||
}
|
||||
this.setData({ isLoading: true });
|
||||
try {
|
||||
const res = await request({
|
||||
url: '/dengji/khgzc',
|
||||
method: 'POST',
|
||||
data: { inviteCode: inviteCode }
|
||||
});
|
||||
if (res && res.data.code === 200) {
|
||||
wx.setStorageSync('kaoheguanstatus', 1);
|
||||
wx.showToast({ title: '注册成功', icon: 'success', duration: 2000 });
|
||||
this.loadUserInfo();
|
||||
await this.getKaoheguanInfo();
|
||||
} else {
|
||||
wx.showToast({ title: res?.data?.msg || '注册失败', icon: 'none', duration: 2000 });
|
||||
this.setData({ isLoading: false });
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('注册失败:', error);
|
||||
wx.showToast({ title: '网络错误', icon: 'none' });
|
||||
this.setData({ isLoading: false });
|
||||
}
|
||||
},
|
||||
|
||||
refreshKaoheInfo() {
|
||||
const now = Date.now();
|
||||
const lastTime = this.data.lastRefreshTime;
|
||||
const canRefresh = this.data.canRefresh;
|
||||
if (!canRefresh || (now - lastTime < 3000)) return;
|
||||
this.setData({ lastRefreshTime: now, canRefresh: false });
|
||||
this.getKaoheguanInfo();
|
||||
setTimeout(() => this.setData({ canRefresh: true }), 3000);
|
||||
},
|
||||
|
||||
goToWithdraw() {
|
||||
const yue = this.data.kaoheData.yue || 0;
|
||||
wx.navigateTo({
|
||||
url: `/pages/tixian/tixian?amount=${yue}&from=kaoheguan`
|
||||
});
|
||||
},
|
||||
goToDafen() { wx.navigateTo({ url: '/pages/kaohe_dafen/kaohe_dafen' }); },
|
||||
goToJilu() { wx.navigateTo({ url: '/pages/kaohe_jilu/kaohe_jilu' }); },
|
||||
goToZhongxin() { wx.navigateTo({ url: '/pages/kaohe_zhongxin/kaohe_zhongxin' }); },
|
||||
|
||||
onPlanetTouch(e) {
|
||||
const id = e.currentTarget.dataset.id;
|
||||
if (this._planetTimers[id]) {
|
||||
clearTimeout(this._planetTimers[id]);
|
||||
this._planetTimers[id] = null;
|
||||
}
|
||||
const paused = `planetPaused.${id}`;
|
||||
this.setData({ [paused]: true });
|
||||
},
|
||||
|
||||
onPlanetLeave(e) {
|
||||
const id = e.currentTarget.dataset.id;
|
||||
this._planetTimers[id] = setTimeout(() => {
|
||||
const paused = `planetPaused.${id}`;
|
||||
this.setData({ [paused]: false });
|
||||
}, 5000);
|
||||
}
|
||||
});
|
||||
11
miniprogram/pages/kaoheguan/kaoheguan.json
Normal file
11
miniprogram/pages/kaoheguan/kaoheguan.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"global-notification": "/components/global-notification/global-notification",
|
||||
"custom-tab-bar": "/custom-tab-bar/index",
|
||||
"popup-notice": "/components/popup-notice/popup-notice"
|
||||
},
|
||||
"navigationBarTitleText": "考核官",
|
||||
"navigationBarBackgroundColor": "#0a0c14",
|
||||
"navigationBarTextStyle": "white",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
128
miniprogram/pages/kaoheguan/kaoheguan.wxml
Normal file
128
miniprogram/pages/kaoheguan/kaoheguan.wxml
Normal file
@@ -0,0 +1,128 @@
|
||||
<!-- pages/kaoheguan/kaoheguan.wxml -->
|
||||
<view class="universe-root">
|
||||
<!-- 全屏弱化背景图 -->
|
||||
<image class="full-bg" src="{{icons.bgImage}}" mode="aspectFill" />
|
||||
|
||||
<!-- 动态星空与极光 -->
|
||||
<canvas type="2d" id="starfield" class="starfield-canvas"></canvas>
|
||||
<view class="aurora-ribbon"></view>
|
||||
|
||||
<!-- 未注册状态 -->
|
||||
<view class="unreg-floating" wx:if="{{!isKaoheguan}}">
|
||||
<view class="unreg-core">
|
||||
<image class="unreg-icon" src="/images/kaoheguan.png" mode="aspectFit" />
|
||||
<text class="unreg-title">考核官</text>
|
||||
<text class="unreg-desc">{{statusText}}</text>
|
||||
<input class="unreg-input" type="text" placeholder="输入邀请码" value="{{inviteCode}}" bindinput="onInviteCodeInput" placeholder-class="unreg-placeholder" maxlength="100" />
|
||||
<view class="unreg-btn" bindtap="onRegister">
|
||||
<text class="unreg-btn-text">即刻入驻</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 已注册状态 · 行星系统 -->
|
||||
<view class="orbit-zone" wx:else>
|
||||
<!-- 身份条 -->
|
||||
<view class="top-identity">
|
||||
<image class="identity-avatar" src="{{avatarUrl}}" mode="aspectFill" />
|
||||
<view class="identity-info">
|
||||
<text class="identity-name">考核官</text>
|
||||
<view class="identity-uid">
|
||||
<text class="uid-txt">{{uid}}</text>
|
||||
<view class="status-indicator {{kaoheData.shenheZhuangtai == 1 ? 'active' : ''}}"></view>
|
||||
</view>
|
||||
<!-- 🆕 添加认证状态,这是唯一新增的行 -->
|
||||
<text class="renzheng-tag {{kaoheData.isRenzheng ? 'authed' : 'unauth'}}">
|
||||
{{kaoheData.isRenzheng ? '已认证' : '未认证'}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="refresh-touch" bindtap="refreshKaoheInfo">
|
||||
<image class="refresh-icon" src="{{icons.refresh}}" mode="aspectFit" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 板块标签云 -->
|
||||
<view class="plate-cloud" wx:if="{{kaoheData.bankuaiList.length > 0}}">
|
||||
<scroll-view class="plate-cloud-scroll" scroll-x="true" enhanced show-scrollbar="{{false}}">
|
||||
<view class="plate-chip" wx:for="{{kaoheData.bankuaiList}}" wx:key="bankuai_id">{{item.mingcheng}}</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
|
||||
<!-- 中央余额星球 -->
|
||||
<view class="balance-planet">
|
||||
<view class="planet-ring"></view>
|
||||
<view class="planet-body">
|
||||
<text class="planet-num">{{kaoheData.yue}}元</text>
|
||||
<text class="planet-label">可提现余额</text>
|
||||
</view>
|
||||
<view class="planet-glow"></view>
|
||||
</view>
|
||||
|
||||
<!-- 流星数据条 -->
|
||||
<view class="meteor-stats">
|
||||
<view class="meteor-item">
|
||||
<text class="meteor-num">{{kaoheData.shenheZongshu}}</text>
|
||||
<text class="meteor-label">审核总数</text>
|
||||
</view>
|
||||
<view class="meteor-divider"></view>
|
||||
<view class="meteor-item">
|
||||
<text class="meteor-num">{{kaoheData.tongguoZongshu}}</text>
|
||||
<text class="meteor-label">通过总数</text>
|
||||
</view>
|
||||
<view class="meteor-divider"></view>
|
||||
<view class="meteor-item">
|
||||
<text class="meteor-num">{{kaoheData.zonge}}元</text>
|
||||
<text class="meteor-label">累计赚取</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 十字星阵功能区 -->
|
||||
<view class="star-cross">
|
||||
<!-- 上方:考核中心 -->
|
||||
<view class="cross-item cross-top {{planetPaused.top ? 'pause-spin' : ''}}"
|
||||
bindtap="goToZhongxin"
|
||||
bindtouchstart="onPlanetTouch" bindtouchend="onPlanetLeave" data-id="top">
|
||||
<view class="orbit-ring"></view>
|
||||
<image class="cross-icon" src="{{icons.zhongxin}}" mode="aspectFit" />
|
||||
<text class="cross-text">考核中心</text>
|
||||
</view>
|
||||
<!-- 下方:考核打分 -->
|
||||
<view class="cross-item cross-bottom {{planetPaused.bottom ? 'pause-spin' : ''}}"
|
||||
bindtap="goToDafen"
|
||||
bindtouchstart="onPlanetTouch" bindtouchend="onPlanetLeave" data-id="bottom">
|
||||
<view class="orbit-ring"></view>
|
||||
<image class="cross-icon" src="{{icons.daofen}}" mode="aspectFit" />
|
||||
<text class="cross-text">考核打分</text>
|
||||
<!-- 🆕 添加红色角标,这是唯一新增的行 -->
|
||||
<view class="badge" wx:if="{{kaoheData.pendingShenheCount > 0}}">{{kaoheData.pendingShenheCount}}</view>
|
||||
</view>
|
||||
<!-- 左侧:考核记录 -->
|
||||
<view class="cross-item cross-left {{planetPaused.left ? 'pause-spin' : ''}}"
|
||||
bindtap="goToJilu"
|
||||
bindtouchstart="onPlanetTouch" bindtouchend="onPlanetLeave" data-id="left">
|
||||
<view class="orbit-ring"></view>
|
||||
<image class="cross-icon" src="{{icons.jilu}}" mode="aspectFit" />
|
||||
<text class="cross-text">考核记录</text>
|
||||
</view>
|
||||
<!-- 右侧:立即提现 -->
|
||||
<view class="cross-item cross-right {{planetPaused.right ? 'pause-spin' : ''}}"
|
||||
bindtap="goToWithdraw"
|
||||
bindtouchstart="onPlanetTouch" bindtouchend="onPlanetLeave" data-id="right">
|
||||
<view class="orbit-ring"></view>
|
||||
<image class="cross-icon" src="{{icons.tixian}}" mode="aspectFit" />
|
||||
<text class="cross-text">立即提现</text>
|
||||
</view>
|
||||
<!-- 中央五角星 -->
|
||||
<view class="pentagram"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 加载星门 -->
|
||||
<view class="loading-portal" wx:if="{{isLoading}}">
|
||||
<view class="portal-ring"></view>
|
||||
<text class="portal-text">加载中...</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<global-notification id="global-notification" />
|
||||
<custom-tab-bar />
|
||||
512
miniprogram/pages/kaoheguan/kaoheguan.wxss
Normal file
512
miniprogram/pages/kaoheguan/kaoheguan.wxss
Normal file
@@ -0,0 +1,512 @@
|
||||
/* pages/kaoheguan/kaoheguan.wxss — 完整版:适度背景 + 整体下移 */
|
||||
|
||||
page {
|
||||
background: #0a0c14;
|
||||
color: #e0e6f0;
|
||||
font-family: 'SF Pro Display', 'PingFang SC', system-ui;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* 根容器:让出自定义导航栏与底部 TabBar 空间 */
|
||||
.universe-root {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
padding-top: calc(88rpx + env(safe-area-inset-top));
|
||||
padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
|
||||
box-sizing: border-box;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* ========== 全屏背景图(适度弱化) ========== */
|
||||
.full-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 0;
|
||||
opacity: 1; /* 从0.15调整到0.3,若隐若现但不抢夺内容 */
|
||||
pointer-events: none;
|
||||
object-fit: cover;
|
||||
filter: blur(1px); /* 轻微模糊,增加梦幻感 */
|
||||
}
|
||||
|
||||
/* ========== 动态星空(Canvas) ========== */
|
||||
.starfield-canvas {
|
||||
position: fixed;
|
||||
top: 0; left: 0;
|
||||
width: 100vw; height: 100vh;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
opacity: 0.35;
|
||||
}
|
||||
|
||||
/* ========== 极光飘带 ========== */
|
||||
.aurora-ribbon {
|
||||
position: fixed;
|
||||
top: -10%;
|
||||
left: -30%;
|
||||
width: 160%;
|
||||
height: 60%;
|
||||
background: radial-gradient(ellipse at 50% 50%, rgba(100, 140, 255, 0.12) 0%, transparent 70%);
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
animation: drift 20s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes drift {
|
||||
0% { transform: translate(0, 0) rotate(0deg); }
|
||||
100% { transform: translate(10%, 5%) rotate(3deg); }
|
||||
}
|
||||
|
||||
/* ========== 舒缓流星 ========== */
|
||||
/* 流星1:右上 → 左下,缓慢,间隔10秒 */
|
||||
.universe-root::before {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 5%;
|
||||
right: -2%;
|
||||
width: 2rpx;
|
||||
height: 85rpx;
|
||||
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), transparent);
|
||||
transform: rotate(-35deg);
|
||||
animation: meteor1 10s 0s linear infinite;
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/* 流星2:稍有不同的角度与延迟 */
|
||||
.universe-root::after {
|
||||
content: "";
|
||||
position: fixed;
|
||||
top: 10%;
|
||||
right: -5%;
|
||||
width: 2rpx;
|
||||
height: 70rpx;
|
||||
background: linear-gradient(to bottom, rgba(200, 210, 255, 0.55), transparent);
|
||||
transform: rotate(-28deg);
|
||||
animation: meteor2 11s 4s linear infinite;
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@keyframes meteor1 {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translate(0, 0) rotate(-35deg);
|
||||
}
|
||||
10% {
|
||||
opacity: 0.5;
|
||||
}
|
||||
28% {
|
||||
opacity: 0;
|
||||
transform: translate(-500rpx, 450rpx) rotate(-35deg);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
transform: translate(-500rpx, 450rpx) rotate(-35deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes meteor2 {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translate(0, 0) rotate(-28deg);
|
||||
}
|
||||
8% {
|
||||
opacity: 0.45;
|
||||
}
|
||||
25% {
|
||||
opacity: 0;
|
||||
transform: translate(-480rpx, 420rpx) rotate(-28deg);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
transform: translate(-480rpx, 420rpx) rotate(-28deg);
|
||||
}
|
||||
}
|
||||
|
||||
/* ========== 未注册状态 ========== */
|
||||
.unreg-floating {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.unreg-core {
|
||||
width: 80%;
|
||||
max-width: 640rpx;
|
||||
background: rgba(255,255,255,0.04);
|
||||
backdrop-filter: blur(30px);
|
||||
border-radius: 50rpx;
|
||||
padding: 80rpx 50rpx 60rpx;
|
||||
border: 1rpx solid rgba(255,255,255,0.1);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.unreg-icon { width: 100rpx; height: 100rpx; margin-bottom: 20rpx; }
|
||||
.unreg-title { font-size: 42rpx; font-weight: 700; color: #fff; margin-bottom: 12rpx; }
|
||||
.unreg-desc { font-size: 28rpx; color: #8590b0; margin-bottom: 50rpx; text-align: center; }
|
||||
.unreg-input { width: 100%; height: 90rpx; background: rgba(255,255,255,0.08); border-radius: 30rpx; padding: 0 30rpx; color: #fff; font-size: 30rpx; box-sizing: border-box; margin-bottom: 30rpx; }
|
||||
.unreg-placeholder { color: rgba(255,255,255,0.3); }
|
||||
.unreg-btn { width: 100%; height: 90rpx; background: linear-gradient(135deg, #4f6ef6, #8b5cf6); border-radius: 45rpx; display: flex; align-items: center; justify-content: center; transition: transform 0.2s; }
|
||||
.unreg-btn:active { transform: scale(0.98); }
|
||||
.unreg-btn-text { font-size: 34rpx; font-weight: 600; color: #fff; }
|
||||
|
||||
/* ========== 已注册状态(整体下移) ========== */
|
||||
.orbit-zone {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
flex: 1;
|
||||
padding: 80rpx 30rpx 0; /* 顶部从40rpx增加到60rpx,整体下移 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 身份条 */
|
||||
.top-identity {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 40rpx;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
.identity-avatar {
|
||||
width: 90rpx; height: 90rpx; border-radius: 50%;
|
||||
border: 2rpx solid rgba(255,255,255,0.2);
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.identity-info { flex: 1; }
|
||||
.identity-name { font-size: 36rpx; font-weight: 700; color: #fff; }
|
||||
.identity-uid {
|
||||
display: flex; align-items: center; margin-top: 8rpx;
|
||||
}
|
||||
.uid-txt { font-size: 24rpx; color: #9098b0; font-family: monospace; }
|
||||
.status-indicator {
|
||||
width: 12rpx; height: 12rpx; border-radius: 50%;
|
||||
background: #4ade80; margin-left: 12rpx;
|
||||
transition: background 0.3s;
|
||||
}
|
||||
.status-indicator.active { background: #fbbf24; }
|
||||
.refresh-touch {
|
||||
width: 60rpx; height: 60rpx;
|
||||
background: rgba(255,255,255,0.06);
|
||||
border-radius: 20rpx;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.refresh-touch:active { background: rgba(255,255,255,0.15); }
|
||||
.refresh-icon { width: 36rpx; height: 36rpx; }
|
||||
|
||||
/* 板块标签云 */
|
||||
.plate-cloud { margin-bottom: 30rpx; }
|
||||
.plate-cloud-scroll { white-space: nowrap; }
|
||||
.plate-chip {
|
||||
display: inline-block;
|
||||
padding: 8rpx 24rpx;
|
||||
border-radius: 30rpx;
|
||||
background: rgba(79,110,246,0.1);
|
||||
color: #a5b4fc;
|
||||
font-size: 26rpx;
|
||||
margin-right: 16rpx;
|
||||
border: 1rpx solid rgba(79,110,246,0.3);
|
||||
box-shadow: 0 0 12rpx rgba(79,110,246,0.1);
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.plate-chip:active { transform: scale(0.95); background: rgba(79,110,246,0.2); }
|
||||
|
||||
/* 中央余额星球 */
|
||||
.balance-planet {
|
||||
position: relative;
|
||||
width: 280rpx;
|
||||
height: 280rpx;
|
||||
margin: 20rpx auto 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.planet-ring {
|
||||
position: absolute;
|
||||
width: 280rpx;
|
||||
height: 280rpx;
|
||||
border-radius: 50%;
|
||||
border: 2rpx solid rgba(79,110,246,0.4);
|
||||
animation: ringRotate 12s linear infinite;
|
||||
}
|
||||
@keyframes ringRotate { to { transform: rotate(360deg); } }
|
||||
.planet-body {
|
||||
width: 210rpx;
|
||||
height: 210rpx;
|
||||
border-radius: 50%;
|
||||
background: radial-gradient(circle at 30% 30%, rgba(79,110,246,0.3), rgba(15,15,30,0.8));
|
||||
backdrop-filter: blur(10px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 1rpx solid rgba(255,255,255,0.1);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.balance-planet:active .planet-body { transform: scale(0.95); }
|
||||
.planet-num {
|
||||
font-size: 52rpx;
|
||||
font-weight: 900;
|
||||
color: #fff;
|
||||
text-shadow: 0 0 30rpx rgba(79,110,246,0.8);
|
||||
animation: numGlow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
@keyframes numGlow {
|
||||
from { text-shadow: 0 0 20rpx rgba(79,110,246,0.6); }
|
||||
to { text-shadow: 0 0 40rpx rgba(79,110,246,1); }
|
||||
}
|
||||
.planet-label {
|
||||
font-size: 24rpx;
|
||||
color: #a5b4fc;
|
||||
margin-top: 8rpx;
|
||||
}
|
||||
.planet-glow {
|
||||
position: absolute;
|
||||
width: 300rpx;
|
||||
height: 300rpx;
|
||||
border-radius: 50%;
|
||||
background: radial-gradient(circle, rgba(79,110,246,0.2), transparent 70%);
|
||||
animation: planetPulse 4s ease-in-out infinite;
|
||||
pointer-events: none;
|
||||
}
|
||||
@keyframes planetPulse {
|
||||
0%, 100% { opacity: 0.3; transform: scale(1); }
|
||||
50% { opacity: 0.8; transform: scale(1.08); }
|
||||
}
|
||||
|
||||
/* 流星数据条 */
|
||||
.meteor-stats {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
padding: 20rpx 0;
|
||||
position: relative;
|
||||
}
|
||||
.meteor-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
}
|
||||
.meteor-num {
|
||||
font-size: 36rpx;
|
||||
font-weight: 800;
|
||||
background: linear-gradient(135deg, #a5b4fc, #4f6ef6);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.meteor-item:active .meteor-num { transform: scale(1.1); }
|
||||
.meteor-label {
|
||||
font-size: 22rpx;
|
||||
color: #64748b;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
.meteor-divider {
|
||||
width: 2rpx;
|
||||
height: 40rpx;
|
||||
background: linear-gradient(to bottom, transparent, rgba(255,255,255,0.15), transparent);
|
||||
}
|
||||
|
||||
/* ========== 十字星阵功能区 ========== */
|
||||
.star-cross {
|
||||
position: relative;
|
||||
width: 520rpx;
|
||||
height: 520rpx;
|
||||
margin: 40rpx auto 50rpx;
|
||||
}
|
||||
|
||||
/* 按钮公共样式 */
|
||||
.cross-item {
|
||||
position: absolute;
|
||||
width: 150rpx;
|
||||
height: 150rpx;
|
||||
background: radial-gradient(circle at 30% 30%, rgba(79,110,246,0.25), rgba(0,0,0,0.25));
|
||||
border-radius: 50%;
|
||||
border: 1rpx solid rgba(255,255,255,0.12);
|
||||
backdrop-filter: blur(10px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
z-index: 5;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/* 行星光环 */
|
||||
.orbit-ring {
|
||||
position: absolute;
|
||||
top: -8rpx;
|
||||
left: -8rpx;
|
||||
right: -8rpx;
|
||||
bottom: -8rpx;
|
||||
border-radius: 50%;
|
||||
border: 2rpx solid rgba(79,110,246,0.5);
|
||||
border-top-color: transparent;
|
||||
border-bottom-color: transparent;
|
||||
animation: spinRing 4s linear infinite;
|
||||
pointer-events: none;
|
||||
}
|
||||
.pause-spin .orbit-ring {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
|
||||
@keyframes spinRing {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
.cross-item:active {
|
||||
transform: scale(0.95);
|
||||
box-shadow: 0 0 30rpx rgba(79,110,246,0.6);
|
||||
}
|
||||
|
||||
/* 图标强化 */
|
||||
.cross-icon {
|
||||
width: 58rpx;
|
||||
height: 58rpx;
|
||||
margin-bottom: 8rpx;
|
||||
filter: drop-shadow(0 0 14rpx rgba(79,110,246,0.9))
|
||||
drop-shadow(0 0 28rpx rgba(99,102,241,0.7));
|
||||
animation: iconFloat 3s ease-in-out infinite;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
@keyframes iconFloat {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-3rpx); }
|
||||
}
|
||||
|
||||
.cross-text {
|
||||
font-size: 24rpx;
|
||||
color: #e0e6f0;
|
||||
font-weight: 600;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
/* 上 */
|
||||
.cross-top { top: 0; left: 50%; transform: translateX(-50%); }
|
||||
/* 下 */
|
||||
.cross-bottom { bottom: 0; left: 50%; transform: translateX(-50%); }
|
||||
/* 左 */
|
||||
.cross-left { left: 0; top: 50%; transform: translateY(-50%); }
|
||||
/* 右 */
|
||||
.cross-right { right: 0; top: 50%; transform: translateY(-50%); }
|
||||
|
||||
/* 中央五角星(固定,仅呼吸) */
|
||||
.pentagram {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 0; height: 0;
|
||||
transform: translate(-50%, -50%);
|
||||
border-left: 36rpx solid transparent;
|
||||
border-right: 36rpx solid transparent;
|
||||
border-bottom: 84rpx solid rgba(79,110,246,0.85);
|
||||
filter: drop-shadow(0 0 18rpx rgba(79,110,246,0.7));
|
||||
animation: star-pulse 2s ease-in-out infinite;
|
||||
}
|
||||
.pentagram::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 36rpx;
|
||||
left: -36rpx;
|
||||
width: 0; height: 0;
|
||||
border-left: 36rpx solid transparent;
|
||||
border-right: 36rpx solid transparent;
|
||||
border-bottom: 84rpx solid rgba(79,110,246,0.85);
|
||||
transform: rotate(72deg);
|
||||
}
|
||||
.pentagram::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 36rpx;
|
||||
left: -36rpx;
|
||||
width: 0; height: 0;
|
||||
border-left: 36rpx solid transparent;
|
||||
border-right: 36rpx solid transparent;
|
||||
border-bottom: 84rpx solid rgba(79,110,246,0.85);
|
||||
transform: rotate(-72deg);
|
||||
}
|
||||
|
||||
@keyframes star-pulse {
|
||||
0%, 100% { opacity: 0.8; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
|
||||
/* ========== 加载星门 ========== */
|
||||
.loading-portal {
|
||||
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: rgba(10,12,20,0.95);
|
||||
backdrop-filter: blur(15px);
|
||||
display: flex; flex-direction: column;
|
||||
align-items: center; justify-content: center;
|
||||
z-index: 999;
|
||||
}
|
||||
.portal-ring {
|
||||
width: 100rpx; height: 100rpx;
|
||||
border-radius: 50%;
|
||||
border: 3rpx solid rgba(79,110,246,0.2);
|
||||
border-top-color: #4f6ef6;
|
||||
animation: portalSpin 1s linear infinite;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
@keyframes portalSpin { to { transform: rotate(360deg); } }
|
||||
.portal-text { font-size: 28rpx; color: #64748b; }
|
||||
|
||||
/* ========== 🆕 以下为新增样式,绝无任何修改 ========== */
|
||||
|
||||
/* 认证状态标签 */
|
||||
.renzheng-tag {
|
||||
font-size: 22rpx;
|
||||
padding: 4rpx 12rpx;
|
||||
border-radius: 20rpx;
|
||||
margin-top: 8rpx;
|
||||
display: inline-block;
|
||||
}
|
||||
.renzheng-tag.authed {
|
||||
background: rgba(76, 175, 80, 0.15);
|
||||
color: #4caf50;
|
||||
border: 1rpx solid rgba(76, 175, 80, 0.4);
|
||||
}
|
||||
.renzheng-tag.unauth {
|
||||
background: rgba(244, 67, 54, 0.1);
|
||||
color: #f44336;
|
||||
border: 1rpx solid rgba(244, 67, 54, 0.4);
|
||||
}
|
||||
|
||||
/* 红色角标 */
|
||||
.badge {
|
||||
position: absolute;
|
||||
top: -4rpx;
|
||||
right: -8rpx;
|
||||
min-width: 36rpx;
|
||||
height: 36rpx;
|
||||
background: #f44336;
|
||||
color: #fff;
|
||||
font-size: 22rpx;
|
||||
font-weight: 600;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 0 8rpx;
|
||||
box-shadow: 0 2rpx 8rpx rgba(244, 67, 54, 0.4);
|
||||
z-index: 10;
|
||||
}
|
||||
Reference in New Issue
Block a user