答辩级 UI 改造:指挥台驾驶舱/证据地图/演化生命线/成长路线图/候选审核台

- 驾驶舱改'人才能力变化指挥台':变化事件流主图+可信度卡+行动卡+播报卡
- 图谱子图同心分层布局、技能变化角标、系统发现折叠入右栏、主操作收敛
- 演化页双 Tab(岗位报告/全岗位扫描)+ 能力生命线 Swimlane + 更替流
- 学习路径成长路线图:概要条/示范路线/预计投入/标记完成联动
- 新增候选审核台抽屉 + GET /api/stats/credibility
- 简历裸姓名/专硕提取修复(桌面真实简历验收通过)+ BGE-M3 加载提示
This commit is contained in:
RoyirinRosmontis
2026-08-19 12:14:39 +08:00
parent ac6d08cdf2
commit 0b198e9976
9 changed files with 1002 additions and 238 deletions
+23
View File
@@ -70,5 +70,28 @@ const heat = Array.from({ length: 30 }, (_, i) => [`20${10 + i}Q1`, i]);
eq(heat.slice(-8).length, 8, "近8季切片");
eq(heat.slice(-Infinity).length, 30, "全部范围");
/* candidateTrust:候选可信等级四指标(JD≥15 / 企业≥5 / 增长趋势 / 差异度≥0.40) */
const candidateTrust = loadFn("candidateTrust");
const stageEffortText = loadFn("stageEffortText");
const existJobs = [{ title: "Java开发工程师", required_skills: ["Java", "MySQL"], preferred_skills: ["Redis"] }];
const strong = candidateTrust({
source_count: 31, company_count: 12,
support_windows: ["2025Q1", "2025Q2", "2025Q3", "2025Q4", "2026Q1", "2026Q2"],
required_skills: ["RAG", "向量检索"], preferred_skills: [],
}, existJobs);
eq(strong.dots.length, 4, "四指标点");
eq(strong.level, "高", "四指标全达标为高");
const weak = candidateTrust({
source_count: 3, company_count: 1, support_windows: ["2026Q2"],
required_skills: ["Java", "MySQL"], preferred_skills: ["Redis"],
}, existJobs);
eq(weak.level, "低", "弱证据且与既有岗位重合为低");
eq(weak.nearest.title, "Java开发工程师", "识别出最相近既有岗位");
eq(weak.distinctness, 0, "技能完全重合时差异度为 0");
/* stageEffortText:阶段预计投入(每周约 8 小时) */
eq(stageEffortText(2), "2 周 / 约 16 小时", "阶段投入文案");
eq(stageEffortText(1), "1 周 / 约 8 小时", "单周投入文案");
console.log(`\n${pass} passed, ${fail} failed`);
process.exit(fail ? 1 : 0);