feat: 小程序与管理端迭代(神仙AI、了解自己CRM、AI测试入口、报表与分润等)
Made-with: Cursor
This commit is contained in:
@@ -65,7 +65,11 @@ Page({
|
||||
/** 最新测试横滑区:有问卷/面相权限即显示;无记录时卡片灰阶占位,不隐藏 */
|
||||
showLatestTestRow: false,
|
||||
/** 用户卡片下性格标签:在「当前权限下无任何问卷结果」时显示灰色提示 */
|
||||
showEmptyPersonalityTags: true
|
||||
showEmptyPersonalityTags: true,
|
||||
/** 我的页底部 Soul 推荐条(超管可配) */
|
||||
profileRecoShow: false,
|
||||
profileRecoSectionLabel: '',
|
||||
profileRecoArticle: null
|
||||
},
|
||||
|
||||
_computeShowLatestTestRow(d) {
|
||||
@@ -203,9 +207,72 @@ Page({
|
||||
if (token || userInfo) {
|
||||
this._loadRecentFromAPI()
|
||||
this._loadPromoStats()
|
||||
this._loadProfileRecoTeaser()
|
||||
} else {
|
||||
this.setData({ profileRecoShow: false, profileRecoArticle: null, profileRecoSectionLabel: '' })
|
||||
}
|
||||
},
|
||||
|
||||
/** 拉取「我的」页推荐条:与超管 Soul 文章推荐位第 1 篇一致 */
|
||||
_loadProfileRecoTeaser() {
|
||||
const t = Date.now()
|
||||
request({
|
||||
url: `/api/ai/articles/profile-teaser?_t=${t}`,
|
||||
method: 'GET',
|
||||
needAuth: false,
|
||||
success: (res) => {
|
||||
const payload = res && res.data
|
||||
if (!payload || payload.code !== 200 || !payload.data) {
|
||||
this.setData({ profileRecoShow: false, profileRecoArticle: null })
|
||||
return
|
||||
}
|
||||
const d = payload.data
|
||||
const art = d.article && d.article.url ? d.article : null
|
||||
const show = !!(d.enabled && art)
|
||||
this.setData({
|
||||
profileRecoShow: show,
|
||||
profileRecoSectionLabel: (d.sectionLabel && String(d.sectionLabel).trim()) || '推荐阅读',
|
||||
profileRecoArticle: show ? art : null
|
||||
})
|
||||
},
|
||||
fail: () => {
|
||||
this.setData({ profileRecoShow: false, profileRecoArticle: null })
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
onTapProfileReco(e) {
|
||||
const { id, url, title } = (e && e.currentTarget && e.currentTarget.dataset) || {}
|
||||
if (!url) return
|
||||
try {
|
||||
require('../../utils/analytics').track('tap_ai_article', {
|
||||
articleId: id,
|
||||
url,
|
||||
title,
|
||||
from: 'profile_teaser'
|
||||
})
|
||||
} catch (err) {}
|
||||
if (id) {
|
||||
request({
|
||||
url: `/api/ai/articles/${id}/click`,
|
||||
method: 'POST',
|
||||
needAuth: false,
|
||||
success() {},
|
||||
fail() {}
|
||||
})
|
||||
}
|
||||
const enc = encodeURIComponent(url)
|
||||
wx.navigateTo({
|
||||
url: `/pages/webview/index?url=${enc}`,
|
||||
fail: () => {
|
||||
wx.setClipboardData({
|
||||
data: url,
|
||||
success: () => wx.showToast({ title: '已复制链接', icon: 'none' })
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 从 /api/test/recent 拉取各类型最新记录 */
|
||||
_loadRecentFromAPI() {
|
||||
// 固定 scope=all:与 appScope 无关。个人/企业 scope 会按 enterpriseId 过滤,若提交时写过
|
||||
@@ -359,6 +426,14 @@ Page({
|
||||
wx.navigateTo({ url: '/pages/history/index' })
|
||||
},
|
||||
goToUserProfile() { wx.navigateTo({ url: '/pages/user-profile/index' }) },
|
||||
/** 合并后的用户卡片点击:按登录态分发 */
|
||||
onUserCardTap() {
|
||||
if (this.data.hasLogin) {
|
||||
this.goToUserProfile()
|
||||
} else {
|
||||
this.doLogin()
|
||||
}
|
||||
},
|
||||
/** 深度服务统一入口(页内 Tab:个人 / 团队与企业) */
|
||||
goToDeepService() {
|
||||
try { require('../../utils/analytics').track('tap_deep_service', {}) } catch (e) {}
|
||||
@@ -376,8 +451,23 @@ Page({
|
||||
goToPurchasePersonal() { wx.navigateTo({ url: '/pages/purchase/index?tab=personal' }) },
|
||||
goToPurchaseEnterprise() { wx.navigateTo({ url: '/pages/purchase/index?tab=enterprise' }) },
|
||||
goToEnterprise() { wx.navigateTo({ url: '/pages/enterprise/index' }) },
|
||||
goToPromo() { wx.navigateTo({ url: '/pages/promo/index' }) },
|
||||
goToMyResume() { wx.navigateTo({ url: '/pages/enterprise/resume-history' }) },
|
||||
goToPromoWithdrawals() {
|
||||
try { require('../../utils/analytics').track('tap_promo_withdrawals', { from: 'profile' }) } catch (e) {}
|
||||
wx.navigateTo({ url: '/pages/promo/withdrawals' })
|
||||
},
|
||||
goToPromo() {
|
||||
try { require('../../utils/analytics').track('tap_promo_center', { from: 'profile' }) } catch (e) {}
|
||||
wx.navigateTo({ url: '/pages/promo/index' })
|
||||
},
|
||||
goToMyResume() {
|
||||
try { require('../../utils/analytics').track('tap_my_resume', {}) } catch (e) {}
|
||||
wx.navigateTo({ url: '/pages/enterprise/resume-history' })
|
||||
},
|
||||
/** 匹配工作:新入口,跳转匹配工作中间页 */
|
||||
goToMatchJob() {
|
||||
try { require('../../utils/analytics').track('tap_match_job', {}) } catch (e) {}
|
||||
wx.navigateTo({ url: '/pages/match-job/index' })
|
||||
},
|
||||
goToSettings() {
|
||||
wx.showToast({ title: '开发中', icon: 'none' })
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--pages/profile/index.wxml-->
|
||||
<view class="page">
|
||||
<view class="page tabbar-pad">
|
||||
|
||||
<!-- 顶部栏 -->
|
||||
<view class="topbar">
|
||||
@@ -11,28 +11,12 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 未登录 -->
|
||||
<view class="user-card" wx:if="{{!hasLogin}}" bindtap="doLogin">
|
||||
<view class="avatar-ring">
|
||||
<view class="avatar-letter-wrap" style="background:{{avatarBgColor}}">
|
||||
<text class="avatar-letter">{{avatarLetter}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="user-meta">
|
||||
<text class="user-name" wx:if="{{loginLoading}}">登录中...</text>
|
||||
<text class="user-name" wx:elif="{{loginFailed}}">登录失败,点击重试</text>
|
||||
<text class="user-name" wx:else>点击登录</text>
|
||||
<text class="user-sub">登录后查看你的测试结果</text>
|
||||
</view>
|
||||
<text class="chevron">›</text>
|
||||
</view>
|
||||
|
||||
<!-- 已登录:用户卡片(点击进入个人资料) -->
|
||||
<view class="user-card" wx:if="{{hasLogin}}" bindtap="goToUserProfile">
|
||||
<!-- 头像区 -->
|
||||
<!-- 用户卡片:未登录点击登录,已登录点击进入个人资料(合并双态) -->
|
||||
<view class="user-card" bindtap="onUserCardTap">
|
||||
<!-- 头像区:已登录显示用户头像 + 在线点,未登录仅字母圆 -->
|
||||
<view class="avatar-wrap">
|
||||
<view class="avatar-ring">
|
||||
<image wx:if="{{userInfo && (userInfo.avatarUrl || userInfo.avatar)}}"
|
||||
<image wx:if="{{hasLogin && userInfo && (userInfo.avatarUrl || userInfo.avatar)}}"
|
||||
class="avatar-img"
|
||||
src="{{userInfo.avatarUrl || userInfo.avatar}}"
|
||||
mode="aspectFill"/>
|
||||
@@ -40,48 +24,88 @@
|
||||
<text class="avatar-letter">{{avatarLetter}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="online-dot"></view>
|
||||
<view wx:if="{{hasLogin}}" class="online-dot"></view>
|
||||
</view>
|
||||
|
||||
<!-- 昵称 + 标签 -->
|
||||
<!-- 元信息:已登录昵称+标签;未登录登录提示 -->
|
||||
<view class="user-meta">
|
||||
<text class="nickname-text">{{nicknameDisplay || '点击设置昵称'}}</text>
|
||||
<!-- 类型标签 -->
|
||||
<scroll-view scroll-x class="tags-scroll">
|
||||
<view class="tags-row">
|
||||
<view class="tag tag-purple" wx:if="{{mbtiType && permMbti}}">
|
||||
<text class="tag-text">{{mbtiType}}</text>
|
||||
<block wx:if="{{hasLogin}}">
|
||||
<text class="nickname-text">{{nicknameDisplay || '点击设置昵称'}}</text>
|
||||
<scroll-view scroll-x class="tags-scroll">
|
||||
<view class="tags-row">
|
||||
<view class="tag tag-purple" wx:if="{{mbtiType && permMbti}}">
|
||||
<text class="tag-text">{{mbtiType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-sbti" wx:if="{{sbtiType && permSbti}}">
|
||||
<text class="tag-text">{{sbtiType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-blue" wx:if="{{discType && permDisc}}">
|
||||
<text class="tag-text">{{discType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-orange" wx:if="{{pdpType && permPdp}}">
|
||||
<text class="tag-text">{{pdpType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-gray" wx:if="{{showEmptyPersonalityTags}}">
|
||||
<text class="tag-text">暂无测试记录</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tag tag-sbti" wx:if="{{sbtiType && permSbti}}">
|
||||
<text class="tag-text">{{sbtiType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-blue" wx:if="{{discType && permDisc}}">
|
||||
<text class="tag-text">{{discType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-orange" wx:if="{{pdpType && permPdp}}">
|
||||
<text class="tag-text">{{pdpType}}</text>
|
||||
</view>
|
||||
<view class="tag tag-gray" wx:if="{{showEmptyPersonalityTags}}">
|
||||
<text class="tag-text">暂无测试记录</text>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</scroll-view>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<text class="user-name" wx:if="{{loginLoading}}">登录中...</text>
|
||||
<text class="user-name" wx:elif="{{loginFailed}}">登录失败,点击重试</text>
|
||||
<text class="user-name" wx:else>点击登录</text>
|
||||
<text class="user-sub">登录后查看你的测试结果</text>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<text class="chevron">›</text>
|
||||
</view>
|
||||
|
||||
<!-- 深度解析:四字标题下整合「最新测试 + 查看全部/历史」与深度服务入口(单面板) -->
|
||||
<!-- 数据条:测试数 / 邀请 / 收益 / 可提现(营销数据融入身份,不再独立突兀卡) -->
|
||||
<view class="user-stats" wx:if="{{hasLogin}}">
|
||||
<view class="user-stat" bindtap="goToHistory">
|
||||
<text class="user-stat__v">{{testCount || 0}}</text>
|
||||
<text class="user-stat__l">测评记录</text>
|
||||
</view>
|
||||
<view
|
||||
class="user-stat"
|
||||
wx:if="{{promoDistributionEnabled && !reviewMode && permDistribution}}"
|
||||
bindtap="goToPromo"
|
||||
>
|
||||
<text class="user-stat__v">{{promoTotalInvite || 0}}</text>
|
||||
<text class="user-stat__l">邀请好友</text>
|
||||
</view>
|
||||
<!-- 第三格:可提现 → 分销中心 -->
|
||||
<view
|
||||
class="user-stat user-stat--highlight"
|
||||
wx:if="{{promoDistributionEnabled && !reviewMode && permDistribution}}"
|
||||
bindtap="goToPromo"
|
||||
>
|
||||
<text class="user-stat__v">¥{{promoWithdrawable || '0.00'}}</text>
|
||||
<text class="user-stat__l">可提现 ›</text>
|
||||
</view>
|
||||
<!-- 第四格:累计 → 提现记录 -->
|
||||
<view
|
||||
class="user-stat user-stat--sub"
|
||||
wx:if="{{promoDistributionEnabled && !reviewMode && permDistribution}}"
|
||||
bindtap="goToPromoWithdrawals"
|
||||
>
|
||||
<text class="user-stat__v user-stat__v--sm">¥{{promoTotalEarned || '0.00'}}</text>
|
||||
<text class="user-stat__l">累计 ›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 我的测评:最新测试横滑 + 功能图标网格(Soul 风:图标网格代替长列表) -->
|
||||
<view class="section px-section" wx:if="{{hasLogin}}">
|
||||
<text class="section-title depth-parse-title">深度解析</text>
|
||||
<view class="depth-unified-card">
|
||||
<view class="depth-unified-header">
|
||||
<text class="depth-unified-subtitle">最新测试</text>
|
||||
<view class="depth-header-link" bindtap="goToHistory">
|
||||
<text class="depth-header-link-text">查看全部<text wx:if="{{testCount > 0}}"> · {{testCount}}条</text></text>
|
||||
<text class="depth-header-chevron">›</text>
|
||||
</view>
|
||||
<view class="sec-head">
|
||||
<text class="sec-head__title">我的测评</text>
|
||||
<view class="sec-head__link" bindtap="goToHistory">
|
||||
<text>全部<text wx:if="{{testCount > 0}}"> · {{testCount}}</text></text>
|
||||
<text class="sec-head__chev">›</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="depth-unified-card">
|
||||
<scroll-view wx:if="{{showLatestTestRow}}" scroll-x class="cards-scroll cards-scroll--in-card" enhanced show-scrollbar="{{false}}">
|
||||
<view class="cards-row cards-row--in-card">
|
||||
<view class="result-card card-purple {{mbtiType ? '' : 'result-card--placeholder'}}" bindtap="viewMBTI" wx:if="{{permMbti}}">
|
||||
@@ -140,84 +164,51 @@
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view wx:if="{{showLatestTestRow}}" class="depth-empty-hint depth-empty-hint--compact">
|
||||
<text>点击卡片查看详情;右上方可查看全部测试记录。</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 快捷入口图标网格(Soul 风:2×N 图标 + 短标题) -->
|
||||
<view class="section px-section" wx:if="{{hasLogin}}">
|
||||
<view class="quick-grid quick-grid--4">
|
||||
<view class="quick-grid__item" bindtap="goToTestSelect">
|
||||
<view class="quick-grid__ic quick-grid__ic--purple">🧠</view>
|
||||
<text class="quick-grid__label">性格测试</text>
|
||||
</view>
|
||||
<view class="depth-inner-divider"></view>
|
||||
<view class="menu-item menu-item--flat" bindtap="goToTestSelect">
|
||||
<view class="menu-icon-wrap menu-icon-test-select">
|
||||
<text class="menu-icon">🧠</text>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-title">详细性格测试</text>
|
||||
<text class="menu-sub">MBTI、PDP、DISC 三套问卷,任选一项开始</text>
|
||||
</view>
|
||||
<text class="menu-chevron">›</text>
|
||||
<view class="quick-grid__item" bindtap="goToOrders">
|
||||
<view class="quick-grid__ic quick-grid__ic--emerald">🧾</view>
|
||||
<text class="quick-grid__label">我的订单</text>
|
||||
</view>
|
||||
<view class="menu-divider menu-divider--in-card"></view>
|
||||
<view class="menu-item menu-item--flat" bindtap="goToDeepService">
|
||||
<view class="menu-icon-wrap menu-icon-purple">
|
||||
<text class="menu-icon">✨</text>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-title">深度解读与方案</text>
|
||||
<text class="menu-sub">个人报告与团队/企业服务,进入后按需选择</text>
|
||||
</view>
|
||||
<text class="menu-chevron">›</text>
|
||||
<view class="quick-grid__item" bindtap="goToDeepService">
|
||||
<view class="quick-grid__ic quick-grid__ic--indigo">💎</view>
|
||||
<text class="quick-grid__label">了解自己</text>
|
||||
</view>
|
||||
<view class="menu-divider menu-divider--in-card"></view>
|
||||
<view class="menu-item menu-item--flat" bindtap="goToOrders">
|
||||
<view class="menu-icon-wrap menu-icon-emerald">
|
||||
<text class="menu-icon">🧾</text>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-title">我的订单</text>
|
||||
<text class="menu-sub">支付记录与订单状态</text>
|
||||
</view>
|
||||
<text class="menu-chevron">›</text>
|
||||
</view>
|
||||
<view class="menu-divider menu-divider--in-card" wx:if="{{hasEnterprise}}"></view>
|
||||
<view class="menu-item menu-item--flat" wx:if="{{hasEnterprise}}" bindtap="goToMyResume">
|
||||
<view class="menu-icon-wrap menu-icon-indigo">
|
||||
<text class="menu-icon">📋</text>
|
||||
</view>
|
||||
<view class="menu-content">
|
||||
<text class="menu-title">我的简历</text>
|
||||
<text class="menu-sub">查看与设置默认简历</text>
|
||||
</view>
|
||||
<text class="menu-chevron">›</text>
|
||||
<view class="quick-grid__item" bindtap="goToMatchJob">
|
||||
<view class="quick-grid__ic quick-grid__ic--blue">💼</view>
|
||||
<text class="quick-grid__label">匹配工作</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 推广中心(与管理端开关、标题配置一致;卡片样式与其他区块统一) -->
|
||||
<view class="section px-section" wx:if="{{hasLogin && promoDistributionEnabled && !reviewMode && permDistribution}}">
|
||||
<view class="promo-card" bindtap="goToPromo">
|
||||
<view class="promo-header">
|
||||
<view class="promo-title-wrap">
|
||||
<text class="promo-icon">📈</text>
|
||||
<text class="promo-title">{{promoCenterTitle}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="promo-stats">
|
||||
<view class="promo-stat-item">
|
||||
<text class="promo-stat-label">邀请好友</text>
|
||||
<text class="promo-stat-value">{{promoTotalInvite}}</text>
|
||||
</view>
|
||||
<view class="promo-stat-divider"></view>
|
||||
<view class="promo-stat-item">
|
||||
<text class="promo-stat-label">累计收益</text>
|
||||
<text class="promo-stat-value">¥{{promoTotalEarned}}</text>
|
||||
</view>
|
||||
<view class="promo-stat-divider"></view>
|
||||
<view class="promo-stat-item">
|
||||
<text class="promo-stat-label">可提现</text>
|
||||
<text class="promo-stat-value promo-highlight">¥{{promoWithdrawable}}</text>
|
||||
</view>
|
||||
<!-- Soul 引流:后台「当前推荐」第 1 篇 + 可配区块标题(灰字可点) -->
|
||||
<view class="section px-section profile-reco-wrap" wx:if="{{hasLogin && profileRecoShow}}">
|
||||
<view
|
||||
class="profile-reco-card"
|
||||
hover-class="profile-reco-card--press"
|
||||
bindtap="onTapProfileReco"
|
||||
data-id="{{profileRecoArticle.id}}"
|
||||
data-url="{{profileRecoArticle.url}}"
|
||||
data-title="{{profileRecoArticle.title}}"
|
||||
>
|
||||
<text class="profile-reco-label">{{profileRecoSectionLabel}}</text>
|
||||
<view class="profile-reco-row">
|
||||
<text class="profile-reco-title">{{profileRecoArticle.title}}</text>
|
||||
<text class="profile-reco-chev">›</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 分销/提现入口已上移至数据条下方(promo-quick-bar) -->
|
||||
|
||||
<view class="bottom-safe"></view>
|
||||
<custom-tab-bar />
|
||||
</view>
|
||||
|
||||
@@ -280,6 +280,28 @@ custom-tab-bar {
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.section-title--quiet {
|
||||
font-size: 26rpx;
|
||||
font-weight: 500;
|
||||
color: #6b7280;
|
||||
letter-spacing: 2rpx;
|
||||
margin-top: 8rpx;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.menu-item--quiet .menu-icon-wrap.menu-icon-quiet {
|
||||
background: #f1f5f9;
|
||||
}
|
||||
|
||||
.menu-item--quiet .menu-icon-quiet .menu-icon {
|
||||
color: #475569;
|
||||
}
|
||||
|
||||
.menu-sub--highlight {
|
||||
color: #e11d48;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* 深度解析:单卡整合 */
|
||||
.depth-unified-card {
|
||||
background: #FFFFFF;
|
||||
@@ -688,3 +710,351 @@ custom-tab-bar {
|
||||
.bottom-safe {
|
||||
height: 40rpx;
|
||||
}
|
||||
|
||||
/* ===== 用户数据条(Soul 风,营销数据融入身份卡下方)===== */
|
||||
.user-stats {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
margin: 16rpx 32rpx 0;
|
||||
padding: 28rpx 8rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(15, 23, 42, 0.05);
|
||||
border: 1rpx solid #f1f5f9;
|
||||
}
|
||||
.user-stat {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6rpx;
|
||||
position: relative;
|
||||
}
|
||||
.user-stat + .user-stat::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 14rpx;
|
||||
bottom: 14rpx;
|
||||
width: 1rpx;
|
||||
background: #f1f5f9;
|
||||
}
|
||||
.user-stat__v {
|
||||
font-size: 36rpx;
|
||||
font-weight: 700;
|
||||
color: #111827;
|
||||
line-height: 1.1;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
.user-stat__l {
|
||||
font-size: 22rpx;
|
||||
color: #94a3b8;
|
||||
}
|
||||
.user-stat--highlight .user-stat__v {
|
||||
color: #7c3aed;
|
||||
}
|
||||
|
||||
.user-stat:active {
|
||||
background: rgba(124, 58, 237, 0.04);
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
|
||||
/* "累计"第四格:金额字号略小,紫色辅文字呼应高亮格 */
|
||||
.user-stat__v--sm {
|
||||
font-size: 30rpx;
|
||||
}
|
||||
|
||||
.user-stat--sub .user-stat__v {
|
||||
color: #a78bfa;
|
||||
}
|
||||
|
||||
.user-stat--sub .user-stat__l {
|
||||
color: #7c3aed;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
/* ===== 小节标题(Soul 风:短促、带副箭头链接)===== */
|
||||
.sec-head {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 0 8rpx 16rpx;
|
||||
}
|
||||
.sec-head__title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 700;
|
||||
color: #111827;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
.sec-head__link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4rpx;
|
||||
font-size: 24rpx;
|
||||
color: #94a3b8;
|
||||
}
|
||||
.sec-head__chev {
|
||||
font-size: 26rpx;
|
||||
color: #cbd5e1;
|
||||
}
|
||||
|
||||
/* ===== 快捷入口图标网格 2×3 / 2×4 ===== */
|
||||
.quick-grid {
|
||||
display: grid;
|
||||
gap: 12rpx;
|
||||
padding: 24rpx 20rpx;
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(15, 23, 42, 0.05);
|
||||
border: 1rpx solid #f1f5f9;
|
||||
}
|
||||
.quick-grid--3 { grid-template-columns: repeat(3, 1fr); }
|
||||
.quick-grid--4 { grid-template-columns: repeat(4, 1fr); }
|
||||
.quick-grid__item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 10rpx;
|
||||
padding: 16rpx 8rpx;
|
||||
border-radius: 16rpx;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.quick-grid__item:active {
|
||||
background: #f8fafc;
|
||||
}
|
||||
.quick-grid__ic {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 36rpx;
|
||||
}
|
||||
.quick-grid__ic--purple { background: #f5f3ff; color: #7c3aed; }
|
||||
.quick-grid__ic--emerald { background: #ecfdf5; color: #059669; }
|
||||
.quick-grid__ic--indigo { background: #eef2ff; color: #4f46e5; }
|
||||
.quick-grid__ic--blue { background: #eff6ff; color: #2563eb; }
|
||||
.quick-grid__label {
|
||||
font-size: 24rpx;
|
||||
color: #374151;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
/* ===== 我的页 · Soul 推荐条(灰字、可读) ===== */
|
||||
.profile-reco-wrap {
|
||||
margin-top: 8rpx;
|
||||
}
|
||||
.profile-reco-card {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 22rpx 26rpx 24rpx;
|
||||
border: 1rpx solid #eef2f7;
|
||||
box-shadow: 0 2rpx 12rpx rgba(15, 23, 42, 0.04);
|
||||
}
|
||||
.profile-reco-card--press {
|
||||
opacity: 0.92;
|
||||
background: #fafbfc;
|
||||
}
|
||||
.profile-reco-label {
|
||||
display: block;
|
||||
font-size: 22rpx;
|
||||
color: #9ca3af;
|
||||
letter-spacing: 0.02em;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.profile-reco-row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 12rpx;
|
||||
}
|
||||
.profile-reco-title {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
font-size: 26rpx;
|
||||
line-height: 1.45;
|
||||
color: #6b7280;
|
||||
font-weight: 500;
|
||||
}
|
||||
.profile-reco-chev {
|
||||
flex-shrink: 0;
|
||||
font-size: 30rpx;
|
||||
color: #d1d5db;
|
||||
line-height: 1.4;
|
||||
margin-top: 2rpx;
|
||||
}
|
||||
|
||||
/* ===== 克制菜单(推广中心/提现历史 等低调入口)===== */
|
||||
.plain-menu {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(15, 23, 42, 0.05);
|
||||
border: 1rpx solid #f1f5f9;
|
||||
overflow: hidden;
|
||||
}
|
||||
.plain-menu__item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16rpx;
|
||||
padding: 24rpx 28rpx;
|
||||
}
|
||||
.plain-menu__item:active {
|
||||
background: #f8fafc;
|
||||
}
|
||||
.plain-menu__ic {
|
||||
width: 56rpx;
|
||||
height: 56rpx;
|
||||
border-radius: 16rpx;
|
||||
background: #f1f5f9;
|
||||
color: #64748b;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.plain-menu__main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4rpx;
|
||||
}
|
||||
.plain-menu__title {
|
||||
font-size: 28rpx;
|
||||
color: #111827;
|
||||
font-weight: 500;
|
||||
}
|
||||
.plain-menu__sub {
|
||||
font-size: 22rpx;
|
||||
color: #94a3b8;
|
||||
}
|
||||
.plain-menu__arrow {
|
||||
color: #cbd5e1;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.plain-menu__divider {
|
||||
height: 1rpx;
|
||||
background: #f1f5f9;
|
||||
margin-left: 100rpx;
|
||||
}
|
||||
|
||||
/* ===== 赚取分润卡(保留定义以兼容旧引用;当前页面已不使用)===== */
|
||||
.earn-card {
|
||||
position: relative;
|
||||
padding: 32rpx 36rpx 28rpx;
|
||||
border-radius: 28rpx;
|
||||
overflow: hidden;
|
||||
background: linear-gradient(135deg, #7c3aed 0%, #6366f1 55%, #4f46e5 100%);
|
||||
box-shadow: 0 14rpx 36rpx rgba(99, 102, 241, 0.22);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.earn-card__bg {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
pointer-events: none;
|
||||
background:
|
||||
radial-gradient(circle at 85% 0%, rgba(255, 255, 255, 0.25) 0 120rpx, transparent 200rpx),
|
||||
radial-gradient(circle at 0% 100%, rgba(255, 255, 255, 0.12) 0 180rpx, transparent 320rpx);
|
||||
}
|
||||
|
||||
.earn-card__head {
|
||||
position: relative;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.earn-card__title-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 14rpx;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.earn-card__ic {
|
||||
width: 52rpx;
|
||||
height: 52rpx;
|
||||
border-radius: 14rpx;
|
||||
background: rgba(255, 255, 255, 0.18);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
|
||||
.earn-card__title {
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
|
||||
.earn-card__title-em {
|
||||
color: #fde047;
|
||||
font-weight: 800;
|
||||
margin: 0 4rpx;
|
||||
}
|
||||
|
||||
.earn-card__sub {
|
||||
display: block;
|
||||
font-size: 24rpx;
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
line-height: 1.55;
|
||||
max-width: 540rpx;
|
||||
}
|
||||
|
||||
.earn-card__stats {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 12rpx;
|
||||
padding: 20rpx 4rpx;
|
||||
border-top: 1rpx solid rgba(255, 255, 255, 0.18);
|
||||
border-bottom: 1rpx solid rgba(255, 255, 255, 0.18);
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.earn-card__stat {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 4rpx;
|
||||
}
|
||||
|
||||
.earn-card__stat-v {
|
||||
font-size: 36rpx;
|
||||
font-weight: 700;
|
||||
line-height: 1.1;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
|
||||
.earn-card__stat-l {
|
||||
font-size: 22rpx;
|
||||
color: rgba(255, 255, 255, 0.78);
|
||||
}
|
||||
|
||||
.earn-card__stat--highlight .earn-card__stat-v {
|
||||
color: #fde047;
|
||||
}
|
||||
|
||||
.earn-card__cta {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
padding: 14rpx 0;
|
||||
}
|
||||
|
||||
.earn-card__cta-arrow {
|
||||
font-size: 28rpx;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.earn-card:active {
|
||||
transform: scale(0.995);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user