后端 API:AI 对话/报告/余额告警 等服务与路由;小程序 tabBar 配置与分润相关能力;出站推送 Webhook 与管理端调试;飞书留资、小程序数据分析 等支撑;多份 数据库迁移(AI 聊天、灵魂文章、tabBar、分润等)。 管理端 / 超管:看板、用户/订单/分销/财务、设置与 小程序 tabBar 管理、分润规则、灵魂文章、AI 配置与监控 等大量页面与能力扩展;主题与布局更新。 抖音小程序:与微信侧在 结果页/购买/个人中心 等方向做了同步或优化。 另含 部署/脚本、开发文档 等配套更新。 邀请码与解锁:后端 分销/邀请码 接口与 add_invite_codes 等 SQL;小程序侧 邀请码弹窗组件、个人中心/推广/多类结果页 的填写入口与 解锁门控(inviteCodeGate、unlockGate);并补充 《小程序解锁引导与邀请码方案》 文档。 超管后台:路由与 企业中心(EnterpriseHub) 等交互与结构优化。 小程序体验:在 首页结果、推广、各测评结果页 上继续打磨;与 邀请码门控、审核门控 小步联动。
112 lines
4.9 KiB
Plaintext
112 lines
4.9 KiB
Plaintext
<!--pages/result/resume.wxml - 简历综合分析结果页 -->
|
||
<view class="container">
|
||
<!-- 分析中状态 -->
|
||
<view class="analyzing-modal" wx:if="{{loading && !error}}">
|
||
<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>
|
||
|
||
<!-- 结果显示 -->
|
||
<block wx:if="{{!loading || error || content || profileGate}}">
|
||
|
||
<!-- 页面顶部 Hero -->
|
||
<view class="hero-banner {{error ? 'hero-error' : 'hero-success'}}">
|
||
<text class="hero-icon">{{error ? '⚠️' : '📋'}}</text>
|
||
<view class="hero-text-wrap">
|
||
<text class="hero-title">{{error ? '生成失败' : '人才综合评估报告'}}</text>
|
||
<text class="hero-sub">{{error ? '请检查后重新生成' : '基于测评结果 · 综合分析'}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="invite-fill-entry invite-fill-entry--resume" wx:if="{{!error && !hideInviteCodeEntry}}" bindtap="openInviteCodeFill">
|
||
<text class="invite-fill-entry__icon">🔗</text>
|
||
<view class="invite-fill-entry__main">
|
||
<text class="invite-fill-entry__title">填写好友邀请码</text>
|
||
<text class="invite-fill-entry__sub">绑定推广关系 · 可选</text>
|
||
</view>
|
||
<text class="invite-fill-entry__arrow">›</text>
|
||
</view>
|
||
|
||
<!-- 异常状态 -->
|
||
<view class="card error-card" wx:if="{{error}}">
|
||
<text class="card-title error-title">失败原因</text>
|
||
<text class="card-text error-message">{{error}}</text>
|
||
<view class="action-btn-retry" bindtap="fetchResumeAnalysis">
|
||
<text class="retry-text">点击重新生成</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 需要付费解锁 -->
|
||
<view class="card pay-gate-card" wx:if="{{payInfo.requiresPayment && !payInfo.isPaid && !error}}">
|
||
<text class="pay-gate-icon">🔒</text>
|
||
<text class="pay-gate-title">报告已生成,需付费解锁</text>
|
||
<text class="pay-gate-desc">完整的简历综合分析报告已生成\n支付后即可查看全部内容</text>
|
||
<view class="pay-gate-amount">
|
||
<text class="pay-amount-label">解锁价格</text>
|
||
<text class="pay-amount-value">¥{{payInfo.amountYuan}}</text>
|
||
</view>
|
||
<view class="pay-gate-btn {{paying ? 'paying' : ''}}" bindtap="doPay">
|
||
<text class="pay-gate-btn-text">{{paying ? '支付中...' : '立即支付解锁'}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 资料未完善:与问卷/面相报告一致 -->
|
||
<view class="card pay-gate-card" wx:if="{{profileGate && (!payInfo.requiresPayment || payInfo.isPaid) && !error}}">
|
||
<text class="pay-gate-icon">📝</text>
|
||
<text class="pay-gate-title">完善资料后查看完整报告</text>
|
||
<text class="pay-gate-desc">请补全头像、昵称并绑定手机号\n即可查看简历综合分析全文</text>
|
||
<view class="pay-gate-btn" bindtap="goCompleteProfile">
|
||
<text class="pay-gate-btn-text">去完善资料</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 成功内容:分块卡片展示 -->
|
||
<block wx:if="{{content && sections.length > 0 && !payInfo.requiresPayment && !profileGate}}">
|
||
<view class="card section-card" wx:for="{{sections}}" wx:key="index">
|
||
<view class="section-header">
|
||
<text class="section-icon">{{item.icon}}</text>
|
||
<text class="section-title-text">{{item.title}}</text>
|
||
</view>
|
||
<view class="section-body">
|
||
<text class="content-text">{{item.body}}</text>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<!-- 兜底显示:解析失败时显示原始内容 -->
|
||
<view class="card" wx:if="{{content && sections.length === 0 && !payInfo.requiresPayment}}">
|
||
<text class="card-title">综合分析综评</text>
|
||
<text class="card-text content-text">{{content}}</text>
|
||
</view>
|
||
|
||
<!-- 操作按钮 -->
|
||
<view class="action-section" wx:if="{{!loading || error}}">
|
||
<button class="btn btn-primary" open-type="share" wx:if="{{!payInfo.requiresPayment && !profileGate && content}}">
|
||
<text class="btn-text">分享分析报告</text>
|
||
</button>
|
||
<view class="btn btn-outline" bindtap="fetchResumeAnalysis" wx:if="{{!loading && content && !payInfo.requiresPayment && !profileGate}}">
|
||
<text class="btn-text-outline">重新分析生成</text>
|
||
</view>
|
||
<view class="btn btn-outline" bindtap="goHome">
|
||
<text class="btn-text-outline">返回首页</text>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<invite-code-dialog
|
||
visible="{{showInviteCodeDialog}}"
|
||
bind:skip="onInviteCodeSkip"
|
||
bind:success="onInviteCodeSuccess"
|
||
/>
|
||
</view>
|
||
|