Files
soul-yongping/miniprogram/pages/member-detail/member-detail.wxml
卡若 fa3da12b16 feat: 小程序阅读记录与资料链路、管理端用户规则、API/VIP/推荐与运营脚本
- miniprogram: reading-records、imageUrl/mpNavigate、多页资料与 VIP 展示调整
- soul-admin: Users/Settings/UserDetailModal、dist 构建产物更新
- soul-api: user/vip/referral/ckb/db、MBTI 头像管理、user_rule_completion、迁移 SQL
- .cursor: karuo-party 与飞书文档;.gitignore 忽略 .tmp_skill_bundle

Made-with: Cursor
2026-03-23 18:38:23 +08:00

225 lines
11 KiB
Plaintext

<!-- 卡若创业派对 - 超级个体详情(点头像申请对接 + 有则展示联系方式 + 信息卡) -->
<view class="page">
<view class="nav-bar" style="padding-top: {{statusBarHeight}}px;">
<view class="nav-back" bindtap="goBack">
<icon name="chevron-left" size="44" color="#5EEAD4" customClass="nav-icon"></icon>
</view>
<text class="nav-title">{{isOwnProfile ? '我的名片' : '个人资料'}}</text>
<view class="nav-edit-wrap" wx:if="{{isOwnProfile}}" bindtap="goMyProfileEdit">
<text class="nav-edit-text">编辑</text>
</view>
<view class="nav-placeholder" wx:else></view>
</view>
<view style="height: {{statusBarHeight + 44}}px;"></view>
<scroll-view scroll-y class="scroll-wrap" style="height: calc(100vh - {{navBarTotalPx}}px);" wx:if="{{member}}">
<!-- 首屏:点头像申请对接;超级个体未填手机/微信则整块不展示联系方式 -->
<view class="shell">
<view class="shell-glow"></view>
<view class="hero-profile">
<view
class="hero-avatar-block"
wx:if="{{!isOwnProfile}}"
bindtap="startLinkFlow"
hover-class="hero-avatar-block-hover"
hover-stay-time="80"
>
<view class="avatar-outer">
<view class="avatar-wrap {{member.isVip ? 'vip-ring' : ''}}">
<image class="avatar-img" wx:if="{{member.avatar}}" src="{{member.avatar}}" mode="aspectFill"/>
<view class="avatar-ph" wx:else><text>{{(member.name && member.name[0]) || '创'}}</text></view>
</view>
<view class="vip-tag" wx:if="{{member.isVip}}">VIP</view>
</view>
<text class="profile-name">{{member.name}}</text>
<view class="profile-tags profile-tags-modern" wx:if="{{member.mbti || member.region}}">
<text class="tag tag-mbti" wx:if="{{member.mbti}}">{{member.mbti}}</text>
<view class="tag tag-region" wx:if="{{member.region}}">
<icon name="map-pin" size="22" color="currentColor" customClass="pin-icon"></icon>
<text>{{member.region}}</text>
</view>
</view>
<text class="avatar-link-hint-one">点头像 · 申请对接</text>
</view>
<view
class="hero-avatar-block hero-avatar-block-self"
wx:else
bindtap="goMyProfileEdit"
hover-class="hero-avatar-block-hover"
hover-stay-time="80"
>
<view class="avatar-outer">
<view class="avatar-wrap {{member.isVip ? 'vip-ring' : ''}}">
<image class="avatar-img" wx:if="{{member.avatar}}" src="{{member.avatar}}" mode="aspectFill"/>
<view class="avatar-ph" wx:else><text>{{(member.name && member.name[0]) || '创'}}</text></view>
</view>
<view class="vip-tag" wx:if="{{member.isVip}}">VIP</view>
</view>
<text class="profile-name">{{member.name}}</text>
<view class="profile-tags profile-tags-modern" wx:if="{{member.mbti || member.region}}">
<text class="tag tag-mbti" wx:if="{{member.mbti}}">{{member.mbti}}</text>
<view class="tag tag-region" wx:if="{{member.region}}">
<icon name="map-pin" size="22" color="currentColor" customClass="pin-icon"></icon>
<text>{{member.region}}</text>
</view>
</view>
<text class="avatar-link-hint-one self-hint">这是我的超级个体名片 · 可转发分享 · 点头像去编辑</text>
</view>
</view>
<view
class="contact-rows contact-rows-subtle"
wx:if="{{member.contactRaw || member.contactDisplay || member.wechatRaw || member.wechatDisplay}}"
>
<view class="contact-sec-label">联系方式</view>
<view
class="link-chip link-chip-subtle {{member.contactUnlocked ? 'link-chip-open' : ''}}"
wx:if="{{member.contactRaw || member.contactDisplay}}"
catchtap="tapContactRow"
>
<view class="link-chip-icon link-chip-icon-phone link-chip-icon-subtle">
<icon name="smartphone" size="26" color="rgba(148,163,184,0.85)" customClass="lc-ic"></icon>
</view>
<view class="link-chip-main">
<text class="link-chip-label link-chip-label-subtle">手机</text>
<text class="link-chip-val mono link-chip-val-subtle">{{member.contactDisplay || member.contactRaw}}</text>
</view>
<view class="link-chip-action link-chip-action-subtle">
<text>{{member.contactUnlocked ? '复制' : '解锁'}}</text>
<icon wx:if="{{!member.contactUnlocked}}" name="chevron-right" size="22" color="rgba(100,116,139,0.8)" customClass="lc-arr"></icon>
</view>
</view>
<view
class="link-chip link-chip-subtle {{member.wechatUnlocked ? 'link-chip-open' : ''}}"
wx:if="{{member.wechatRaw || member.wechatDisplay}}"
catchtap="tapWechatRow"
>
<view class="link-chip-icon link-chip-icon-wx link-chip-icon-subtle">
<icon name="message-circle" size="26" color="rgba(148,163,184,0.85)" customClass="lc-ic"></icon>
</view>
<view class="link-chip-main">
<text class="link-chip-label link-chip-label-subtle">微信</text>
<text class="link-chip-val mono link-chip-val-subtle">{{member.wechatDisplay || member.wechatRaw}}</text>
</view>
<view class="link-chip-action link-chip-action-subtle">
<text>{{member.wechatUnlocked ? '复制' : '解锁'}}</text>
<icon wx:if="{{!member.wechatUnlocked}}" name="chevron-right" size="22" color="rgba(100,116,139,0.8)" customClass="lc-arr"></icon>
</view>
</view>
</view>
</view>
<!-- 一体化信息区(单卡片内分区) -->
<view class="mono-card mono-card-compact" wx:if="{{member.industry || member.position || member.businessScale || member.skills || member.bestMonth || member.achievement || member.turningPoint || member.canHelp || member.needHelp || member.project}}">
<!-- 职业画像 -->
<view class="mono-sec mono-sec-tight" wx:if="{{member.industry || member.position || member.businessScale}}">
<view class="mono-sec-head mono-sec-head-tight">
<text class="mono-sec-title">职业画像</text>
</view>
<view class="kv-grid">
<view class="kv-cell" wx:if="{{member.industry}}">
<text class="kv-k">行业</text>
<text class="kv-v">{{member.industry}}</text>
</view>
<view class="kv-cell" wx:if="{{member.position}}">
<text class="kv-k">职位</text>
<text class="kv-v">{{member.position}}</text>
</view>
<view class="kv-cell kv-cell-full" wx:if="{{member.businessScale}}">
<text class="kv-k">业务体量</text>
<text class="kv-v">{{member.businessScale}}</text>
</view>
</view>
</view>
<view class="mono-divider" wx:if="{{(member.industry || member.position || member.businessScale) && member.skills}}"></view>
<!-- 核心能力 -->
<view class="mono-sec mono-sec-tight skills-showcase" wx:if="{{member.skills}}">
<view class="mono-sec-head mono-sec-head-tight">
<text class="mono-sec-title">我擅长</text>
</view>
<view class="skills-quote">
<text class="skills-quote-text">{{member.skills}}</text>
</view>
</view>
<view class="mono-divider" wx:if="{{member.skills && (member.bestMonth || member.achievement || member.turningPoint)}}"></view>
<!-- 个人故事 -->
<view class="mono-sec mono-sec-tight" wx:if="{{member.bestMonth || member.achievement || member.turningPoint}}">
<view class="mono-sec-head mono-sec-head-tight">
<text class="mono-sec-title">个人故事</text>
</view>
<view class="story story-compact" wx:if="{{member.bestMonth}}">
<view class="story-head"><icon name="trophy" size="24" color="#FBBF24" customClass="story-icon"></icon><text class="story-q">最赚钱的一个月</text></view>
<text class="story-a">{{member.bestMonth}}</text>
</view>
<view class="story-gap story-gap-tight" wx:if="{{member.bestMonth && (member.achievement || member.turningPoint)}}"></view>
<view class="story story-compact" wx:if="{{member.achievement}}">
<view class="story-head"><icon name="star" size="24" color="#FBBF24" customClass="story-icon"></icon><text class="story-q">最有成就感的事</text></view>
<text class="story-a">{{member.achievement}}</text>
</view>
<view class="story-gap story-gap-tight" wx:if="{{member.achievement && member.turningPoint}}"></view>
<view class="story story-compact" wx:if="{{member.turningPoint}}">
<view class="story-head"><icon name="refresh-cw" size="24" color="#FBBF24" customClass="story-icon"></icon><text class="story-q">人生的转折点</text></view>
<text class="story-a">{{member.turningPoint}}</text>
</view>
</view>
<view class="mono-divider" wx:if="{{(member.bestMonth || member.achievement || member.turningPoint) && (member.canHelp || member.needHelp)}}"></view>
<!-- 互助 -->
<view class="mono-sec mono-sec-tight" wx:if="{{member.canHelp || member.needHelp}}">
<view class="mono-sec-head mono-sec-head-tight">
<text class="mono-sec-title">互助需求</text>
</view>
<view class="help-grid">
<view class="help-tile help-give" wx:if="{{member.canHelp}}">
<text class="help-tile-tag">我能帮你</text>
<text class="help-tile-txt">{{member.canHelp}}</text>
</view>
<view class="help-tile help-need" wx:if="{{member.needHelp}}">
<text class="help-tile-tag need">我需要</text>
<text class="help-tile-txt">{{member.needHelp}}</text>
</view>
</view>
</view>
<view class="mono-divider" wx:if="{{(member.canHelp || member.needHelp) && member.project}}"></view>
<view class="mono-sec mono-sec-tight" wx:if="{{member.project}}">
<view class="mono-sec-head mono-sec-head-tight">
<text class="mono-sec-title">项目介绍</text>
</view>
<text class="proj-body proj-body-compact">{{member.project}}</text>
</view>
</view>
<!-- 底部:分享 + 双入口(同一视觉块) -->
<view class="footer-panel">
<view class="footer-pills">
<view class="pill pill-gold" bindtap="goToVip">
<icon name="sparkles" size="30" color="#FBBF24" customClass="pill-ic"></icon>
<text class="pill-txt">成为超级个体</text>
</view>
<view class="pill pill-teal" bindtap="goToMatch">
<icon name="users" size="30" color="#5EEAD4" customClass="pill-ic"></icon>
<text class="pill-txt">找更多伙伴</text>
</view>
</view>
</view>
<view class="scroll-pad"></view>
</scroll-view>
<view class="state-wrap" wx:if="{{loading}}">
<view class="loading-dot"></view>
<text class="state-txt">加载中...</text>
</view>
<view class="state-wrap" wx:if="{{!loading && !member}}">
<icon name="user" size="80" color="#3a3a3c" customClass="state-emoji"></icon>
<text class="state-txt">暂无该超级个体信息</text>
</view>
</view>