resume_detail.html
5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
{% extends "base.html" %}
{% block title %}简历详情 - {{ resume.name }}{% endblock %}
{% block body %}
<style>
body{overflow-y:auto!important;height:auto!important;}
.detail-card{background:white;border-radius:8px;padding:24px;margin-bottom:16px;box-shadow:0 1px 2px rgba(0,0,0,0.05);}
.detail-card h3{font-size:16px;margin-bottom:12px;color:#2c3e50;border-bottom:1px solid #eee;padding-bottom:8px;}
.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;}
.info-item{display:flex;gap:8px;font-size:14px;}
.info-item .label{color:#999;min-width:60px;flex-shrink:0;}
.info-item .value{color:#333;font-weight:500;}
.exp-item{padding:12px 0;border-bottom:1px solid #f5f5f5;font-size:13px;}
.exp-item:last-child{border-bottom:none;}
.exp-type{font-size:11px;padding:1px 6px;border-radius:3px;margin-right:6px;}
.exp-work{background:#e3f2fd;color:#1565c0;}
.exp-edu{background:#f3e5f5;color:#7b1fa2;}
.score-box{display:flex;align-items:center;gap:16px;margin-bottom:16px;}
.score-big{font-size:48px;font-weight:bold;}
.score-high{color:#27ae60;}
.score-mid{color:#f39c12;}
.score-low{color:#e74c3c;}
.score-neutral{color:#999;}
.dim-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid #f5f5f5;font-size:13px;}
.dim-name{min-width:120px;font-weight:500;}
.dim-score{font-size:16px;font-weight:bold;}
.dim-reason{color:#666;flex:1;}
.dim-bar{width:80px;height:6px;background:#eee;border-radius:3px;}
.dim-fill{height:100%;border-radius:3px;}
.btn-back{padding:10px 16px;border:1px solid #ddd;border-radius:8px;background:white;color:#333;font-size:14px;cursor:pointer;text-decoration:none;display:inline-block;margin-bottom:16px;}
.btn-back:hover{background:#f5f7fa;}
</style>
<div style="max-width:700px;margin:0 auto;padding:20px;">
<a href="/resumes" class="btn-back">← 返回列表</a>
<div class="detail-card">
<h2 style="margin-bottom:16px;">{{ resume.name }} <span style="font-size:14px;color:#999;font-weight:normal;">#{{ resume.id }}</span></h2>
<div class="info-grid">
<div class="info-item"><span class="label">性别</span><span class="value">{{ resume.gender or '—' }}</span></div>
<div class="info-item"><span class="label">学历</span><span class="value">{{ resume.education or '—' }}</span></div>
<div class="info-item"><span class="label">年龄</span><span class="value">{{ resume.age or '—' }}</span></div>
<div class="info-item"><span class="label">城市</span><span class="value">{{ resume.city or '—' }}</span></div>
<div class="info-item"><span class="label">到岗</span><span class="value">{{ resume.applyStatus or '—' }}</span></div>
<div class="info-item"><span class="label">工作年限</span><span class="value">{{ resume.workAge or '—' }}</span></div>
<div class="info-item"><span class="label">期望薪资</span><span class="value">{{ resume.expSalary or '—' }}</span></div>
<div class="info-item"><span class="label">岗位薪资</span><span class="value">{{ resume.jobSalary or '—' }}</span></div>
<div class="info-item"><span class="label">期望职位</span><span class="value">{{ resume.positionName or '—' }}</span></div>
</div>
<div style="margin-top:12px;font-size:13px;color:#666;">{{ resume.secondText or '' }}</div>
<div style="margin-top:8px;font-size:13px;color:#666;">{{ resume.firstText or '' }}</div>
</div>
{% if score %}
<div class="detail-card">
<h3>📊 打分结果(Rubric v{{ score.rubric_version }})</h3>
{% if score.eliminated == 1 or score.tier == '已淘汰' %}
<div style="background:#f8d7da;border:1px solid #f5c6cb;border-radius:8px;padding:16px;margin-bottom:12px;">
<div style="font-size:14px;font-weight:bold;color:#721c24;">⛔ 已淘汰 — {{ score.eliminated_reason or '未知原因' }}</div>
<div style="font-size:12px;color:#721c24;margin-top:4px;">该简历未进入正常打分流程,直接被淘汰项规则淘汰。</div>
</div>
{% else %}
<div class="score-box">
<div class="score-big {% if score.total_score >= 75 %}score-high{% elif score.total_score >= 55 %}score-mid{% else %}score-low{% endif %}">{{ score.total_score }}</div>
<div>
<div style="font-size:18px;font-weight:bold;">{{ score.tier }}</div>
<div style="font-size:12px;color:#999;">{{ score.scored_at }}</div>
</div>
</div>
{% set dims = score.dimension_scores | from_json %}
{% for dim_name, dim_info in dims.items() %}
<div class="dim-row">
<span class="dim-name">{{ dim_name }}</span>
<span class="dim-score">{{ dim_info.score }}/5</span>
<span class="dim-bar"><span class="dim-fill" style="width:{% set w = dim_info.score * 20 %}{{ w }}%;background:{% if dim_info.score >= 4 %}#27ae60{% elif dim_info.score >= 3 %}#f39c12{% else %}#e74c3c{% endif %};"></span></span>
<span class="dim-reason">{{ dim_info.reason }}</span>
</div>
{% endfor %}
{% endif %}
</div>
{% endif %}
<div class="detail-card">
<h3>📋 经历</h3>
{% for exp in experiences %}
<div class="exp-item">
<span class="exp-type {% if exp.type == 1 %}exp-work{% else %}exp-edu{% endif %}">{% if exp.type == 1 %}工作{% else %}教育{% endif %}</span>
<span style="font-weight:500;">{{ exp.organization or '—' }}</span>
<span style="color:#666;"> · {{ exp.occupation or '—' }}</span>
<span style="color:#999;font-size:11px;float:right;">{{ exp.startDate or '' }} ~ {{ exp.endDate or '' }}</span>
</div>
{% endfor %}
</div>
<div class="detail-card">
<h3>🔗 原始数据</h3>
<details>
<summary style="cursor:pointer;font-size:13px;color:#999;">展开查看完整 JSON</summary>
<pre style="margin-top:12px;font-size:11px;background:#f8f9fa;padding:12px;border-radius:6px;overflow-x:auto;max-height:400px;">{{ raw_json }}</pre>
</details>
</div>
</div>
{% endblock %}