chore: 同步本地(微信小程序 + 抖音小程序)

Made-with: Cursor
This commit is contained in:
卡若
2026-03-20 18:38:59 +08:00
parent 904063d833
commit e6411523ff
146 changed files with 15951 additions and 141 deletions

View File

@@ -6,7 +6,7 @@ App({
userInfo: null,
openId: null,
token: null,
siteTitle: '神仙团队AI性格测试',
siteTitle: '神仙团队性格测试',
textConfig: null, // 从 /api/config/runtime 动态加载analyzingTitle, startButtonText, reportTitle, aiAnalysisText 等
// 当前使用范围personal 个人版 / enterprise 企业版(影响定价与 enterpriseId 写入)
appScope: 'personal',
@@ -26,8 +26,8 @@ App({
discResult: null,
pdpResult: null,
aiResult: null,
// 审核模式true 时隐藏AI面相分析功能仅展示问卷测试
reviewMode: false
// 审核模式true=纯问卷模式(默认),服务端 reviewMode:false 时解锁 AI 功能
reviewMode: true
},
onLaunch() {
@@ -37,11 +37,12 @@ App({
// 静默登录获取openId
this.silentLogin()
// 预加载站点/小程序名称 + 审核模式
// 预加载站点/小程序名称(审核期间 reviewMode 硬编码为 true审核通过后恢复后端控制
this.getRuntimeConfig().then((cfg) => {
if (cfg) {
if (cfg.siteTitle) this.globalData.siteTitle = cfg.siteTitle
this.globalData.reviewMode = !!cfg.reviewMode
// TODO: 审核通过后取消注释下行,恢复后端控制
// this.globalData.reviewMode = !!cfg.reviewMode
}
}).catch(() => {})
},
@@ -335,7 +336,8 @@ App({
const data = res.data.data || {}
if (data.siteTitle) this.globalData.siteTitle = data.siteTitle
if (data.textConfig) this.globalData.textConfig = data.textConfig
this.globalData.reviewMode = !!data.reviewMode
// TODO: 审核通过后取消注释下行,恢复后端控制
// this.globalData.reviewMode = !!data.reviewMode
resolve(data)
} else {
reject(new Error(res.data && res.data.message ? res.data.message : '获取配置失败'))

View File

@@ -6,9 +6,10 @@ Page({
data: {
statusBarHeight: 0,
navbarHeight: 88,
siteTitle: '神仙团队AI性格测试',
startButtonEnterprise: '开始面部测试',
aiAnalysisText: '智能分析'
siteTitle: '神仙团队性格测试',
startButtonEnterprise: '开始性格测试',
aiAnalysisText: '分析',
reviewMode: true
},
onLoad(options) {
@@ -59,12 +60,14 @@ Page({
const statusBarHeightRpx = (statusBarHeight * 750) / screenWidth
const navbarHeightRpx = statusBarHeightRpx + 88
const gd = app.globalData
const rm = !!gd.reviewMode
this.setData({
statusBarHeight: statusBarHeightRpx,
navbarHeight: navbarHeightRpx,
siteTitle: gd.siteTitle || '神仙团队AI性格测试',
startButtonEnterprise: (gd.textConfig && gd.textConfig.startButtonEnterprise) || '开始面部测试',
aiAnalysisText: (gd.textConfig && gd.textConfig.aiAnalysisText) || '智能分析'
siteTitle: rm ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队性格测试'),
startButtonEnterprise: rm ? '开始性格测试' : ((gd.textConfig && gd.textConfig.startButtonEnterprise) || '开始性格测试'),
aiAnalysisText: rm ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '分析'),
reviewMode: rm
})
// 未绑定企业的用户:若从邀请码扫码进入(有 enterpriseIdFromScene也允许使用企业版
@@ -100,9 +103,10 @@ Page({
}
if (cfg.textConfig) {
app.globalData.textConfig = cfg.textConfig
const rm2 = !!app.globalData.reviewMode
this.setData({
startButtonEnterprise: cfg.textConfig.startButtonEnterprise || '开始面部测试',
aiAnalysisText: cfg.textConfig.aiAnalysisText || '智能分析'
startButtonEnterprise: rm2 ? '开始性格测试' : (cfg.textConfig.startButtonEnterprise || '开始性格测试'),
aiAnalysisText: rm2 ? '分析' : (cfg.textConfig.aiAnalysisText || '分析')
})
}
}
@@ -140,10 +144,12 @@ Page({
}
try { getApp().globalData.appScope = 'enterprise' } catch (e) {}
const gd = getApp().globalData
const rm = !!gd.reviewMode
this.setData({
siteTitle: gd.siteTitle || '神仙团队AI性格测试',
startButtonEnterprise: (gd.textConfig && gd.textConfig.startButtonEnterprise) || '开始面部测试',
aiAnalysisText: (gd.textConfig && gd.textConfig.aiAnalysisText) || '智能分析'
siteTitle: rm ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队性格测试'),
startButtonEnterprise: rm ? '开始性格测试' : ((gd.textConfig && gd.textConfig.startButtonEnterprise) || '开始性格测试'),
aiAnalysisText: rm ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '分析'),
reviewMode: rm
})
},
@@ -154,8 +160,11 @@ Page({
})
},
// 开始AI面部测试先校验是否已上传简历再跳转相机
startAITest() {
if (this.data.reviewMode) {
wx.navigateTo({ url: '/pages/test-select/index' })
return
}
const eid = (app.globalData && app.globalData.enterpriseIdFromScene) || (app.globalData && app.globalData.userInfo && app.globalData.userInfo.enterpriseId) || (wx.getStorageSync('userInfo') || {}).enterpriseId || null
const query = eid ? `?enterpriseId=${eid}&pageSize=1` : '?pageSize=1'
request({
@@ -167,23 +176,23 @@ Page({
if (!list.length) {
wx.showModal({
title: '提示',
content: '需要先上传简历后再开始面部测试,请到「我的」-「我的简历」中上传',
showCancel: true,
confirmText: '去上传',
success: (r) => {
if (r.confirm) {
wx.navigateTo({ url: '/pages/enterprise/resume-history' })
}
content: '需要先上传简历后再开始测试,请到「我的」-「我的简历」中上传',
showCancel: true,
confirmText: '去上传',
success: (r) => {
if (r.confirm) {
wx.navigateTo({ url: '/pages/enterprise/resume-history' })
}
})
return
}
wx.switchTab({ url: '/pages/index/camera' })
},
fail: () => {
wx.showModal({
title: '提示',
content: '需要先上传简历后再开始面部测试,请到「我的」-「我的简历」中上传',
}
})
return
}
wx.switchTab({ url: '/pages/index/camera' })
},
fail: () => {
wx.showModal({
title: '提示',
content: '需要先上传简历后再开始测试,请到「我的」-「我的简历」中上传',
showCancel: true,
confirmText: '去上传',
success: (r) => {
@@ -198,16 +207,18 @@ Page({
onShareAppMessage() {
const { getSharePath } = require('../../utils/share')
const rm = this.data.reviewMode
return {
title: '神仙团队AI性格测试 (企业版) - 团队分析与优化',
title: rm ? '神仙团队性格测试 (企业版) - 团队分析与优化' : '神仙团队性格测试 (企业版) - 团队分析与优化',
path: getSharePath('/pages/enterprise/index')
}
},
onShareTimeline() {
const { buildShareQuery } = require('../../utils/share')
const rm = this.data.reviewMode
return {
title: '神仙团队AI性格测试 (企业版) - 团队分析与优化',
title: rm ? '神仙团队性格测试 (企业版) - 团队分析与优化' : '神仙团队性格测试 (企业版) - 团队分析与优化',
query: buildShareQuery()
}
}

View File

@@ -7,7 +7,7 @@
<text class="personal-icon">👤</text>
<text class="personal-text">个人版</text>
</view>
<view class="navbar-title">{{siteTitle || '神仙团队AI性格测试'}}</view>
<view class="navbar-title">{{siteTitle || '神仙团队性格测试'}}</view>
<view class="navbar-placeholder"></view>
</view>
</view>
@@ -21,15 +21,17 @@
<view class="image-wrapper">
<image class="main-image" src="/images/mbti-team-image.png" mode="aspectFit"></image>
</view>
<view class="float-tag tag-1">面相分析</view>
<view class="float-tag tag-2">骨相分析</view>
<view class="float-tag tag-1" wx:if="{{!reviewMode}}">面相分析</view>
<view class="float-tag tag-2" wx:if="{{!reviewMode}}">骨相分析</view>
<view class="float-tag tag-3">性格测评</view>
<view class="float-tag tag-1" wx:if="{{reviewMode}}">MBTI</view>
<view class="float-tag tag-2" wx:if="{{reviewMode}}">DISC</view>
</view>
</view>
<view class="process-section">
<view class="section-title">测试流程</view>
<view class="process-steps">
<view class="process-steps" wx:if="{{!reviewMode}}">
<view class="step-item">
<view class="step-circle active">1</view>
<text class="step-label">STEP1</text>
@@ -39,7 +41,7 @@
<view class="step-item">
<view class="step-circle">2</view>
<text class="step-label">STEP2</text>
<text class="step-text">{{aiAnalysisText || '智能分析'}}</text>
<text class="step-text">{{aiAnalysisText || '分析'}}</text>
</view>
<view class="step-line"></view>
<view class="step-item">
@@ -48,10 +50,29 @@
<text class="step-text">生成报告</text>
</view>
</view>
<view class="process-steps" wx:if="{{reviewMode}}">
<view class="step-item">
<view class="step-circle active">1</view>
<text class="step-label">STEP1</text>
<text class="step-text">选择测试</text>
</view>
<view class="step-line"></view>
<view class="step-item">
<view class="step-circle">2</view>
<text class="step-label">STEP2</text>
<text class="step-text">回答问题</text>
</view>
<view class="step-line"></view>
<view class="step-item">
<view class="step-circle">3</view>
<text class="step-label">STEP3</text>
<text class="step-text">查看结果</text>
</view>
</view>
</view>
<view class="start-button" bindtap="startAITest">
<text class="button-text">{{startButtonEnterprise || '开始面部测试'}}</text>
<text class="button-text">{{startButtonEnterprise || '开始性格测试'}}</text>
</view>
<!-- 自定义底部导航 -->

View File

@@ -1,4 +1,4 @@
// pages/index/camera.js - 面相分析拍照页,拍完后上传到服务器再跳转结果页
// pages/index/camera.js - 拍照页,拍完后上传到服务器再跳转结果页
const app = getApp()
const { hasPhone, bindPhoneByCode, ensureProfileCompleteAndRedirect } = require('../../utils/phoneAuth.js')
@@ -10,7 +10,8 @@ Page({
guideText: '请正对镜头',
uploading: false,
needPhoneAuth: false,
aiAnalysisText: '智能分析'
aiAnalysisText: '分析',
reviewMode: true
},
onLoad() {
@@ -22,7 +23,7 @@ Page({
app.getRuntimeConfig().then((cfg) => {
if (cfg && cfg.textConfig) {
app.globalData.textConfig = cfg.textConfig
this.setData({ aiAnalysisText: cfg.textConfig.aiAnalysisText || '智能分析' })
this.setData({ aiAnalysisText: cfg.textConfig.aiAnalysisText || '分析' })
}
}).catch(() => {})
}
@@ -189,7 +190,7 @@ Page({
console.error('相机错误:', e)
wx.showModal({
title: '相机权限',
content: '请允许使用相机权限以进行AI人脸分析',
content: '请允许使用相机权限以进行性格分析',
confirmText: '去设置',
success: (res) => {
if (res.confirm) {

View File

@@ -1,5 +1,5 @@
<!--pages/index/camera.wxml - AI拍照页面(按旧版模板重构)-->
<view class="container">
<!--pages/index/camera.wxml - 拍照页面-->
<view class="container" wx:if="{{!reviewMode}}">
<view class="progress-section">
<view class="progress-info">
<text class="step-text">步骤 {{photoIndex + 1}}/3</text>
@@ -54,7 +54,7 @@
<text class="action-button-text">重新拍摄</text>
</view>
<view class="action-button primary" bindtap="completeCapture">
<text class="action-button-text">立即{{aiAnalysisText || '智能分析'}}</text>
<text class="action-button-text">立即{{aiAnalysisText || '分析'}}</text>
</view>
</view>
</view>

View File

@@ -7,10 +7,10 @@ Page({
statusBarHeight: 0,
navbarHeight: 88,
showEnterpriseEntry: false,
siteTitle: '神仙团队AI性格测试',
startButtonText: '开始面相测试',
aiAnalysisText: '智能分析',
reviewMode: false
siteTitle: '神仙团队性格测试',
startButtonText: '开始性格测试',
aiAnalysisText: '分析',
reviewMode: true
},
onLoad(options) {
@@ -28,9 +28,9 @@ Page({
statusBarHeight: statusBarHeightRpx,
navbarHeight: navbarHeightRpx,
showEnterpriseEntry: userInfo.hasEnterprise === true,
siteTitle: gd.reviewMode ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队AI性格测试'),
siteTitle: gd.reviewMode ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队性格测试'),
startButtonText: gd.reviewMode ? '开始性格测试' : ((gd.textConfig && gd.textConfig.startButtonText) || '开始面相测试'),
aiAnalysisText: gd.reviewMode ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '智能分析'),
aiAnalysisText: gd.reviewMode ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '分析'),
reviewMode: !!gd.reviewMode
})
// 预加载站点名称与文案配置
@@ -46,7 +46,7 @@ Page({
getApp().globalData.textConfig = cfg.textConfig
this.setData({
startButtonText: rm ? '开始性格测试' : (cfg.textConfig.startButtonText || '开始面相测试'),
aiAnalysisText: rm ? '分析' : (cfg.textConfig.aiAnalysisText || '智能分析')
aiAnalysisText: rm ? '分析' : (cfg.textConfig.aiAnalysisText || '分析')
})
}
this.setData({ reviewMode: rm })
@@ -99,9 +99,9 @@ Page({
const gd = getApp().globalData
const rm = !!gd.reviewMode
this.setData({
siteTitle: rm ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队AI性格测试'),
siteTitle: rm ? (gd.siteTitle || '神仙团队性格测试').replace(/AI/gi, '') : (gd.siteTitle || '神仙团队性格测试'),
startButtonText: rm ? '开始性格测试' : ((gd.textConfig && gd.textConfig.startButtonText) || '开始面相测试'),
aiAnalysisText: rm ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '智能分析'),
aiAnalysisText: rm ? '分析' : ((gd.textConfig && gd.textConfig.aiAnalysisText) || '分析'),
reviewMode: rm
})
const userInfo = getApp().globalData.userInfo || wx.getStorageSync('userInfo') || {}
@@ -172,7 +172,7 @@ Page({
const { getSharePathByScope } = require('../../utils/share')
const rm = this.data.reviewMode
return {
title: rm ? '性格测试 - 快来测测你的MBTI性格类型' : 'AI人脸性格分析 - 看看你的面相透露了什么性格密码',
title: rm ? '性格测试 - 快来测测你的MBTI性格类型' : '性格测试 - 看看你的面相透露了什么性格密码',
path: getSharePathByScope('/pages/index/index')
}
},
@@ -181,7 +181,7 @@ Page({
const { buildShareQuery } = require('../../utils/share')
const rm = this.data.reviewMode
return {
title: rm ? '性格测试 - 快来测测你的MBTI性格类型' : 'AI人脸性格分析 - 看看你的面相透露了什么性格密码',
title: rm ? '性格测试 - 快来测测你的MBTI性格类型' : '性格测试 - 看看你的面相透露了什么性格密码',
query: buildShareQuery()
}
}

View File

@@ -42,7 +42,7 @@
<view class="step-item">
<view class="step-circle">2</view>
<text class="step-label">STEP2</text>
<text class="step-text">{{aiAnalysisText || '智能分析'}}</text>
<text class="step-text">{{aiAnalysisText || '分析'}}</text>
</view>
<view class="step-line"></view>
<view class="step-item">
@@ -77,12 +77,6 @@
<text class="button-text">{{startButtonText || '开始性格测试'}}</text>
</view>
<!-- AI生成内容标识始终显示符合监管要求 -->
<view class="ai-disclosure-banner">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">本服务含人工智能生成内容,结果仅供参考</text>
</view>
<!-- 自定义底部导航 -->
<custom-tab-bar />
</view>

View File

@@ -1,4 +1,4 @@
// pages/index/result.js - AI分析结果页(按旧版模板重构)
// pages/index/result.js - 分析结果页
const app = getApp()
const payment = require('../../utils/payment')
const { hasPhone, bindPhoneByCode, ensureProfileCompleteAndRedirect } = require('../../utils/phoneAuth.js')
@@ -12,7 +12,7 @@ Page({
noFaceError: false,
noFaceMessage: '',
progress: 0,
analyzingTip: '正在识别面部特征...',
analyzingTip: '正在分析中...',
activeTab: 'face', // 'face' | 'bone'
// 报告付费信息
payInfo: {
@@ -52,8 +52,8 @@ Page({
hasPhone: false,
analyzingTitle: '正在分析中',
reportTitle: '分析报告',
aiAnalysisText: '智能分析',
reviewMode: false
aiAnalysisText: '分析',
reviewMode: true
},
onLoad(options) {
@@ -69,7 +69,7 @@ Page({
this.setData({
analyzingTitle: tc.analyzingTitle || '正在分析中',
reportTitle: tc.reportTitle || '分析报告',
aiAnalysisText: tc.aiAnalysisText || '智能分析'
aiAnalysisText: tc.aiAnalysisText || '分析'
})
if (tc.reportTitle) wx.setNavigationBarTitle({ title: tc.reportTitle })
} else {
@@ -80,7 +80,7 @@ Page({
this.setData({
analyzingTitle: t.analyzingTitle || '正在分析中',
reportTitle: t.reportTitle || '分析报告',
aiAnalysisText: t.aiAnalysisText || '智能分析'
aiAnalysisText: t.aiAnalysisText || '分析'
})
if (t.reportTitle) wx.setNavigationBarTitle({ title: t.reportTitle })
}
@@ -145,7 +145,7 @@ Page({
this.setData({
analyzingTitle: tc.analyzingTitle || '正在分析中',
reportTitle: tc.reportTitle || '分析报告',
aiAnalysisText: tc.aiAnalysisText || '智能分析'
aiAnalysisText: tc.aiAnalysisText || '分析'
})
}
},
@@ -169,9 +169,9 @@ Page({
return
}
const tips = [
'正在识别面部特征...',
'分析眉眼特征...',
'结合《冰鉴》分析骨形...',
'正在分析数据...',
'匹配性格特征...',
'综合评估中...',
'匹配MBTI/PDP/DISC...',
'生成综合报告...'
]
@@ -524,7 +524,7 @@ Page({
onShareAppMessage() {
const r = this.data.result
const rm = this.data.reviewMode
const t = rm ? '测试结果' : (this.data.aiAnalysisText || '智能分析')
const t = rm ? '测试结果' : (this.data.aiAnalysisText || '分析')
const { getSharePathByScope } = require('../../utils/share')
return {
title: `${t}:我是${r?.mbti} ${r?.pdpEmoji}${r?.pdp}型,来测测你的!`,
@@ -535,7 +535,7 @@ Page({
onShareTimeline() {
const r = this.data.result
const rm = this.data.reviewMode
const t = rm ? '测试结果' : (this.data.aiAnalysisText || '智能分析')
const t = rm ? '测试结果' : (this.data.aiAnalysisText || '分析')
const { buildShareQuery } = require('../../utils/share')
return {
title: `${t}:我是${r?.mbti} ${r?.pdpEmoji}${r?.pdp}型,来测测你的!`,

View File

@@ -1,4 +1,4 @@
<!--pages/index/result.wxml - AI分析结果(按旧版模板重构)-->
<!--pages/index/result.wxml - 分析结果-->
<view class="container">
<!-- 分析中状态 -->
<view class="analyzing-modal" wx:if="{{isAnalyzing}}">
@@ -38,12 +38,6 @@
<!-- 分析结果 -->
<view wx:if="{{!isAnalyzing && showResult}}">
<!-- AI生成内容标识顶部显著位置始终显示 -->
<view class="ai-disclosure-banner">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">以下报告由人工智能生成,结果仅供参考</text>
</view>
<!-- 状态横幅 -->
<view class="status-banner {{hasError ? 'error-banner' : ''}}">
<view class="status-dot {{hasError ? 'error-dot' : ''}}"></view>
@@ -148,9 +142,8 @@
<!-- ========== 详细分析区(解锁后可见) ========== -->
<block wx:if="{{!hasError && (!payInfo.requiresPayment || payInfo.isPaid)}}">
<!-- 面相分析 -->
<block wx:if="{{result.faceAnalysis}}">
<!-- 完整结构化面相(旧 object 格式) -->
<!-- 面相分析(审核模式隐藏) -->
<block wx:if="{{!reviewMode && result.faceAnalysis}}">
<view class="card" wx:if="{{result.faceAnalysis.facialFeatures && result.faceAnalysis.facialFeatures.length > 0}}">
<text class="card-title">面部特征分析</text>
<view class="feature-list">
@@ -161,15 +154,13 @@
</view>
</view>
</block>
<!-- 字符串版面相(新 prompt 返回) -->
<view class="card" wx:elif="{{result.faceAnalysisText}}">
<view class="card" wx:elif="{{!reviewMode && result.faceAnalysisText}}">
<text class="card-title">面相分析</text>
<text class="card-text">{{result.faceAnalysisText}}</text>
</view>
<!-- 骨相分析 -->
<block wx:if="{{result.boneAnalysis && result.boneAnalysis.boneFormSummary}}">
<!-- 完整结构化骨相(旧 object 格式) -->
<!-- 骨相分析(审核模式隐藏) -->
<block wx:if="{{!reviewMode && result.boneAnalysis && result.boneAnalysis.boneFormSummary}}">
<view class="card">
<text class="card-title">骨相分析(《冰鉴》八骨)</text>
<view class="bone-content">
@@ -184,8 +175,7 @@
</view>
</view>
</block>
<!-- 字符串版骨相(新 prompt 返回) -->
<view class="card" wx:elif="{{result.boneAnalysisText}}">
<view class="card" wx:elif="{{!reviewMode && result.boneAnalysisText}}">
<text class="card-title">骨相分析(《冰鉴》八骨)</text>
<text class="card-text">{{result.boneAnalysisText}}</text>
</view>
@@ -305,10 +295,5 @@
</view>
</view>
<!-- AI生成内容标识底部始终显示 -->
<view class="ai-disclosure-banner bottom">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">以上内容由人工智能生成,结果仅供参考</text>
</view>
</view>
</view>

View File

@@ -1,4 +1,4 @@
// pages/index/camera.js - 面相分析拍照页,拍完后上传到服务器再跳转结果
// pages/index/upload.js - 上传照片引导
const app = getApp()
const { hasPhone, bindPhoneByCode, ensureProfileCompleteAndRedirect } = require('../../utils/phoneAuth.js')
@@ -16,7 +16,7 @@ Page({
guideText: '请正对镜头',
uploading: false,
needPhoneAuth: false,
aiAnalysisText: '智能分析'
aiAnalysisText: '分析'
},
onLoad() {
@@ -27,7 +27,7 @@ Page({
app.getRuntimeConfig().then((cfg) => {
if (cfg && cfg.textConfig) {
app.globalData.textConfig = cfg.textConfig
this.setData({ aiAnalysisText: cfg.textConfig.aiAnalysisText || '智能分析' })
this.setData({ aiAnalysisText: cfg.textConfig.aiAnalysisText || '分析' })
}
}).catch(() => {})
}
@@ -186,7 +186,7 @@ Page({
console.error('相机错误:', e)
wx.showModal({
title: '相机权限',
content: '请允许使用相机权限以进行AI人脸分析',
content: '请允许使用相机权限以进行性格分析',
confirmText: '去设置',
success: (res) => {
if (res.confirm) {

View File

@@ -1,4 +1,4 @@
<!--pages/index/camera.wxml - AI拍照页面仿上传照片指南布局-->
<!--pages/index/upload.wxml - 上传照片引导页-->
<view class="page">
<!-- 主体内容 -->
<view class="content">
@@ -6,7 +6,7 @@
<view class="intro">
<text class="intro-title">多角度拍摄更精准</text>
<view class="intro-desc-wrap">
<text class="intro-desc">为了更准确地通过骨相与面相分析您的性格,</text>
<text class="intro-desc">为了更准确地分析您的性格特征</text>
<text class="intro-desc">请上传以下三个维度的照片。</text>
</view>
</view>
@@ -103,15 +103,9 @@
</view>
</view>
<!-- AI生成内容标识 -->
<view class="ai-disclosure-banner">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">分析结果由人工智能生成,仅供参考</text>
</view>
<!-- 底部操作按钮 -->
<view class="footer">
<button class="primary-btn" bindtap="completeCapture">智能分析</button>
<button class="primary-btn" bindtap="completeCapture">开始分析</button>
</view>
<!-- 自定义底部导航,与首页保持一致 -->

View File

@@ -307,7 +307,7 @@ Page({
const { getSharePathByScope } = require('../../utils/share')
const rm = !!app.globalData.reviewMode
return {
title: rm ? '神仙团队性格测试 - 发现你的MBTI类型' : '神仙团队AI性格测试 - 发现你的MBTI类型',
title: '神仙团队性格测试 - 发现你的MBTI类型',
path: getSharePathByScope('/pages/index/index')
}
},
@@ -316,7 +316,7 @@ Page({
const { buildShareQuery } = require('../../utils/share')
const rm = !!app.globalData.reviewMode
return {
title: rm ? '神仙团队性格测试 - 发现你的MBTI类型' : '神仙团队AI性格测试 - 发现你的MBTI类型',
title: '神仙团队性格测试 - 发现你的MBTI类型',
query: buildShareQuery()
}
}

View File

@@ -254,7 +254,7 @@ Page({
onShareAppMessage() {
const { getSharePathByScope } = require('../../utils/share')
return {
title: '神仙团队AI性格测试 - 发现你的内在潜能',
title: '神仙团队性格测试 - 发现你的内在潜能',
path: getSharePathByScope('/pages/index/index')
}
},
@@ -263,7 +263,7 @@ Page({
onShareTimeline() {
const { buildShareQuery } = require('../../utils/share')
return {
title: '神仙团队AI性格测试 - 发现你的内在潜能',
title: '神仙团队性格测试 - 发现你的内在潜能',
query: buildShareQuery()
}
}

View File

@@ -234,13 +234,13 @@ Page({
onShareAppMessage() {
const { getSharePath } = require('../../utils/share')
return { title: '神仙团队AI性格测试 - 发现你的内在潜能', path: getSharePath('/pages/purchase/index') }
return { title: '神仙团队性格测试 - 发现你的内在潜能', path: getSharePath('/pages/purchase/index') }
},
onShareTimeline() {
const { buildShareQuery } = require('../../utils/share')
return {
title: '神仙团队AI性格测试 - 发现你的内在潜能',
title: '神仙团队性格测试 - 发现你的内在潜能',
query: buildShareQuery()
}
}

View File

@@ -93,7 +93,7 @@ Page({
const tips = [
'正在汇总各项测评结果...',
'正在解析简历内容...',
'AI 正在进行深度匹配分析...',
'正在进行深度匹配分析...',
'正在生成综合评估报告...',
'分析即将完成,请稍候...'
]
@@ -187,7 +187,7 @@ Page({
const isTimeout = err && (err.errMsg || '').indexOf('timeout') !== -1
this.setData({
loading: false,
error: isTimeout ? 'AI 分析耗时较长,请点击「重新生成」再试。' : '网络请求失败,请检查网络后重试。'
error: isTimeout ? '分析耗时较长,请点击「重新生成」再试。' : '网络请求失败,请检查网络后重试。'
})
}
})

View File

@@ -18,18 +18,12 @@
<!-- 结果显示 -->
<block wx:if="{{!loading || error || content}}">
<!-- AI生成内容标识顶部显著位置始终显示 -->
<view class="ai-disclosure-banner">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">以下报告由人工智能生成,结果仅供参考</text>
</view>
<!-- 页面顶部 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 ? '请检查后重新生成' : '基于测评结果 · AI 综合分析'}}</text>
<text class="hero-sub">{{error ? '请检查后重新生成' : '基于测评结果 · 综合分析'}}</text>
</view>
</view>
@@ -75,12 +69,6 @@
<text class="card-text content-text">{{content}}</text>
</view>
<!-- AI生成内容标识底部始终显示 -->
<view class="ai-disclosure-banner bottom">
<view class="ai-disclosure-icon">AI</view>
<text class="ai-disclosure-text">以上内容由人工智能生成,结果仅供参考</text>
</view>
<!-- 操作按钮 -->
<view class="action-section" wx:if="{{!loading || error}}">
<button class="btn btn-primary" open-type="share" wx:if="{{!payInfo.requiresPayment && content}}">

View File

@@ -2,7 +2,7 @@
<view class="container">
<view class="card intro-card">
<text class="intro-title">选择一项详细性格测试</text>
<text class="intro-desc">完成问卷即可获得对应维度的专业报告,与面相分析结果互补</text>
<text class="intro-desc">完成问卷即可获得对应维度的专业性格报告</text>
</view>
<view class="card entry-card" bindtap="goMBTI">

View File

@@ -318,7 +318,7 @@ function purchaseSingleTest(testType, success, fail) {
mbti: 'MBTI性格测试',
disc: 'DISC行为风格测试',
pdp: 'PDP动物性格测试',
ai: 'AI人脸性格分析'
ai: '性格分析'
}
const orderId = generateOrderId(`single_${testType}`)
@@ -339,7 +339,7 @@ function purchaseSingleTest(testType, success, fail) {
/**
* 使用后台定价购买单项测试/报告
* 支持:人脸测试/MBTI测试/DISC测试/PDP测试/完整报告/团队分析
* 支持:性格测试/MBTI测试/DISC测试/PDP测试/完整报告/团队分析
* @param {String} productType - 'face' | 'mbti' | 'disc' | 'pdp' | 'report' | 'team_analysis'
* @param {String} description - 商品描述
* @param {Function|Object} extra - 兼容两种调用方式:
@@ -369,7 +369,7 @@ function purchaseByPricing(productType, description, extra, maybeFail) {
})
}
// 人脸测试完整报告
// 性格测试完整报告
// 兼容两种调用方式:
// - purchaseFaceTest(success, fail)
// - purchaseFaceTest({ testResultId, success, fail })
@@ -384,7 +384,7 @@ function purchaseFaceTest(arg1, arg2) {
const { testResultId, success, fail } = opts
purchaseByPricing('face', 'AI人脸性格分析完整报告', { testResultId, success, fail })
purchaseByPricing('face', '性格分析完整报告', { testResultId, success, fail })
}
// MBTI测试付费版支持 purchaseMbtiTest({ testResultId, success, fail })
@@ -415,7 +415,7 @@ function purchaseResumeAnalysis(arg1, arg2) {
purchaseByPricing('resume', '简历综合分析付费版', { testResultId, success, fail })
}
// 完整报告整合MBTI/DISC/PDP/AI人脸等深度解读)
// 完整报告整合MBTI/DISC/PDP等深度解读
function purchaseFullReport(success, fail) {
purchaseByPricing('report', '完整人格与职业发展报告', success, fail)
}