2026-04-15.md 7.0 KB

2026-04-15 工作日志

通用字段规范化

  • 用户明确了所有表的通用字段定义,与实际 DDL 对齐
  • 修正了通用字段类型:create_by/update_by 为 BIGINT(非 varchar),del_flag 为 character(1 char)/char(1)(非 integer),新增 create_dept BIGINT
  • 多租户表额外包含 tenant_id(BIGINT),非多租户表不含
  • 更新了三个文件:需求模板、require SKILL.md、ecs-course-requirements.md
  • 建表 DDL 中从表也需包含完整的通用字段(之前缺失)

课程管理前端代码生成(/dev ecs course --frontend-only)

  • 基于需求规格说明书 doc/ecs-course-requirements.md 生成前端代码
  • 替换已有旧版课程前端代码(旧版为单教师关联,新版为多教师关联从表)
  • 生成4个文件:
    • src/api/ecs/course/types.ts:新增 CourseTeacherVO 从表类型、teacherNames 字段、courseType/dataSource 查询条件
    • src/api/ecs/course/index.ts:新增导入导出接口(exportTemplate/importData/exportCourse)
    • src/views/ecs/course/index.vue:完整列表页,含 course_type/data_source 双字典、导入导出按钮、dataSource 第三方数据锁定
    • src/views/ecs/course/form.vue:新增表单页(替代旧 detail.vue),含从表教师多选表格、字典下拉、必填校验
  • 旧文件 detail.vue 需手工删除(在 ykt_web 项目下,非当前 workspace)

课程管理前端导入导出Bug修复

  • 问题:下载模板时报 relativeURL.replace is not a function
  • 原因proxy?.download(url, params, fileName) 的第一个参数期望是 URL 字符串,但生成代码把 axios response 对象传了进去
    • 错误写法:const res = await exportTemplate(); proxy?.download(res, 'xxx.xlsx')
    • RuoYi 框架的 download 函数(来自 @/utils/request)会内部调用 service.post(url, ...),所以不需要先发请求再传结果
  • 修复:改为直接传 URL 字符串给 proxy?.download
    • 下载模板:proxy?.download('ecs/course/exportTemplate', {}, '课程导入模板_xxx.xlsx')
    • 导出数据:proxy?.download('ecs/course/export', { ...queryParams }, '课程数据_xxx.xlsx')
  • API清理:删除 api/ecs/course/index.ts 中的 exportTemplateimportDataexportCourse 三个函数(导入用 el-upload 的 action 方式,导出/模板用 proxy.download 方式)

    后端技能 SKILL.md 从表 VO 映射修复

  • 问题:A.4 代码生成模板节只列了主表 VO 映射,从表 VO 未列出,导致从表生成的 Vo 类缺少 @AutoMapper 注解

  • 修复:A.4 节拆分为「主表」和「从表」两部分,明确从表复用 Vo.java.template(含 @AutoMapper),并加了 ⚠️ 强调说明

  • 模板本身无需修改Vo.java.template 第5行已有 import io.github.linpeilie.annotations.AutoMapper,第22行已有 @AutoMapper(target = ${ClassName}.class),只需按正确类名填充即可

从表关联字段命名统一(teacherList → courseTeacherList)

  • 问题:后端生成 EcsCourseBo/EcsCourseVo 中从表字段名为 teacherList,前端 types.ts 中为 courseTeacherList,JSON 序列化/反序列化不一致
  • 原因:SKILL.md A.5 字段映射表缺少从表关联字段的命名规则,导致生成时随意命名
  • 修复:SKILL.md A.5 新增一行 从表关联字段(Bo/Vo)→ private List<{SubName}Vo> {Name}{Sub}List;
  • 已修改3个文件
    • EcsCourseVo.javateacherListcourseTeacherList
    • EcsCourseBo.javateacherListcourseTeacherList
    • EcsCourseServiceImpl.java:5处引用全部更新为 setCourseTeacherList/getCourseTeacherList
  • 命名规则{Name}{Sub}List(主表名首字母小写 + 从表名 + List),例如 EcsCourse + Teacher = courseTeacherList

后端代码验证(/dev ecs course)

  • 已修正 EcsCourseTeacherVo.java:第21行新增 @AutoMapper(target = EcsCourseTeacher.class),第7行导入 EcsCourseTeacher
  • 对比主表 EcsCourseVo.java 第25行 @AutoMapper(target = EcsCourse.class) → 结构完全一致
  • 结论:技能已修复,下次 /dev 生成从表 VO 时会用 Vo.java.template 正确填充 @AutoMapper(target = {SubName}.class)

前端技能模板导入导出规范化

  • 按 ptRoom 模式统一了导入导出写法,更新了4个文件:
    • templates/view-list.vue:新增"更多"下拉菜单(下载模板/导入数据/导出数据)+ upload reactive + 导入弹窗 + 所有处理方法
    • SKILL.md:api/index.ts 示例去掉 export 函数,新增导入导出说明块
    • references/api-style.md:导出改为 proxy?.download(),新增完整的导出导入规范章节
    • references/vue-style.md:列表页工具栏增加"更多"下拉,script 增加 upload + 导入导出方法
  • 核心变更:api/index.ts 不再有 exportTemplate/importData/exportCourse 函数
  • 导出/下载模板:proxy?.download(url, params, fileName) 方式
  • 导入:el-upload action 属性 + globalHeaders() + ImportOption reactive

需求模板增加 lockRule 操作锁定规则

  • 新增字段属性 lockRule:当某字段值决定行级操作权限时使用
  • lockRule 格式:{ lockValue: 值, lockActions: [edit, delete], tip: 提示文案 }
  • 典型场景:dataSource=1(第三方同步)时禁止编辑和删除
  • 更新了3个文件:
    • references/requirements-template.md:字段属性速查表增加 lockRule 行 + lockRule 格式说明 + 示例字段
    • SKILL.md:字段通用默认值增加 lockRule、解析规则"来源"增加 lockRule 推断、VO结构说明增加"有lockRule的字段必须加入VO"、注意事项第8条
    • doc/ecs-course-requirements.md:dataSource 字段改为 inTable=false/inQuery=false,增加 lockRule 配置,备注增加锁定规则说明

课程前端代码重新生成(对齐 lockRule)

  • 基于 lockRule 规范,dataSource 字段 inQuery=false/inTable=false
  • 修改3个前端文件对齐需求文档:
    • index.vue:删除搜索栏 dataSource 下拉、删除 data_source 字典引用、删除 queryParams.dataSource
    • types.ts:删除 CourseQuery.dataSource 字段
    • form.vue:保留 dataSource 字段和 data_source 字典(表单仍需要)
  • 操作列的 lockRule 判断逻辑(v-if="scope.row.dataSource != '1'")保持不变

dataSource 字段 inForm=false 更新

  • 用户确认:dataSource 不需要在表单中录入和显示,默认值由后台处理
  • 需求文档:dataSource.inForm=false/inAdd=false/inEdit=false,删除 required/dictType/component
  • 前端代码变更:
    • form.vue:删除 dataSource 表单项、删除 data_source 字典引用、删除 formData.dataSource、删除 formRules.dataSource
    • types.ts:CourseForm 中删除 dataSource 字段(CourseVO 保留,供列表页操作列判断)
  • 前端技能模板更新:
    • SKILL.md:types.ts 映射增加 lockRule 注释、注意事项第6条
    • references/vue-style.md:操作列增加 lockRule 注释示例 + 新增完整的 lockRule 规范章节