修正了 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

218
pages/assessor/assessor.js Normal file
View File

@@ -0,0 +1,218 @@
// pages/assessor/assessor.js
// 只新增了两个字段的接收,其余所有代码未变
import request from '../../utils/request.js';
import {
isRoleStatusActive,
isCenterPageActive,
syncRoleStatuses,
ensureRoleOnCenterPage,
} from '../../utils/role-tab-bar.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() {
wx.redirectTo({ url: '/pages/fighter/fighter' });
return;
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 (isRoleStatusActive(kaoheguanstatus)) {
this.loadUserInfo();
this.setData({ isKaoheguan: true });
this.getKaoheguanInfo();
ensureRoleOnCenterPage(this, 'kaoheguan');
} else {
this.setData({ isKaoheguan: false });
}
},
onReady() {
if (isCenterPageActive(this, 'isKaoheguan', 'kaoheguanstatus')) {
ensureRoleOnCenterPage(this, 'kaoheguan');
}
},
onShow() {
if (isCenterPageActive(this, 'isKaoheguan', 'kaoheguanstatus')) {
if (!this.data.isKaoheguan) this.setData({ isKaoheguan: true });
ensureRoleOnCenterPage(this, 'kaoheguan');
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 // 🆕
}
});
ensureRoleOnCenterPage(this, 'kaoheguan');
} 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) {
const data = res.data.data || {};
syncRoleStatuses(data);
if (!Object.prototype.hasOwnProperty.call(data, 'kaoheguanstatus')) {
wx.setStorageSync('kaoheguanstatus', 1);
}
wx.showToast({ title: '注册成功', icon: 'success', duration: 2000 });
this.loadUserInfo();
await this.getKaoheguanInfo();
ensureRoleOnCenterPage(this, 'kaoheguan');
} 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/withdraw/withdraw?amount=${yue}&from=kaoheguan`
});
},
goToDafen() { wx.navigateTo({ url: '/pages/assess-score/assess-score' }); },
goToJilu() { wx.navigateTo({ url: '/pages/assess-log/assess-log' }); },
goToZhongxin() { wx.navigateTo({ url: '/pages/assess-center/assess-center' }); },
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);
}
});

View 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"
}

View File

@@ -0,0 +1,128 @@
<!-- pages/assessor/assessor.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 />

View File

@@ -0,0 +1,512 @@
/* pages/assessor/assessor.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;
}