feat: 完善设计报工研发管理流程

This commit is contained in:
2026-07-10 17:43:23 +08:00
parent 68acbf76cb
commit e89cef4895
9 changed files with 1103 additions and 54 deletions

View File

@@ -2724,3 +2724,280 @@ pm run build通过仅有既有警告。
7. 执行 `git push origin snapshot/local-save-20260625-154806` 推送到远程。
8. 推送成功,远程分支 `snapshot/local-save-20260625-154806``bd9ca09` 更新到 `a6a92ff`
9. 推送后执行 `git status -sb`,确认本地分支仍跟踪 `origin/snapshot/local-save-20260625-154806`
10. 执行 `git rev-list --left-right --count HEAD...'@{u}'`,确认本地与远程差异为 `0 0`
11. 执行 `git log -1 --oneline`,确认当前最新提交为 `a6a92ff chore: 上传当前工作区修改`
12. 为补充记录推送成功结果,追加本条日志;本条日志将作为单独的日志补充提交继续推送到同一远程分支。
### 结论
- 用户要求上传的当前工作区全部修改已提交并推送到远程分支。
- 首次推送成功的提交号为 `a6a92ff`
- 推送后本地与远程分支一致,差异为 `0 0`
## 2026-07-10 DesignReportTask 工时校验补结束后任务状态回写
### 用户提问
- 用户反馈:`ProductionManagement/DesignReportTask/Check/index` 中,已经点击开始但没有结束的任务,在校验页点击“校验”并输入结束时间后可以校验完成,但任务状态没有改变,仍然是“执行中”。
### 执行过程
1. 检查 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`,确认校验保存调用的是 `设计报工_工时校验_保存`
2. 检查完整建库脚本 `db_backups/create_design_report_task_module_20260630.sql`,确认 `设计报工_工时校验_保存` 原逻辑只更新 `MES_设计报工_记录`
- 写入 `开始时间``结束时间``工时秒数`
-`报工状态` 改为 `已结束`
-`已校验` 改为 `1`
- 写入校验人、校验时间和备注。
3. 确认原过程没有同步更新 `MES_设计报工_任务.[单据状态]`,这是校验页手工补结束时间后任务仍为“执行中”的原因。
4. 检查 `Report/index.vue` 和需求文档,确认设计报工状态规则:
- “结束”后任务状态应为 `已结束`
- “完成”是单独动作,完成后任务状态才变为 `已完成`
5. 决定本次修复口径:
- 校验页手工补结束时间后,如果该 DID 已无未结束报工记录,则任务状态回写为 `已结束`
- 如果该 DID 仍有其他未结束报工记录,则任务状态保持 `执行中`
- 如果任务已经是 `已完成`,校验保存不回退任务状态。
6. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 在校验表格中增加“任务状态”列,直接显示 `单据状态`
- 增加 `getStatusType` 方法,按 `已完成``执行中``已结束` 显示不同标签类型。
- 单条校验成功后改为 `await this.searchTable()`,确保校验后刷新完成再结束流程。
- 批量校验成功后也改为 `await this.searchTable()`
7. 修改 `db_backups/create_design_report_task_module_20260630.sql``设计报工_工时校验_保存`
- 保存校验记录并更新报工记录后,新增任务状态回写逻辑。
- 状态回写规则为:已完成保持已完成;仍有未结束记录则为执行中;否则为已结束。
- 返回结果中增加 `任务状态` 字段,便于调用方确认状态。
8. 修改 `db_backups/create_design_report_task_module_20260630.sql``设计报工_工时校验_批量保存`
- 增加受影响 DID 集合。
- 批量校验后按相同规则回写任务状态。
- 将记录更新条数保存到变量,避免后续任务更新覆盖返回的 `count`
9. 新增增量脚本 `db_backups/fix_design_report_check_status_20260710.sql`
- 用于直接发布现有数据库。
- 重建 `设计报工_工时校验_保存``设计报工_工时校验_批量保存`
10. 将增量脚本发布到目标库 `192.168.2.92 / YL_MESDB`,日志中不记录数据库明文密码。
11. 使用事务构造临时数据验证单条校验:
- 新建一个状态为 `执行中` 的临时任务和一条未结束报工记录。
- 调用 `设计报工_工时校验_保存` 传入开始时间和结束时间。
- 返回 `result=1``message=校验成功``任务状态=已结束`
- 查询确认任务状态为 `已结束`,报工记录状态为 `已结束``已校验=1`
- 回滚事务后确认测试任务残留数量为 `0`
12. 使用事务构造多人未结束场景验证:
- 新建一个状态为 `执行中` 的临时任务和两条未结束报工记录。
- 只对其中一条记录调用 `设计报工_工时校验_保存` 补结束时间并校验。
- 返回 `result=1``任务状态=执行中`
- 查询确认仍有 `1` 条未结束记录,任务状态保持 `执行中`
- 回滚事务后确认测试任务残留数量为 `0`
13. 批量校验测试第一次执行时报错:
- 错误为使用 XML 方法时 `QUOTED_IDENTIFIER` 设置不正确。
- 原因是新增增量脚本未显式设置 `SET QUOTED_IDENTIFIER ON`
14. 检查完整建库脚本,确认完整脚本已有 `SET ANSI_NULLS ON``SET QUOTED_IDENTIFIER ON`
15. 修改 `db_backups/fix_design_report_check_status_20260710.sql`,在过程创建前补充:
- `SET ANSI_NULLS ON`
- `SET QUOTED_IDENTIFIER ON`
16. 重新发布增量脚本到目标库。
17. 重新使用事务验证批量校验:
- 新建一个状态为 `执行中` 的临时任务和两条已有结束时间的报工记录。
- 调用 `设计报工_工时校验_批量保存`
- 返回 `result=1``message=批量校验成功``count=2`
- 查询确认两条记录均已校验,任务状态变为 `已结束`
- 回滚事务后确认测试任务残留数量为 `0`
18. 第一次执行 `npm run build` 时 124 秒超时,没有得到构建结论。
19. 使用更长超时时间重新执行 `npm run build`,构建通过。
20. 构建输出仅有项目既有的大资源体积 warning以及 Browserslist / baseline-browser-mapping 数据过期提示。
21. 检查 Git 状态,确认构建未额外修改 `dist`,当前变更只包含本次源码、数据库脚本和本日志。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `db_backups/create_design_report_task_module_20260630.sql`
- `db_backups/fix_design_report_check_status_20260710.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计工时校验页手工补结束时间并保存校验后,任务状态会按报工记录自动回写。
- 单个任务所有报工记录都已有结束时间时,任务状态会从 `执行中` 改为 `已结束`
- 同一任务仍有其他未结束报工记录时,任务状态保持 `执行中`
- 已完成任务不会因为工时校验被回退状态。
- 校验页现在直接显示“任务状态”,便于校验后确认状态变化。
### 验证结果
- 单条补结束时间校验:通过,任务状态变为 `已结束`
- 多人仍有未结束记录:通过,任务状态保持 `执行中`
- 批量校验:通过,任务状态变为 `已结束`,返回 `count=2`
- 所有数据库验证均在事务中回滚,测试数据无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-10 DesignReportTask 新建设计任务取消物料编码必填
### 用户提问
- 用户要求修改 `ProductionManagement/DesignReportTask/Task/index`,新建设计任务时去掉“物料编码”必填规则。
### 执行过程
1. 检查当前 Git 工作区,确认已有上一轮未提交的 `DesignReportTask` 校验状态回写相关改动和日志改动。
2. 检查 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
3. 搜索 `物料编码``rules``新增``保存` 等关键字,定位到表单校验规则:
- 原规则中 `物料编码` 存在 `{ required: true, message: '请选择物料编码', trigger: 'change' }`
- `任务描述` 仍为必填。
4. 检查 `db_backups/create_design_report_task_module_20260630.sql`,确认数据库表字段 `[物料编码]` 允许为空,新增过程 `设计报工_任务_新增` 也使用 `NULLIF(@物料编码, N'')`,后端没有强制物料编码必填。
5. 使用 `apply_patch` 修改 `Task/index.vue`
- 删除 `rules` 中的 `物料编码` 必填校验。
- 保留 `任务描述` 必填校验。
6. 复核 `Task/index.vue``rules` 片段,确认当前只剩:
- `任务描述: [{ required: true, message: '请输入任务描述', trigger: 'blur' }]`
7. 注意到 `Task/index.vue` 中还有本轮之前已经存在的未提交差异,例如“研发目的”布局和人员显示格式调整;本次未回退这些既有改动。
8. 执行 `npm run build` 验证前端构建。
9. 构建通过,仅有项目既有的大资源体积 warning以及 Browserslist / baseline-browser-mapping 数据过期提示。
10. 检查 Git 状态,确认构建未额外修改 `dist` 输出文件。
11. 追加本条中文执行日志。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 新建设计任务时,“物料编码”不再必填。
- 保存时仍会按原逻辑传递 `物料编码`,为空时后端按空值处理。
- “任务描述”必填规则保持不变。
### 验证结果
- `Task/index.vue` 表单规则已不包含 `物料编码` 必填校验。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-10 DesignReportTask 移到研发管理主菜单
### 用户提问
- 用户要求增加主菜单“研发管理”,并将 `DesignReportTask` 下四个页面都放到“研发管理”下面。
- 用户说明:“研发管理”和“生产管理”平级,属于主菜单。
### 执行过程
1. 检查当前 Git 工作区,确认已有前几轮未提交改动:
- `db_backups/create_design_report_task_module_20260630.sql`
- `gptlog-process/gpdlog.md`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `db_backups/fix_design_report_check_status_20260710.sql`
2. 查询目标库 `192.168.2.92 / YL_MESDB``[dbo].[登录基础数据_二级菜单]`,日志中不记录数据库明文密码。
3. 查询 `DesignReportTask` 当前菜单分布:
- 账号代码 `1` 下存在四个页面,均挂在 `pid=3` 的“生产管理”下。
- 账号代码 `2010` 下只存在 `Task``Report` 两个页面,均挂在 `pid=3`
4. 查询主菜单,确认当前没有“研发管理”主菜单。
5. 查询账号代码 `1` 的主菜单,确认:
- `id=3` 为“生产管理”。
- 当前主菜单最大 id 为 `8`
- 账号代码 `1``id=9` 未被占用。
6. 考虑到用户本轮未指定其他账号,且账号 `2010` 下并不具备四个 `DesignReportTask` 页面,本次按前序操作口径处理账号代码 `1`,避免无意给其他账号新增页面权限。
7. 检查前端动态路由逻辑:
- `src/router/getTreeData.js``pid` 构造菜单树。
- 主菜单使用 `path``/layout/Layout` 作为布局路由。
- 子菜单使用原有 `componet=/ProductionManagement/DesignReportTask/...` 加载真实页面组件。
8. 新增数据库增量脚本 `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql`
- 若账号 `1` 下不存在“研发管理”,则插入主菜单:
- `id=9`
- `pid=0`
- `path=/ResearchManagement`
- `componet=/layout/Layout`
- `name=ResearchManagement`
- `title=研发管理`
- `icon=CreateProject`
- `账号代码=1`
- `模块代码=9`
- `是否启用=1`
- 若“研发管理”已存在,则更新为上述主菜单配置并启用。
- 定义 `DesignReportTask` 四个子菜单:
- `DesignReportTask/Task/index`:设计任务
- `DesignReportTask/Report/index`:设计报工
- `DesignReportTask/Check/index`:设计工时校验
- `DesignReportTask/HoursReport/index`:设计工时报表
- 如果四个子菜单缺失则补录;如果已存在则移动到“研发管理”下并启用。
- 子菜单 `componet` 保持 `/ProductionManagement/DesignReportTask/...` 不变,避免影响页面组件加载路径。
9. 执行 `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql` 发布到目标库。
10. 发布结果返回:
- `id=9``pid=0``title=研发管理`
- `id=248``pid=9``title=设计任务`
- `id=249``pid=9``title=设计报工`
- `id=250``pid=9``title=设计工时校验`
- `id=251``pid=9``title=设计工时报表`
11. 再次查询账号代码 `1` 的主菜单,确认“研发管理”已与“生产管理”同级,均为 `pid=0`
12. 再次查询账号代码 `1``DesignReportTask` 四个页面,确认四条均为 `pid=9`
13. 查询账号代码 `1``pid=3``DesignReportTask` 数量,结果为 `0`,确认生产管理下已无设计报工页面残留。
14. 本次不修改前端页面代码;动态菜单通过数据库菜单表生效。
### 修改文件
- `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 账号代码 `1` 已新增“研发管理”主菜单。
- “研发管理”与“生产管理”平级,均为主菜单,`研发管理.id=9``pid=0`
- 账号代码 `1``DesignReportTask` 四个页面已全部移动到“研发管理”下。
- 生产管理下不再包含账号代码 `1``DesignReportTask` 页面。
### 验证结果
- `研发管理``id=9``pid=0``path=/ResearchManagement``componet=/layout/Layout``是否启用=1`
- `设计任务``id=248``pid=9``是否启用=1`
- `设计报工``id=249``pid=9``是否启用=1`
- `设计工时校验``id=250``pid=9``是否启用=1`
- `设计工时报表``id=251``pid=9``是否启用=1`
- 账号代码 `1` 下生产管理 `pid=3``DesignReportTask` 页面数量为 `0`
## 2026-07-10 设计报工结束弹框增加进度说明
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/Report/index`
- 点击“结束”时先弹框,弹框显示:
- id 号
- 物料名称
- 物料编码
- 任务描述
- 新增字段“进度说明”
- 点击弹框里的“确认”后,才执行结束报工。
### 执行过程
1. 根据当前菜单配置确认:虽然菜单已经挂到“研发管理”,真实前端组件仍使用原路径 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`,因此本次修改该组件。
2. 检查 `Report/index.vue` 现有逻辑:
- “结束”按钮原来直接调用 `endTask(row)`
- `endTask(row)` 会先查询最新任务状态和当前操作人未结束报工记录。
- 校验通过后直接调用存储过程 `设计报工_任务_结束`
3. 查询目标库 `192.168.2.92 / YL_MESDB` 的表结构和存储过程定义,日志中不记录数据库明文密码。
4. 确认 `[dbo].[MES_设计报工_记录]` 原来没有 `[进度说明]` 字段,存储过程 `[dbo].[设计报工_任务_结束]` 原来没有 `@进度说明` 参数。
5. 采用持久化方案:结束报工弹框录入的“进度说明”写入报工记录表,并在查询和工时报表中返回该字段。
6. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 新增“结束报工”弹框。
- 弹框内展示 `DID``物料编码``物料名称``任务描述`
- 新增可编辑字段 `进度说明`,最大长度 500。
- 点击列表“结束”时只打开弹框,不立即结束。
- 点击弹框“确认”后才调用 `设计报工_任务_结束`
- 调用结束存储过程时传入 `进度说明`
- 调整 `runAction()`,使其成功返回 `true`、失败返回 `false`,便于确认后关闭弹框。
7. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 在报工记录列表增加 `进度说明` 列,便于校验页面查看结束说明。
8. 修改 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- 在工时报表中增加 `进度说明` 列。
9. 修改初始化脚本 `db_backups/create_design_report_task_module_20260630.sql`
- `MES_设计报工_记录` 增加 `[进度说明] nvarchar(500) NULL`
- 增加字段补齐脚本,字段不存在时自动添加。
- 重建 `设计报工_任务_结束`,增加 `@进度说明` 参数并写入记录表。
- 重建 `设计报工_记录_查询`,返回 `进度说明`
- 重建 `设计报工_工时报表_作业者工时_查询`,返回 `进度说明`
10. 新增数据库增量脚本 `db_backups/add_design_report_progress_note_20260710.sql`
- 补齐 `[进度说明]` 字段。
- 重建 `设计报工_任务_结束`
- 重建 `设计报工_记录_查询`
- 重建 `设计报工_工时报表_作业者工时_查询`
11. 执行增量脚本发布到目标库 `192.168.2.92 / YL_MESDB`,执行成功。
12. 使用数据库事务做验证,验证后回滚测试数据:
- 临时插入一条设计任务。
- 临时插入一条当前用户未结束报工记录。
- 执行 `设计报工_任务_结束` 并传入 `进度说明`
- 返回 `1, 结束成功`
- 查询确认任务状态变为 `已结束`
- 查询确认报工记录状态变为 `已结束`,结束时间已写入,`进度说明` 已保存。
- 查询确认 `设计报工_记录_查询` 可以返回 `进度说明`
- 查询确认 `设计报工_工时报表_作业者工时_查询` 可以返回 `进度说明`
- 回滚事务后确认测试任务无残留。
13. 执行 `npm run build`,构建通过。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `db_backups/create_design_report_task_module_20260630.sql`
- `db_backups/add_design_report_progress_note_20260710.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计报工点击“结束”后会先弹出确认窗口。