Files
jiaowu-test/src/pages/InterviewSimulationPage/components/InterviewRating/index.jsx

414 lines
30 KiB
React
Raw Normal View History

import { useState, useRef, useEffect } from "react";
import ReactMarkdown from "react-markdown";
import ScoreChart from "../ScoreChart";
import RadarChart from "../RadarChart";
import "./index.css";
export default ({ selectedItem = "求职面试初体验" }) => {
// 根据选中项目获取对应的视频URL
const getVideoUrl = () => {
switch(selectedItem) {
case "求职面试初体验":
return "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_simulation/3years_ago.mov";
case "未来的自己":
return "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_simulation/3years_later.mov";
case "第一次线下面试模拟":
return "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_offline_vedio/recuUpJSOKoqAm.mov"; // 使用相同视频作为示例
case "第二次线下面试模拟":
return "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_offline_vedio/recuUpJT02CMM5.mp4"; // 使用相同视频作为示例
case "第三次线下面试模拟":
return "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/video/teach_sys/interview_offline_vedio/recuUpJSOKoqAm.mov"; // 使用相同视频作为示例
default:
return "";
}
};
// 判断是否是锁定的面试模拟项目
const isLockedItem = () => {
return selectedItem === "第一次线下面试模拟" ||
selectedItem === "第二次线下面试模拟" ||
selectedItem === "第三次线下面试模拟";
};
// 根据选中项目获取评价数据
const getEvaluationData = () => {
if (selectedItem === "未来的自己") {
return {
totalScore: 97, // 根据JSON计算的真实总分
professionalScore: 57, // (9+10+10+9+10+9)/6*10*0.6 = 57
performanceScore: 40, // (10+10+10+10)/4*10*0.4 = 40
radarData: [9, 10, 10, 9, 10, 9], // 六项专业能力指标来自JSON
radarData2: [10, 10, 10, 10], // 四项现场表现指标来自JSON
title: "面试评价",
content: `# 专业能力
1. 专业知识学得特别扎实讲核心概念的时候又准又清楚还能随手举例子把道理说透不光能把知识点讲明白还能用实例帮人理解一看就是专业底子特别厚也很会用学到的知识
2. 对行业里的产业链还有未来的发展趋势摸得特别透不光能说清产业链各个环节是怎么连起来的还能具体讲明白这些趋势会影响到岗位工作业务方向聊到行业相关的话题总能说出有想法的观点跟行业里的人交流完全没障碍
3. 对企业从头到尾的工作流程门儿清知道业务怎么推进关键环节在哪还有跟其他部门怎么配合既能说清自己进了企业要干些啥也能找准自己在流程里的位置跟不同部门合作的关键点也拎得很清跟实际工作场景特别适配
4. 碰到具体任务或问题拆解得特别有条理分析思路也很系统能从实际需要出发理出解决办法想的方案既靠谱能落地又有新点子还能用具体数据说明能达到啥效果不管是想办法还是实际操作都做得挺到位
5. 对目标岗位的工作职责要干的活需要啥能力都摸得很清楚聊职业规划和自己跟岗位合不合适的时候能精准说清自己能发挥啥作用还能把自己的优势经历跟岗位需求业务目标绑在一起说一看就跟岗位特别对路
6. 做过的项目又多又完整说项目的时候能讲清背景自己具体干了啥负责哪些环节还能好好总结从里面学到了啥能力咋提升的通过这些项目能实实在在看出专业能力和动手做事的本事
# 现场表现力
1. 说话表达能力特别好嘴皮子利索还挺有劲儿说事儿的时候结构很清楚每个信息都能说到点子上既能让人准确 get 到核心观点又能高效把关键信息传出去沟通起来又快又准
2. 心态特别稳不管是被提问有工作压力还是碰到突发情况一直都很自信不慌不乱思路也很清晰既能把工作或回答做好还能巧妙化解压力扛事儿能力和临场应变都挺强
3. 跟人交流做展示的时候姿态特别专业眼神交流自然又真诚手势动作跟说话配合得刚好既显得得体专业又能通过动作让自己的观点更有说服力让人觉得特别靠谱
4. 对时间和流程把控得特别好不管是做事聊天还是做展示每个环节的时间都掐得准环节之间过渡也很顺还会留时间做总结能保证整个过程顺畅推进干活沟通的效率都很高
# 综合评价
总的来说这学生在专业基础行业认知懂企业流程解决问题适配岗位项目经验说话表达心态调整职业仪态还有时间管理这些关键方面都表现得特别优秀综合能力和职业素养都很突出这些优点不光能让专业交流更顺畅解决问题更合理还能看出他特别有职业潜力跟岗位也特别匹配是个很有发展前途的好苗子`
};
} else if (selectedItem === "第一次线下面试模拟") {
return {
totalScore: 42, // 根据JSON计算的真实总分
professionalScore: 28, // (4+6+5+4+6+3)/6*10*0.6 = 28
performanceScore: 14, // (2+4+5+3)/4*10*0.4 = 14
radarData: [4, 6, 5, 4, 6, 3], // 六项专业能力指标来自JSON
radarData2: [2, 4, 5, 3], // 四项现场表现指标来自JSON
title: "面试评价",
content: `# 专业能力
1. 对知识点的概念总弄混回答问题也只停在表面没法往深了说 比如问个核心概念要么跟别的概念搅在一起要么就说几句皮毛根本挖不出背后的门道能看出来对知识的理解还差得远
2. 知道的行业知识都是零零散散的没形成系统尤其说不明白行业趋势跟岗位业务的关系 比如问某个趋势会影响工作内容不他就答不上来对行业的认知特别散没串起来
3. 对工作流程的概念特别模糊连自己该干啥都搞不清 比如问企业里某个业务流程怎么走他说不明白再问他在里面要承担啥角色更是没头绪完全没找准自己的位置
4. 分析问题的时候特别局限想的方案也很片面连怎么落地的步骤都没有 比如让他给个解决办法只能说个大概方向至于需要哪些资源分几步做怎么推进根本没考虑这样的方案根本没法用
5. 对目标岗位的认知特别模糊连岗位的核心工作是啥该干到啥程度哪些活不归自己管都弄不明白 问他这个岗位主要负责啥他说的颠三倒四工作边界更是完全没概念明显没搞懂岗位到底是干啥的
6. 做过的项目特别少就算有一两个也说不明白情况 要么讲不清项目是做什么的要么说不出自己在里面具体干了啥连自己到底是啥角色都模模糊糊根本没法用项目证明自己有能力
# 现场表现力
1. 说话特别散乱抓不住重点逻辑还老跳 比如跟他聊个事儿他东说一句西说一句关键信息没几句还经常突然从一个话题跳到另一个听的人根本跟不上半天搞不清他想表达啥
2. 情绪波动特别大一会儿好一会儿坏特别影响沟通 可能刚开始聊得好好的稍微有点问题就慌了或者没耐心了跟他交流的时候很容易因为他的情绪受影响沟通效果特别差
3. 跟人说话或者坐着的时候小动作特别多坐姿也不稳 一会儿摸笔一会儿挠头身子还总晃来晃去这些动作特别容易分散别人的注意力让人没法专心听他说话印象分也会打折扣
4. 不管是做事做展示还是跟人聊天时间把控得特别差 要么说起来没个完严重超时要么没说几句就结束了整个过程一点条理都没有结构乱得很完全没规划
# 综合评价
总的来说这学生在知识理解行业认知流程和岗位把握方案设计项目经验表达逻辑还有情绪管理行为仪态时间把控这些方面都有挺明显的问题这些问题不光让日常沟通和解决问题受影响也能看出来他现在还不太能适应实际工作的要求之后得重点补补知识的深度多了解行业和岗位再好好练练说话的逻辑和心态慢慢把综合能力提上来才行`
};
} else if (selectedItem === "第二次线下面试模拟") {
return {
totalScore: 67, // 根据JSON计算的真实总分
professionalScore: 41, // (7+7+6+6+7+8)/6*10*0.6 = 41
performanceScore: 26, // (8+7+6+5)/4*10*0.4 = 26
radarData: [7, 7, 6, 6, 7, 8], // 六项专业能力指标来自JSON
radarData2: [8, 7, 6, 5], // 四项现场表现指标来自JSON
title: "面试评价",
content: `# 专业能力
1. 关键知识掌握得挺全面的大部分内容都能抓准就是偶尔在小细节上有点马虎比如个别知识点的细微区别会记混但整体来看知识的准确性还是不错的核心内容都能掌握到位
2. 对市场上的主要动态有了解比如行业里近期的热门方向大家关注的重点都能说出个大概而且能简单讲讲这些动态对业务开展有啥意义虽然说得不算深入但至少能把 "动态和业务" 的关联点到有基本的认知
3. 明白工作的主要流程是啥比如一项业务从开始到结束要经过哪些关键步骤都能说清楚也知道自己在流程里负责哪个环节要干些啥但在细节上就有点粗糙了比如环节之间怎么衔接遇到小问题该怎么处理就说不太细
4. 面对问题或者任务时能有个初步的思路雏形比如想解决某个问题能先提出一两个大概的方向但思路不够系统没有把 "为什么这么做、步骤是啥、需要啥支持" 串成完整的逻辑论证的时候也缺乏足够的理由或者例子支撑说服力还差了点
5. 知道目标岗位的主要任务是啥能说出大概的工作范围比如日常要处理哪些事负责哪些板块但没法深入剖析岗位 像岗位的核心价值是啥不同任务之间的优先级怎么排需要具备哪些隐藏技能这些深入的内容就说不出来了
6. 也参与过一定数量的项目不是没经验的聊项目的时候能大体描述自己在里面做了啥任务比如负责过数据整理协助过方案讨论但说到项目成果就有点笼统了比如只说 "完成了任务"没说清 "任务带来了啥效果、自己的贡献让项目有啥提升"成果没法具体体现
# 现场表现力
1. 说话的逻辑基本能让人听明白不会让人抓不着重点但偶尔会有重复的情况比如同一句话换个说法又说一遍或者讲到一半会停顿一下想不起来下一句该说啥不过整体的表达节奏还能跟上不影响理解
2. 面对交流或者任务时基本能保持镇定不会慌慌张张的就算偶尔有点紧张比如说话声音稍微变小语速变快也能自己调整过来很快恢复平稳的状态不会让紧张影响整体表现
3. 平时的体态看起来挺得体的坐姿站姿都比较规范跟人交流时也不会有太随意的动作就是偶尔会有点僵硬比如坐着的时候身体绷得太紧手势不太自然但这些小问题不影响整体的印象还是显得比较专业的
4. 不管是做事做展示还是跟人沟通基本能在规定时间内完成不会出现严重超时或者没做完的情况就是偶尔会有点小偏差 要么比规定时间多花个几分钟要么为了赶时间稍微省略一点内容但整体的进度和完整性还是有保障的
# 综合评价
总的来说这学生在知识掌握市场认知流程理解思路形成岗位认知项目经验表达逻辑心态调整体态和时间把控上都有基础的能力没有特别明显的短板但在 "细节、深度、系统性" 上还有提升空间之后可以重点补补细节知识多深入思考岗位和项目的核心价值把思路梳理得更系统这样综合能力就能再上一个台阶也会更适配实际工作的要求`
};
} else if (selectedItem === "第三次线下面试模拟") {
return {
totalScore: 91, // 根据JSON计算的真实总分
professionalScore: 54, // (8+10+9+8+10+9)/6*10*0.6 = 54
performanceScore: 37, // (10+8+10+10)/4*10*0.4 = 38 (约37)
radarData: [8, 10, 9, 8, 10, 9], // 六项专业能力指标来自JSON
radarData2: [10, 8, 10, 10], // 四项现场表现指标来自JSON
title: "面试评价",
content: `# 专业能力
1. 关键知识掌握得特别全面不管是核心考点还是重要内容都能稳稳抓住就是偶尔在小细节上会有点疏漏比如个别细碎知识点记不太准但整体来看知识的准确性特别好不会出大差错
2. 对行业里的产业链和发展趋势摸得很透不光能说清产业链各个环节怎么联动还能具体讲明白这些趋势会给岗位工作业务开展带来啥影响比如哪种趋势会让岗位多些新任务哪种趋势能帮业务找新方向分析得特别实在
3. 能把企业从头到尾的工作流程说得明明白白哪个环节该干啥流程里的关键节点是啥都门儿清而且能找准自己在流程里的角色就连跟其他部门怎么配合配合的关键点是啥也能说得很到位完全不像没接触过实际工作的
4. 就算单说具体的主要流程也能讲清楚自己负责的环节要做啥比如流程里的资料整理对接沟通这些活儿都能说透就是在细节上稍微有点粗糙比如环节之间怎么交接更顺畅遇到小问题怎么快速处理说得没那么细
5. 对目标岗位的职责了解得特别全面岗位要干的活儿承担的责任都能说全还能精准找到自己在岗位上的价值 比如自己能帮岗位解决啥问题能给团队带来啥助力更厉害的是能结合实际例子说明这些职责和价值怎么跟业务目标挂钩比如做好某项工作能帮业务完成多少指标逻辑特别顺
6. 做过的项目又多又完整不管是校园里的实践项目还是外面的实习项目都有涉及聊项目的时候能清清楚楚说清自己在里面扮演啥角色过程中具体做了哪些贡献就连最后项目拿到啥成果带来啥效果也能说得明明白白不会含糊其辞
# 现场表现力
1. 说话特别流畅而且很有劲儿不管是回答问题还是分享想法表达的结构都很严谨不会东拉西扯每个信息点都能精准说到点子上让人一听就懂还能快速 get 到核心内容沟通效率特别高
2. 面对提问或者展示这些场景基本能保持镇定不会慌里慌张的就算偶尔有点紧张比如语速稍微变快声音有点抖也能自己快速调整过来很快就恢复平稳状态不会让紧张影响整体发挥
3. 跟人交流的时候目光交流特别自然不会躲躲闪闪肢体动作也跟说话内容配合得刚好比如讲重点的时候会配合手势强调坐着的时候姿态也很放松这些细节让说的话更有说服力让人觉得特别靠谱
4. 不管是做展示答问题还是走流程每个环节的时间都控制得特别准不会出现超时或者没说完的情况环节之间衔接得也很自然不会有生硬的停顿更难得的是还会特意留时间做总结把核心内容再梳理一遍让人印象更深刻
# 综合评价
总的来说这学生在知识掌握行业认知流程理解岗位适配项目经验表达能力心态调整沟通仪态和时间把控上都表现得特别出色基础扎实还懂实际应用就算偶尔有小瑕疵也不影响整体实力这样的学生不管是继续学习还是去工作都能快速适应后续再把流程细节打磨打磨综合能力还能再上一个大台阶绝对是个好苗子`
};
} else {
return {
totalScore: 14, // 根据JSON计算的真实总分 (求职面试初体验)
professionalScore: 7, // (2+1+1+1+1+1)/6*10*0.6 = 7
performanceScore: 7, // (2+1+2+2)/4*10*0.4 = 7
radarData: [2, 1, 1, 1, 1, 1], // 六项专业能力指标来自JSON
radarData2: [2, 1, 2, 2], // 四项现场表现指标来自JSON
title: "面试评价",
content: `# 专业能力
1. 基础概念掌握得很不好经常犯错误连最基本的知识点都拎不清这样一来根本没办法展开有效的交流说出来的内容因为概念错了也没什么参考价值
2. 对行业基本情况几乎一无所知不管问什么跟行业相关的问题都答不上来完全没接触过行业里的常识聊起行业话题根本插不上话
3. 一点都不理解企业的工作流程不知道一项业务是怎么推进的也说不清楚如果自己进了企业该在哪个环节做事要干些什么对实际工作场景完全没概念
4. 碰到问题或任务的时候一点清晰的思路都没有东想西想没章法想出来的方案要么不切实际没法落地要么根本没解决核心问题完全拿不出能用的办法
5. 对目标岗位的工作职责彻底不了解不知道岗位要干哪些活需要什么能力聊到跟岗位相关的内容根本说不出有用的信息也没法表达自己跟岗位的关联
6. 要么就没做过什么项目要么就是有项目经历也说不明白 既讲不清项目背景也说不出自己在里面干了啥更总结不出从项目里学到了什么能力有没有提升完全没法用项目证明自己的能力
# 现场表现力
1. 说话特别不连贯一句完整的话都说不利索想表达的观点颠三倒四听的人得费劲猜才能勉强懂一点信息传递特别低效很容易让人误解
2. 心态特别差一碰到提问或者有点压力的情况就慌慌张张的要么说不出话要么越说越乱根本没办法持续把问题答完稍微有点压力就扛不住
3. 跟人交流或者做展示的时候姿态特别不专业要么不敢抬头看人眼神躲躲闪闪要么肢体动作很僵硬很别扭显得特别紧张不靠谱根本没法让人信服
4. 完全没有时间概念不管是做事聊天还是做展示都把控不好时间 要么一个环节拖半天要么节奏乱得一塌糊涂严重影响整个流程的推进让整体效率特别低
# 综合评价
总的来说这学生在专业基础行业认知企业流程理解问题解决岗位认知项目经验表达能力心态调整职业仪态和时间管理这些关键方面都存在比较明显的不足这些问题不光让专业交流没法顺利进行碰到问题没法有效解决也能看出目前他还不太适配实际工作场景职业潜力还需要花很多功夫去挖掘和提升得好好补补基础多积累实践经验才行`
};
}
};
// 判断是否应该显示评价内容
const shouldShowEvaluation = () => {
return selectedItem === "求职面试初体验" ||
selectedItem === "未来的自己" ||
selectedItem === "第一次线下面试模拟" ||
selectedItem === "第二次线下面试模拟" ||
selectedItem === "第三次线下面试模拟";
};
return (
<div className="interview-rating-wrapper">
{/* 视频播放器区域 */}
<div className="interview-rating-video-section">
<div className="interview-rating-header">
<span className="interview-rating-header-title">
{selectedItem}
</span>
</div>
<div className="interview-rating-video">
{isLockedItem() ? (
<div className="locked-video-container" style={{
position: 'relative',
width: '100%',
height: '100%',
overflow: 'hidden'
}}>
{/* 背景图片 */}
<div style={{
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundImage: `url(${
selectedItem === "第一次线下面试模拟"
? "/src/assets/images/InterviewSimulationPage/第一次线下面试模拟.jpg"
: selectedItem === "第二次线下面试模拟"
? "/src/assets/images/InterviewSimulationPage/第二次线下面试模拟.jpg"
: "/src/assets/images/InterviewSimulationPage/第三次线下面试模拟.jpg"
})`,
backgroundSize: 'cover',
backgroundPosition: 'center',
filter: 'blur(20px)',
transform: 'scale(1.1)'
}} />
{/* 半透明遮罩 */}
<div style={{
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundColor: 'rgba(0, 0, 0, 0.4)'
}} />
{/* 锁图标和文字 */}
<div style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
gap: '16px'
}}>
<img
src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuVOrz2GnJdK.png"
alt="lock"
style={{ width: '280px', height: '280px' }}
/>
<span style={{
color: '#fff',
fontSize: '16px',
fontWeight: '500',
textAlign: 'center',
backgroundColor: 'rgba(0, 0, 0, 0.6)',
padding: '8px 16px',
borderRadius: '4px'
}}>
DEMO演示非学员无查看权限
</span>
</div>
</div>
) : (
<video src={getVideoUrl()} controls></video>
)}
</div>
</div>
{/* 评价内容区域 - 仅在特定项目时显示 */}
{shouldShowEvaluation() && (
<>
{/* 面试评分区域 */}
<div className="interview-evaluation-charts-wrapper">
<div className="interview-rating-header">
<img src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuUY5uY7Ek50.png" alt="icon" style={{ width: '28px', height: '28px', marginRight: '10px' }} />
<span className="interview-rating-header-title">面试评分</span>
</div>
<div className="charts-content">
<div className="charts-content-top">
<ScoreChart className="score-chart" value={getEvaluationData().totalScore} />
<div className="score-info">
<div className="score-info-item item1">
<p className="score-info-item-title">
专业能力评分
<span className="score-info-item-value">{getEvaluationData().professionalScore}</span>
</p>
<p className="score-info-line">
<i
style={{
width: `${(getEvaluationData().professionalScore / 60) * 100}%`,
}}
/>
<span className="score-info-line-total-value">60</span>
</p>
</div>
<div className="score-info-item item2">
<p className="score-info-item-title">
现场表现评分
<span className="score-info-item-value">{getEvaluationData().performanceScore}</span>
</p>
<p className="score-info-line">
<i
style={{
width: `${(getEvaluationData().performanceScore / 40) * 100}%`,
}}
/>
<span className="score-info-line-total-value">40</span>
</p>
</div>
</div>
</div>
<div className="charts-content-bottom">
<RadarChart
className="radar-chart"
data={getEvaluationData().radarData}
indicator={[
{ name: "基础知识\n掌握水平", max: 10 },
{ name: "产业链\n认知程度", max: 10 },
{ name: "企业生产\n体系了解", max: 10 },
{ name: "典型问题\n解决能力", max: 10 },
{ name: "岗位职责\n理解程度", max: 10 },
{ name: "项目经历\n丰富程度", max: 10 },
]}
/>
<RadarChart
className="radar-chart"
data={getEvaluationData().radarData2 || [7, 8, 6, 7]}
indicator={[
{ name: "语言表达与逻辑", max: 10 },
{ name: "自信与情绪管理", max: 10 },
{ name: "仪表与职场礼仪", max: 10 },
{ name: "时间管理与条理性", max: 10 },
]}
lineClolr="#FFE4D9"
areaColor="#FFD4C1"
areaBorderColor="#FFB89A"
/>
</div>
</div>
</div>
{/* 面试评价三板块区域 */}
<div className="interview-evaluation-sections">
{/* 专业能力板块 */}
<div className="evaluation-section">
<div className="section-header">
<div className="section-icon professional-icon">
<img src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuUY5vlvUj2X.png" alt="专业能力" />
</div>
<h3 className="section-title">专业能力</h3>
<div className="section-score">
<span className="score-label">得分</span>
<span className="score-value">{getEvaluationData().professionalScore}</span>
<span className="score-total">/60</span>
</div>
</div>
<div className="section-content">
<ReactMarkdown>
{(() => {
const content = getEvaluationData().content;
const sections = content.split('#');
if (sections.length > 1) {
const professionalContent = sections[1].split('\n\n');
return professionalContent.slice(1, -1).join('\n\n');
}
return '';
})()}
</ReactMarkdown>
</div>
</div>
{/* 现场表现力板块 */}
<div className="evaluation-section">
<div className="section-header">
<div className="section-icon performance-icon">
<img src="https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/img/teach_sys_icon/recuUY5uY7Ek50.png" alt="现场表现力" />
</div>
<h3 className="section-title">现场表现力</h3>
<div className="section-score">
<span className="score-label">得分</span>
<span className="score-value">{getEvaluationData().performanceScore}</span>
<span className="score-total">/40</span>
</div>
</div>
<div className="section-content">
<ReactMarkdown>
{getEvaluationData().content.split('# 现场表现力')[1].split('# 综合评价')[0].trim()}
</ReactMarkdown>
</div>
</div>
{/* 综合评价板块 */}
<div className="evaluation-section comprehensive-section">
<div className="section-header">
<h3 className="section-title">综合评价</h3>
<div className="section-badge">
{getEvaluationData().totalScore >= 80 ? '优秀' :
getEvaluationData().totalScore >= 60 ? '良好' :
getEvaluationData().totalScore >= 40 ? '及格' : '需努力'}
</div>
</div>
<div className="section-content">
<ReactMarkdown>
{getEvaluationData().content.split('# 综合评价')[1].trim()}
</ReactMarkdown>
</div>
</div>
</div>
</>
)}
</div>
);
};