feat: 完整的教务系统功能更新

- 添加面试模拟功能:视频播放、评分展示、滑动交互
- 实现1v1求职策略:导师信息更新、直播纪要功能
- 完善项目库和简历面试功能:添加详细的mock数据
- 更新课后作业页面:灰度显示、课程链接
- 个人档案和主页数据:万圆的完整个人信息
- 修复各类语法错误和数据结构问题

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-08-27 09:46:59 +08:00
parent 5efe7f6a8a
commit 264754c7fb
57 changed files with 49068 additions and 1381 deletions

View File

@@ -0,0 +1,74 @@
.file-icon {
width: 56px;
height: 56px;
position: relative;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.file-icon-fold {
position: absolute;
top: 0;
right: 0;
width: 0;
height: 0;
border-style: solid;
border-width: 0 12px 12px 0;
border-color: transparent #fff transparent transparent;
}
.file-icon-text {
font-size: 14px;
font-weight: 700;
color: #fff;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
letter-spacing: 0.5px;
}
/* PDF - 红色 */
.file-icon-pdf {
background: linear-gradient(135deg, #ff4d4d 0%, #cc0000 100%);
}
.file-icon-pdf .file-icon-fold {
border-right-color: #ffcccc;
}
/* Word文档 - 蓝色 */
.file-icon-doc {
background: linear-gradient(135deg, #2196f3 0%, #1565c0 100%);
}
.file-icon-doc .file-icon-fold {
border-right-color: #bbdefb;
}
/* PPT - 橙色 */
.file-icon-ppt {
background: linear-gradient(135deg, #ff9800 0%, #e65100 100%);
}
.file-icon-ppt .file-icon-fold {
border-right-color: #ffe0b2;
}
/* Excel - 绿色 */
.file-icon-excel {
background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
}
.file-icon-excel .file-icon-fold {
border-right-color: #c8e6c9;
}
/* 默认 - 灰色 */
.file-icon-default {
background: linear-gradient(135deg, #9e9e9e 0%, #616161 100%);
}
.file-icon-default .file-icon-fold {
border-right-color: #e0e0e0;
}

View File

@@ -0,0 +1,48 @@
import "./index.css";
const FileIcon = ({ type = "doc" }) => {
const getIconClass = () => {
switch(type) {
case 'pdf':
return 'file-icon-pdf';
case 'doc':
case 'docx':
return 'file-icon-doc';
case 'ppt':
case 'pptx':
return 'file-icon-ppt';
case 'excel':
case 'xlsx':
return 'file-icon-excel';
default:
return 'file-icon-default';
}
};
const getIconText = () => {
switch(type) {
case 'pdf':
return 'PDF';
case 'doc':
case 'docx':
return 'DOC';
case 'ppt':
case 'pptx':
return 'PPT';
case 'excel':
case 'xlsx':
return 'XLS';
default:
return 'FILE';
}
};
return (
<div className={`file-icon ${getIconClass()}`}>
<div className="file-icon-fold"></div>
<div className="file-icon-text">{getIconText()}</div>
</div>
);
};
export default FileIcon;