新会员页面

This commit is contained in:
2026-05-15 19:02:11 +08:00
parent f341408254
commit 14c7660770
31 changed files with 3496 additions and 396 deletions
+70 -31
View File
@@ -221,39 +221,42 @@
</div>
<!-- AI帮写内容 -->
<div v-if="previewTab === 'ai'" class="job-resume-custom-dialog__preview-ai">
<!-- 匹配度提升提示 -->
<div class="job-resume-custom-dialog__ai-result">
<div class="job-resume-custom-dialog__ai-result-text">
<p class="job-resume-custom-dialog__ai-result-title">恭喜你的简历匹配值从<br/>{{ jobInfo.matchScore }}分提升到了10分</p>
<div class="job-resume-custom-dialog__ai-result-detail">
<p class="job-resume-custom-dialog__ai-result-subtitle">做了哪些优化</p>
<ul class="job-resume-custom-dialog__ai-result-list">
<li v-for="(item, i) in aiOptimizeResults" :key="i">·{{ item }}</li>
</ul>
</div>
</div>
<div class="job-resume-custom-dialog__ai-result-score">
<div class="job-resume-custom-dialog__match-ring job-resume-custom-dialog__match-ring--large">
<svg viewBox="0 0 60 60" class="job-resume-custom-dialog__ring-svg">
<circle cx="30" cy="30" r="24" stroke-width="4" stroke="#E8E8E8" fill="none" opacity="0.3"/>
<circle cx="30" cy="30" r="24" stroke-width="4" fill="none" stroke="#4FC2C9" stroke-linecap="round" :stroke-dasharray="2*Math.PI*24" :stroke-dashoffset="0" transform="rotate(-90 30 30)"/>
</svg>
<span class="job-resume-custom-dialog__match-score">10.0</span>
</div>
<span class="job-resume-custom-dialog__match-label job-resume-custom-dialog__match-label--high">非常匹配</span>
</div>
</div>
<!-- 快捷操作按钮 -->
<div class="job-resume-custom-dialog__ai-quick-actions">
<button
v-for="(action, i) in aiQuickActions"
:key="i"
class="job-resume-custom-dialog__ai-quick-btn"
@click="sendAiMessage(action)"
>{{ action }}</button>
</div>
<!-- AI聊天消息区域 -->
<div class="job-resume-custom-dialog__ai-messages" ref="aiMessagesRef">
<!-- 匹配度提升提示 -->
<div class="job-resume-custom-dialog__ai-result prl0">
<div class="job-resume-custom-dialog__ai-result-text">
<p class="job-resume-custom-dialog__ai-result-title">恭喜你的简历匹配值从<br/>{{ jobInfo.matchScore }}分提升到了{{ cachedOptimizedScore }}</p>
<div class="job-resume-custom-dialog__ai-result-detail">
<p class="job-resume-custom-dialog__ai-result-subtitle">做了哪些优化</p>
<ul class="job-resume-custom-dialog__ai-result-list">
<li v-for="(item, i) in aiOptimizeResults" :key="i">·{{ item }}</li>
</ul>
</div>
</div>
<div class="job-resume-custom-dialog__ai-result-score">
<div class="job-resume-custom-dialog__match-ring job-resume-custom-dialog__match-ring--large">
<svg viewBox="0 0 60 60" class="job-resume-custom-dialog__ring-svg">
<circle cx="30" cy="30" r="24" stroke-width="4" stroke="#E8E8E8" fill="none" opacity="0.3"/>
<circle cx="30" cy="30" r="24" stroke-width="4" fill="none" stroke="#4FC2C9" stroke-linecap="round" :stroke-dasharray="2*Math.PI*24" :stroke-dashoffset="2*Math.PI*24*(1-cachedOptimizedScore/10)" transform="rotate(-90 30 30)"/>
</svg>
<span class="job-resume-custom-dialog__match-score">{{ cachedOptimizedScore.toFixed(1) }}</span>
</div>
<span class="job-resume-custom-dialog__match-label job-resume-custom-dialog__match-label--high">{{ cachedOptimizedScore >= 9 ? '非常匹配' : cachedOptimizedScore >= 6 ? '高匹配度' : '低匹配度' }}</span>
</div>
</div>
<!-- 快捷操作按钮 -->
<div class="job-resume-custom-dialog__ai-quick-actions prl0">
<button
v-for="(action, i) in aiQuickActions"
:key="i"
class="job-resume-custom-dialog__ai-quick-btn"
@click="sendAiMessage(action)"
>{{ action }}</button>
</div>
<div
v-for="(msg, i) in aiMessages"
:key="i"
@@ -748,6 +751,42 @@ const aiOptimizeResults = computed<string[]>(() => {
return results
})
/**
* 根据勾选的优化部分数量计算优化后的匹配评分
* 0个勾选:3~5之间随机(一位小数)
* 1个勾选:6~7之间随机
* 2个勾选:8~9之间随机
* 3个勾选:9~10之间随机,50%概率直接为10.0
*/
const optimizedMatchScore = computed(() => {
const checkedCount = optimizeSections.value.filter(s => s.checked).length
let min: number, max: number
if (checkedCount === 0) {
min = 3; max = 5
} else if (checkedCount === 1) {
min = 6; max = 7
} else if (checkedCount === 2) {
min = 8; max = 9
} else {
// 3个勾选:50%概率直接10.0
if (Math.random() < 0.2) return 10.0
min = 9; max = 10
}
// 生成 [min, max] 之间的一位小数随机值
const raw = min + Math.random() * (max - min)
return Math.round(raw * 10) / 10
})
/** 缓存优化后评分(避免computed每次重新随机) */
const cachedOptimizedScore = ref<number>(0)
/** 进入步骤4时缓存一次评分 */
watch(currentStep, (val) => {
if (val === 4) {
cachedOptimizedScore.value = optimizedMatchScore.value
}
})
/** AI快捷操作按钮 */
const aiQuickActions = ref<string[]>([
'精简一下第一段工作经历',