开始模拟面试
-上传简历,与AI进行实战演练
-diff --git a/index.html b/index.html index 8388c4b..cc2c507 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@
- + -准备好开始您的下一次模拟面试了吗?在这里管理您的题库,不断提升面试技巧。
-上传简历,与AI进行实战演练
-新增、编辑和导入您的面试题库
-查看过往的面试记录与AI复盘报告
-{{ finalReport.overallFeedback }}
-您的回答: {{ item.userAnswer }}
-{{ item.userAnswer }}
+ +AI 评语: {{ item.aiFeedback }}
AI 建议: {{ item.suggestions }}
+' +
- hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +
+ hljs.highlight(str, {language: lang, ignoreIllegals: true}).value +
'';
- } catch (__) {}
+ } catch (__) {
+ }
}
return '' + md.utils.escapeHtml(str) + '';
@@ -132,6 +154,7 @@ const questionProgressId = ref(0)
// 从路由 query 中获取模式参数
const mode = route.query.mode || 'chat'
+const sessionId = route.query.sessionId
// 计算属性
const pageTitle = computed(() => {
@@ -142,59 +165,71 @@ const pageTitle = computed(() => {
})
const statusText = computed(() => {
- return interviewStatus.value === 'ACTIVE' ? '进行中' : '已结束'
+ // 根据实际的 interviewStatus 更新
+ if (interviewStatus.value === 'COMPLETED') return '已结束'
+ if (interviewStatus.value === 'ACTIVE') return '进行中'
+ return '加载中'
})
// 生命周期钩子
onMounted(() => {
- // 从路由 query 中获取 sessionId
- const sessionId = route.query.sessionId
-
if (sessionId) {
- // 这里是根据 sessionId 从后端加载历史消息的逻辑
getHistoryList(sessionId)
} else {
- // 如果没有 sessionId,则初始化为新会话
+ ElMessage.error('会话ID缺失,请返回首页。')
router.push('/interview')
}
scrollToBottom()
})
const getHistoryList = async (sessionId) => {
- const res = await getMessageListBySessionId(sessionId)
- if (res.code === 0) {
- messages.value = res.data
- if (messages.value && messages.value.length > 0) {
- const filterList = messages.value.filter(item => item.sender === 'AI');
- if (filterList && filterList.length > 0) {
- questionProgressId.value = filterList[filterList.length - 1].questionProgressId
+ try {
+ const res = await getMessageListBySessionId(sessionId)
+ if (res.code === 0) {
+ // **保持与原始逻辑一致**
+ messages.value = res.data || []
+ // 假设后端返回的数据结构中直接包含 status 字段
+ if (res.data && res.data.status) {
+ interviewStatus.value = res.data.status
}
- }
- } else {
- ElMessage.error('获取历史消息失败')
- }
+ if (messages.value && messages.value.length > 0) {
+ const filterList = messages.value.filter(item => item.sender === 'AI');
+ if (filterList && filterList.length > 0) {
+ // 获取最新的 AI 消息对应的 questionProgressId
+ questionProgressId.value = filterList[filterList.length - 1].questionProgressId
+ }
+ }
+ } else {
+ ElMessage.error('获取历史消息失败')
+ }
+ } catch (e) {
+ ElMessage.error('获取历史消息失败,网络错误')
+ } finally {
+ scrollToBottom()
+ }
}
// 发送消息
const sendMessage = async () => {
- if (!userAnswer.value.trim() || isLoading.value) return
+ if (!userAnswer.value.trim() || isLoading.value || interviewStatus.value === 'COMPLETED') return
+ const currentAnswer = userAnswer.value
+
+ // 1. 立即显示用户消息
const userMessage = {
sender: 'USER',
- content: userAnswer.value,
- timestamp: new Date()
+ content: currentAnswer,
+ createdTime: new Date().toISOString() // 使用当前时间作为占位符
}
-
messages.value.push(userMessage)
- const currentAnswer = userAnswer.value
userAnswer.value = ''
isAiThinking.value = true
scrollToBottom()
try {
- const sessionId = route.query.sessionId
+ // 2. 提交答案 (不修改接口调用逻辑)
const answerRes = await submitAnswer(
{
sessionId,
@@ -202,55 +237,69 @@ const sendMessage = async () => {
answer: currentAnswer,
}
)
+
+ // 3. 获取下一题或结束信息 (不修改接口调用逻辑)
if (answerRes.code === 0) {
const nextQuestionRes = await getNextQuestion(sessionId, questionProgressId.value)
if (nextQuestionRes.code === 0) {
- if (!nextQuestionRes.data) {
- interviewEnd()
+ if (!nextQuestionRes.data || nextQuestionRes.data.isComplete) {
+ // 明确判断是否结束
+ await interviewEnd(true) // 传递一个参数表示是正常流程结束
+ interviewStatus.value = 'COMPLETED'
+ } else {
+ // 接收新问题
+ questionProgressId.value = nextQuestionRes.data.questionProgressId
+ messages.value.push(nextQuestionRes.data)
}
- questionProgressId.value = nextQuestionRes.data.questionProgressId
- messages.value.push(nextQuestionRes.data)
+ } else {
+ ElMessage.error('获取下一题失败: ' + nextQuestionRes.message)
}
+ } else {
+ ElMessage.error('提交回答失败: ' + answerRes.message)
}
-
} catch (error) {
- ElMessage.error('发送失败,请稍后重试。')
+ console.error(error)
+ ElMessage.error('发送失败,请检查网络或联系管理员。')
} finally {
isAiThinking.value = false
scrollToBottom()
}
}
-// 结束面试
-const interviewEnd = () => {
- const sessionId = route.query.sessionId
- endInterview(sessionId).then((res) => {
+// 结束面试 (不修改接口调用逻辑)
+const interviewEnd = async (isAutoCompleted = false) => {
+ if (interviewStatus.value === 'COMPLETED') return;
+
+ try {
+ const res = await endInterview(sessionId)
if (res.code === 0) {
- router.push('/history')
+ interviewStatus.value = 'COMPLETED'
+ if (!isAutoCompleted) {
+ ElMessage.success('面试已成功结束,即将为您生成报告。')
+ }
+ scrollToBottom()
} else {
ElMessage.error('结束面试失败: ' + res.message)
}
- })
-
-
- // 实际项目中,这里会调用后端 API 结束会话
- // await fetch(`/api/end-session?sessionId=${sessionId}`, { method: 'POST' });
-
- interviewStatus.value = 'COMPLETED'
- scrollToBottom()
+ } catch (e) {
+ ElMessage.error('结束面试失败,网络错误。')
+ }
}
-// 格式化消息内容,将换行符替换为提升您的面试技能,与AI进行智能对话
+智能驱动,高效提升您的面试技能与专业对话能力。
+专业功能,助力您在求职道路上脱颖而出
根据您的需求选择合适的面试方式
+根据您的需求选择合适的面试方式,获得最专业的反馈报告