feat: 实现日历课程点击跳转到直播间功能

- 添加日历课程详情弹窗的点击跳转功能
- 公共课直播间和课程直播间支持URL参数自动选中课程
- 优化岗位详情页面样式,复用简洁卡片样式
- 为岗位详情标题添加图标
- 调整不同类型课程的跳转逻辑

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-09-11 14:14:45 +08:00
parent 60bd9bb142
commit 561d5c286d
107 changed files with 101383 additions and 478 deletions

62
verify_data.js Normal file
View File

@@ -0,0 +1,62 @@
#!/usr/bin/env node
import { resumeInterviewMockData } from './src/mocks/resumeInterviewMock.js';
const positionsToCheck = [
'民宿管家',
'民宿客房管家',
'民宿运营专员',
'露营地运营专员',
'新媒体运营专员',
'文创产品设计师',
'文创产品策划师',
'文创产品设计师助理',
'品牌策划运营专员',
'品牌公关',
'品牌推广专员',
'ip运营',
'IP运营总监助理',
'品牌公关管培生'
];
console.log('验证简历数据完整性...\n');
console.log('=' .repeat(60));
// 检查每个行业
for (const industry of resumeInterviewMockData.industries) {
const templates = resumeInterviewMockData.resumeTemplates[industry.name] || [];
for (const position of industry.positions) {
if (!positionsToCheck.includes(position.title)) continue;
// 查找对应的模板
const template = templates.find(t => t.position === position.title);
console.log(`\n岗位: ${position.title}`);
console.log(`行业: ${industry.name}`);
if (!template) {
console.log('❌ 未找到简历模板');
continue;
}
// 检查content
const hasContent = !!(template.content?.original || template.content?.modified);
console.log(`- content: ${hasContent ? '✅' : '❌'}`);
// 检查studentInfo
const hasStudentInfo = !!template.studentInfo;
console.log(`- studentInfo: ${hasStudentInfo ? '✅' : '❌'}`);
if (hasStudentInfo) {
const info = template.studentInfo;
console.log(` - project_experience: ${info.project_experience ? '✅' : '❌'}`);
console.log(` - core_skills: ${info.core_skills ? '✅' : '❌'}`);
console.log(` - compound_skills: ${info.compound_skills ? '✅' : '❌'}`);
console.log(` - personal_summary: ${info.personal_summary ? '✅' : '❌'}`);
}
}
}
console.log('\n' + '=' .repeat(60));
console.log('验证完成!');