closeEvalDialog is not defined、pages.json 语法、硬编码 ID ——记几个低级错误

发布时间:2026/7/12 23:49:07
closeEvalDialog is not defined、pages.json 语法、硬编码 ID ——记几个低级错误 这篇写几个低级但致命的错误。都是那种一看就是低级失误但真的发生在你身上的时候会让你怀疑人生的类型。Bug 1保存后按钮短暂消失给三级指标打完分点保存本项右下角的提交全部评分按钮闪了一下就没了得手动切一下步骤才能重新看到。排查看保存成功的回调async saveCurrentIndicatorScores() { // ... 保存到本地 allScoreRecords ... uni.showToast({ title: 保存成功, icon: success }); // ← 这里 setTimeout(() { this.currentStep--; }, 1500); }保存成功后自动跳回上一步——步骤 4评分页跳到步骤 3选三级指标页提交全部按钮是步骤 4 特有的跳过去自然就没了。估计是前人为了引导用户继续评下一个指标加的但用户想连续提交的时候就崩了。修复直接删掉这个 setTimeoutasync saveCurrentIndicatorScores() { // ... 保存 ... uni.showToast({ title: 保存成功, icon: success }); // 不自动跳转用户自己切 }一点感受表单类操作不要主动帮用户跳转。你以为在帮用户其实在打断用户的操作流。多步骤表单尤其如此让用户自己控制步骤切换。Bug 2pages.json 语法错误编译直接崩改了个路由配置HBuilderX 编译时报Unexpected token ] in JSON at position 1554排查pages.json严格按 JSON 规范不能有尾逗号{ pages: [ { path: pages/home_page, style: {} }, { path: pages/login, style: {} }, ← 尾逗号 ] }而且路径写错了——本来想加pages/school/studentScore/index我写成了pages/school/studentScore/index/index多套了一层文件夹。修复删尾逗号 修正路径一点感受两个小 tipJSON 严格模式不允许尾逗号虽然 JS 对象允许改pages.json时手别快加路由前先在文件夹里对着看一眼实际路径特别是有多层嵌套的时候VS Code 装个 JSON 语法检查插件也能救命。Bug 3saveStudentEvaluationResult is not a function写完学生评价页面点提交按钮直接报TypeError: saveStudentEvaluationResult is not a function排查页面顶部已经 import 了import { saveStudentEvaluationResult } from /api/school/evaluationResult;打开api/school/evaluationResult.js翻半天没找到这个方法。原来写页面的时候先写的调用想着 API 后面补——然后忘了。修复在 API 文件补上定义export function saveStudentEvaluationResult(data) { return request({ url: /school/evaluationResult/saveStudentEvaluationResult, method: post, data: data }); }一点感受这个错完全是自己的问题。以后养成个小习惯页面里引用一个不存在的方法名IDE 应该会有波浪线提示。看到波浪线千万别忽略。或者更好的做法先写 API 再写页面调用反过来容易忘。Bug 4取消按钮点了没反应班级验证码弹窗点取消按钮没反应控制台报Property or method closeEvalDialog is not defined排查看模板view classdialog-footer button clickcloseEvalDialog取消/button button clickconfirmEvalForm确定/button /view看 methodsmethods: { confirmEvalForm() { ... }, // closeEvalDialog 不在这里 }方法压根没定义。修复补上methods: { confirmEvalForm() { ... }, closeEvalDialog() { this.showEvalDialog false; } }一点感受跟 Bug 3 一样都是引用了不存在的东西。Vue 模板绑定的方法即使不存在页面渲染的时候也不会报错只有真点击了才炸。开发完页面统一 CtrlF 搜一遍clickchange这些绑定确认对应方法都存在是个好习惯。Bug 5本地测试没问题别的学校账号一登录就报未找到评价模式家长评价页面的评价模式下拉本地测试家长账号进去有选项换成别的学校的账号进去直接提示未找到评价模式。排查看筛选代码const parentModes allModes.filter(m [311, 314].includes(m.id));311、314是本地测试环境里高年级家长评和低年级家长评的主键 ID。生产环境别的学校的数据库里这两个模式的 ID 完全不一样可能是 508、509 之类的过滤条件永远匹配不上。这是典型的硬编码主键 ID错误——只在自己电脑上能跑。修复不看主键看业务字段// 按 eval_category_id 判断家长评固定是 3 const parentModes allModes.filter(m Number(m.evalCategoryId) 3 );eval_category_id是业务枚举所有学校都一样。一点感受永远不要在前端硬编码数据库自增主键 ID。因为主键值在不同环境本地/测试/生产大概率不一样业务人员在后台新增/删除数据ID 会变数据迁移的时候 ID 也会变判断业务类型永远靠业务字段分类枚举、字典值、name 关键字。哪怕字符串匹配name.includes(家长评)都比硬编码主键 ID 强。最后总结这五个 bug 没什么技术含量全是低级失误。但真的很有代表性——写代码时间一长人容易松懈越是简单的东西越容易出错。模板绑定的clickchange对应方法都存在吗import 的函数源文件里真的 export 了吗pages.json/ JSON 文件有没有尾逗号有没有硬编码的数据库主键 ID自动跳转 / setTimeout 是不是打断了用户操作下一篇写移动端和后端联调那个大坑RuoYi 移动端启动跑不通感兴趣可以关注。