山东大学软件学院项目实训进展记录7
结合分工,我聚焦亮点分析、错误高亮、个性化学习页面与后端接口的深度联调,解决跨端数据适配、状态同步、异常兜底三大核心问题,确保所有功能 100% 可用、数据精准一致,为后续前端优化筑牢基础。NotebookPage 完成错题列表查询、筛选、详情查看、标记已复习全接口联调,核心是状态实时同步:标记复习后,前端本地更新 + 后端同步,无需重新请求全量数据,提升响应速度。重点完成错误高亮模块与后端错误数
一、本周工作
本周是项目后端主导联调阶段,核心目标是完成前后端接口全链路打通、数据一致性校验与功能闭环验证。结合分工,我聚焦亮点分析、错误高亮、个性化学习页面与后端接口的深度联调,解决跨端数据适配、状态同步、异常兜底三大核心问题,确保所有功能 100% 可用、数据精准一致,为后续前端优化筑牢基础。本周不再是单纯写页面,而是深度参与前后端协同,理解接口规范、数据流转逻辑,完成从 “页面实现” 到 “功能闭环” 的过渡。
二、核心工作进展
1. 亮点分析模块:全量接口联调,修复数据适配问题
本周核心是将亮点模块与后端 /api/essay/evaluate 评估接口完成全链路对接,解决静态数据转真实接口后的字段不匹配、格式不一致、空值兜底问题。
(1)接口字段适配与数据映射
后端返回亮点数据包含highlightType、startOffset、endOffset、content、explanation五个关键字段,我在前端统一数据映射逻辑,确保字段精准对应,避免渲染报错。核心映射逻辑如下:
function normalizeHighlight(raw: any): Highlight {
return {
id: raw.id || Date.now().toString(), // 生成唯一ID
type: raw.highlightType || "vocab", // 默认词汇类亮点
startOffset: Number(raw.startOffset) || 0, // 转数字兜底
endOffset: Number(raw.endOffset) || 0,
content: raw.content || "", // 空文本兜底
explanation: raw.explanation || "暂无赏析说明"
};
}
这段代码解决了后端字段大小写不一致、数值类型异常、空值缺失问题,保证前端渲染稳定性,避免因接口偶发异常导致页面崩溃。
(2)高亮渲染逻辑优化
联调中发现,后端返回的字符偏移量存在换行符、特殊字符计算偏差,导致亮点错位。我优化EssayViewer.vue渲染逻辑,新增偏移量校正,确保精准匹配 DOM 文本:
function correctOffset(textNodes: Text[], rawOffset: number): number {
let corrected = rawOffset;
textNodes.forEach(node => {
const text = node.textContent || "";
// 校正换行、制表符等特殊字符偏移
corrected -= (text.match(/[\n\t]/g) || []).length;
});
return corrected;
}
通过校正,亮点标注精准匹配原文位置,与后端评估结果完全一致,实现 “后端判定、前端精准呈现” 的闭环。
2. 错误高亮系统:联调校验,保障数据一致性
重点完成错误高亮模块与后端错误数据接口联调,校验错误类型、位置、解释全链路一致性,同时修复多错误叠加时的渲染冲突问题。
(1)错误数据一致性校验
逐篇测试不同作文的错误返回结果,重点校验:
- 语法、用词、句法、逻辑四类错误分类精准度
- 错误位置偏移量无偏差
- 错误解释、修改建议完整无缺失 联调中发现 2 处字段遗漏问题,同步反馈后端修复,确保前后端错误数据一致。
(2)多错误叠加渲染优化
同一位置存在多个错误时,原逻辑会出现高亮重叠、样式错乱。我优化渲染优先级,语法错误 > 用词错误 > 句法错误 > 逻辑错误,避免样式冲突:
.highlight--grammar { background: #ffebee; border-bottom: 2px solid #f44336; }
.highlight--vocab { background: #fff3e0; border-bottom: 2px solid #ff9800; }
.highlight--syntax { background: #e3f2fd; border-bottom: 2px solid #2196f3; }
.highlight--logic { background: #e8f5e9; border-bottom: 2px solid #4caf50; }
通过差异化样式 + 优先级控制,多错误叠加时清晰区分、互不遮挡,提升用户阅读体验。
3. 个性化学习页面:接口全通,完成闭环验证
完成 ProfilePage(个人画像)、NotebookPage(错题本)与后端/api/profile、/api/notebook接口全链路联调,实现数据实时同步、异常兜底、状态联动。
(1)个人画像数据联动
ProfilePage 对接后端用户画像接口,实时获取平均分、错误分布、学习路径数据,修复历史分数数组空值、错误占比计算偏差问题。核心数据请求逻辑:
async function fetchProfile() {
profileLoading.value = true;
errorMessage.value = "";
try {
const { data } = await http.get<ProfileResponse>("/api/profile");
profile.value = data;
} catch (error) {
profile.value = null;
errorMessage.value = normalizeHttpError(error, "获取画像失败");
} finally {
profileLoaded.value = true;
profileLoading.value = false;
}
}
新增异常兜底,网络中断、接口报错时友好提示,避免页面空白,保障联调稳定性。
(2)错题本全链路闭环
NotebookPage 完成错题列表查询、筛选、详情查看、标记已复习全接口联调,核心是状态实时同步:标记复习后,前端本地更新 + 后端同步,无需重新请求全量数据,提升响应速度。
async markReviewed(id: string) {
this.reviewActionState = "submitting";
this.errorMessage = "";
try {
await http.post(`/api/notebook/items/${id}/review`);
// 本地更新状态,无需重请求
this.items = updateReviewedItem(this.items, id);
this.summary = buildSummary(this.items, this.summary);
this.reviewActionState = "success";
} catch (error) {
this.reviewActionState = "error";
this.errorMessage = normalizeHttpError(error, "标记复习失败");
}
}
联调验证:新增作文→生成错误→加入错题本→标记复习→数据同步,全流程无卡顿、无数据不一致,功能闭环完成。
三、核心问题与解决方案
1. 接口超时 / 网络异常
问题:后端大模型评估耗时较长,前端请求超时,页面报错。
解决:复用http.ts全局请求配置,延长超时时间至 120 秒,新增网络状态监听,离线时提示恢复网络,避免用户困惑:
export const http = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL ?? "http://localhost:8000",
timeout: 120000, // 适配大模型长耗时
withCredentials: true
});
2. 数据格式不统一
问题:不同接口返回字段大小写、数据类型不一致,前端渲染报错。
解决:统一assessmentStore、notebookStore数据归一化函数,强制字段映射、类型转换、空值兜底,适配后端多格式返回,提升鲁棒性。
3. 状态同步延迟
问题:标记错题复习、更新画像后,页面数据不实时更新。
解决:使用 Pinia 状态管理,修改数据后同步更新 store 状态,依赖计算属性自动渲染,无需手动刷新,保证状态实时联动。
四、本周工作成果
- 亮点分析模块:接口全通、数据精准、渲染无错位,赏析完整
- 错误高亮系统:四类错误分类精准、位置无偏差、多错误叠加样式清晰
- 个性化学习页面:画像、错题本全接口联调,数据实时同步、功能闭环
- 异常兜底:超时、断网、接口报错均友好提示,无页面崩溃
- 数据一致性:所有模块前后端数据匹配,符合联调要求
五、本周感悟
本周参与前后端联调,真正理解接口规范、数据流转、异常兜底对系统稳定性的重要性。一个字段大小写、一个空值、一次超时,都可能导致整个功能瘫痪,严谨性是联调阶段的核心。同时,状态管理的价值在本周体现得十分重要。Pinia统一管理全局数据,避免组件间数据传递混乱,联调时快速定位数据问题,大幅提升协同效率。联调不仅是对接接口,更是理解整个系统的业务逻辑,为后续优化打下坚实基础。
更多推荐

所有评论(0)