Files
MBTI_wang/miniprogram/pages/index/result.wxml
卡若 ce55c48c64 feat: 同步今日小程序与后台迭代版本
集中提交今日 API、管理端、小程序与部署文档调整,确保 Gitea 主分支与本地最新开发版本一致。

Made-with: Cursor
2026-04-20 11:07:55 +08:00

454 lines
22 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--pages/index/result.wxml - AI分析结果按旧版模板重构-->
<view class="container">
<!-- 分析中状态 -->
<view class="analyzing-modal" wx:if="{{isAnalyzing}}">
<view class="analyzing-content">
<view class="analyzing-icon">
<view class="spinner"></view>
</view>
<text class="analyzing-title">{{analyzingTitle || '正在分析中'}}</text>
<text class="analyzing-desc">{{analyzingTip}}</text>
<view class="analyzing-bar">
<view class="analyzing-bar-fill" style="width: {{progress}}%"></view>
</view>
<text class="analyzing-hint">这个过程可能需要30秒到1分钟请耐心等待...</text>
</view>
</view>
<!-- 无人脸错误状态 -->
<view class="no-face-wrap" wx:if="{{!isAnalyzing && noFaceError}}">
<view class="no-face-card">
<view class="no-face-icon">
<text class="no-face-emoji">🚫</text>
</view>
<text class="no-face-title">未检测到人脸</text>
<text class="no-face-desc">{{noFaceMessage}}</text>
<view class="no-face-tips">
<text class="no-face-tips-title">拍摄建议:</text>
<text class="no-face-tip-item">• 确保面部完整出现在画面中</text>
<text class="no-face-tip-item">• 保持光线充足,避免逆光</text>
<text class="no-face-tip-item">• 正对镜头,不要遮挡面部</text>
<text class="no-face-tip-item">• 保持适当距离,不要过近或过远</text>
</view>
<view class="no-face-btn" bindtap="retake">
<text class="no-face-btn-text">重新拍摄</text>
</view>
</view>
</view>
<!-- 分析结果 -->
<view wx:if="{{!isAnalyzing && showResult}}">
<!-- 状态横幅 -->
<view class="status-banner {{hasError ? 'error-banner' : ''}}">
<view class="status-dot {{hasError ? 'error-dot' : ''}}"></view>
<text class="status-text">{{hasError ? '分析出现异常' : '分析完成,以下是您的个性化报告'}}</text>
</view>
<!-- 错误内容 -->
<view class="error-content" wx:if="{{hasError}}">
<text class="error-title">错误信息</text>
<text class="error-message">{{errorMessage}}</text>
<view class="retry-btn" bindtap="retake">
<text class="retry-text">重新分析</text>
</view>
</view>
<!-- 资料未齐:摘要 + 授权手机 / 完善资料(分享落地 fs=1 不挡) -->
<block wx:elif="{{phoneLoginGate}}">
<view class="report-gate-wrap">
<view class="card personality-card">
<text class="card-title">性格类型分析</text>
<view class="personality-type">
<text class="type-code">{{result.mbti}}</text>
<text class="type-name">{{result.title}}</text>
<text class="type-desc">{{result.summary}}</text>
</view>
<view class="type-details type-details--wrap">
<view class="type-box pdp-box">
<text class="type-emoji" wx:if="{{result.pdpEmoji}}">{{result.pdpEmoji}}</text>
<text class="type-label">PDP主性格</text>
<text class="type-value">{{result.pdp || '--'}}</text>
<text class="type-sub" wx:if="{{result.pdpAux}}">辅助: {{result.pdpAux}}</text>
</view>
<view class="type-box disc-box">
<text class="type-emoji type-emoji--disc">◎</text>
<text class="type-label">DISC类型</text>
<text class="type-value">{{result.disc || '--'}}型</text>
<text class="type-sub" wx:if="{{result.discAux}}">辅助: {{result.discAux}}</text>
</view>
<view
class="type-box sbti-box"
wx:if="{{showSbtiFace && (result.sbtiCode || result.sbtiCn)}}"
>
<text class="type-emoji">✨</text>
<text class="type-label">SBTI解读</text>
<text class="type-value">{{result.sbtiCode}}{{result.sbtiCn}}</text>
<text class="type-desc-small">{{result.sbtiMainTypeDesc}}</text>
</view>
</view>
</view>
</view>
<view class="report-gate-cta-wrap phone-login-gate-cta">
<view class="report-gate-panel">
<text class="paywall-fake-title">查看完整报告</text>
<text class="paywall-tip">授权手机号并设置头像、昵称后即可查看完整报告(与下方按钮为同一条流程)。</text>
<button
wx:if="{{!hasPhone}}"
class="paywall-btn paywall-btn-inline paywall-btn--compact"
open-type="getPhoneNumber"
bindgetphonenumber="onPhoneLoginForFaceResult"
>
<text class="paywall-btn-main">登录</text>
</button>
<button
wx:else
class="paywall-btn paywall-btn-inline paywall-btn--compact"
bindtap="goToCompleteProfile"
>
<text class="paywall-btn-main">完善资料 · 查看完整报告</text>
</button>
</view>
</view>
</block>
<block wx:else>
<!-- 支付成功后:引导手机号 → 完善资料(不挡报告阅读) -->
<view class="post-pay-guide" wx:if="{{payInfo.isPaid && (!hasPhone || !isProfileComplete)}}">
<text class="post-pay-guide-title">再完成两步,报告更好归属到您的账号</text>
<text class="post-pay-guide-desc">① 授权手机号 ② 完善头像与昵称(「我的」- 个人资料)</text>
<view class="post-pay-guide-actions">
<button
wx:if="{{!hasPhone}}"
class="post-pay-guide-btn phone"
open-type="getPhoneNumber"
bindgetphonenumber="onPostPayBindPhone"
>授权手机号</button>
<view wx:if="{{hasPhone && !isProfileComplete}}" class="post-pay-guide-btn profile" bindtap="goToCompleteProfile">去完善资料</view>
</view>
</view>
<!-- 报告预览区:未解锁时整区加盖高遮罩,避免概述/盖洛普等全文外露 -->
<view class="report-gate-wrap">
<view
class="card personality-card {{(payInfo.requiresPayment && !payInfo.isPaid) ? 'personality-card--locked' : ''}}"
>
<text class="card-title">性格类型分析</text>
<view class="personality-type">
<text class="type-code">{{result.mbti}}</text>
<text class="type-name">{{result.title}}</text>
<text class="type-desc">{{result.summary}}</text>
</view>
<view class="type-details type-details--wrap">
<view class="type-box pdp-box">
<text class="type-emoji" wx:if="{{result.pdpEmoji}}">{{result.pdpEmoji}}</text>
<text class="type-label">PDP主性格</text>
<text class="type-value">{{result.pdp || '--'}}</text>
<text class="type-sub" wx:if="{{result.pdpAux}}">辅助: {{result.pdpAux}}</text>
</view>
<view class="type-box disc-box">
<text class="type-emoji type-emoji--disc">◎</text>
<text class="type-label">DISC类型</text>
<text class="type-value">{{result.disc || '--'}}型</text>
<text class="type-sub" wx:if="{{result.discAux}}">辅助: {{result.discAux}}</text>
</view>
<!-- SBTI重构为盒子家族成员占据全宽 -->
<view
class="type-box sbti-box"
wx:if="{{showSbtiFace && (result.sbtiCode || result.sbtiCn)}}"
>
<text class="type-emoji">✨</text>
<text class="type-label">SBTI解读</text>
<text class="type-value">{{result.sbtiCode}}{{result.sbtiCn}}</text>
<text class="type-desc-small">{{result.sbtiMainTypeDesc}}</text>
</view>
</view>
<view class="advantages-box" wx:if="{{result.traits.length > 0}}">
<text class="advantages-label">主要优势</text>
<view class="advantages-list">
<view class="advantage-pill" wx:for="{{result.traits}}" wx:key="*this">
<text class="advantage-pill-text">{{item}}</text>
</view>
</view>
</view>
</view>
<view
class="card report-gate-teaser {{(payInfo.requiresPayment && !payInfo.isPaid) ? 'report-gate-teaser--locked' : ''}}"
wx:if="{{result.summary}}"
>
<text class="card-title">📝 性格概述</text>
<text class="card-text">{{result.summary}}</text>
</view>
<view
class="card gallup-card report-gate-teaser {{(payInfo.requiresPayment && !payInfo.isPaid) ? 'report-gate-teaser--locked' : ''}}"
wx:if="{{result.gallupTop3.length > 0}}"
>
<text class="card-title">盖洛普前三大优势</text>
<view class="gallup-list">
<view class="gallup-item" wx:for="{{result.gallupTop3}}" wx:key="*this">
<text class="gallup-rank">{{index + 1}}</text>
<text class="gallup-text">{{item}}</text>
</view>
</view>
</view>
<!-- 未解锁:三大生活场景仅标题 + 占位行(正文付费后见) -->
<view class="card scene-teaser-bundle" wx:if="{{payInfo.requiresPayment && !payInfo.isPaid}}">
<text class="scene-bundle-hint">以下版块解锁后展示完整正文</text>
<view class="scene-teaser-item">
<text class="scene-teaser-title">职业发展方向</text>
<view class="scene-teaser-lines">
<view class="scene-teaser-line"></view>
<view class="scene-teaser-line scene-teaser-line--short"></view>
</view>
</view>
<view class="scene-teaser-item">
<text class="scene-teaser-title">家庭亲子关系</text>
<view class="scene-teaser-lines">
<view class="scene-teaser-line"></view>
<view class="scene-teaser-line scene-teaser-line--short"></view>
</view>
</view>
<view class="scene-teaser-item scene-teaser-item--last">
<text class="scene-teaser-title">寻找合伙人</text>
<view class="scene-teaser-lines">
<view class="scene-teaser-line"></view>
<view class="scene-teaser-line scene-teaser-line--short"></view>
</view>
</view>
</view>
<!-- 全幅遮罩 + 底部操作(覆盖性格概述、盖洛普等主要预览,仅留顶部少量「悬念」) -->
<view
class="report-gate-overlay"
wx:if="{{payInfo.requiresPayment && !payInfo.isPaid}}"
>
<view class="report-gate-gradient"></view>
<view class="report-gate-cta-wrap">
<view class="report-gate-panel">
<text class="paywall-fake-title">完整版深度解析</text>
<text class="paywall-tip">含面相、骨相、人际与职业 / 家庭 / 合伙三大场景</text>
<view class="paywall-btn paywall-btn-inline paywall-btn--compact" bindtap="onTapUnlockPay">
<text class="paywall-btn-main">{{payInfo.amountYuan || 1}} 元解锁</text>
</view>
<text class="paywall-tip paywall-tip-panel">解锁后可在「历史记录」再次查看;绑定手机与资料见上方绿色提示条</text>
</view>
</view>
</view>
</view>
<!-- ========== 详细分析区(解锁后可见) ========== -->
<block wx:if="{{!payInfo.requiresPayment || payInfo.isPaid}}">
<!-- 生活场景深度分析AI 或本地兜底) -->
<view class="card scene-detail-card" wx:if="{{result.careerDevelopment}}">
<text class="card-title">职业发展方向</text>
<text class="card-text">{{result.careerDevelopment}}</text>
</view>
<view class="card scene-detail-card" wx:if="{{result.familyParenting}}">
<text class="card-title">家庭亲子关系</text>
<text class="card-text">{{result.familyParenting}}</text>
</view>
<view class="card scene-detail-card" wx:if="{{result.partnerCofounder}}">
<text class="card-title">寻找合伙人</text>
<text class="card-text">{{result.partnerCofounder}}</text>
</view>
<!-- 面相分析 -->
<block wx:if="{{result.faceAnalysis}}">
<!-- 完整结构化面相(旧 object 格式) -->
<view class="card" wx:if="{{result.faceAnalysis.facialFeatures && result.faceAnalysis.facialFeatures.length > 0}}">
<text class="card-title">面部特征分析</text>
<view class="feature-list">
<view class="feature-item" wx:for="{{result.faceAnalysis.facialFeatures}}" wx:key="label">
<text class="feature-label">{{item.label}}</text>
<text class="feature-desc">{{item.description}}</text>
</view>
</view>
</view>
</block>
<!-- 字符串版面相(新 prompt 返回) -->
<view class="card" wx:elif="{{result.faceAnalysisText}}">
<text class="card-title">面相分析</text>
<text class="card-text">{{result.faceAnalysisText}}</text>
</view>
<!-- 骨相分析 -->
<block wx:if="{{result.boneAnalysis && result.boneAnalysis.boneFormSummary}}">
<!-- 完整结构化骨相(旧 object 格式) -->
<view class="card">
<text class="card-title">骨相分析(《冰鉴》八骨)</text>
<view class="bone-content">
<view class="bone-item" wx:if="{{result.boneAnalysis.boneFormSummary.elementType}}">
<text class="bone-label">五行形相:</text>
<text class="bone-text">{{result.boneAnalysis.boneFormSummary.elementType}}</text>
</view>
<view class="bone-item" wx:if="{{result.boneAnalysis.boneFormSummary.boneFleshRelation}}">
<text class="bone-label">骨肉关系:</text>
<text class="bone-text">{{result.boneAnalysis.boneFormSummary.boneFleshRelation}}</text>
</view>
</view>
</view>
</block>
<!-- 字符串版骨相(新 prompt 返回) -->
<view class="card" wx:elif="{{result.boneAnalysisText}}">
<text class="card-title">骨相分析(《冰鉴》八骨)</text>
<text class="card-text">{{result.boneAnalysisText}}</text>
</view>
<!-- 人际关系 -->
<view class="card" wx:if="{{result.relationship}}">
<text class="card-title">人际关系与团队合作</text>
<text class="card-text">{{result.relationship}}</text>
</view>
<!-- 企业版:简历亮点 -->
<view class="card" wx:if="{{result.resumeHighlights}}">
<text class="card-title">简历亮点</text>
<text class="card-text">{{result.resumeHighlights}}</text>
</view>
<!-- 企业版:职业画像 portrait -->
<view class="card" wx:if="{{result.portrait}}">
<text class="card-title">职业画像</text>
<view class="enterprise-section" wx:if="{{result.portrait.coreStrengths && result.portrait.coreStrengths.length > 0}}">
<text class="enterprise-label">核心优势</text>
<view class="enterprise-tags">
<text class="enterprise-tag" wx:for="{{result.portrait.coreStrengths}}" wx:key="*this">{{item}}</text>
</view>
</view>
<view class="enterprise-section" wx:if="{{result.portrait.coreRisks && result.portrait.coreRisks.length > 0}}">
<text class="enterprise-label">潜在风险</text>
<view class="enterprise-tags">
<text class="enterprise-tag risk" wx:for="{{result.portrait.coreRisks}}" wx:key="*this">{{item}}</text>
</view>
</view>
<view class="enterprise-section" wx:if="{{result.portrait.workStyle}}">
<text class="enterprise-label">工作风格</text>
<text class="card-text">{{result.portrait.workStyle}}</text>
</view>
</view>
<!-- 企业版HR视角 hrView -->
<view class="card" wx:if="{{result.hrView}}">
<text class="card-title">HR视角</text>
<view class="enterprise-section" wx:if="{{result.hrView.roleRecommend}}">
<text class="enterprise-label">岗位推荐</text>
<view wx:if="{{result.hrView.roleRecommend.bestFit && result.hrView.roleRecommend.bestFit.length > 0}}">
<text class="enterprise-sublabel">最适合</text>
<view class="enterprise-tags">
<text class="enterprise-tag" wx:for="{{result.hrView.roleRecommend.bestFit}}" wx:key="*this">{{item}}</text>
</view>
</view>
<view wx:if="{{result.hrView.roleRecommend.notSuitable && result.hrView.roleRecommend.notSuitable.length > 0}}" style="margin-top: 12rpx;">
<text class="enterprise-sublabel">不适合</text>
<view class="enterprise-tags">
<text class="enterprise-tag risk" wx:for="{{result.hrView.roleRecommend.notSuitable}}" wx:key="*this">{{item}}</text>
</view>
</view>
</view>
<view class="enterprise-section" wx:if="{{result.hrView.lifecycle}}">
<text class="enterprise-label">成长周期</text>
<view class="lifecycle-list">
<view class="lifecycle-item" wx:if="{{result.hrView.lifecycle.onboarding}}">
<text class="lifecycle-key">入职适应</text>
<text class="lifecycle-val">{{result.hrView.lifecycle.onboarding}}</text>
</view>
<view class="lifecycle-item" wx:if="{{result.hrView.lifecycle.probation}}">
<text class="lifecycle-key">试用期</text>
<text class="lifecycle-val">{{result.hrView.lifecycle.probation}}</text>
</view>
<view class="lifecycle-item" wx:if="{{result.hrView.lifecycle.growth}}">
<text class="lifecycle-key">成长期</text>
<text class="lifecycle-val">{{result.hrView.lifecycle.growth}}</text>
</view>
<view class="lifecycle-item" wx:if="{{result.hrView.lifecycle.retention}}">
<text class="lifecycle-key">留人因素</text>
<text class="lifecycle-val">{{result.hrView.lifecycle.retention}}</text>
</view>
</view>
</view>
<view class="enterprise-section" wx:if="{{result.hrView.performance}}">
<text class="enterprise-label">绩效潜力</text>
<text class="card-text" wx:if="{{result.hrView.performance.potential}}">潜力:{{result.hrView.performance.potential}}</text>
<view wx:if="{{result.hrView.performance.drivers && result.hrView.performance.drivers.length > 0}}" style="margin-top: 8rpx;">
<text class="enterprise-sublabel">驱动因子:</text>
<text class="card-text">{{result.hrView.performance.drivers.join('、')}}</text>
</view>
</view>
<view class="enterprise-section" wx:if="{{result.hrView.teamFit}}">
<text class="enterprise-label">团队适配</text>
<text class="card-text">{{result.hrView.teamFit.bestTeam || ''}}</text>
<text class="card-text" wx:if="{{result.hrView.teamFit.manageAdvice}}" style="margin-top: 8rpx; display: block;">管理建议:{{result.hrView.teamFit.manageAdvice}}</text>
</view>
</view>
<!-- 企业版:老板视角 bossView -->
<view class="card boss-card" wx:if="{{result.bossView}}">
<text class="card-title">老板视角</text>
<text class="boss-headline" wx:if="{{result.bossView.headline}}">{{result.bossView.headline}}</text>
<view class="boss-metrics" wx:if="{{result.bossView.metrics && result.bossView.metrics.length > 0}}">
<view class="boss-metric" wx:for="{{result.bossView.metrics}}" wx:key="label">
<text class="boss-metric-label">{{item.label}}</text>
<text class="boss-metric-value {{item.level}}">{{item.value}}</text>
</view>
</view>
<text class="card-text" wx:if="{{result.bossView.costInsight}}" style="margin-top: 16rpx;">用人成本预判:{{result.bossView.costInsight}}</text>
</view>
</block>
<!-- 成交链路已迁至底部固定操作栏 -->
<view class="face-journey-deprecated" wx:if="{{false}}">
<view class="face-journey__title">
<text class="face-journey__title-main">继续下一步</text>
<text class="face-journey__title-sub">完整面相 + 性格报告只差两步</text>
</view>
<view class="face-journey-step face-journey-step--purple" bindtap="goToQuestionnaireFromFace">
<view class="face-journey-step__no">01</view>
<view class="face-journey-step__body">
<text class="face-journey-step__title">补做四套性格测评</text>
<text class="face-journey-step__desc">MBTI · PDP · DISC · SBTI 各测一次,面相 + 问卷组合才解锁完整人格画像。</text>
</view>
<text class="face-journey-step__arrow"></text>
</view>
<view class="face-journey-step face-journey-step--indigo" bindtap="goToDeepServiceFromFace">
<view class="face-journey-step__no">02</view>
<view class="face-journey-step__body">
<text class="face-journey-step__title">升级深度解读方案</text>
<text class="face-journey-step__desc">个人深读 / 团队适配 / 企业岗位匹配。综合面相、性格与行为风格出具可落地建议。</text>
</view>
<text class="face-journey-step__arrow"></text>
</view>
</view>
</block>
</view>
<!-- 固定底部操作栏:三按钮常驻 -->
<view class="result-action-bar" wx:if="{{!isAnalyzing && showResult && !hasError && !phoneLoginGate}}">
<view class="result-action-bar__btn result-action-bar__btn--test" bindtap="goToQuestionnaireFromFace">
<text class="result-action-bar__ic">🧠</text>
<text class="result-action-bar__label">详细性格测试</text>
</view>
<view class="result-action-bar__btn result-action-bar__btn--deep" bindtap="goToDeepServiceFromFace">
<text class="result-action-bar__ic">💎</text>
<text class="result-action-bar__label">找专家·深度解读</text>
</view>
<button class="result-action-bar__btn result-action-bar__btn--share" open-type="share">
<text class="result-action-bar__ic">📣</text>
<view class="result-action-bar__share-body">
<text class="result-action-bar__label">分享赚</text>
<text class="result-action-bar__label-hl">90%</text>
</view>
</button>
</view>
</view>