Files
MES_Manage_View_V20/gptlog-process/gpdlog.md

5329 lines
399 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 2026-06-27 过程异常管控修改执行日志
1. 读取 `work/修改过程异常管控.docx`,解析到需求要点:
- 页面位置:`ProductionManagement/AbnormalControl/index`
- 原页面添加多个审批人后表现为多级审批,需要改为多选后多人同时看到任务。
- 当前任务只要其中一个审批人同意,即完成当前任务。
- 上传附件功能不正常,需要修改。
- 加工中心 `ProductionManagement/MachiningCenter/index` 与装配中心 `ProductionManagement/AssemblyCenter/index` 也需要统一嵌套该业务页面。
- 测试页面功能时不要产生业务数据。
2. 检查代码结构:
- 确认独立异常管控页面位于 `src/views/ProductionManagement/AbnormalControl/index.vue`
- 确认加工中心内复制了一份异常管控模板和方法。
- 确认装配中心入口原本被注释,且没有完整异常管控弹窗模板。
- 对比其他图纸上传页面,确认文件上传接口需要使用 `DataPDF.params = JSON.stringify(...)` 形式传参,当前异常管控直接传对象是上传异常的重要原因。
3. 前端修改:
- 新增复用组件 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`,承载统一异常管控页面。
-`src/views/ProductionManagement/AbnormalControl/index.vue` 改为组件包装页,避免独立页面与中心页面逻辑分叉。
- 在复用组件中将审批人从“添加审批人列表”改为 `el-select multiple` 多选。
- 提交流程时将多个审批人的 ID 和姓名使用英文逗号拼接,继续通过 `审批人ID``审批人姓名` 参数提交,兼容原前端调用方式。
- 修复附件上传:
- 上传前校验是否已选择附件。
- 按项目已有接口约定传 `params` JSON。
- 传入 `num``tableName=流程表``worker``uploadTime`
- 增加上传失败回调提示。
- 加工中心新增统一异常管控弹窗,按钮改为打开复用组件。
- 装配中心恢复“异常管控”按钮,并新增统一异常管控弹窗。
- 修复加工中心旧异常管控复制代码中 `handleRowClick` 与主表行点击方法重名的问题,将旧异常管控内部行点击改名,避免覆盖主页面任务选择逻辑。
4. 数据库脚本:
- 新增 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`
- 脚本包含 `sp_创建流程_简化版``sp_处理审批``CREATE OR ALTER PROCEDURE`
- `sp_创建流程_简化版` 支持逗号分隔的多个审批人,并拆分为同一步骤序号的多个 `processing` 节点,使多人同时看到待处理任务。
- `sp_处理审批` 在任意审批人同意时,将同一步骤其他待处理节点同步关闭,并将流程置为 `completed`
- 脚本只定义存储过程,没有插入或修改业务测试数据;本次未执行该 SQL。
5. 文档归档:
- 新建目录 `work/ProductionManagement/WorkHoursCheck`
- 已将 `work/修改过程异常管控.docx` 移动到 `work/ProductionManagement/WorkHoursCheck/修改过程异常管控.docx`
6. 验证:
- 执行 `npm run build`
- 构建成功。
- 构建仅出现原项目资源体积较大、Browserslist 数据过期等警告。
- 未调用流程新增、审批、上传等业务接口,因此未产生业务数据。
## 2026-06-27 过程异常管控复测问题处理日志
1. 根据用户复测反馈重新排查:
- 用户发起测试流程时选择了曹元和闫一龙两个审批人,但登录曹元账号后没有看到待处理任务。
- 附件上传仍然不可用。
2. 待办不可见问题定位:
- 当前前端提交多个审批人时会把审批人ID和审批人姓名用英文逗号拼接后传给 `sp_创建流程_简化版`
- 如果目标数据库仍是旧版存储过程,测试流程可能只生成一条节点记录,节点中的 `审批人ID` 是类似 `曹元ID,闫一龙ID` 的字符串。
- 旧版 `sp_获取待处理任务` 如果按 `审批人ID = 当前登录人ID` 精确匹配,曹元登录时就匹配不到这条节点,所以待办为空。
3. 数据库脚本补充:
- 修改 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`
- 在原有 `sp_创建流程_简化版``sp_处理审批` 基础上新增 `sp_获取待处理任务``CREATE OR ALTER PROCEDURE`
- 新版 `sp_获取待处理任务` 同时支持:
- 新逻辑生成的同一步骤多条待办节点。
- 旧逻辑已生成的逗号分隔审批人ID节点。
- 这样已发起的曹元、闫一龙测试流程,只要目标库执行该脚本,曹元账号也可以按逗号包含关系查询到待办。
4. 附件上传问题修改:
- 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`
- 上传按钮改为只选择附件并记录待上传数量,不再在流程创建前直接上传。
- 流程创建成功并拿到 `新流程ID` 后,再自动调用上传接口。
- 上传参数改为使用真实流程ID`num = 新流程ID``tableName = 流程表``worker = 当前用户``uploadTime = 当前时间`
- 使用 `this.$set(this.DataPDF, 'params', JSON.stringify(...))` 设置上传参数,保持与项目已有上传页面的参数传递方式一致。
- 多附件上传按成功回调计数,全部上传完成后清空文件列表和待上传数量。
- 取消附件弹窗时清空已选择附件,避免误带入下次流程。
- 提交流程成功后刷新“我发起的”和“待我处理”列表。
5. 验证:
- 修改后执行 `npm run build`
- 构建成功。
- 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。
- 本次没有调用流程新增、审批、附件上传等业务接口,没有执行数据库脚本,因此未产生业务数据。
6. 仍需执行的外部动作:
- 当前仓库没有可直接、安全执行数据库 DDL 的连接串或发布脚本入口。
- 前端修改已经完成,但曹元待办不可见的问题依赖目标数据库存储过程更新。
- 需要在目标 SQL Server 数据库执行 `db_backups/update_abnormal_control_parallel_approval_20260627.sql`,否则服务器仍会按旧存储过程逻辑查询,已发起的测试流程仍可能查不到。
## 2026-06-27 过程异常管控附件功能临时移除日志
1. 根据用户反馈重新调整:
- 用户确认附件功能仍然不好用,要求暂时去掉附件功能。
- 本次目标改为移除过程异常管控页面中的附件入口和上传调用,避免影响流程发起。
2. 修改复用组件:
- 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`
- 删除发起流程表单中的“上传附件”表单项和“点击上传”按钮。
- 删除上传附件弹窗。
- 删除 `MESUploadFile` 引入。
- 删除 `DataPDF``uploadPDF``pendingUploadCount``uploadFileTotal``uploadFileSuccess``uploadingAttachment` 等附件状态。
- 删除 `uploadSuccessPDF``uploadErrorPDF``uploadShowPDF``submitPicturePDF``cancelAttachmentUpload``clearPendingAttachments``uploadPendingAttachments` 等附件相关方法。
- 删除流程创建成功后的附件上传调用,成功提示恢复为只提示流程创建成功。
- 删除无用的 `.attachment-tip` 样式。
3. 清理加工中心旧残留:
- 修改 `src/views/ProductionManagement/MachiningCenter/index.vue`
- 删除旧异常管控模板里残留的“上传附件”按钮。
- 删除旧代码中已经注释的上传弹窗块。
- 删除旧异常管控方法里的 `uploadShowPDF``submitPicturePDF`
- 删除旧数据中的 `imgDialogFormVisible`
4. 搜索确认:
-`src/views/ProductionManagement/components/AbnormalControlPanel.vue``AbnormalControl/index.vue``MachiningCenter/index.vue``AssemblyCenter/index.vue` 执行搜索。
- 未再发现 `上传附件``MESUploadFile``uploadPDF``DataPDF``submitPicturePDF``uploadShowPDF``attachment-tip``附件开始上传` 等附件入口或上传调用残留。
5. 验证:
- 执行 `npm run build`
- 构建成功。
- 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。
- 本次未调用流程新增、审批、附件上传等业务接口,未产生业务数据。
## 2026-06-27 过程异常管控页签刷新处理日志
1. 根据用户反馈重新调整:
- 用户要求异常管控里面三个页签点击时需要刷新数据。
- 涉及页签包括:`待我处理``我发起的``已完成`
2. 检查当前实现:
- 当前 `el-tabs` 只通过 `v-model="activeTab"` 切换页签,没有绑定页签点击事件。
- 顶部三个统计卡片点击时也只是修改 `activeTab`,没有重新请求数据。
- `searchTable``searchTable1` 在接口返回空数组时不会覆盖原列表,可能导致刷新后仍显示上一次的数据。
- 绑定任务查询 `searchTable3` 也存在接口返回空数组时保留旧列表的问题。
3. 前端修改:
- 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`
-`el-tabs` 增加 `@tab-click="handleTabClick"`
- 新增 `handleTabClick(tab)` 方法,根据当前页签名称刷新对应数据。
- 新增 `switchTab(tabName)` 方法,统计卡片点击时先切换页签,再刷新对应数据。
- 新增 `refreshActiveTab(tabName)` 方法,统一调度三个页签的数据刷新:
- `pending` 调用 `searchTable1()` 刷新待我处理。
- `initiated` 调用 `searchTable()` 刷新我发起的。
- `processed` 调用 `getProcessedTasks()` 刷新已完成。
4. 数据覆盖修正:
- `getProcessedTasks()` 改为始终用 `response.data || []` 覆盖 `processedTasks`,并同步更新统计数量。
- `searchTable()` 改为始终用 `response.data || []` 覆盖 `initiatedProcesses`,并同步更新统计数量。
- `searchTable1()` 改为始终用 `response.data || []` 覆盖 `pendingTasks`,并同步更新统计数量。
- `searchTable3()` 改为始终用 `response.data || []` 覆盖 `tableData5`,避免绑定任务查询为空时残留旧数据。
5. 验证:
- 执行 `npm run build`
- 构建成功。
- 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。
- 本次未调用流程新增、审批等业务接口,未产生业务数据。
## 2026-06-27 加工中心和装配中心异常管控集成问题处理日志
1. 根据用户反馈重新排查:
- 加工中心和装配中心打开异常管控后,新建流程时原本应自动带入的生产任务信息没有了。
- 在异常管控中新建流程或处理任务时,弹出的二级弹框被黑色遮罩挡住,无法操作。
2. 自动带入问题定位:
- 加工中心、装配中心当前主表选中行保存在各自页面的 `selectedRow`
- 异常管控已经改成复用组件后,父页面没有把主表 `selectedRow` 传给复用组件。
- 复用组件内部只知道自己弹窗里的绑定任务列表点击结果,因此从中心页进入时不会自动显示当前生产订单、物料、工序等信息。
3. 自动带入修复:
- 修改 `src/views/ProductionManagement/components/AbnormalControlPanel.vue`
- 新增 `initialSelectedRow` 入参。
- 在组件创建和 `initialSelectedRow` 变化时调用 `applyInitialSelectedRow()`
- `applyInitialSelectedRow()` 会把外部传入的主表选中行交给 `handleRowClick()` 统一映射。
- `handleRowClick()` 兼容多种字段名:
- 生产订单:`订单号``计划号``生产订单`
- 物料编码:`产品编码``零件编码``物料编码`
- 物料名称:`产品名称``零件名称``物料名称`
- 工序名称:`工序名称`
- 同步把外部带入的信息写入异常管控的查询条件,方便打开后看到当前任务上下文。
- 新建流程校验从 `selectedRow == ""` 调整为 `!selectedRow`,兼容对象/null 两类状态。
4. 父页面传值修复:
- 修改 `src/views/ProductionManagement/MachiningCenter/index.vue`
- 修改 `src/views/ProductionManagement/AssemblyCenter/index.vue`
- 两个中心页的异常管控弹窗中,将组件调用改为 `<abnormal-control-panel :initial-selected-row="selectedRow" />`
5. 遮罩问题修复:
- 复用组件内部所有二级弹窗增加 `:append-to-body="true"`
- 发起新流程弹窗。
- 处理任务弹窗。
- 流程进度详情弹窗。
- 转办流程弹窗。
- 完结流程弹窗。
- 加工中心和装配中心的外层异常管控弹窗增加 `append-to-body`,降低与页面其他弹窗层级冲突的风险。
6. 验证:
- 执行 `npm run build`
- 构建成功。
- 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。
- 本次未调用流程新增、审批等业务接口,未产生业务数据。
## 2026-06-27 修改工时报表执行日志
1. 查找并读取需求文档:
- 用户提到 `worke`,实际仓库中没有 `worke` 目录。
-`work` 目录下找到 `work/修改工时报表.docx`
- 读取 docx 内容,确认需求:
- 页面位置:`ProductionManagement/Timesheet`
- 页面中四个分页:`项目工时``作业者工时``任务工时``设备工时`
- 四个分页里面的明细信息都要按照开始时间排序。
2. 定位代码:
- 页面文件为 `src/views/ProductionManagement/Timesheet/index.vue`
- 四个分页对应数据:
- `项目工时` 使用 `projectTableData`,由 `loadProjectData()` 调用 `工时统计_项目工时_查询` 后通过 `buildProjectTree()` 组装。
- `作业者工时` 使用 `operatorTableData`,由 `loadOperatorData()` 调用 `工时统计_作业者工时_查询` 后通过 `buildOperatorTree()` 组装。
- `任务工时` 使用 `taskTableData`,由 `loadTaskData()` 调用 `工时统计_任务工时_查询` 后通过 `buildTaskTree()` 组装。
- `设备工时` 使用 `DeviceTableData`,由 `loadDeviceData()` 调用 `工时统计_设备工时_查询` 后复用 `buildOperatorTree()` 组装。
3. 代码修改:
- 修改 `src/views/ProductionManagement/Timesheet/index.vue`
- 新增 `getStartTimeValue(row)`
- 兼容 `startTime``planStart``开始时间``dateLabel` 字段。
- 将时间字符串转换为可比较的时间戳。
- 空值或无效时间排到最后。
- 新增 `getEarliestStartTime(row)`
- 对树形节点递归取子级最早开始时间。
- 用于父级分组排序,保证父级分组顺序跟其明细开始时间一致。
- 新增 `sortRowsByStartTime(rows)`
- 递归排序每一层 `children`
- 每个分组下的明细按照开始时间升序排列。
- 父级分组按照子级最早开始时间升序排列。
-`buildProjectTree()` 返回前调用 `sortRowsByStartTime()`,覆盖项目工时分页。
-`buildOperatorTree()` 返回前调用 `sortRowsByStartTime()`,覆盖作业者工时和设备工时分页。
-`buildTaskTree()` 返回前调用 `sortRowsByStartTime()`,覆盖任务工时分页。
4. 文档归档:
- 新建目录 `work/ProductionManagement/Timesheet`
- 已将 `work/修改工时报表.docx` 移动到 `work/ProductionManagement/Timesheet/修改工时报表.docx`
5. 验证:
- 执行 `npm run build`
- 构建成功。
- 构建仅有项目原有资源体积过大、Browserslist/baseline-browser-mapping 数据过期警告。
- 本次只修改前端排序和移动文档,未调用业务接口,未产生业务数据。
## 2026-06-27 13:42:30 作业者工时报工数量按 TaskAID+开始时间取最大值
### 用户需求
- 修改工时报表中“作业者工时”的“报工数量”取值口径。
- 新口径:同一个 TaskAID 且开始时间相同的记录,报工数量取最大值;不再叠加其他分组条件。
- 用户提供目标数据库连接信息,本次执行中使用目标库 192.168.2.92 / YL_MESDB日志中不记录数据库密码。
### 执行过程
1. 检查工作目录 C:\WorkYuanLy\MES_Manage_View_V20确认工时报表文档已在 work/ProductionManagement/Timesheet/修改工时报表.docx。
2. 检查前端文件 src/views/ProductionManagement/Timesheet/index.vue确认“作业者工时”和“设备工时”共用 uildOperatorTree因此修改时增加开关参数只让作业者工时启用新口径避免影响设备工时。
3. 连接数据库 192.168.2.92 的 YL_MESDB确认
- dbo.View_生产工时视图 包含 TaskAID、开始时间、操作数值、操作人、阶段标识 字段。
- dbo.View_生产工时视图全部 包含 TaskAID、开始时间、操作数值、操作人、阶段标识 字段。
- dbo.工时统计_作业者工时_查询 存储过程存在。
4. 在修改数据库过程前,备份目标库当前过程定义:
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_20260627_133625.sql
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_20260627_133625.sql
5. 修改前端 src/views/ProductionManagement/Timesheet/index.vue
- 增加 parseReportQty、 ormatReportQty、getTaskAID、getReportQtyGroupKey、uildTaskStartReportQtyMap、getTaskStartReportQty、
ecalculateOperatorReportQty。
- loadOperatorData 调用 uildOperatorTree(res.data || [], true),启用作业者工时的新报工数量口径。
- uildOperatorTree 增加 useTaskStartMaxReportQty 参数;明细行保留 TaskAID 和内部用的
eportQtyGroupKey。
- 作业者工时的日期汇总和操作人汇总按唯一 TaskAID + startTime 取最大值后再求和,避免同一任务同一开始时间的重复行重复累加。
- 设备工时继续调用 uildOperatorTree(res.data || []),不启用新口径。
6. 新增数据库脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql
- 更新 dbo.工时统计_作业者工时_查询。
- 更新 dbo.工时统计_作业者工时_查询_导出。
- 两个过程均通过 TaskStart报工数量 按 TaskAID + CONVERT(VARCHAR(19), 开始时间, 120) 分组取最大报工数量。
- 查询过程结果集中增加 TaskAID 字段供前端兜底计算使用。
- 导出过程同步使用新口径,但不新增导出显示列,避免改变导出表头结构。
7. 执行数据库脚本到目标库;本次数据库操作只执行 ALTER PROCEDURE未写入或修改业务表数据。
8. 使用 sys.sp_describe_first_result_set 验证 dbo.工时统计_作业者工时_查询 的结果集,确认包含 TaskAID 字段,位于结果列第 20 列。
9. 验证数据库过程定义中查询和导出都包含 GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120),确认已按新口径分组。
10. 执行
pm run build构建成功。构建输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。
### 修改结果
- 作业者工时页面“报工数量”现在按照同一 TaskAID、同一开始时间取最大值。
- 作业者工时的操作人汇总、日期汇总、明细显示和导出过程均同步使用该口径。
- 设备工时未被新口径影响。
- 已保留数据库更新前备份和本次更新脚本。
### 验证结果
- 数据库连接和字段确认:通过。
- 存储过程更新:通过。
- 查询结果集 TaskAID 字段确认:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 14:13:28 修正作业者工时报工数量为全量视图取最大值
### 用户反馈
- 上一次实现不符合要求。
- 正确口径:直接查询 [View_生产工时视图全部],同一个 TaskAID、同一个开始时间取最大报工数量不经过任何过滤条件。
### 执行过程
1. 明确修正范围:报表显示行仍由原查询条件决定,但“报工数量最大值”的来源必须改为全量 [dbo].[View_生产工时视图全部],不能从筛选后的数据集计算。
2. 修改脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql
- dbo.工时统计_作业者工时_查询 中的 TaskStart报工数量 CTE 从 FROM 筛选明细 改为 FROM [dbo].[View_生产工时视图全部]。
- dbo.工时统计_作业者工时_查询_导出 中的 TaskStart报工数量 CTE 同步改为 FROM [dbo].[View_生产工时视图全部]。
- 两处最大值计算均只按 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组,不增加日期、操作人、合同号、产品、工序、订单、阶段标识等过滤条件。
3. 在重新应用数据库脚本前,再次备份目标库当前过程定义:
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_unfiltered_taskstart_reportqty_20260627_141106.sql
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_unfiltered_taskstart_reportqty_20260627_141106.sql
4. 重新连接目标库 192.168.2.92 / YL_MESDB执行修正后的 SQL 脚本,只更新两个存储过程定义,未修改业务表数据。
5. 第一次使用 LIKE 验证时因匹配范围过大产生误判,随后改为提取 TaskStart报工数量 CTE 片段进行验证。
6. 验证结果:
- dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 来源为 FROM [dbo].[View_生产工时视图全部],不包含 筛选明细。
- dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 来源为 FROM [dbo].[View_生产工时视图全部],不包含 筛选明细。
- 两个过程均按 GROUP BY TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组取最大值。
7. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。
### 修改结果
- 作业者工时查询和导出过程的报工数量最大值来源已改为全量 [dbo].[View_生产工时视图全部]。
- 最大值计算不再经过报表查询条件过滤。
- 本地脚本和目标库过程已同步。
### 验证结果
- 目标库脚本应用:通过。
- CTE 来源验证:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 14:48:37 修正作业者工时报工数量最大值增加操作类别编号过滤
### 用户反馈
- 报工数量最大值仍需直接查 [View_生产工时视图全部]。
- 同一个 TaskAID、同一个开始时间取最大值。
- 需要增加过滤条件:操作类别编号 = 6。
### 执行过程
1. 连接目标库 192.168.2.92 / YL_MESDB确认 [dbo].[View_生产工时视图全部] 存在以下字段:
- TaskAID
- 开始时间
- 操作数值
- 操作类别编号
2. 修改本地数据库脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql
- 在 dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 中增加 WHERE 操作类别编号 = 6。
- 在 dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 中同步增加 WHERE 操作类别编号 = 6。
- 最大值来源仍为 FROM [dbo].[View_生产工时视图全部],不是筛选后的报表数据。
- 分组仍只使用 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120)。
3. 在重新应用数据库脚本前,备份目标库当前过程定义:
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_taskstart_reportqty_type6_20260627_144642.sql
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_taskstart_reportqty_type6_20260627_144642.sql
4. 重新执行 SQL 脚本到目标库,只执行 ALTER PROCEDURE未修改业务表数据。
5. 提取两个过程的 TaskStart报工数量 CTE 进行验证,结果如下:
- dbo.工时统计_作业者工时_查询来源为 [dbo].[View_生产工时视图全部],包含 WHERE 操作类别编号 = 6不包含 筛选明细。
- dbo.工时统计_作业者工时_查询_导出来源为 [dbo].[View_生产工时视图全部],包含 WHERE 操作类别编号 = 6不包含 筛选明细。
6. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次调整未引入编译错误。
### 修改结果
- 作业者工时查询和导出的报工数量最大值口径已更新为:
- 直接从 [dbo].[View_生产工时视图全部] 取数;
- 只取 操作类别编号 = 6 的记录;
- 同一 TaskAID、同一开始时间取最大 操作数值 口径后的报工数量;
- 不使用报表查询条件过滤最大值来源。
### 验证结果
- 字段确认:通过。
- 目标库过程更新:通过。
- CTE 来源和条件验证:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 15:02:19 修正作业者工时报工数量撤销操作类别过滤并增加装配置零
### 用户反馈
- 之前增加 操作类别编号 = 6 不符合要求。
- 正确口径:直接查 [View_生产工时视图全部],同一个 TaskAID、同一个开始时间取最大值最大值来源没有任何过滤条件。
- 另增判断:指派对象包含“装配”时,报工数量为 0。
### 执行过程
1. 重新确认需求后,修正本地 SQL 脚本 db_backups/update_timesheet_operator_report_qty_task_start_20260627.sql。
2. 从 dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 中移除 WHERE 操作类别编号 = 6。
3. 从 dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 中移除 WHERE 操作类别编号 = 6。
4. 保留最大值来源为全量 [dbo].[View_生产工时视图全部],并只按 TaskAID, CONVERT(VARCHAR(19), 开始时间, 120) 分组。
5. 在查询过程 报工明细 中增加判断WHEN ISNULL(b.工位名称, '') LIKE '%装配%' THEN 0否则使用全量视图按 TaskAID+开始时间取到的最大报工数量。
6. 在导出过程的明细查询中同步增加同样的装配置零判断,保持页面和导出口径一致。
7. 检查本地脚本,确认没有残留 操作类别编号 = 6并确认查询和导出两处均包含装配置零判断。
8. 在重新应用数据库脚本前,备份目标库当前过程定义:
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_before_assembly_zero_reportqty_20260627_145839.sql
- db_backups/timesheet_operator_reportqty_backups/工时统计_作业者工时_查询_导出_before_assembly_zero_reportqty_20260627_145839.sql
9. 重新执行 SQL 脚本到目标库 192.168.2.92 / YL_MESDB只执行 ALTER PROCEDURE未修改业务表数据。
10. 数据库验证:
- dbo.工时统计_作业者工时_查询 的 TaskStart报工数量 CTE 来源为 [dbo].[View_生产工时视图全部],无 WHERE不包含 操作类别编号,包含装配置零判断。
- dbo.工时统计_作业者工时_查询_导出 的 TaskStart报工数量 CTE 来源为 [dbo].[View_生产工时视图全部],无 WHERE不包含 操作类别编号,包含装配置零判断。
11. 同步修改前端兜底逻辑 src/views/ProductionManagement/Timesheet/index.vue
- 增加 isAssemblyAssignee 方法,识别 指派对象/工位名称/assignee 是否包含“装配”。
- 在 getTaskStartReportQty 中,如果为装配指派对象,直接返回 ,避免前端按同一 TaskAID+开始时间重算时把非装配最大值覆盖到装配行。
12. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。
### 修改结果
- 作业者工时查询和导出的最大值来源恢复为全量 [dbo].[View_生产工时视图全部],没有任何过滤条件。
- 最大值分组键仍为 TaskAID + 开始时间。
- 指派对象包含“装配”时,页面、汇总和导出报工数量均置为 0。
- 前端兜底逻辑已同步,避免页面端重算覆盖数据库装配置零规则。
### 验证结果
- SQL 脚本检查:通过。
- 目标库过程更新:通过。
- CTE 无过滤和装配置零判断验证:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 15:26:30 根据工时查询界面文档修改工时查询页面
### 用户需求
- 根据 work 下的 工时查询界面.docx 修改工时查询页面。
- 修改后创建对应路径并把文档移入。
- 按要求追加中文执行日志,不记录数据库密码。
### 文档内容提取
- 文档名称work/工时查询界面.docx。
- 文档要求:
- 修改三级数据,由原三级汇总改成三级明细数据。
- 页面字段按截图展示:任务描述、日期、班次、生产订单号、报工类型、报工数量、工位、工时、程序时间、单件工时、工艺工时等。
- 报工类型字段:辅助 改成 调机,报工 改成 正常。
- 报工数量:相同 TaskAID、相同开始时间取最大值。
- 指派对象包含“装配”时,报工数量为 0。
- 程序时间没有,暂时为空。
- 单件工时按 工时(分钟)/报工数量 计算;报工数量为 0 时取工艺工时。
- 工艺工时维持原样。
- 增加字段“操作人”,取相同 TaskAID、相同开始时间的操作人拼接且去掉加工工时大于 0 的数据。
- 白班/夜班根据操作描述包含“白班”或“夜班”判断。
### 执行过程
1. 查找并读取文档,确认文档路径为 work/工时查询界面.docx并提取文档正文和截图。
2. 定位工时查询页面为 src/views/ProductionManagement/Workhours/index.vue当前调用存储过程 生产管理_工时查询_工序工时_查询。
3. 连接目标库 192.168.2.92 / YL_MESDB读取当前 dbo.生产管理_工时查询_工序工时_查询 定义,确认旧过程的三级数据为按 TaskAID、日期、班次汇总。
4. 查询数据库字段,确认 [dbo].[View_生产工时视图] 和 [dbo].[View_生产工时视图全部] 存在 TaskAID、开始时间、结束时间、操作内容、操作类别、操作描述、操作人、加工工时、操作数值、订单号、订单行号、订单合同号、产品编码、产品名称、工序名称、工位名称 等字段。
5. 新增数据库脚本 db_backups/update_workhours_query_detail_20260627.sql
- 更新 dbo.生产管理_工时查询_工序工时_查询。
- 基础数据仍按页面查询条件取报工/辅助结束且加工工时大于 0 的记录。
- TaskStart报工数量 从 [dbo].[View_生产工时视图全部] 按 TaskAID + 开始时间 全量取最大值。
- 指派对象/工位名称包含“装配”时,报工数量置 0。
- 三级返回明细数据,不再返回班次汇总。
- 操作人使用相同 TaskAID + 开始时间 且 加工工时 <= 0 的记录去重拼接。
- 班次根据相同 TaskAID + 开始时间 的操作描述是否包含“白班”或“夜班”判断。
- 程序时间返回空。
- 单件工时按加工工时分钟/报工数量计算;报工数量为 0 时取工艺工时。
6. 备份目标库旧过程到 db_backups/workhours_query_backups/生产管理_工时查询_工序工时_查询_before_detail_query_20260627_152142.sql。
7. 第一次应用后用样本执行发现 XML 拼接操作人受 QUOTED_IDENTIFIER 设置影响,因此将脚本改为 SET QUOTED_IDENTIFIER ON并把操作人拼接改成 SQL Server 2019 支持的 STRING_AGG。
8. 重新执行脚本到目标库,只更新存储过程定义,未修改业务表数据。
9. 执行 EXEC dbo.[生产管理_工时查询_工序工时_查询] @数据条数 = 5 验证,返回 15 行,三级明细包含 operatorNames、productionOrderNo、
eportType、
eportQty、station、workHours、pieceWorkHours、processWorkHours 等字段。
10. 修改前端 src/views/ProductionManagement/Workhours/index.vue
- 表格列调整为文档要求的工时记录结构。
- 增加操作人、生产订单号、报工类型、工位、工时、程序时间、单件工时等列。
- 报工类型前端兜底映射:包含“辅助”显示“调机”,包含“报工”显示“正常”。
- 第三级树节点改为明细行展示,不再按班次汇总展示。
- 底部汇总改为总工时。
11. 创建目录 work/ProductionManagement/Workhours并将 work/工时查询界面.docx 移动到 work/ProductionManagement/Workhours/工时查询界面.docx。
12. 清理文档截图临时解压目录 work/.docx_extract_工时查询界面。
13. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。
### 修改结果
- 工时查询页面已按文档改成工时记录形式。
- 三级数据已由班次汇总改为明细数据。
- 数据库过程和前端页面字段已同步。
- 文档已移动到 work/ProductionManagement/Workhours/工时查询界面.docx。
### 验证结果
- 存储过程脚本应用:通过。
- 存储过程样本执行:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 16:34:11 根据新增结算工时页面文档新增结算工时页面
### 用户需求
- 根据 work 下的 新增结算工时页面.docx 新增结算工时页面。
- 修改后创建对应路径并把文档移入。
- 按要求追加中文执行日志,不记录数据库密码。
### 文档内容提取
- 文档名称work/新增结算工时页面.docx。
- 文档要求:
- 新增结算工时页面,任务描述参考工时查询页面。
- 根据订单编号(生产订单号)和工位(指派对象)分组。
- 统计设备工时,条件为加工工时 > 0。
- 报工工时:上述设备工时中操作类别等于报工的工时。
- 主辅工时:上述设备工时中操作类别等于辅助结束的工时。
- 完成数分为报工完成数和辅助完成数,对应上述工时记录的操作数值求和。
- 增加操作人字段:相同 TaskAID、相同开始时间的操作人拼接且去掉加工工时大于 0 的数据。
### 执行过程
1. 查找并读取文档,确认路径为 work/新增结算工时页面.docx。
2. 检查现有生产管理页面和路由机制,确认前端使用动态菜单路径加载 src/views 下组件;新增页面放置在 src/views/ProductionManagement/SettlementWorkhours/index.vue。
3. 新增数据库脚本 db_backups/create_settlement_workhours_query_20260627.sql
- 创建/更新 dbo.生产管理_结算工时_查询。
- 基础数据来源为 [dbo].[View_生产工时视图]。
- 查询条件包含合同号、产品编码、订单号、工位、开始日期、结束日期、数据条数。
- 只统计 加工工时 > 0 且操作内容/操作类别为 报工 或 辅助结束 的设备工时。
- 汇总层按 订单号 + 工位名称 分组。
- 报工工时 为报工记录加工工时小时汇总。
- 主辅工时 为辅助结束记录加工工时小时汇总。
- 报工完成数、辅助完成数 分别按对应操作类型的 操作数值 汇总。
- 明细层返回操作人、日期、工序、操作类别、完成数、工时、开始/结束时间、TaskAID。
- 操作人使用 [dbo].[View_生产工时视图全部] 中相同 TaskAID + 开始时间 且 加工工时 <= 0 的记录去重后用 STRING_AGG 拼接。
4. 执行数据库脚本到目标库 192.168.2.92 / YL_MESDB只创建/更新存储过程,未修改业务表数据。
5. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 10返回 18 行,包含汇总层和明细层数据。
6. 新增前端页面 src/views/ProductionManagement/SettlementWorkhours/index.vue
- 提供合同号、产品编码、生产订单号、工位、数据条数、开始/结束日期查询条件。
- 调用 生产管理_结算工时_查询。
- 使用树形表格展示订单+工位汇总,展开查看明细。
- 汇总列包含报工工时、主辅工时、报工完成数、辅助完成数、合计工时。
- 明细列包含操作人、日期、工序名称、操作类别、完成数、工时、开始时间、结束时间。
- 底部显示报工工时、主辅工时、合计工时汇总。
7. 创建目录 work/ProductionManagement/SettlementWorkhours并将 work/新增结算工时页面.docx 移动到 work/ProductionManagement/SettlementWorkhours/新增结算工时页面.docx。
8. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次新增未引入编译错误。
### 修改结果
- 新增结算工时页面src/views/ProductionManagement/SettlementWorkhours/index.vue。
- 新增数据库脚本并已应用db_backups/create_settlement_workhours_query_20260627.sql。
- 文档已移动到 work/ProductionManagement/SettlementWorkhours/新增结算工时页面.docx。
### 验证结果
- 存储过程脚本应用:通过。
- 存储过程样本执行:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 16:42:14 补新增结算工时页面菜单记录
### 用户反馈
- 新增结算工时页面后,页面上看不到菜单。
- 用户怀疑 [dbo].[登录基础数据_二级菜单] 没有增加记录。
### 执行过程
1. 检查目标库 192.168.2.92 / YL_MESDB 的 [dbo].[登录基础数据_二级菜单] 表结构。
2. 确认字段包括 IDD、id、pid、path、componet、
edirect、
ame、 itle、icon、账号代码、模块代码、是否启用、AddData、DeleteData、EditData、SearchData。
3. 注意到字段名是 componet不是 component。
4. 查询现有工时相关菜单,确认:
- 工时查询 菜单存在id = 166pid = 3路径为 Workhours/index组件为 /ProductionManagement/Workhours/index。
- 工时查询 当前只配置给账号代码 1 和 2010。
- 结算工时 菜单此前不存在。
5. 查询 IDD 属性,确认 IDD 是自增列;当前最大菜单 id 为 230。
6. 新增菜单脚本 db_backups/add_settlement_workhours_menu_20260627.sql
- 新菜单 id 使用 231。
- pid = 3挂在生产管理下。
- path = 'SettlementWorkhours/index'。
- componet = '/ProductionManagement/SettlementWorkhours/index'。
-
ame = 'SettlementWorkhours'。
- itle = '结算工时'。
- icon 复用工时查询图标,兜底为 DimensionsSummaryReport。
- 权限按现有 工时查询 复制,插入账号代码 1 和 2010。
- 脚本带 NOT EXISTS 判断,避免重复插入同账号菜单。
7. 执行菜单脚本到目标库。
8. 查询验证结果:
- IDD = 2754账号代码 1菜单 结算工时 已存在。
- IDD = 2755账号代码 2010菜单 结算工时 已存在。
- 两条记录均指向 /ProductionManagement/SettlementWorkhours/index。
### 修改结果
- 已向 [dbo].[登录基础数据_二级菜单] 补录 结算工时 菜单。
- 菜单权限与现有 工时查询 保持一致,仅账号代码 1 和 2010 可见。
- 本次仅修改数据库菜单记录和新增脚本,不涉及前端代码变更。
### 验证结果
- 菜单表结构确认:通过。
- 菜单脚本执行:通过。
- 结算工时 菜单记录查询:通过。
## 2026-06-27 17:05:00 修正结算工时页面层级和已结算口径
### 用户反馈
- 结算工时页面缺少任务描述、装夹时间、程序时间。
- 页面存在多余字段,需要去掉。
- 数据层级应为 物料汇总 -> 生产订单号+工位汇总,不需要明细层。
- 只要已经结算的数据,即 [YL_MESDB].[dbo].[MES_接口_生产计划] 中 单据状态 IS NULL 的数据。
### 执行过程
1. 重新确认需求后,调整结算工时页面和存储过程为两级汇总,不再返回明细层。
2. 查询字段确认:
- [dbo].[MES_接口_生产计划] 包含 AID、订单编号、物料编号、物料描述、单据状态。
- [dbo].[View_生产工时视图] 和 [dbo].[View_生产工时视图全部] 包含 TaskAID、订单号、产品编码、产品名称、工位名称、加工工时、操作内容、操作类别、操作数值、开始时间、操作人。
- [dbo].[车间生产管理工艺_零件生产工艺_工艺库] 包含 准备工时、标准工时,本次用 准备工时 作为装夹时间,用 标准工时 作为程序时间。
3. 重写 db_backups/create_settlement_workhours_query_20260627.sql
- dbo.生产管理_结算工时_查询 先从 [dbo].[MES_接口_生产计划] 取 单据状态 IS NULL 的结算任务。
- 工时数据通过 p.AID = v.TaskAID 关联到结算任务。
- 只统计 加工工时 > 0且操作内容/操作类别为 报工 或 辅助结束 的设备工时。
- 汇总层级改为两级:一级按 物料编号 + 物料描述 汇总,二级按 生产订单号 + 工位名称 汇总。
- 输出字段包含任务描述、生产订单号、工位、报工工时、主辅工时、报工完成数、辅助完成数、合计工时、装夹时间、程序时间、操作人。
- 去掉明细字段:日期、工序名称、操作类别、完成数、单条工时、开始时间、结束时间等。
4. 执行脚本到目标库 192.168.2.92 / YL_MESDB只更新存储过程定义未修改业务表数据。
5. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 20返回 6 行,层级为 Level=1 物料汇总和 Level=2 订单+工位汇总。
6. 使用 sp_describe_first_result_set 验证结果集字段,确认包含 materialCode、materialDesc、 askDescription、productionOrderNo、station、
eportWorkHours、uxiliaryWorkHours、
eportFinishQty、uxiliaryFinishQty、 otalWorkHours、clampingTime、programTime、operatorNames、
ecordCount。
7. 重写前端 src/views/ProductionManagement/SettlementWorkhours/index.vue
- 查询条件精简为生产订单号、物料编码、工位、数据条数、开始日期、结束日期。
- 表格改为两级树:一级物料汇总,二级生产订单号+工位汇总。
- 补回任务描述、装夹时间、程序时间列。
- 删除多余明细列:合同号、产品编码、产品名称、日期、工序、操作类别、完成数、单条工时、开始时间、结束时间。
- 底部汇总保留报工工时、主辅工时、合计工时。
8. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。
### 修改结果
- 结算工时页面已改为 物料汇总 -> 生产订单号+工位汇总 两级结构。
- 页面已补回任务描述、装夹时间、程序时间。
- 页面多余明细字段已去掉。
- 数据只取 [dbo].[MES_接口_生产计划] 中 单据状态 IS NULL 的结算任务。
### 验证结果
- 目标库存储过程更新:通过。
- 存储过程样本执行:通过。
- 结果集字段验证:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 17:28:58 修正结算工时程序时间装夹时间和单件工时口径
### 用户反馈
- 程序时间目前没有,默认 0。
- 装夹时间 = 【报工工时(汇总) - 程序时间 * 完工数】 / 完工数。
- 结算报工单件工时 = 报工工时 / 报工完成数。
- 结算辅助单件工时 = 主辅工时 / 辅助完成数。
- 任务描述没了,需要加上。
### 执行过程
1. 修改 db_backups/create_settlement_workhours_query_20260627.sql。
2. 从结算工时存储过程里移除工艺库 准备工时/标准工时 作为装夹时间、程序时间的取值。
3. 将程序时间固定输出为 。
4. 将装夹时间改为公式CASE WHEN 报工完成数 > 0 THEN (报工工时 - 0 * 报工完成数) / 报工完成数 ELSE 0 END。
5. 新增输出字段:
- settlementReportPieceHoursCASE WHEN 报工完成数 > 0 THEN 报工工时 / 报工完成数 ELSE 0 END。
- settlementAuxiliaryPieceHoursCASE WHEN 辅助完成数 > 0 THEN 主辅工时 / 辅助完成数 ELSE 0 END。
6. 保留并输出 askDescription由 物料描述 + ' ' + 物料编号 组成,一级和二级都返回该字段。
7. 修改前端 src/views/ProductionManagement/SettlementWorkhours/index.vue
- 二级行也显示任务描述。
- 新增“结算报工单件工时”列。
- 新增“结算辅助单件工时”列。
- 绑定新字段 settlementReportPieceHours、settlementAuxiliaryPieceHours。
8. 执行 SQL 脚本到目标库 192.168.2.92 / YL_MESDB只更新存储过程定义未修改业务表数据。
9. 执行样本验证 EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 20
- 返回任务描述。
- 程序时间为 0。
- 装夹时间按公式返回。
- 返回结算报工单件工时和结算辅助单件工时。
10. 执行
pm run build前端构建通过。输出仍有既有资源体积过大和 Browserslist 数据过期警告,本次修正未引入编译错误。
### 修改结果
- 程序时间默认 0。
- 装夹时间改为按汇总公式计算。
- 新增结算报工单件工时、结算辅助单件工时。
- 任务描述在物料汇总层和生产订单号+工位汇总层均显示。
### 验证结果
- 目标库存储过程更新:通过。
- 存储过程样本执行:通过。
- 前端生产构建
pm run build通过仅有既有警告。
## 2026-06-27 17:39:00 修正结算工时二级任务描述和查询性能
### 用户反馈
- 结算工时页面红框位置的二级任务描述需要拼接工序名称和工序顺序。
- 页面打开和查询太慢,需要优化。
### 执行过程
1. 查看当前结算工时页面 `src/views/ProductionManagement/SettlementWorkhours/index.vue`,确认页面只展示接口返回的 `taskDescription`,红框位置对应二级“生产订单号+工位”汇总行。
2. 查看当前 SQL 备份脚本 `db_backups/create_settlement_workhours_query_20260627.sql`,确认任务描述由 `物料描述 + 物料编号` 组成,未带工序名称和订单行号。
3. 修改 `db_backups/create_settlement_workhours_query_20260627.sql`
- 在结算明细中保留 `工序名称``订单行号`
- 在二级汇总中增加 `MAX(工序名称) AS 工序名称``MAX(订单行号) AS 工序顺序`
- 二级 `taskDescription` 改为:`物料描述 + 物料编号 + 工序名称 + ' 序' + 工序顺序`
- 一级物料汇总任务描述保持 `物料描述 + 物料编号`
4. 优化 SQL 查询性能:
- 将原来按每个明细键反复查询 `[dbo].[View_生产工时视图全部]` 的操作人相关子查询,改为 `明细键 -> 操作人明细 -> 操作人拼接` 的统一聚合。
- 将订单工位汇总里的操作人相关子查询,改为先按订单工位聚合操作人,再回连到二级汇总,避免汇总行逐行重复扫描。
- 连接开始时间时使用秒级时间范围匹配,避免对大视图每行做字符串转换匹配。
5. 修改前端页面 `src/views/ProductionManagement/SettlementWorkhours/index.vue`
- 将“任务描述”列最小宽度从 280 调整为 380避免追加工序名称和序号后显示过窄。
6. 第一次执行 SQL 脚本时发现 `sqlcmd -i` 未按 UTF-8 解释中文脚本,数据库误建了一个乱码过程,正式中文过程仍是旧定义。
7. 使用 `sqlcmd -f 65001` 重新执行 UTF-8 脚本到 `192.168.2.92 / YL_MESDB`,正式过程 `dbo.生产管理_结算工时_查询` 更新成功。
8. 确认正式过程定义中已包含 `工序顺序`
9. 删除本次因编码误建的乱码过程,避免后续排查混淆。
10. 执行抽样验证:
- `软管总成 214-20411-30-12x1SN-12x4000 电火花 序5`
- `软管总成 214-20411-30-12x1SN-12x4000 打压检测 序4`
- 同类二级行已能显示工序名称和工序顺序。
11. 对同样 `@数据条数 = 30` 的抽查计时:
- 优化前约 17161 ms。
- 优化后约 1986 ms。
12. 执行 `npm run build`,前端构建通过。输出仍有项目既有的资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。
### 修改结果
- 结算工时页面二级任务描述已拼接工序名称和工序顺序。
- SQL 操作人拼接和订单工位操作人汇总已优化,减少重复扫描。
- 任务描述列宽已加宽。
- 数据库存储过程已同步更新到目标库。
### 验证结果
- 目标库存储过程更新:通过。
- 乱码误建过程清理:通过。
- 样本查询内容验证:通过。
- 样本查询耗时验证:从约 17.1 秒降到约 2.0 秒。
- 前端生产构建 `npm run build`:通过,仅有既有警告。
## 2026-06-27 17:46:00 修正结算工时操作人重复拼接
### 用户反馈
- 结算工时页面的操作人拼接存在重复姓名,需要去重。
### 执行过程
1. 查看 `db_backups/create_settlement_workhours_query_20260627.sql` 中当前操作人拼接逻辑。
2. 确认原逻辑已经对整段 `操作人` 字符串做了 `DISTINCT`,但在订单工位汇总时,如果明细中已有 `张三,李四` 这类拼接字符串,再和其他明细拼接,会出现单个人名重复。
3. 修改 `操作人明细`
- 对源字段 `v2.操作人` 先替换中文逗号、顿号为英文逗号。
- 使用 `STRING_SPLIT` 拆成单个姓名。
- 去掉姓名前后空格。
- 过滤空姓名。
- 再按 `TaskAID + 开始时间 + 操作人` 去重后重新 `STRING_AGG`
4. 修改 `订单工位操作人`
-`结算明细.操作人` 再次按逗号拆分成单个姓名。
-`物料编号 + 订单号 + 工位名称 + 操作人` 去重。
- 再重新拼接为最终 `operatorNames`
5. 使用 `sqlcmd -f 65001` 将脚本同步到目标库 `192.168.2.92 / YL_MESDB`,只更新存储过程定义。
6. 执行抽样验证 `EXEC dbo.[生产管理_结算工时_查询] @数据条数 = 100`
- 将返回的 `operatorNames` 再拆分统计重复姓名。
- 未查出重复姓名行。
- 样例结果如 `李盛发,王宝昌,魏文海,普1,孙广义`,同一行内姓名不重复。
7. 执行 `npm run build`,前端构建通过。输出仍有项目既有的资源体积过大和 Browserslist 数据过期警告,本次修改未引入编译错误。
### 修改结果
- 操作人拼接已改为按单个姓名去重。
- 支持处理中文逗号、顿号和英文逗号分隔的姓名。
- 数据库存储过程已同步更新到目标库。
### 验证结果
- 目标库存储过程更新:通过。
- 重复姓名抽样检查:通过。
- 前端生产构建 `npm run build`:通过,仅有既有警告。
## 2026-06-29 设备信息维护页面修改
### 用户需求
- 根据 `doc/修改设备信息维护.docx` 修改设备信息维护页面。
- 修改后在 `work` 下创建对应路径,并复制原始文档。
- 在对应路径下新增或修改 `01-项目功能内容``02-项目程序开发详细步骤``03-推进台账``04-任务矩阵``05-验收证据``06-决策记录`,并增加 README 索引。
- 将完整执行过程追加到 `gptlog-process/gpdlog.md`,日志使用中文。
### 执行过程
1. 查看 `doc` 目录,确认存在 `doc/修改设备信息维护.docx`
2. 使用 PowerShell 解析 docx 中的 `word/document.xml`,提取需求文本:新增公司编码(财务)、设备信息、使用部门、入账日期、单位、数量、状态、维修记录、维保记录、工位绑定、主要设备、设备标准开机工时、特种设备、证书有效期至;生产用名复用设备名称,规格/型号复用设备型号公司编码必填且不可修改工位绑定为工位管理数据多选证书有效期过期红色置顶30 天内黄色靠前。
3. 定位目标页面为 `src/views/DeviceManagement/DeviceInformation/index.vue`
4. 确认工位管理页面 `src/views/SystemMaintenance/WorkstationManagement/index.vue` 使用 `MES_登录_工位与名称_查询` 获取工位数据。
5. 初次用 Windows 集成认证连接 SQL Server 失败,随后根据用户提供的数据库地址、账号和密码,用数据库账号连接 `192.168.2.92 / YL_MESDB` 成功。日志和文档中不记录明文密码。
6. 查询 `dbo.基础数据_设备工位点检表`,确认原表只有旧字段:设备流水号、设备名称、设备型号、制造厂家、工位号、点检表类型、操作日期、保养人员代码、监督人员代码、设备类型。
7. 查询旧存储过程定义,确认 `设备管理_设备信息_查询/增加/编辑` 只处理设备名称、设备型号、设备类型。
8. 重写 `src/views/DeviceManagement/DeviceInformation/index.vue`:表格增加需求字段列;新增/编辑弹窗增加需求字段;公司编码新增必填、编辑禁用;工位绑定使用多选下拉,来源为 `MES_登录_工位与名称_查询`;主要设备、特种设备使用“是/否”下拉;证书有效期至使用日期选择;增加当前页证书有效期排序和行背景色;固定操作列,适配横向多列表格。
9. 新增 `db_backups/update_device_information_maintenance_20260629.sql`:使用 `COL_LENGTH` 可重复执行地增加 14 个新字段;更新 `设备管理_设备信息_查询`,返回新字段并按证书有效期预警排序;更新 `设备管理_设备信息_增加`,写入新字段并校验公司编码不能为空;更新 `设备管理_设备信息_编辑`,更新新字段但不更新公司编码。
10. 使用 `sqlcmd -f 65001` 执行增量脚本到目标库,执行成功。
11. 验证数据库字段:`dbo.基础数据_设备工位点检表` 已存在公司编码、设备信息、使用部门、入账日期、单位、数量、状态、维修记录、维保记录、工位绑定、主要设备、设备标准开机工时、特种设备、证书有效期至。
12. 验证存储过程参数:`设备管理_设备信息_增加` 已包含新增字段参数;`设备管理_设备信息_编辑` 已包含新增字段参数和设备流水号;`设备管理_设备信息_查询` 保持旧查询参数兼容。
13. 执行 `EXEC dbo.[设备管理_设备信息_查询]`,过程执行无错误。
14. 第一次执行 `npm run build` 因 124 秒超时未得到结果;随后使用更长超时时间重跑。
15. 第二次执行 `npm run build` 成功webpack 编译通过,仅有项目既有资源体积过大和 Browserslist 数据过期警告。
16. 创建 `work/DeviceManagement/DeviceInformation`
17. 复制 `doc/修改设备信息维护.docx``work/DeviceManagement/DeviceInformation/修改设备信息维护.docx`
18. 在工作目录新增 `README.md``01-项目功能内容.md``02-项目程序开发详细步骤.md``03-推进台账.md``04-任务矩阵.md``05-验收证据.md``06-决策记录.md`
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `db_backups/update_device_information_maintenance_20260629.sql`
- `work/DeviceManagement/DeviceInformation/修改设备信息维护.docx`
- `work/DeviceManagement/DeviceInformation/README.md`
- `work/DeviceManagement/DeviceInformation/01-项目功能内容.md`
- `work/DeviceManagement/DeviceInformation/02-项目程序开发详细步骤.md`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `work/DeviceManagement/DeviceInformation/05-验收证据.md`
- `work/DeviceManagement/DeviceInformation/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 数据库连接:通过。
- 表字段新增:通过。
- 存储过程参数更新:通过。
- 查询过程执行:通过。
- 前端生产构建 `npm run build`:通过,仅有既有警告。
### 下一步
- 登录真实系统页面做人工验收:新增设备、编辑设备、工位多选、公司编码只读、证书有效期颜色和排序。
- 如现场要求历史设备补齐公司编码,需要补充历史数据治理脚本和验收规则。
## 2026-06-29 设备信息维护取消设备类型必填
### 用户需求
- 去掉设备类型必填修改。
### 执行过程
1. 打开 `src/views/DeviceManagement/DeviceInformation/index.vue`
2. 在表单校验 `rules` 中移除 `设备类型` 必填规则。
3. 保留公司编码新增必填和生产用名必填。
4. 更新 `work/DeviceManagement/DeviceInformation/03-推进台账.md`,追加第 2 轮记录。
5. 更新 `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`,新增 `DI-008A` 任务记录。
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 代码层确认设备类型不再配置必填校验。
## 2026-06-29 修复设备信息维护日期编辑报错
### 用户反馈
- 证书有效期和入账日期编辑时报错,无法编辑修改。
### 执行过程
1. 查询目标库 `dbo.基础数据_设备工位点检表`,确认测试数据中 `入账日期``证书有效期至` 已有日期值。
2. 查看当前前端 `src/views/DeviceManagement/DeviceInformation/index.vue`,确认两个日期字段由 `el-date-picker``yyyy-MM-dd` 字符串提交。
3. 查看当前 `设备管理_设备信息_编辑` 存储过程,确认 `@入账日期``@证书有效期至` 定义为 `date` 类型。
4. 判断问题原因:通用前端网关提交日期和空值时容易与 SQL Server `date` 参数转换冲突,尤其编辑清空日期时会报错。
5. 修改前端页面:新增 `dateParam` 方法,两个日期字段提交时传 `yyyy-MM-dd` 字符串或空字符串,不再传 `null`
6. 新增数据库修复脚本 `db_backups/fix_device_information_date_edit_20260629.sql`
7. 修复脚本调整 `设备管理_设备信息_增加/编辑`
- `@入账日期` 改为 `nvarchar(50)`
- `@证书有效期至` 改为 `nvarchar(50)`
- 写入表时使用 `TRY_CONVERT(date, NULLIF(@入账日期, N''))`
- 写入表时使用 `TRY_CONVERT(date, NULLIF(@证书有效期至, N''))`
8. 使用 `sqlcmd -f 65001` 执行修复脚本到 `192.168.2.92 / YL_MESDB`,执行成功。
9. 查询 `sys.parameters`,确认 `设备管理_设备信息_增加/编辑` 的两个日期参数已变更为 `nvarchar`
10. 直接执行 `设备管理_设备信息_编辑` 测试正常日期:传入 `2026-07-01``2026-07-31`,返回 `result=1`,数据库日期更新成功。
11. 直接执行 `设备管理_设备信息_编辑` 测试清空日期:传入空字符串,返回 `result=1`,数据库日期字段保存为 `NULL`
12. 更新工作目录文档:推进台账、任务矩阵、验收证据。
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `db_backups/fix_device_information_date_edit_20260629.sql`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `work/DeviceManagement/DeviceInformation/05-验收证据.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 修复 SQL 执行:通过。
- 日期参数类型验证:通过,已为 `nvarchar`
- 正常日期编辑验证:通过。
- 清空日期编辑验证:通过,日期保存为 `NULL`
### 补充验证
- 执行 `npm run build`,前端生产构建通过。
- webpack compiled with 2 warnings仍为项目既有资源体积过大和 Browserslist/caniuse-lite 数据过期警告。
## 2026-06-29 修复设备信息维护日期控件点击报错
### 用户反馈
- 点击修改入账日期或证书有效期时报错:`TypeError: date.getHours is not a function`
- 报错来自 Element UI 日期组件 `DateTable`,说明日期控件内部拿到的不是 `Date` 对象。
### 执行过程
1. 查看 `src/views/DeviceManagement/DeviceInformation/index.vue`,确认两个 `el-date-picker` 使用了 `value-format="yyyy-MM-dd"`,并且编辑回填时给表单日期字段赋值为字符串。
2. 判断原因Element UI 的日期面板点击逻辑需要 `Date` 对象参与内部时间修改,当前字符串值导致 `date.getHours is not a function`
3. 修改两个日期控件:去掉 `value-format="yyyy-MM-dd"`,让 `v-model` 保持 `Date` 对象。
4. 修改编辑回填:`入账日期``证书有效期至` 改为调用 `parseDateValue`,将数据库日期转换为本地 `Date` 对象。
5. 保留提交兼容:`dateParam` 在提交前将 `Date` 对象格式化成 `yyyy-MM-dd` 字符串,继续兼容已修复的数据库过程。
6. 执行 `npm run build`,前端构建通过。
7. 更新工作目录中的推进台账、任务矩阵和验收证据。
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `work/DeviceManagement/DeviceInformation/05-验收证据.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 两个日期控件已移除 `value-format`
- 编辑回填日期已转换为 `Date` 对象。
- 提交前仍格式化为 `yyyy-MM-dd` 字符串。
- `npm run build` 通过,仅有项目既有资源体积和 Browserslist 过期警告。
## 2026-06-29 修复设备信息维护编辑弹窗日期不回填
### 用户反馈
- 数据库有值,列表也有值,只是点击编辑时 `入账日期``证书有效期至` 读不到,显示为空。
### 执行过程
1. 查询数据库 `dbo.基础数据_设备工位点检表`,发现上一轮为了验证清空日期,测试记录 `设备流水号=1` 的两个日期被置为 `NULL`
2. 根据用户说明数据库和列表实际有值,判断问题仍集中在前端 `handleEdit` 日期回填。
3. 恢复测试记录日期:`入账日期=2026-07-01``证书有效期至=2026-07-31`
4. 增强 `formatDate`,兼容 `yyyy-MM-dd``yyyy-MM-dd HH:mm:ss``yyyy/MM/dd``/Date(...)` 等后端可能返回格式。
5. 增强 `parseDateValue`,支持直接传入 `Date` 对象,也支持通过 `formatDate` 解析字符串后生成本地 `Date` 对象。
6. 将表单默认日期从空字符串调整为 `null`,符合 Element UI 日期控件空值约定。
7. 修改编辑回填逻辑:不再整体替换 `this.form`,改为逐字段 `$set`,避免 Element Form 字段状态缓存导致日期控件未刷新。
8.`dialogFormVisible = true` 后通过 `$nextTick` 再次设置 `入账日期``证书有效期至`,防止被 `resetFields` 或弹窗初始化覆盖。
9. 使用 Node 脚本验证多种日期格式均能解析为有效 `Date`
10. 执行 `npm run build`,前端构建通过,仅有既有资源体积和 Browserslist 过期警告。
11. 确认本地 dev server 已运行在 `https://127.0.0.1:1997/`。命令行访问被自签名证书拦截,浏览器打开时需要允许证书后测试。
12. 更新工作目录中的推进台账、任务矩阵和验收证据。
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `work/DeviceManagement/DeviceInformation/05-验收证据.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 数据库测试记录日期恢复:通过。
- 本地日期解析函数测试:通过。
- 前端生产构建 `npm run build`:通过,仅有既有警告。
- 本地页面地址:`https://127.0.0.1:1997/`
## 2026-06-29 新增设备名称字段并导入设备信息 Excel
### 用户反馈
- 用户要求新增字段“设备名称”。
- 用户要求将 `doc` 下的设备信息数据插入数据库。
- 用户补充说明数据文件为 `设备信息.xlsx`
- 用户要求继续执行。
### 执行过程
1. 检查 `doc/设备信息.xlsx`,确认 Sheet1 表头为:`名称``公司编码``生产用名``型号/规格``设备信息``使用部门``入账日期``单位``数量``状态`
2. 读取 Excel 数据,确认有效数据共 89 行。
3. 查询目标数据库 `192.168.2.92 / YL_MESDB`,确认 `dbo.基础数据_设备工位点检表` 当时为空。
4. 明确字段映射Excel `名称` 保存到新增数据库字段 `名称`页面显示为“设备名称”Excel `生产用名` 保存到原字段 `设备名称`,页面显示为“生产用名”。
5. 修改 `src/views/DeviceManagement/DeviceInformation/index.vue`
- 列表新增“设备名称”列,绑定 `名称`
- 新增/编辑弹窗新增“设备名称”输入框,绑定 `form.名称`
- `emptyForm` 增加 `名称`
- 编辑回填增加 `名称`
- 新增/编辑提交参数增加 `名称`
6. 生成 `db_backups/add_device_name_and_import_excel_20260629.sql`
-`dbo.基础数据_设备工位点检表` 不存在 `名称` 字段时新增该字段。
- 调整 `设备管理_设备信息_增加``设备管理_设备信息_编辑`,增加 `@名称` 参数。
- 使用 `MERGE``公司编码` 导入或更新 Excel 数据,避免重复导入生成重复记录。
7. 执行导入脚本,数据库导入后设备信息总数为 89。
8. 抽样检查发现 Excel 日期对象导入后部分 `入账日期` 早一天,例如 `1/1/07` 被保存为 `2006-12-31`
9. 根据 Excel 单元格显示值重新生成 `db_backups/fix_device_excel_import_dates_20260629.sql`,并执行日期修正。
10. 修正后抽样验证:
- `REALLY-11` 入账日期为 `2007-01-01`
- `REALLY-6` 入账日期为 `2008-12-24`
- `REALLY-1` 入账日期为 `2011-01-01`
11. 检查新增过程文本,发现“公司编码不能为空”提示在首次脚本生成时变成问号文本。
12. 使用 `apply_patch` 修正导入脚本里的提示文本,并新增 `db_backups/fix_device_add_company_code_message_20260629.sql`,只重新发布新增过程,不重新执行整份导入脚本,避免覆盖已修正日期。
13. 执行提示文本修正脚本,确认新增过程可返回中文提示。
14. 复制 `doc/设备信息.xlsx``work/DeviceManagement/DeviceInformation/设备信息.xlsx` 作为工作副本。
15. 更新 `work/DeviceManagement/DeviceInformation` 下的 README、01-项目功能内容、02-项目程序开发详细步骤、03-推进台账、04-任务矩阵、05-验收证据、06-决策记录。
16. 执行 `npm run build`,前端构建通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
### 修改文件
- `src/views/DeviceManagement/DeviceInformation/index.vue`
- `db_backups/add_device_name_and_import_excel_20260629.sql`
- `db_backups/fix_device_excel_import_dates_20260629.sql`
- `db_backups/fix_device_add_company_code_message_20260629.sql`
- `work/DeviceManagement/DeviceInformation/设备信息.xlsx`
- `work/DeviceManagement/DeviceInformation/README.md`
- `work/DeviceManagement/DeviceInformation/01-项目功能内容.md`
- `work/DeviceManagement/DeviceInformation/02-项目程序开发详细步骤.md`
- `work/DeviceManagement/DeviceInformation/03-推进台账.md`
- `work/DeviceManagement/DeviceInformation/04-任务矩阵.md`
- `work/DeviceManagement/DeviceInformation/05-验收证据.md`
- `work/DeviceManagement/DeviceInformation/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- Excel 有效数据行数89。
- 数据库设备信息总数89。
- `名称` 字段已存在并用于页面“设备名称”。
- Excel `生产用名` 继续保存到原 `设备名称` 字段。
- 日期修正后样例数据正确。
- 新增过程提示文本已修正为“公司编码不能为空”。
- `npm run build` 通过,仅有既有警告。
## 2026-06-29 新增及时齐套跟踪结果页面
### 用户需求
- 根据 `doc/新增及时齐套跟踪结果.docx` 新增页面“及时齐套跟踪结果”。
- 修改后在 `work` 下创建对应路径并复制原始文档。
- 在对应路径新增或修改 `01-项目功能内容``02-项目程序开发详细步骤``03-推进台账``04-任务矩阵``05-验收证据``06-决策记录` 和 README 索引。
- 将完整执行过程使用中文追加到 `/gptlog-process/gpdlog.md`
### 执行过程
1.`doc` 目录查找需求文档,确认真实文件为 `doc/新增及时齐套跟踪结果.docx`
2. 将 docx 临时复制为 zip 并解包读取 `word/document.xml`,提取需求正文。
3. 从需求中确认:
- 一级数据字段按计划用表页面一致。
- 过滤条件和计划用表页面一致。
- 二级绿色数据来自 `SAP.SBO_YL.dbo.VIEW_Jijiankukc`
- 二级字段包括物料编码、物料名称、缺件数量、属性、生产订单号、进度、工艺路线、预计完成时间。
4. 查找现有页面,确认“计划用表”为 `src/views/PlanManagement/PlanShell/index.vue`,使用过程 `计划排产_查询计划信息`
5. 查找“生产计划跟踪”为 `src/views/ProductionManagement/ProductionPlanTrack/index.vue`,复用其当前序和工艺路线展示思路。
6. 查询数据库菜单表,确认“计划用表”挂在 `PlanManagement` 下,因此新页面也放在 `PlanManagement` 模块。
7. 查询 SAP linked server确认可通过 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 访问 SAP 缺件视图。
8. 查询 SAP 视图字段,确认存在 `ItemCode``U_Name``属性``未发货数量``在制采购``采购员``采购预计交货日期``采购未清数量``到货草稿`
9. 查询 MES 视图字段,确认 `View_生产订单_MES` 可提供计划号、合同号、订单编号、物料编号、物料描述、计划数量、计划完成、计划开始时间、计划完成时间、齐套、发料状态、拣配状态、自制件属性、任务状态、加工状态、进度等字段。
10. 新增 `db_backups/create_timely_kit_tracking_result_20260629.sql`,创建或更新 `dbo.生产管理_及时齐套跟踪结果_查询`
11. 新过程按计划用表参数接收筛选条件,并将 SAP 缺件数据与 MES 生产计划匹配:
- 机加件:`SAP.ItemCode = MES.物料编号`
- 装配件:`SAP.ItemCode + SAP.Project = MES.物料编号 + MES.合同号`
- 外购件:属性为空,生产订单号取 SAP `在制采购`,工艺路线列拼接采购信息和质检状态。
12. 首次执行查询过程取样时SQL Server 报 `QUOTED_IDENTIFIER` SET 选项错误。
13. 修改 SQL 脚本,增加 `SET ANSI_NULLS ON``SET QUOTED_IDENTIFIER ON`,重新发布过程。
14. 再次执行取样查询,确认过程可返回 SAP 缺件和 MES 计划组合数据。
15. 新增 `db_backups/add_timely_kit_tracking_result_menu_20260629.sql`
16. 执行菜单脚本,按“计划用表”的角色授权复制新增菜单,生成 4 条“及时齐套跟踪结果”菜单记录。
17. 新增前端页面 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- 过滤区参考计划用表。
- 主表展示一级计划字段。
- 展开行展示二级缺件跟踪数据。
- 二级明细行使用浅绿色背景。
- 状态字段使用绿色/橙色标签样式。
18. 执行 `npm run build`,构建通过,仅有项目既有资源体积过大和 Browserslist/caniuse-lite 过期警告。
19. 创建 `work/PlanManagement/TimelyKitTrackingResult`
20. 复制 `doc/新增及时齐套跟踪结果.docx` 到工作目录。
21. 新增 README、01-项目功能内容、02-项目程序开发详细步骤、03-推进台账、04-任务矩阵、05-验收证据、06-决策记录。
### 修改文件
- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- `db_backups/create_timely_kit_tracking_result_20260629.sql`
- `db_backups/add_timely_kit_tracking_result_menu_20260629.sql`
- `work/PlanManagement/TimelyKitTrackingResult/新增及时齐套跟踪结果.docx`
- `work/PlanManagement/TimelyKitTrackingResult/README.md`
- `work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md`
- `work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- SAP linked server 取样查询:通过。
- `dbo.生产管理_及时齐套跟踪结果_查询` 执行:通过。
- 菜单脚本执行:通过,新增 4 条菜单记录。
- 前端构建 `npm run build`:通过,仅有既有警告。
## 2026-06-29 修正及时齐套跟踪结果页面反馈问题
### 用户反馈
1. 工艺路线缺少日期行和合格行,且没有颜色。
2. 二级数据里面存在重复数据,不应该出现生产订单号一样的数据。
3. 属性为空时代表外购,一级数据不对,应该取 SAP 视图 `DocEntry` 作为订单编号,再按照计划用表查询。
### 执行过程
1. 复查 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`,确认二级明细原先只把工艺路线作为文本展示,不能展示日期行、工序行、合格行和状态颜色。
2. 复查 `db_backups/create_timely_kit_tracking_result_20260629.sql`,确认 SAP 缺件数据与 MES 计划数据匹配时,属性为空的外购数据仍可能使用在制采购号,导致一级计划数据取值不符合反馈要求。
3. 查询样例订单 `7134`,确认同一个缺件生产订单号在二级明细中会重复出现。
4. 查询样例订单 `7335`,确认该外购场景需要使用 SAP 视图 `DocEntry=7335` 作为订单编号匹配计划用表数据。
5. 修改 SQL 查询过程脚本:
- 新增 SAP 缺件源数据去重,按 `DocEntry + Project + ItemCode + 属性` 保留一条。
- 外购属性为空时,一级订单编号改为优先使用 `SAP.DocEntry`
- 外购属性为空时MES 计划用表匹配条件增加 `MES.订单编号 = SAP.DocEntry`
- 新增 `工艺路线明细` JSON 字段,返回工序名称、计划开始时间、计划完成时间、进度、完成数量、收检合格数、收检不合格数、加工状态等页面渲染所需数据。
- 最终结果增加按 `订单号 + 缺件生产订单号` 的去重层,避免同一生产订单号在二级明细重复出现。
6. 重新执行 `db_backups/create_timely_kit_tracking_result_20260629.sql`,发布查询过程成功。
7. 修改前端页面:
- 二级列“工艺路线/采购状态”增加自制件工艺路线 HTML 渲染。
- 工艺路线渲染为三行结构:日期行、工序行、合格行。
- 根据工序进度和加工状态增加绿色、蓝色、橙色、红色样式。
- 外购件仍展示采购状态文本。
- 前端合并数据时增加二级明细去重,避免接口数据异常时重复展示同一生产订单号。
8. 更新工作目录文档:
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
### 修改文件
- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- `db_backups/create_timely_kit_tracking_result_20260629.sql`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 重新发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
- 查询 `@订单号=7134` 时,同一缺件生产订单号 `7134` 的二级明细只返回 1 条,不再重复。
- 查询 `@订单号=7335` 时,外购一级数据已按 `SAP.DocEntry=7335` 匹配到计划用表数据。
- 执行 `npm run build` 通过,仅保留项目已有的资源体积过大和 Browserslist/caniuse-lite 过期警告。
### 下一步
- 登录页面人工查看展开行效果,重点确认工艺路线日期行、工序行、合格行和颜色是否与业务预期一致。
## 2026-06-29 继续修正及时齐套跟踪结果外购和主数据问题
### 用户反馈
1. 属性为空的外购数据应取 SAP 视图的采购员、采购未清数量、到货草稿,并根据到货草稿匹配采购入库检页面的生产订单读取检验状态。
2. 第 32 行主数据生产订单号 `2007` 的一级数据是正确参照;前 1-10 行不正确,主数据缺件不应是主数据自身,且主数据产品编码后面的字段不应为空。
### 执行过程
1. 复查 `db_backups/create_timely_kit_tracking_result_20260629.sql`,确认上一版把一级主数据和二级缺件匹配混在同一个 `v` 里。
2. 定位到问题来源SQL 使用 `COALESCE(v.订单编号, sap.DocEntry)``COALESCE(v.物料编号, sap.ItemCode)``COALESCE(v.物料描述, sap.U_Name)` 作为主数据兜底,导致 SAP 缺件在没有匹配到计划用表时也会生成主表行。
3. 查询 `@订单号=2007`,确认一级主数据完整,但外购缺件生产订单号显示成主订单号 `2007`,业务含义错误。
4. 查看采购入库检页面 `src/views/QualityManagement/CheckTask/purchaseIncoming.vue`,确认查询过程为 `质量管理_质量检验_入库质检任务_查询`,页面生产订单字段来自 `质量检验_质检任务_SAP.订单编号`
5. 查看 `doc_old/fix_质量管理_入库质检任务_查询.sql`,确认采购入库检状态按 `质量检验_质检任务_SAP.入库数量``YL_质量检验_质检记录.检验数量` 判断。
6. 修改查询过程:
- 一级主数据只按 `SAP.DocEntry = View_生产订单_MES.订单编号` 匹配。
- 删除主数据字段对 SAP 缺件字段的兜底。
- 新增 `detail_order`,仅用于自制缺件匹配二级生产订单、工艺路线和进度。
- 外购缺件生产订单号改为 `SAP.到货草稿`;到货草稿为 0 时留空。
- 外购质检状态改为 `SAP.到货草稿 -> 质量检验_质检任务_SAP.订单编号 -> YL_质量检验_质检记录` 口径。
- 非外购质检状态保持为空。
7. 重新发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
8. 验证 `@订单号=2007`:一级主数据完整,外购缺件生产订单号不再等于 `2007`
9. 验证 `@订单号=7321`:外购缺件到货草稿 `11209` 显示为缺件生产订单号,质检状态为未完成。
10. 默认查询统计:总行数 198产品编码/产品名称为空行数 0缺件生产订单号等于主订单号行数 0非外购质检状态非空行数 0。
11. 执行 `npm run build`,构建通过,仅保留项目既有 warning。
12. 删除临时验证脚本 `db_backups/verify_timely_kit_tracking_result_temp_20260629.sql`
13. 更新 `work/PlanManagement/TimelyKitTrackingResult` 下推进台账、任务矩阵、验收证据、决策记录,并追加本日志。
### 修改文件
- `db_backups/create_timely_kit_tracking_result_20260629.sql`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 查询过程发布成功。
- `@订单号=2007`:一级主数据完整,外购缺件生产订单号不再等于 `2007`
- `@订单号=7321`:外购缺件按到货草稿 `11209` 显示缺件生产订单号,质检状态来自采购入库检口径。
- 默认查询统计:总行数 198产品编码/产品名称为空行数 0缺件生产订单号等于主订单号行数 0非外购质检状态非空行数 0。
- `npm run build` 通过,仅有项目既有资源体积过大和 Browserslist/caniuse-lite 过期警告。
## 2026-06-30 修正及时齐套跟踪结果库存数量、采购员和工艺路线样式
### 用户反馈
1. `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` 页面二级数据需要在缺件数量后增加库存数量字段,库存数量在 SAP 里有。
2. 去掉拼接的采购员字段。
3. 工艺路线需要左对齐,当前间隔偏大。
4. 工艺路线颜色参考生产计划跟踪页面,使用红、蓝、绿,不使用橙色。
5. 所有改动按昨日方式维护 01-06 文档、README 索引、推进台账、任务矩阵、验收证据、决策记录,并追加总日志。
### 执行过程
1. 读取目标页面 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`,确认二级明细已有缺件数量、采购员列,以及本页自定义工艺路线样式。
2. 读取参考页面 `src/views/ProductionManagement/ProductionPlanTrack/index.vue`,确认生产计划跟踪的工艺路线为左对齐、紧凑间距、红/蓝/绿文字配色。
3. 修改前端页面:
- 在二级明细“缺件数量”后新增“库存数量”列。
-`mergeRows` 中新增 `库存数量: this.formatQuantity(row.库存数量)`
- 删除二级明细“采购员”列和 `采购员` 映射。
- 工艺路线名称只显示工序名称,不再拼接指派对象。
- 删除橙色状态判断和橙色样式。
- 调整 `.process-route` 相关样式为左对齐、缩小箭头和单元格间距、红/蓝/绿三色。
4. 连接数据库 `192.168.2.92 / YL_MESDB`,读取 SAP 视图字段列表,确认 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 包含 `库存量` 字段。
5. 新增数据库增量脚本 `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`,不覆盖 20260629 历史脚本。
6. 修改增量脚本:
-`SAP缺件源` 中增加 `ISNULL(s.[库存量], 0) AS 库存数量`
- 在查询结果中输出 `sap.[库存数量] AS [库存数量]`
- 最终 SELECT 输出 `[库存数量]`
- 删除 `sap.[采购员]` 输出。
- 外购采购状态文本从 `采购员 + 未清数量 + 到货草稿 + 质检状态` 改为 `未清数量 + 到货草稿 + 质检状态`
7. 执行 `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql` 发布过程,发布成功。
8. 验证 `@订单号=2007`,返回缺件 `24112-011-HY-WF50L`,缺件数量 `78`,库存数量 `27`,结果列不再包含采购员。
9. 验证 `@订单号=7321`,返回缺件 `XX-YG01013990`,缺件数量 `6`,库存数量 `2`,外购采购状态不再包含采购员。
10. 执行过程定义检查,结果为“有库存数量 / 未拼接采购员”。
11. 曾尝试用 `OPENQUERY([LOCALSERVER], ...)` 做辅助落表验证,但数据库未配置 `LOCALSERVER` linked server该无效命令不作为验收证据已用过程样例和定义检查替代。
12. 执行 `npm run build`,构建通过,仅有项目既有资源体积过大和 Browserslist/caniuse-lite 过期警告。
13. 更新 README、01-06 文档、推进台账、任务矩阵、验收证据、决策记录,并追加本日志。
### 修改文件
- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- `db_backups/update_timely_kit_tracking_result_inventory_20260630.sql`
- `work/PlanManagement/TimelyKitTrackingResult/README.md`
- `work/PlanManagement/TimelyKitTrackingResult/01-项目功能内容.md`
- `work/PlanManagement/TimelyKitTrackingResult/02-项目程序开发详细步骤.md`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- SAP 视图字段确认:`VIEW_Jijiankukc` 包含 `库存量`
- SAP 视图取样:`DocEntry=2007``ItemCode=24112-011-HY-WF50L``未发货数量=78``库存量=27`
- 查询过程发布成功。
- `@订单号=2007` 返回 `库存数量=27`
- `@订单号=7321` 返回 `库存数量=2`
- 过程定义检查:有 `库存数量`,未拼接 `采购员:`
- `npm run build` 通过,仅有项目既有 warning。
### 下一步
- 登录系统人工验收“及时齐套跟踪结果”展开行,确认库存数量位置、外购采购状态文本、工艺路线左对齐和红/蓝/绿颜色符合现场预期。
## 2026-06-30 修正及时齐套跟踪结果 7134 工艺路线判色
### 用户反馈
- 当前页二级数据 `7134` 的工艺路线颜色仍有问题:当前页显示一个蓝色两个红色,生产计划跟踪显示两个蓝色一个红色。
### 执行过程
1. 对比当前页 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` 和生产计划跟踪 `src/views/ProductionManagement/ProductionPlanTrack/index.vue` 的工艺路线判色函数。
2. 查询数据库确认 `7134` 工艺数据:
- 打磨:加工状态 `6`,收检合格数 `6`
- 打压检测:加工状态为空,收检合格数 `6`
- 喷塑:外协,收检合格数 `0`
3. 确认差异原因:当前页旧逻辑按进度、计划数量、完成数量或收检数量达到计划数量判蓝;生产计划跟踪按加工状态 `6/3``收检合格数 > 0` 判蓝。
4. 修改当前页判色逻辑:
- 新增 `isBlueProcess`,与生产计划跟踪一致。
- 新增 `isGreenProcess`,与生产计划跟踪外协绿色口径一致。
- 新增 `getProcessBaseClass``getOutsourceGroupClassState`,复用生产计划跟踪的外协连续分组判色口径。
- `formatProcessRoute` 改为基于 `outsourceGroupClasses` 获取颜色。
5. 本地模拟 `7134` 判色结果:`step1:process-route-blue,step2:process-route-blue,step3:process-route-red`
6. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
7. 更新推进台账、任务矩阵、验收证据、决策记录和总日志。
### 修改文件
- `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- SQL 验证 `7134` 的第二道工序“打压检测”有 `收检合格数=6`
- 本地判色模拟结果为两个蓝色、一个红色。
- 当前页无 `process-route-orange`
- `npm run build` 通过,仅有项目既有 warning。
### 下一步
- 登录页面展开 `7134`,确认当前页工艺路线颜色与生产计划跟踪一致。
## 2026-06-30 恢复外购采购状态采购员拼接
### 用户反馈
- 还原字段拼接采购员部分。
- 不要单独的采购员列。
### 执行过程
1. 确认前端 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` 当前没有单独采购员列。
2. 修改最新过程脚本 `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql`
-`SAP缺件源` 中重新读取 `s.[采购员] COLLATE DATABASE_DEFAULT AS 采购员`
- 外购 `工艺路线/采购状态` 文本改为 `采购员:xxx / 未清数量:xxx / 到货草稿:xxx / 质检状态:xxx`
- 不在最终 SELECT 中输出单独 `采购员` 字段。
3. 发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
4. 查询 `@订单号=7321` 验证:
- 缺件生产订单号为 `4111`,来自 SAP `在制采购`
- 工艺路线/采购状态为 `采购员:张丹 / 未清数量:50 / 到货草稿:11209 / 质检状态:未完成`
- 预计完成时间为 `2026-06-25`,来自 SAP `采购预计交货日期`
5. 使用 `sys.dm_exec_describe_first_result_set_for_object` 检查结果集列,确认没有单独 `采购员` 列。
6. 使用 `Select-String` 检查前端页面,确认没有 `label="采购员"``prop="采购员"`
7. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 Browserslist/caniuse-lite 过期警告。
8. 更新推进台账、任务矩阵、验收证据、决策记录和总日志。
### 修改文件
- `db_backups/update_timely_kit_tracking_result_purchase_order_20260630.sql`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 查询过程发布成功。
- `@订单号=7321` 外购采购状态已包含 `采购员:张丹`
- 结果集无单独 `采购员` 列。
- 前端无单独采购员列。
- `npm run build` 通过,仅有项目既有 warning。
### 下一步
- 登录页面确认外购采购状态文本显示采购员,且二级表没有单独采购员列。
## 2026-06-30 自制缺件显示所有匹配生产订单
### 用户反馈
- 同一个生产订单号不要出现重复。
- 同一缺件物料所有匹配生产订单都显示。
### 执行过程
1. 排查 `@订单号=4222` 当前结果,确认旧过程只返回二级生产订单 `5960``7142` 中的一条。
2. 查询 SAP 缺件视图,确认 `4222` 的缺件物料为 `22-103-060-YDZF-20V1.0-4.1``DocNum=5960`
3. 查询 MES 生产订单,确认同一缺件物料同时存在 `5960``7142` 两个生产订单。
4. 定位旧逻辑问题:`detail_order` 使用 `SELECT TOP (1)`,天然只能显示一个匹配生产订单。
5. 新增脚本 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
6. 修改 `detail_order`
- 去掉自制件匹配的 `TOP (1)` 单行限制。
- 使用 `ROW_NUMBER() OVER (PARTITION BY m.[订单编号] ORDER BY m.[订单行号])`,确保同一生产订单号只保留一条代表行。
- 同一缺件物料匹配到的多个不同生产订单全部返回。
7. 发布 `dbo.生产管理_及时齐套跟踪结果_查询` 成功。
8. 验证 `@订单号=4222` 返回两条二级数据:`5960``7142`,且同一生产订单号不重复。
9. 更新 README、推进台账、任务矩阵、验收证据、决策记录和总日志。
### 修改文件
- `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
- `work/PlanManagement/TimelyKitTrackingResult/README.md`
- `work/PlanManagement/TimelyKitTrackingResult/03-推进台账.md`
- `work/PlanManagement/TimelyKitTrackingResult/04-任务矩阵.md`
- `work/PlanManagement/TimelyKitTrackingResult/05-验收证据.md`
- `work/PlanManagement/TimelyKitTrackingResult/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 查询过程发布成功。
- `@订单号=4222` 二级数据返回 `5960``7142`
- 同一生产订单号没有重复。
- `5960` 显示 13 道工艺路线,`7142` 显示 4 道工艺路线。
### 下一步
- 登录页面展开 `4222`,确认二级数据同时显示所有匹配生产订单且不重复。
## 2026-06-30 11:47:54 复核同缺件物料多生产订单显示
### 复核内容
- 按用户最新口径确认:同一个生产订单号不要出现重复,同一缺件物料所有匹配生产订单都显示。
### 验证结果
- 执行 `EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号 = 4222`
- 二级数据中缺件物料 `22-103-060-YDZF-20V1.0-4.1` 当前同时返回生产订单 `5960``7142`
- 同一生产订单号未重复出现。
## 2026-06-30 生产订单关闭无工时可关闭处理
### 用户反馈
- `dbo.计划排产_生产订单关闭_查询全部订单` 的“可关闭”查询以工时为基准。
- 当前只能查出全部校验的工时再筛选。
- 特殊情况:没有工时记录,但满足其他条件的订单也需要进入可关闭处理。
### 执行过程
1. 读取线上过程定义,确认“可关闭”分支以 `dbo.View_生产工时视图` 为主表。
2. 核对页面 `src/views/PlanManagement/PlannOrderClose/index.vue`,确认默认查询为“可关闭 + 机加”。
3. 核对 `MES_接口_生产计划``View_生产工时视图` 字段,确认可从生产计划补充无工时订单。
4. 查询样例,确认 `7410` 无工时,但计划数量、入库数量、终检合格数均为 `1`,单据状态为空,属性为机加件。
5. 新增脚本 `db_backups/update_plan_order_close_no_work_hours_20260630.sql`
6. 将“可关闭”分支调整为有工时订单和无工时满足条件订单合并:
- 有工时订单继续要求全部工时校验。
- 无工时订单免工时校验,但保留原可关闭条件。
7. 初版全量查询超时后,改为先写入 `#工时订单` 临时表,再判断无工时,避免重复展开复杂视图。
8. 发布存储过程成功。
9. 验证 `@订单号=7410, @单据状态=可关闭, @属性=机加` 可返回。
10. 验证默认“可关闭 + 机加”查询约 `0.56` 秒返回,并命中 `7280``7409``7410`
### 修改文件
- `db_backups/update_plan_order_close_no_work_hours_20260630.sql`
- `work/PlanManagement/PlannOrderClose/README.md`
- `work/PlanManagement/PlannOrderClose/01-项目功能内容.md`
- `work/PlanManagement/PlannOrderClose/02-项目程序开发详细步骤.md`
- `work/PlanManagement/PlannOrderClose/03-推进台账.md`
- `work/PlanManagement/PlannOrderClose/04-任务矩阵.md`
- `work/PlanManagement/PlannOrderClose/05-验收证据.md`
- `work/PlanManagement/PlannOrderClose/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 数据库过程发布成功。
- 无工时订单 `7410` 可进入可关闭结果。
- 默认“可关闭 + 机加”查询未超时,约 `0.56` 秒返回。
## 2026-06-30 新增产品合格率(工位)页面
### 用户反馈
- 查看 `doc/新增产品合格率.docx`
- 根据文档新增页面 `产品合格率(工位)`
### 执行过程
1. 解包并读取 `doc/新增产品合格率.docx`,确认页面放在生产管理下。
2. 读取文档截图和文字,确认一级字段为关闭日期、生产订单号、物料名称、物料编码、计划数量、完成数量、不良数量、合格率。
3. 确认二级字段为工序、工序号、工位、完工数量、不良数量、合格率、检验说明。
4. 查询 `dbo.YL_质量检验_质检记录` 字段,确认生产订单号为 `计划号`,订单行号为 `行号`,工位字段为 `工位名称`
5. 查询 SAP 视图 `SBO_YL.dbo.UBT_OWOR`,确认关闭日期字段为 `实际结算日期`,已关闭口径为 `单据状态 IS NOT NULL`
6. 新增查询脚本 `db_backups/create_product_pass_rate_workstation_20260630.sql`
7. 初版四段名跨库查询较慢,改为 `OPENQUERY([SAP], ...)` 将 SAP 已关闭订单先取到本地临时表。
8. 新增菜单脚本 `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`,写入生产管理下 `产品合格率(工位)` 菜单。
9. 新增前端页面 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`,实现查询区、主表、展开二级明细和合格率颜色。
10. 发布查询过程和菜单脚本。
11. 验证样例 `@生产订单号=7649` 返回一级汇总和二级明细。
12. 执行 `npm run build`,构建通过。
### 修改文件
- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- `db_backups/create_product_pass_rate_workstation_20260630.sql`
- `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
- `work/ProductionManagement/ProductPassRateWorkstation/README.md`
- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 查询过程 `dbo.生产管理_产品合格率工位_查询` 发布成功,修改时间 `2026-06-30 14:31:00.690`
- 菜单写入 `12` 条角色记录ID 范围 `236-247`
- 近 7 天查询返回 `175` 行,耗时约 `0.37` 秒。
- 空条件查询自动限定近 30 天,返回 `1420` 行,耗时约 `1.17` 秒。
- `npm run build` 通过,仅有项目既有 warning。
## 2026-06-30 产品合格率(工位)默认不查询和合格状态筛选
### 用户反馈
- 默认进来不查询数据。
- 增加合格和不合格筛选。
- 主数据合格率小于 `100` 的为不合格。
- 默认不合格。
### 执行过程
1. 修改 `db_backups/create_product_pass_rate_workstation_20260630.sql`,新增 `@合格状态` 参数。
2. 查询结果按主数据合格率过滤:`合格` 为大于等于 `100``不合格` 为小于 `100``全部` 不过滤。
3. 修改 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`,删除页面创建时自动查询。
4. 查询区新增“合格状态”下拉,默认值为 `不合格`
5. 查询时向过程传入 `合格状态`
6. 发布查询过程成功。
7. 验证近 30 天筛选结果:不合格 `50` 行,合格 `1370` 行,全部 `1420` 行。
8. 执行 `npm run build`,构建通过。
### 修改文件
- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- `db_backups/create_product_pass_rate_workstation_20260630.sql`
- `work/ProductionManagement/ProductPassRateWorkstation/README.md`
- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 页面进入不再自动查询。
- 合格状态默认 `不合格`
- 不合格筛选最高合格率为 `99.99`,符合小于 `100` 的判定。
- `npm run build` 通过,仅有项目既有 warning。
## 2026-06-30 产品合格率(工位)关闭日期拆分
### 用户反馈
- 关闭日期筛选拆成两个筛选。
- 客户不习惯一次选两个日期。
### 执行过程
1. 修改 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
2. 将原 `daterange` 日期范围选择器拆成两个独立 `date` 日期选择器。
3. 前端字段改为 `searchForm.closeDateStart``searchForm.closeDateEnd`
4. 查询参数仍然使用 `关闭日期_Start``关闭日期_End`,数据库过程无需修改。
5. 执行 `npm run build`,构建通过。
6. 更新产品合格率 README/01-05 文档和总日志。
### 修改文件
- `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- `npm run build` 通过,仅有项目既有 warning。
- 数据库过程无需重新发布。
## 2026-06-30 产品合格率(工位)修正工序号来源
### 用户反馈
- 工序号为什么都是空。
- 工序号应取 `dbo.MES_接口_生产计划_生产任务.订单行号`
- 该表中订单行号肯定不会为空。
### 执行过程
1. 查询 `dbo.MES_接口_生产计划_生产任务` 字段,确认存在 `AID``订单编号``订单行号``工序名称``指派对象`
2. 查询样例数据,确认 `订单行号` 在生产任务表中有值。
3. 定位原脚本中工序号来源为 `COALESCE(View_生产订单_MES.订单行号, 质检记录.行号)`
4. 确认质检记录的 `TaskAID` 对应生产任务表的 `AID`
5. 修改 `db_backups/create_product_pass_rate_workstation_20260630.sql`
- 明细关联表改为 `dbo.MES_接口_生产计划_生产任务`
- 关联条件改为 `q.TaskAID = t.AID`
- 工序号改为 `COALESCE(t.订单行号, q.行号)`
- 工序和工位补值也改为优先使用生产任务表的 `工序名称``指派对象`
6. 发布 `dbo.生产管理_产品合格率工位_查询` 成功。
7. 验证 `7649` 二级明细工序号为 `1``2``3`
8. 验证近 30 天 `3281` 条二级明细中空工序号为 `0`
### 修改文件
- `db_backups/create_product_pass_rate_workstation_20260630.sql`
- `work/ProductionManagement/ProductPassRateWorkstation/01-项目功能内容.md`
- `work/ProductionManagement/ProductPassRateWorkstation/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/ProductPassRateWorkstation/03-推进台账.md`
- `work/ProductionManagement/ProductPassRateWorkstation/04-任务矩阵.md`
- `work/ProductionManagement/ProductPassRateWorkstation/05-验收证据.md`
- `work/ProductionManagement/ProductPassRateWorkstation/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 查询过程修改时间:`2026-06-30 15:12:24.840`
- `7649` 返回:领料 1、数车 2、打磨 3。
- 近 30 天明细行数 `3281`,空工序号行数 `0`
## 2026-06-30 AGV执行中任务改为已完成
### 用户反馈
- 处理页面 `ProductionManagement/AGVtask/index` 里面任务状态为执行中的数据。
- 所有执行中任务都改为已完成。
### 执行过程
1. 读取页面 `src/views/ProductionManagement/AGVtask/index.vue`,确认页面中 `RUNNING` 显示为执行中,`FINISHED` 显示为已完成。
2. 查询数据库对象,确认实时数据来自 `dbo.AGV_实时数据`,历史完成数据写入 `dbo.AGV_历史数据`
3. 处理前统计实时表状态:`PENDING 1``RUNNING 35`
4. 按完成任务口径处理 `RUNNING` 数据:插入历史表时 `TaskStatus` 写为 `FINISHED`,并设置 `EndTime``Duration`,随后从实时表删除这些执行中任务。
5. 处理完成后,调用页面实时查询过程验证 `RUNNING` 无数据。
6. 验证实时表仅剩 `PENDING 1`,最近 5 分钟历史表新增 `FINISHED 35`
7. 新增 AGVtask README 和 01-06 文档,记录功能内容、执行步骤、推进台账、任务矩阵、验收证据和决策记录。
### 修改文件
- `work/ProductionManagement/AGVtask/README.md`
- `work/ProductionManagement/AGVtask/01-项目功能内容.md`
- `work/ProductionManagement/AGVtask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/AGVtask/03-推进台账.md`
- `work/ProductionManagement/AGVtask/04-任务矩阵.md`
- `work/ProductionManagement/AGVtask/05-验收证据.md`
- `work/ProductionManagement/AGVtask/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 已转历史数量:`35`
- 页面实时查询过程按 `RUNNING` 查询返回空结果。
- 实时表剩余状态:`PENDING 1`
- 历史表最近 5 分钟状态:`FINISHED 35`
## 2026-06-30 设计报工任务模块方案文档修订
### 用户反馈
- 读取 `doc/设计报工任务模块.docx`,梳理方案。
- 项目号具体取哪个 SAP 视图字段后续提供。
- 完成要求已有结束时间,未结束不能完成。
- 删除任务时,如果已经有报工记录,不能删除。
- 不参与之前任何生产/SAP/工时报表流程,整体独立。
- 修改文档。
### 执行过程
1. 解析 `doc/设计报工任务模块.docx` 正文,确认原始需求包含设计任务、设计报工、设计工时校验、设计工时报表四个页面。
2. 对照参考页面:
- `ProcessManagement/PartDrawlook/index.vue`
- `PlanManagement/SelfMakePlando/index.vue`
- `ProductionManagement/WorkHoursCheck/index.vue`
- `ProductionManagement/Workhours/index.vue`
3. 新增 `work/ProductionManagement/DesignReportTask/` 文档目录。
4. 写入 README 和 01-06 文档,记录功能内容、开发步骤、推进台账、任务矩阵、验收证据和决策记录。
5. 将 Word 文档正文整理为确认版方案。
6. 解析更新后的 Word 文档,验证关键口径已写入。
### 修改文件
- `doc/设计报工任务模块.docx`
- `work/ProductionManagement/DesignReportTask/README.md`
- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- Word 文档已包含 `项目号:具体 SAP 视图和字段后续提供`
- Word 文档已包含 `未结束不能完成`
- Word 文档已包含 `已有设计报工记录不能删除`
- Word 文档已包含 `不上传 SAP``不参与现有生产工时报表`
- 任务矩阵中 `DRT-009 项目号来源` 状态为待确认,`DRT-010 数据库和页面开发` 状态为待开始。
## 2026-06-30 设计报工任务模块文档归档与菜单权限口径补充
### 用户反馈
- 根据修改后的文档,将文档复制到对应路径。
- 在对应路径下新增或修改 README、01-06 文档。
- 将完整执行过程追加到 `/gptlog-process/gpdlog.md`
- 不分配菜单权限。
### 执行过程
1. 确认修改后的源文档为 `doc/设计报工任务模块.docx`
2. 确认对应路径为 `work/ProductionManagement/DesignReportTask/`
3. 将源 Word 文档复制到 `work/ProductionManagement/DesignReportTask/设计报工任务模块.docx`
4. 更新 README 索引,增加复制后的 Word 文档说明,并写入“不分配菜单权限”。
5. 更新 `01-项目功能内容.md`,补充独立性要求和文档归档路径。
6. 更新 `02-项目程序开发详细步骤.md`,删除菜单权限分配动作,明确不写菜单表和角色权限表。
7. 更新 `03-推进台账.md`,记录本轮做了什么、改了哪些文件、验证了什么、下一步是什么。
8. 更新 `04-任务矩阵.md`,新增文档复制和菜单权限口径任务,并将开发验收标准调整为“不分配菜单权限”。
9. 更新 `05-验收证据.md`,记录工作目录归档路径和菜单权限口径。
10. 更新 `06-决策记录.md`,新增 DDR-006本阶段不分配菜单权限。
11. 追加仓库内总日志和绝对路径总日志。
### 修改文件
- `work/ProductionManagement/DesignReportTask/设计报工任务模块.docx`
- `work/ProductionManagement/DesignReportTask/README.md`
- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- `work/ProductionManagement/DesignReportTask/设计报工任务模块.docx` 已存在。
- README 已列出复制后的 Word 文档。
- `02-项目程序开发详细步骤.md` 已明确本阶段不分配菜单权限。
- `04-任务矩阵.md` 已新增 `DRT-011``DRT-012`
- `06-决策记录.md` 已新增 `DDR-006 本阶段不分配菜单权限`
## 2026-06-30 新建设计报工模块页面、数据表和功能
### 用户反馈
- 新建文档里面的页面、数据表、功能。
- 继续遵守“不分配菜单权限”的要求。
### 执行过程
1. 读取 `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`,确认需要落地 4 个页面、3 张独立表和独立设计报工功能。
2. 读取现有页面和通用数据库调用方式,确认页面使用 `CreateData` / `ExecDatabase` 调用存储过程。
3. 查询数据库中现有物料查询和人员查询返回字段:
- 物料字段包含 `物料编码``物料名称``物料描述`
- 人员字段包含 `人员编号``人员姓名``账号``角色`
4. 新增数据库脚本 `db_backups/create_design_report_task_module_20260630.sql`
5. 第一次发布脚本时SAP 物料字段存在 `ntext``nvarchar` 比较问题,修正为显式 `CAST` 后重新发布。
6. 成功发布 3 张独立表:
- `dbo.MES_设计报工_任务`
- `dbo.MES_设计报工_记录`
- `dbo.MES_设计报工_校验记录`
7. 成功发布 15 个独立过程:
- `设计报工_物料查询`
- `设计报工_人员查询`
- `设计报工_项目查询`
- `设计报工_任务_查询`
- `设计报工_任务_新增`
- `设计报工_任务_编辑`
- `设计报工_任务_删除`
- `设计报工_任务_开始`
- `设计报工_任务_结束`
- `设计报工_任务_完成`
- `设计报工_记录_查询`
- `设计报工_工时校验_查询`
- `设计报工_工时校验_保存`
- `设计报工_工时校验_批量保存`
- `设计报工_工时报表_作业者工时_查询`
8. 事务内验证业务规则:
- 新增测试任务成功。
- 未开始直接完成返回“任务未产生已结束报工,不能完成”。
- 开始任务成功。
- 开始后未结束直接完成返回“任务存在未结束报工,不能完成”。
- 结束任务成功。
- 结束后完成成功。
- 事务回滚,测试数据未保留。
9. 新增 4 个前端页面:
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
10. 执行 `npm run build`,构建通过,仅有项目既有 asset size、entrypoint size、browserslist warning。
11. 更新 `work/ProductionManagement/DesignReportTask/` 下 README 和 01-06 文档。
12. 本轮未新增菜单权限脚本,未写入菜单表和角色权限表。
### 修改文件
- `db_backups/create_design_report_task_module_20260630.sql`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `work/ProductionManagement/DesignReportTask/README.md`
- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 验证结果
- 数据库脚本发布成功。
- 表和过程对象存在,过程修改时间为 `2026-06-30 18:01:39``2026-06-30 18:01:40`
- 下拉验证:`设计报工_物料查询 @过滤=N'5960'` 可返回物料,`设计报工_人员查询 @过滤=N'孙'` 可返回人员。
- 业务规则事务验证通过,测试数据已回滚。
- `npm run build` 通过,仅有项目既有 warning。
- 未分配菜单权限。
## 2026-07-09 DesignReportTask 菜单权限、物料下拉和表单规则调整
### 用户反馈
1.`DesignReportTask` 下的四个页面增加权限,账号代码为 `1`;数据库为 `192.168.2.92 / YL_MESDB`,目标表为 `[dbo].[登录基础数据_二级菜单]`
2. 修改 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`:新建设计任务弹框中,物料编码和父件物料编码没有默认选项,必须输入后触发才有选项。
3. 检查 `DesignReportTask` 下四个页面是否都有物料编码、父件物料编码默认选项问题,并统一修改。
4. 新建设计任务去掉指派对象必填项;物料名称和父件物料名称由选择编码后带出,禁止手工修改;检查四个页面是否都有此问题并处理。
5. 后续每次 GPT/Codex 执行完毕后,必须把中文执行日志追加到 `gptlog-process/gpdlog.md`,日志包含提问、结论和完整执行过程。
### 执行过程
1. 使用 `rg` 搜索 `DesignReportTask`、菜单表和相关路由配置,确认四个页面路径:
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
2. 读取 `src/router/getRouter.js``src/router/menuComponentModule.js`,确认系统从菜单表动态生成路由,菜单行里的 `path``componet``name` 必须和页面组件对应。
3. 读取既有菜单脚本,包括:
- `db_backups/add_formality_confirm_report_menu_20260626.sql`
- `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
- `db_backups/add_timely_kit_tracking_result_menu_20260629.sql`
4. 使用用户提供的数据库连接信息连接 `192.168.2.92 / YL_MESDB`。为避免凭据落盘,日志不记录数据库密码明文。
5. 查询 `[dbo].[登录基础数据_二级菜单]` 表结构,确认:
- `IDD` 是自增主键。
- `id` 是前端菜单树使用的手工编号。
- `pid` 是父菜单编号。
- `componet` 为现有字段名,系统按该字段加载组件。
6. 查询账号代码 `1` 的菜单记录,确认“生产管理”父菜单为 `id=3`
7. 查询账号代码 `1` 下是否已存在 `DesignReportTask` 相关菜单,确认执行前不存在 `设计任务``设计报工``设计工时校验``设计工时报表` 四条菜单。
8. 新增可重复执行脚本:
- `db_backups/add_design_report_task_menu_account1_20260709.sql`
9. 菜单脚本逻辑:
- 固定只处理账号代码 `1`
- 查找账号 `1` 的“生产管理”父菜单。
- 不存在时插入四条菜单。
- 已存在时修正 `pid``path``componet``name``title``icon``模块代码``是否启用`
10. 执行菜单脚本,成功新增四条菜单:
- `id=248``pid=3``设计任务``DesignReportTask/Task/index``/ProductionManagement/DesignReportTask/Task/index`
- `id=249``pid=3``设计报工``DesignReportTask/Report/index``/ProductionManagement/DesignReportTask/Report/index`
- `id=250``pid=3``设计工时校验``DesignReportTask/Check/index``/ProductionManagement/DesignReportTask/Check/index`
- `id=251``pid=3``设计工时报表``DesignReportTask/HoursReport/index``/ProductionManagement/DesignReportTask/HoursReport/index`
11. 回读菜单表,确认四条菜单各只有一条记录,`pid` 都为 `3``是否启用` 都为 `1``模块代码` 等于各自 `id`
12. 使用 `Test-Path` 校验四个前端组件文件均存在。
13. 读取 `Task/index.vue`,确认新建设计任务弹框中:
- `物料编码` 使用 `queryMaterialOptions` 远程查询。
- `父件物料编码` 使用 `queryParentMaterialOptions` 远程查询。
- 原逻辑只在输入关键字触发 `remote-method` 后才请求物料数据。
14.`Task/index.vue` 中新增 `loadDefaultMaterialOptions()` 方法,内部调用:
- `queryMaterialOptions('')`
- `queryParentMaterialOptions('')`
15.`Task/index.vue``created()``openAdd()``openEdit()` 中调用 `loadDefaultMaterialOptions()`,保证页面查询区、新建弹框和编辑弹框打开时都有默认物料列表。
16. 执行 `npm run build` 验证,构建通过,仅有项目既有 asset size、entrypoint size、browserslist warning。
17. 继续检查 `DesignReportTask` 下四个页面:
- `Task` 页面存在物料编码和父件物料编码远程下拉。
- `Report` 页面原本查询区的物料编码和父件编码是普通输入框。
- `Check` 页面原本查询区的物料编码是普通输入框。
- `HoursReport` 页面原本查询区的物料编码是普通输入框。
18. 修改 `Report/index.vue`
- 将查询区“物料编码”从输入框改为远程下拉。
- 将查询区“父件编码”从输入框改为远程下拉。
- 增加 `materialOptions``parentMaterialOptions`
- 增加 `loadDefaultMaterialOptions()``queryMaterialOptions()``queryParentMaterialOptions()``formatMaterialLabel()`
-`created()` 中预加载默认物料和父件物料列表。
19. 修改 `Check/index.vue`
- 将查询区“物料编码”从输入框改为远程下拉。
- 增加 `materialOptions`
- 增加 `loadDefaultMaterialOptions()``queryMaterialOptions()``formatMaterialLabel()`
-`created()` 中预加载默认物料列表。
20. 修改 `HoursReport/index.vue`
- 将查询区“物料编码”从输入框改为远程下拉。
- 增加 `materialOptions`
- 增加 `loadDefaultMaterialOptions()``queryMaterialOptions()``formatMaterialLabel()`
-`created()` 中预加载默认物料列表。
21. 执行 `npm run build` 验证四个页面物料下拉改动,构建通过,仅有项目既有 warning。
22. 检查四个页面是否存在“指派对象必填”和“物料名称、父件物料名称可编辑”的问题:
- `Task/index.vue` 有新建/编辑设计任务弹框,存在 `指派对象``assigneeIds` 必填校验,也存在可编辑的 `物料名称``父件物料名称` 输入框。
- `Report/index.vue``Check/index.vue``HoursReport/index.vue` 没有新建设计任务弹框,也没有可编辑的 `物料名称``父件物料名称` 表单项,只有查询条件和表格展示。
23. 检查数据库脚本 `db_backups/create_design_report_task_module_20260630.sql`,确认 `设计报工_任务_新增``设计报工_任务_编辑``@指派对象ID``@指派对象` 参数允许为空,后端无需修改。
24. 修改 `Task/index.vue`
- 删除 `rules.assigneeIds` 必填校验。
- 保留 `formData.assigneeIds` 数组字段和 `handleAssigneeChange()`,支持用户选择指派对象但不强制要求。
-`formData.物料名称` 输入框增加 `disabled`
-`formData.关联父件物料名称` 输入框增加 `disabled`
25. 使用固定字符串搜索确认:
- `请选择指派对象` 必填提示已不存在。
- `assigneeIds` 只剩表单数据字段和选择逻辑,不再作为必填规则。
- `Task/index.vue``物料名称``父件物料名称` 表单输入框均已禁用。
- 其它三个页面仅有表格展示的 `物料名称`,没有对应可编辑输入框。
26. 执行 `npm run build` 验证表单规则和禁用输入框改动,构建通过,仅有项目既有 warning。
27. 查看 `git status --short`,确认当前工作区还存在用户或既有修改:
- `doc/设计报工任务模块.docx`
- `src/views/PlanManagement/SelfMakePlando/index.vue`
- `doc/~$报工任务模块.docx`
- 本轮相关的 `DesignReportTask` 页面改动和菜单脚本。
28. 按用户要求补录本次会话日志到 `gptlog-process/gpdlog.md`,并确认后续执行完毕后继续追加中文日志。
### 修改文件
- `db_backups/add_design_report_task_menu_account1_20260709.sql`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 账号代码 `1` 已获得 `DesignReportTask` 下四个页面菜单权限,四条菜单均挂到“生产管理”下并启用。
- `Task` 页面新建/编辑设计任务弹框打开时,物料编码和父件物料编码已有默认选项。
- `Task``Report``Check``HoursReport` 四个页面涉及物料查询的下拉均已支持默认选项。
- 新建设计任务的“指派对象”不再必填。
- 新建设计任务的“物料名称”和“父件物料名称”只能由选择编码后带出,前端禁止手工修改。
- `Report``Check``HoursReport` 页面不存在新建设计任务弹框,也不存在可编辑的物料名称或父件物料名称输入框,无需做同类表单禁用修改。
- 多次执行 `npm run build` 均通过,仅有项目既有资源体积和 browserslist 过期 warning。
- 已建立后续日志规则:每次 GPT/Codex 执行完毕后,将中文执行日志追加到 `gptlog-process/gpdlog.md`
### 验证结果
- 菜单表回读结果确认 `设计任务``设计报工``设计工时校验``设计工时报表` 各 1 条,账号代码均为 `1``pid=3``是否启用=1`
- 四个前端组件文件均存在。
- 搜索确认 `请选择指派对象` 必填提示已删除。
- 搜索确认 `物料名称``父件物料名称` 的可编辑表单问题只存在于 `Task/index.vue`,且已加 `disabled`
- `npm run build` 通过。
## 2026-07-09 补录 2026-07-01 至 2026-07-08 项目修改日志
### 用户反馈
- 用户要求把 7 月 1、2、3 日的修改,以及 7 月 6、7、8 日本项目的修改追加到 `gptlog-process/gpdlog.md`
- 要求遵守既定日志规则:每次 GPT/Codex 执行完毕后,将中文执行过程日志追加到 `gptlog-process/gpdlog.md`,内容包含提问、结论和完整执行过程。
### 执行过程
1. 读取 `gptlog-process/gpdlog.md` 末尾,确认当前日志已包含 2026-06-30 设计报工模块日志和 2026-07-09 DesignReportTask 权限、下拉、表单规则调整日志。
2. 使用 `rg` 搜索 `2026-07``七月``7月``07-0` 等关键词,确认现有总日志中没有按 2026-07-01 至 2026-07-08 单独补录的完整章节。
3. 使用 `git log --since "2026-07-01" --until "2026-07-09"` 查询 Git 历史,确认可追溯提交主要为:
- `c4a2f6e`2026-07-07 17:30:12`feat: update production reporting workflows`
- `6d93e40`2026-07-08 10:38:56`feat: 增加结算工时和历史工时选择`
- `bd9ca09`2026-07-08 16:52:29`feat: 增加设备数据导出`
4. 使用 PowerShell 按 `LastWriteTime` 查询 2026-07-01 至 2026-07-08 的项目文件修改时间,排除 `.git``node_modules``dist` 等目录。
5. 文件时间显示的关键记录:
- 2026-07-02`src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- 2026-07-03`AGENTS.md`
- 2026-07-06`src/views/ProductionManagement/OutsourceMange/index.vue`
- 2026-07-07`src/views/QualityManagement/CheckTask/processReceive.vue``src/views/ProductionManagement/SettlementWorkhours/index.vue`、多个 20260707 SQL 脚本、`src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- 2026-07-08`src/views/PlanManagement/SelfMakePlandone/index.vue``src/views/PlanManagement/WorkstationPlan/index.vue``src/views/DeviceManagement/Devicedata/index.vue``src/views/DeviceManagement/DeviceDataHistory/index.vue``doc/设计报工任务模块.docx``dist.zip`
6. 查询 2026-07-01 至 2026-07-04 的 Git 提交记录,未发现该日期范围内的 Git 提交。
7. 读取 `AGENTS.md`,确认其内容为日志记录规则:每次 GPT/Codex 执行完毕后,将中文完整执行过程日志追加到 `gptlog-process/gpdlog.md`
8. 读取 2026-07-07 提交 `c4a2f6e` 的文件清单和关键 diff确认该提交覆盖 24 个文件,包含设计报工模块、结算工时、产品合格率、及时齐套跟踪结果、外协管理、质检收检和数据库脚本。
9. 读取 2026-07-08 提交 `6d93e40` 的 diff确认其重点是排产相关页面增加结算工时和历史工时选择。
10. 读取 2026-07-08 提交 `bd9ca09` 的 diff确认其重点是设备实时数据和设备历史数据增加导出 Excel 功能。
11. 对无 Git 提交但有文件修改时间的 7 月 1、2、3、6 日,按“可追溯证据”记录,不把无法确认的内容写成确定提交。
12. 将本次补录内容追加到 `gptlog-process/gpdlog.md`
### 2026-07-01 修改补录
- 通过 Git 历史和文件修改时间检查,未发现 2026-07-01 当天有可追溯的项目代码或文档修改记录。
- 现有日志中出现的 `2026-07-01` 主要是设备信息维护日期字段的测试数据,例如入账日期测试值,不代表 2026-07-01 当天发生了项目文件修改。
### 2026-07-02 修改补录
- 文件修改时间显示 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue` 在 2026-07-02 11:50:48 修改。
- 后续该变更随 2026-07-07 提交 `c4a2f6e` 入库。
- 主要修改内容:
1. 调整 `getRouteProcessName(process)`
2.`process.工序名称``process.指派对象` 组合显示工序路线名称。
3. 如果工序名称中已经包含半角或全角括号形式的指派对象,则不重复追加。
4. 如果存在指派对象且工序名称未包含该指派对象,则显示为 `工序名称(指派对象)`
- 结论:及时齐套跟踪结果页面的路线工序显示更明确,能在工序名称旁体现指派对象。
### 2026-07-03 修改补录
- 文件修改时间显示仓库根目录新增或修改 `AGENTS.md`,时间为 2026-07-03 09:52:09。
- 当前 `AGENTS.md` 内容为本项目日志记录规则:
1. 每次 GPT/Codex 执行完毕后,须将完整执行过程日志追加到 `gptlog-process/gpdlog.md`
2. 日志包含提问、结论和完整执行过程。
3. 写入日志必须使用中文。
- 当前 `git status` 显示 `AGENTS.md` 仍为未跟踪文件。
- 结论7 月 3 日主要是建立项目级日志记录约束文件。
### 2026-07-06 修改补录
- 文件修改时间显示 `src/views/ProductionManagement/OutsourceMange/index.vue` 在 2026-07-06 13:36:58 修改。
- 后续该变更随 2026-07-07 提交 `c4a2f6e` 入库。
- 主要修改内容:
1. 外协管理操作列中,“发料”按钮增加 `v-if="scope.row.单据状态 != '已取消'"`
2. 外协管理操作列中,“收料”按钮增加 `v-if="scope.row.单据状态 != '已取消'"`
- 结论:已取消单据不再展示发料、收料操作,避免对取消状态单据继续执行业务操作。
### 2026-07-07 修改补录
- Git 提交:`c4a2f6e`
- 提交时间2026-07-07 17:30:12。
- 提交说明:`feat: update production reporting workflows`
- 提交规模24 个文件,约 3713 行新增、35 行删除。
#### 数据库脚本
1. `db_backups/create_design_report_task_module_20260630.sql`
- 新增独立设计报工模块数据库脚本。
- 创建 `MES_设计报工_任务``MES_设计报工_记录``MES_设计报工_校验记录`
- 创建设计报工物料、人员、项目、任务、开始、结束、完成、删除、工时校验、工时报表等过程。
- 脚本说明中明确:不写入现有生产报工表、不上传 SAP、不新增菜单权限。
2. `db_backups/exclude_unfinished_assembly_orders_from_close_query_20260707.sql`
- 修改 `计划排产_生产订单关闭_查询全部订单`
- 在“可关闭”逻辑中识别未结束装配订单。
- 对存在装配开始但未结束记录的订单进行排除,避免未结束装配订单被误判为可关闭。
3. `db_backups/optimize_settlement_workhours_query_20260707.sql`
- 优化 `生产管理_结算工时_查询`
- 增加合同号、产品编码、订单号、工位、开始日期、结束日期、数据条数等筛选参数。
- 使用临时表组织任务、基础工时数据和汇总结果,提高查询结构清晰度。
4. `db_backups/fix_settlement_workhours_query_restore_workhour_rows_20260707.sql`
- 修复结算工时查询,恢复从 `View_生产工时视图` 关联回来的工时报工行。
- 使用 `TaskAID`、开始时间等关键字段组织报工明细和操作人拼接。
- 继续保留结算工时汇总需要的报工工时、辅助工时、完成数、单件工时等字段。
#### 前端页面
1. `src/views/PlanManagement/SelfMakePlando/index.vue`
- 增加“历史工时”入口。
- 新增历史工时弹框。
- 通过 `生产管理_结算工时_查询` 按产品编码查询历史工时。
- 展示任务描述、生产订单号、工位、报工工时、辅助工时、完成数、结算报工单件工时、结算辅助单件工时、操作人等字段。
2. `src/views/PlanManagement/SelfMakePlandone/index.vue`
- 增加与 `SelfMakePlando` 类似的“历史工时”入口和弹框。
- 通过产品编码查询历史结算工时数据并展示。
3. `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`
- 路线工序名称增加指派对象显示,避免只看工序名无法区分指派对象。
4. `src/views/ProductionManagement/OutsourceMange/index.vue`
- 已取消单据隐藏“发料”和“收料”按钮。
5. `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- 新增导出按钮。
- 引入 `xlsx`
- 支持把主表和明细导出为 Excel。
- 导出字段包含关闭日期、生产订单号、物料、计划数量、完成数量、不良数量、合格率、工序、工位、检验说明等。
6. `src/views/ProductionManagement/SettlementWorkhours/index.vue`
- 新增导出按钮。
- 引入 `xlsx`
- 导出结算工时树表数据,并在末尾写入报工工时、主辅工时和合计工时汇总。
- 将“主辅工时”列名调整为“辅助工时”。
- 增加展开/收起状态记录,导出时只导出当前展开明细。
7. `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- 新增设计任务页面。
- 支持设计任务查询、新建、编辑、删除。
- 支持项目号、物料编码、图号、父件编码、预计时间、状态等查询条件。
8. `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 新增设计报工页面。
- 支持任务开始、结束、完成。
- 遵守未结束不能完成、已有报工记录不能删除等独立设计报工规则。
9. `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 新增设计工时校验页面。
- 支持单条校验和批量校验。
10. `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- 新增设计工时报表页面。
- 支持按操作人、日期、任务形成树形工时报表。
11. `src/views/QualityManagement/CheckTask/processReceive.vue`
- 质检收检流程中对部分调试输出做调整。
- 对采购订单行匹配条件保留工序名称和未关闭行状态判断。
12. `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue``src/views/ProductionManagement/SettlementWorkhours/index.vue`
- 两个报表类页面均增加 Excel 导出能力,统一使用 `xlsx`
#### 工作文档和日志
- 更新 `work/ProductionManagement/DesignReportTask/README.md`
- 更新 `work/ProductionManagement/DesignReportTask/01-项目功能内容.md``06-决策记录.md`
- 复制或更新 `work/ProductionManagement/DesignReportTask/设计报工任务模块.docx`
- 追加 `gptlog-process/gpdlog.md`
#### 结论
- 7 月 7 日主要是生产报工、结算工时、设计报工、订单关闭判断、产品合格率导出等生产业务流程集中更新。
- 设计报工模块的表、过程、四个页面和工作文档在该提交中完成入库。
- 结算工时查询和展示能力得到增强,后续 7 月 8 日继续在排产页面使用这些结算工时数据。
### 2026-07-08 修改补录
#### 提交一:增加结算工时和历史工时选择
- Git 提交:`6d93e40`
- 提交时间2026-07-08 10:38:56。
- 提交说明:`feat: 增加结算工时和历史工时选择`
- 涉及文件:
- `src/views/PlanManagement/SelfMakePlando/index.vue`
- `src/views/PlanManagement/SelfMakePlandone/index.vue`
- `src/views/PlanManagement/WorkstationPlan/index.vue`
##### 主要修改内容
1. `SelfMakePlando/index.vue`
- 调整历史工时弹框列顺序。
- 将结算报工单件工时、结算辅助单件工时前置展示。
- 单件工时展示时乘以 60便于按分钟口径查看。
- 保留生产订单号、工位、操作人、报工工时、辅助工时、完成数等字段。
2. `SelfMakePlandone/index.vue`
- 将原“历史工时”按钮列注释掉。
- 保留页面其他业务列。
3. `WorkstationPlan/index.vue`
- 工位排产表增加“结算工时”和“结算单件工时”列。
- 工位汇总和日期汇总增加结算工时合计。
- 单任务行增加结算单件工时选择按钮。
- 新增历史工时弹框,按产品编码调用 `生产管理_结算工时_查询`
- 历史工时弹框中支持选择“报工”或“辅助”的单件工时。
- 选择后调用 `MES_OrderPlanned_EditTaskPlanned` 保存到任务的 `结算单件工时`
- 增加 `calcStandardHours``calcSettlementHours``formatHistoryPieceHours``canSelectHistoryHour` 等辅助方法。
- 扩展表格最小宽度和列样式,适配新增结算工时列。
##### 结论
- 7 月 8 日上午主要增强排产侧的结算工时使用能力,支持从历史结算工时中选择单件工时并回写排产任务。
#### 提交二:增加设备数据导出
- Git 提交:`bd9ca09`
- 提交时间2026-07-08 16:52:29。
- 提交说明:`feat: 增加设备数据导出`
- 涉及文件:
- `src/views/DeviceManagement/Devicedata/index.vue`
- `src/views/DeviceManagement/DeviceDataHistory/index.vue`
##### 主要修改内容
1. `Devicedata/index.vue`
- 设备实时数据页面增加“导出”按钮。
- 引入 `xlsx`
- 增加 `exporting` 状态,导出时按钮 loading。
- 将当前表格数据导出为 Excel。
- 导出字段包含序号、设备名称、参数名称、数值、单位、更新时间。
- 导出文件名格式为 `设备实时数据_yyyyMMdd_HHmmss.xlsx`
2. `DeviceDataHistory/index.vue`
- 设备历史数据页面增加“导出”按钮。
- 抽出 `buildQueryParams(pageSize, pageCurrent)` 复用查询参数构建。
- 普通查询继续按分页查询。
- 导出时使用总条数作为页大小,一次性查询全部历史数据后导出。
- 导出字段包含序号、设备名称、参数名称、数值、采集时间。
- 导出文件名格式为 `设备历史数据_yyyyMMdd_HHmmss.xlsx`
##### 结论
- 7 月 8 日下午主要补齐设备实时数据和历史数据的 Excel 导出能力。
#### 其它 2026-07-08 文件时间记录
- `doc/设计报工任务模块.docx` 文件时间显示为 2026-07-08 18:27:31当前 `git status` 显示该文件仍处于修改状态。
- `dist.zip` 文件时间显示为 2026-07-08 09:10:41属于构建或发布压缩产物本次补录仅记录文件时间不作为源码变更结论。
### 本次补录修改文件
- `gptlog-process/gpdlog.md`
### 本次补录结论
- 已将 2026-07-01、2026-07-02、2026-07-03、2026-07-06、2026-07-07、2026-07-08 的可追溯项目修改追加到总日志。
- 2026-07-01 未发现可追溯项目文件修改,已在日志中明确说明。
- 2026-07-02、2026-07-03、2026-07-06 根据文件修改时间和后续提交 diff 补录。
- 2026-07-07、2026-07-08 根据 Git 提交记录和文件 diff 补录。
- 本次操作只修改日志文件,没有修改业务代码和数据库。
### 本次补录验证结果
- `git log` 已确认 2026-07-07 和 2026-07-08 的三个提交。
- `Get-ChildItem` 文件时间检查已确认 2026-07-02、2026-07-03、2026-07-06、2026-07-08 的相关文件。
- `AGENTS.md` 已读取并确认内容为中文日志记录规则。
- `gptlog-process/gpdlog.md` 已追加本节补录内容。
## 2026-07-09 DesignReportTask 项目号来源修正
### 用户反馈
- 用户指出项目号来源错了。
- 正确来源应为 `SAP.SBO_YL.dbo.VIEW_OPRJ.项目代码`
- 要求检查 `DesignReportTask` 下四个页面是否都有这个问题,并全部修改。
### 执行过程
1. 使用 `rg` 搜索 `DesignReportTask` 下四个页面和数据库脚本中的 `项目号``projectNo``projectOptions``queryProjects``设计报工_项目查询`
2. 确认原始实现问题:
- `db_backups/create_design_report_task_module_20260630.sql``设计报工_项目查询` 原来从 `dbo.MES_设计报工_任务` 的已有项目号取值。
- `Task/index.vue` 已有项目号远程下拉,但来源依赖错误过程,并且新建弹框中允许 `allow-create` 手工创建项目号。
- `Report/index.vue``Check/index.vue``HoursReport/index.vue` 的项目号查询条件是普通输入框,没有统一使用项目号来源下拉。
3. 连接目标数据库 `192.168.2.92 / YL_MESDB`,检查 `[SAP].[SBO_YL].[dbo].[VIEW_OPRJ]`
4. 查询确认 SAP 项目视图字段:
- `项目代码`
- `项目名称`
5. 抽样查询 SAP 项目视图,确认存在 `CW-260001``CW260002``HT230075-1` 等项目代码。
6. 新增数据库增量脚本:
- `db_backups/update_design_report_project_source_20260709.sql`
7. 增量脚本重建 `dbo.设计报工_项目查询`
- 来源改为 `[SAP].[SBO_YL].[dbo].[VIEW_OPRJ]`
- 返回 `项目号 = 项目代码`
- 同时返回 `项目名称`
- 支持按 `项目代码``项目名称` 模糊过滤。
8. 同步修改 `db_backups/create_design_report_task_module_20260630.sql` 中的 `设计报工_项目查询`,避免以后重跑完整脚本时又恢复为错误来源。
9. 执行 `db_backups/update_design_report_project_source_20260709.sql` 到目标库,执行成功。日志中不记录数据库密码明文。
10. 验证存储过程:
- `设计报工_项目查询 @过滤=N''` 可返回 SAP 项目代码和项目名称。
- `设计报工_项目查询 @过滤=N'CW-260001'` 返回 `CW-260001`
11. 修改 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- 查询区项目号下拉显示从 `项目号` 改为 `项目号 | 项目名称`
- 新建/编辑弹框项目号下拉显示从 `项目号` 改为 `项目号 | 项目名称`
- 去掉新建/编辑弹框项目号下拉的 `allow-create`,避免手工录入非 SAP 项目代码。
- 打开新建/编辑弹框时重新调用 `queryProjects('')`,保证默认项目列表可用。
- 增加 `formatProjectLabel()`
12. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 将查询区项目号从普通输入框改为远程下拉。
- 新增 `projectOptions``queryProjects()``formatProjectLabel()`
- 页面创建时预加载 SAP 项目代码列表。
13. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 将查询区项目号从普通输入框改为远程下拉。
- 新增 `projectOptions``queryProjects()``formatProjectLabel()`
- 页面创建时预加载 SAP 项目代码列表。
14. 修改 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- 将查询区项目号从普通输入框改为远程下拉。
- 新增 `projectOptions``queryProjects()``formatProjectLabel()`
- 页面创建时预加载 SAP 项目代码列表。
15. 使用 `rg` 检查四个页面:
- 四个页面均有 `queryProjects()`
- 四个页面项目号均使用 `设计报工_项目查询`
- `Task/index.vue` 中不再存在 `allow-create`
16. 更新工作文档:
- `work/ProductionManagement/DesignReportTask/README.md`
- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
17. 文档更新内容:
- 项目号来源从“待确认”改为 `[SAP].[SBO_YL].[dbo].[VIEW_OPRJ].[项目代码]`
- 记录 `设计报工_项目查询` 使用 SAP 项目代码。
- 记录四个页面项目号查询条件统一为远程下拉。
- 将任务矩阵 `DRT-009` 改为已完成,并新增 `DRT-020`
- 将决策记录中“项目号临时实现”标记为已废弃。
18. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 browserslist 过期 warning。
19. 查看 `git status --short`,确认本轮涉及的新增和修改文件,同时发现工作区还有不属于本轮操作的一批 `work/DeviceManagement/DeviceInformation` 删除状态,未做回退。
### 修改文件
- `db_backups/update_design_report_project_source_20260709.sql`
- `db_backups/create_design_report_task_module_20260630.sql`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `work/ProductionManagement/DesignReportTask/README.md`
- `work/ProductionManagement/DesignReportTask/01-项目功能内容.md`
- `work/ProductionManagement/DesignReportTask/02-项目程序开发详细步骤.md`
- `work/ProductionManagement/DesignReportTask/03-推进台账.md`
- `work/ProductionManagement/DesignReportTask/04-任务矩阵.md`
- `work/ProductionManagement/DesignReportTask/05-验收证据.md`
- `work/ProductionManagement/DesignReportTask/06-决策记录.md`
- `gptlog-process/gpdlog.md`
### 结论
- 项目号来源已从错误的 `MES_设计报工_任务` 历史数据改为 SAP 项目视图 `[SAP].[SBO_YL].[dbo].[VIEW_OPRJ]``项目代码`
- `设计报工_项目查询` 已发布到目标库,并返回 `项目号``项目名称`
- `DesignReportTask` 四个页面的项目号查询条件已统一使用 SAP 项目代码远程下拉。
- `Task` 页面新建/编辑项目号不再允许手工创建非 SAP 项目号。
- 工作文档中的项目号“待确认”和“临时实现”口径已更新。
### 验证结果
- SAP 视图字段验证:存在 `项目代码``项目名称`
- 存储过程验证:`设计报工_项目查询 @过滤=N'CW-260001'` 返回 `CW-260001`
- 前端代码检查:四个页面均存在 `queryProjects()``formatProjectLabel()`
- 前端构建:`npm run build` 通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask 项目号远程搜索补强
### 用户反馈
- 用户反馈:项目号也要像物料编码一样,需要远程搜索。
### 执行过程
1. 复查 `DesignReportTask` 四个页面中项目号控件配置。
2. 初次使用 `rg` 检查时PowerShell 对引号和管道符解析导致命令报错,随后改用 `Get-Content``Select-String` 读取页面内容。
3. 确认当前四个页面已使用 `remote-method="queryProjects"`,但项目号下拉需要进一步补强为和物料编码一致的使用体验:
- 页面打开时加载默认项目。
- 用户输入关键字时通过 `queryProjects` 远程查询。
- 清空选择后恢复默认项目列表。
- 打开下拉且本地列表为空时自动加载默认项目列表。
4. 修改 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- 设计任务查询区项目号下拉增加 `@clear="loadDefaultProjectOptions"`
- 新建/编辑弹框项目号下拉增加 `@clear="loadDefaultProjectOptions"`
- 两个项目号下拉均增加 `@visible-change="handleProjectVisibleChange"`
- 新增 `loadDefaultProjectOptions()`,内部调用 `queryProjects('')`
- 新增 `handleProjectVisibleChange(visible)`,下拉打开且 `projectOptions` 为空时加载默认项目列表。
- `created()``openAdd()``openEdit()` 改为调用 `loadDefaultProjectOptions()`
5. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 查询区项目号下拉增加清空后加载默认项目和打开时自动补加载逻辑。
- 新增 `loadDefaultProjectOptions()``handleProjectVisibleChange()`
- `created()` 改为调用 `loadDefaultProjectOptions()`
6. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 查询区项目号下拉增加清空后加载默认项目和打开时自动补加载逻辑。
- 新增 `loadDefaultProjectOptions()``handleProjectVisibleChange()`
- `created()` 改为调用 `loadDefaultProjectOptions()`
7. 修改 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- 查询区项目号下拉增加清空后加载默认项目和打开时自动补加载逻辑。
- 新增 `loadDefaultProjectOptions()``handleProjectVisibleChange()`
- `created()` 改为调用 `loadDefaultProjectOptions()`
8. 使用 `Select-String` 检查四个页面,确认均存在:
- `remote-method="queryProjects"`
- `@clear="loadDefaultProjectOptions"`
- `@visible-change="handleProjectVisibleChange"`
- `loadDefaultProjectOptions`
- `handleProjectVisibleChange`
9. 第一次执行 `npm run build`124 秒超时,未返回编译结果。
10. 使用 240 秒超时时间重新执行 `npm run build`,构建通过,仅有项目既有资源体积和 browserslist 过期 warning。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- `DesignReportTask` 四个页面的项目号均已按物料编码的远程搜索口径补强。
- 项目号现在支持默认列表、输入远程搜索、清空恢复默认列表、打开空列表时自动加载。
- 项目号数据仍来自已修正的 `设计报工_项目查询`,即 SAP 项目视图 `[SAP].[SBO_YL].[dbo].[VIEW_OPRJ].[项目代码]`
### 验证结果
- 四个页面均检查到项目号远程搜索相关配置。
- 第二次 `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask 操作列按钮横向显示
### 用户反馈
- 用户反馈:操作列下的功能按钮不要纵向显示,容易误触,改成横向;检查 `DesignReportTask` 下四个页面是不是都有这个问题,并全部修改。
### 执行过程
1. 检查 `DesignReportTask` 下四个页面:
- `Task/index.vue` 存在操作列,按钮为“编辑 / 删除”。
- `Report/index.vue` 存在操作列,按钮为“开始 / 结束 / 完成”。
- `Check/index.vue` 存在操作列,按钮为“校验 / 已校验”。
- `HoursReport/index.vue` 未发现操作列,因此没有纵向按钮问题。
2. 第一次按精确标签搜索操作列未命中,随后改用 `rg` 关键字和 UTF-8 读取方式定位具体模板位置。
3. 修改 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- 操作列宽度从 `130` 调整为 `150`
- 将“编辑 / 删除”按钮包裹到 `design-action-buttons` 容器内。
- 新增横向 `inline-flex` 样式,设置不换行、居中、固定按钮间距。
- 覆盖 Element UI 相邻按钮默认左边距,避免按钮被默认样式挤到纵向排列。
4. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 操作列宽度从 `180` 调整为 `210`
- 将“开始 / 结束 / 完成”按钮包裹到 `design-action-buttons` 容器内。
- 新增与 `Task` 页面一致的横向按钮样式。
5. 修改 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- 操作列宽度从 `90` 调整为 `100`
- 将“校验 / 已校验”按钮包裹到 `design-action-buttons` 容器内。
- 新增与其他页面一致的横向按钮样式。
6.`HoursReport/index.vue` 进行检查,确认页面只有报表树形表格和查询条件,没有操作列,未做代码修改。
7. 使用 `rg` 检查三个已修改页面,确认都已存在 `design-action-buttons` 模板和样式。
8. 执行 `npm run build`构建通过输出仅包含项目既有资源体积过大、Browserslist / baseline 数据过期 warning。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- `Task``Report``Check` 三个有操作列的页面已统一改为横向按钮排列,避免按钮纵向堆叠导致误触。
- `HoursReport` 页面没有操作列,本次无需修改。
### 验证结果
- 已检查到三个页面均存在 `design-action-buttons` 横向按钮容器。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask 设计报工多人开始结束逻辑
### 用户反馈
- 用户要求修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 业务规则:
- 一个任务允许多个人员分别点击开始和结束。
- A 点击开始后B 也可以点击开始。
- A 点击结束时,只记录 A 自己的开始时间和结束时间。
- B 点击结束时,只记录 B 自己的开始时间和结束时间。
- 点击完成时必须判断所有已点击开始的人员都已点击结束。
- 如果有人开始后未结束,需要提示具体是谁未结束,且不更新任务状态。
- 只有所有开始记录都已结束后,才允许完成任务。
### 执行过程
1. 读取 `Report/index.vue`,确认当前前端逻辑使用 `未结束报工数` 控制按钮:
- `canStart` 要求 `未结束报工数 === 0`,导致 A 开始后 B 不能开始。
- `canEnd` 只判断任务是否存在未结束记录,不能保证只结束当前操作人的记录。
- `canComplete` 在存在未结束记录时直接禁用按钮,无法按用户要求点击后提示未结束人员。
2. 检查 `db_backups/create_design_report_task_module_20260630.sql`,确认数据库过程也存在同样限制:
- `设计报工_任务_开始` 原来只要任务存在任意未结束记录就禁止开始。
- `设计报工_任务_结束` 原来取任务最新一条未结束记录,不区分当前操作人。
- `设计报工_任务_完成` 原来只提示任务存在未结束报工,未返回具体人员。
3. 查询目标库 `YL_MESDB``MES_设计报工_记录` 表字段,确认已有 `操作人ID``操作人``开始时间``结束时间``工时秒数``报工状态` 等字段,支持按人员拆分报工记录,无需改表结构。
4. 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- 查询参数增加 `当前操作人ID``当前操作人`
- 表格增加“未结束人员”列。
- `canStart` 改为只判断当前用户是否存在未结束报工。
- `canEnd` 改为只在当前用户存在未结束报工时可点击。
- `canComplete` 改为任务未完成且已有报工记录即可点击。
- `completeTask` 增加前端判断:如果 `未结束报工数 > 0`,提示 `未结束报工人员`,不调用完成过程。
5. 新增增量脚本 `db_backups/update_design_report_multi_person_work_20260709.sql`
- 更新 `设计报工_任务_查询`,返回 `当前用户未结束报工数``未结束报工人员`
- 更新 `设计报工_任务_开始`,只禁止当前人员重复开始,允许其他人员同时开始。
- 更新 `设计报工_任务_结束`,只结束当前人员自己的未结束记录;若其他人员仍未结束,任务状态保持 `执行中`
- 更新 `设计报工_任务_完成`,如果存在未结束记录,返回“以下人员还未点击结束:人员名单”,不更新任务状态。
6. 同步更新完整建库脚本 `db_backups/create_design_report_task_module_20260630.sql`,确保后续重建模块时不会丢失多人报工逻辑。
7. 使用 `sqlcmd -f 65001` 将增量脚本发布到 `192.168.2.92 / YL_MESDB`,未在日志中记录数据库密码。
8. 第一次事务验证时发现人员名单拼接使用 XML 方法会受到当前 SQL 执行环境 `QUOTED_IDENTIFIER` 设置影响,过程执行报错。
9. 将人员名单拼接从 XML 方法改为 SQL Server 2019 支持的 `STRING_AGG`,重新更新增量脚本和完整建库脚本。
10. 重新发布增量脚本到目标库。
11. 使用事务创建临时测试任务并回滚,验证流程:
- 测试 A 点击开始成功。
- 测试 B 点击开始成功。
- 查询结果显示 `报工次数=2``未结束报工数=2``当前用户未结束报工数=1``未结束报工人员=测试A、测试B`
- 测试 A 点击结束成功。
- A 结束后点击完成失败返回“以下人员还未点击结束测试B”。
- 测试 B 点击结束成功。
- A/B 都结束后点击完成成功。
- 事务最终回滚,测试数据未保留。
12. 执行 `npm run build`,前端构建通过,仅有项目既有资源体积和 Browserslist / baseline 数据过期 warning。
13. 查询数据库确认 `GPT-TEST` 临时测试任务残留数为 0并确认 `设计报工_任务_完成` 已发布为包含 `STRING_AGG` 的新定义。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `db_backups/update_design_report_multi_person_work_20260709.sql`
- `db_backups/create_design_report_task_module_20260630.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计报工页面已支持同一任务多人分别开始、分别结束。
- 当前人员只能结束自己的未结束报工记录,不会误结束其他人员记录。
- 完成任务时会检查所有开始记录是否都已结束;如仍有人未结束,会提示具体人员并阻止任务完成。
- 数据库过程已同步发布到目标库,完整建库脚本也已同步更新。
### 验证结果
- 数据库事务验证通过,测试数据已回滚且无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask DID 3 完成误判复查与防护
### 用户反馈
- 用户反馈:刚测试 DID=3 任务,点击完成时另一个人没有点结束也提示完成了;完成后另一个人点不了结束。
### 执行过程
1. 查询目标库 `192.168.2.92 / YL_MESDB` 中 DID=3 的真实数据:
- `MES_设计报工_任务` 中 DID=3 状态为 `已完成`
- `MES_设计报工_记录` 中 DID=3 只有 1 条记录,操作人为“超级管理员”,且该记录已有结束时间。
- DID=3 未查询到第二个人的未结束报工记录。
2. 复查数据库过程定义:
- `设计报工_任务_完成` 已包含“以下人员还未点击结束”的拦截逻辑。
- `设计报工_任务_结束` 已按当前人员查找未结束记录。
3. 结论判断:
- DID=3 完成成功的直接原因是数据库中没有“另一个人”的开始记录。
- 另一个人点不了结束,是因为 DID=3 没有该人员可结束的未结束记录,且任务已完成。
4. 为避免页面旧数据或并发操作再次造成误判,修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `completeTask` 改为异步方法。
- 点击完成时新增 `getLatestTask(DID)`,先实时调用 `设计报工_任务_查询` 获取最新任务状态。
- 完成前使用实时返回的 `未结束报工数``未结束报工人员` 判断,不再只依赖表格旧行数据。
- 如果实时查询发现有人未结束,提示具体人员并停止调用完成过程。
- 如果实时查询发现任务已完成,提示“任务已完成”并刷新表格。
- 如果任务没有已结束报工,提示不能完成。
- `canEnd` 改为只要当前用户存在未结束报工就允许点击结束,不再因为任务状态是 `已完成` 就禁用,用于修复历史异常状态下“已完成但仍有未结束记录”的结束入口。
5. 新增数据库防护脚本 `db_backups/fix_design_report_complete_guard_20260709.sql`
- 重新发布 `设计报工_任务_开始``设计报工_任务_结束``设计报工_任务_完成`
- 开始、结束、完成均对对应 DID 的任务行使用事务锁,避免完成与开始/结束并发造成状态误判。
- 完成过程在事务内重新查询未结束人员,存在未结束记录时返回具体人员并不更新任务状态。
- 结束过程允许历史异常状态下“任务已完成但当前人员仍有未结束记录”的人员继续结束自己的记录。
6. 第一次事务验证时发现过程内部直接 `ROLLBACK TRANSACTION` 会回滚外层测试事务。
7. 修改防护脚本事务写法:
- 没有外层事务时由过程自己开启并提交事务。
- 存在外层事务时使用 `SAVE TRANSACTION` 保存点。
- 失败时只回滚过程自己的保存点,不破坏调用方外层事务。
8. 使用 `sqlcmd -f 65001` 发布防护脚本到目标库,日志中未记录数据库密码。
9. 使用事务验证多人未结束完成拦截:
- 测试 A 开始成功。
- 测试 B 开始成功。
- 测试 A 结束成功。
- 此时点击完成返回失败提示“以下人员还未点击结束测试B”。
- 查询显示任务仍为 `执行中``未结束报工数=1``当前用户未结束报工数=1``未结束报工人员=测试B`
10. 使用事务验证历史异常状态:
- 临时创建一个状态为 `已完成` 但测试 B 仍未结束的任务。
- 查询显示 `未结束报工数=1``当前用户未结束报工数=1`
- 测试 B 点击结束成功。
- 结束后查询显示 `未结束报工数=0`,任务保持 `已完成`
11. 两组事务验证均已回滚,查询确认 `GPT-GUARD``GPT-BAD` 测试数据残留为 0。
12. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 Browserslist / baseline 数据过期 warning。
13. 查询 DID=3 当前未结束记录数为 0确认 DID=3 没有可让另一个人结束的未结束记录。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `db_backups/fix_design_report_complete_guard_20260709.sql`
- `gptlog-process/gpdlog.md`
### 结论
- DID=3 本次完成成功是因为数据库里并没有第二个人的未结束开始记录。
- 已补充前端完成前实时查库,避免表格旧数据导致误判。
- 已补充数据库事务锁防护,完成过程会在最终更新状态前重新检查未结束人员。
- 已允许历史异常状态下,当前人员仍有未结束记录时可以点击结束自己的记录。
### 验证结果
- DID=3 当前未结束记录数为 0。
- 多人未结束完成拦截验证通过。
- 历史异常已完成状态下结束验证通过。
- 测试数据无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 清空 DesignReportTask 设计报工业务数据
### 用户反馈
- 用户要求:清空设计相关的数据。
### 执行过程
1.`DesignReportTask` 设计报工模块业务数据范围处理,未清理菜单权限、存储过程和表结构。
2. 确认需要清空的三张业务表:
- `dbo.MES_设计报工_任务`
- `dbo.MES_设计报工_记录`
- `dbo.MES_设计报工_校验记录`
3. 清空前查询目标库 `YL_MESDB` 当前数据量:
- `MES_设计报工_任务`2 行。
- `MES_设计报工_记录`2 行。
- `MES_设计报工_校验记录`1 行。
4. 清空前先导出本地备份,备份目录:
- `db_backups/design_report_data_backup_20260709_110417/`
5. 备份文件包括:
- `MES_设计报工_任务.json`
- `MES_设计报工_记录.json`
- `MES_设计报工_校验记录.json`
- `_summary.json`
6. 使用事务按依赖顺序清空数据:
- 先清空 `MES_设计报工_校验记录`
- 再清空 `MES_设计报工_记录`
- 最后清空 `MES_设计报工_任务`
7. 清空后执行 `DBCC CHECKIDENT`,将三张表自增标识重置为 0。
8. 再次查询三张业务表行数,确认均为 0。
9. 查询三张表当前标识值,确认均为 0。
### 修改文件
- `db_backups/design_report_data_backup_20260709_110417/MES_设计报工_任务.json`
- `db_backups/design_report_data_backup_20260709_110417/MES_设计报工_记录.json`
- `db_backups/design_report_data_backup_20260709_110417/MES_设计报工_校验记录.json`
- `db_backups/design_report_data_backup_20260709_110417/_summary.json`
- `gptlog-process/gpdlog.md`
### 结论
- `DesignReportTask` 设计报工模块三张业务表已清空。
- 清空前数据已备份到本地 `db_backups/design_report_data_backup_20260709_110417/`
- 表结构、存储过程、菜单权限未清理。
- 三张表自增编号已重置,后续新增数据将从 1 开始。
### 验证结果
- `MES_设计报工_任务` 当前 0 行。
- `MES_设计报工_记录` 当前 0 行。
- `MES_设计报工_校验记录` 当前 0 行。
- 三张表当前标识值均为 0。
## 2026-07-09 DesignReportTask 已完成任务禁止开始补充判断
### 用户反馈
- 用户反馈:当任务状态为完成时,点击开始应该提示失败;现在任务已经被另一个人点击完成后,还能点击开始。
### 执行过程
1. 检查 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
2. 确认页面原有 `canStart(row)` 会根据当前表格行的 `单据状态` 禁用开始按钮,但如果另一个人完成任务后当前页面未刷新,当前行仍可能是旧状态,导致用户仍能点击开始。
3. 查询数据库过程 `dbo.设计报工_任务_开始`,确认后端已包含“任务已完成,不能开始”的拦截逻辑。
4. 修改 `Report/index.vue``startTask(row)`
-`startTask` 改为异步方法。
- 点击开始时先调用已有 `getLatestTask(DID)` 实时查询数据库最新任务状态。
- 使用实时返回结果覆盖当前表格行数据。
- 如果实时状态为 `已完成`,提示“任务已完成,不能开始”,刷新表格,并停止调用开始过程。
- 如果当前人员已经存在未结束报工,提示“当前人员已存在未结束的报工记录”,并停止调用开始过程。
- 只有实时状态允许开始时才调用 `设计报工_任务_开始`
5. 使用事务临时创建一个状态为 `已完成` 的测试任务,并调用 `设计报工_任务_开始` 验证后端返回:
- `result=0`
- `message=任务已完成,不能开始`
6. 验证事务回滚后测试数据残留数为 0。
7. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 Browserslist / baseline 数据过期 warning。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 已完成任务点击“开始”时,前端会先实时查库。
- 如果任务已被其他人完成,会立即提示“任务已完成,不能开始”,不会再调用开始过程。
- 后端开始过程也已确认存在同样拦截,前后端均有保护。
### 验证结果
- 后端模拟已完成任务点击开始,返回“任务已完成,不能开始”。
- 测试数据无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask 设计任务删除失败逻辑修正
### 用户反馈
- 用户反馈:设计任务删除的结果逻辑不正确。任务 1 点击删除并确认时提示“删除成功”,实际应该提示“删除失败”。
### 执行过程
1. 检查 `src/views/ProductionManagement/DesignReportTask/Task/index.vue``deleteTask(row)`
- 原逻辑确认后直接调用 `设计报工_任务_删除`
- 前端只按返回 `result` 判断成功或失败。
2. 查询目标库中 DID=1 的真实数据:
- DID=1 当前状态为 `已完成`
- DID=1 存在 3 条 `MES_设计报工_记录`
- DID=1 存在 3 条 `MES_设计报工_校验记录`
3. 检查数据库删除过程 `dbo.设计报工_任务_删除`
- 原过程只判断是否存在报工记录。
- 对任务不存在、已完成状态、删除 0 行、校验记录等场景保护不足。
4. 修改 `Task/index.vue`
- 删除确认后先调用新增的 `getLatestTask(DID)` 实时查询数据库最新任务。
- 如果任务不存在,提示“删除失败:任务不存在或已被删除”。
- 如果 `报工次数 > 0`,提示“删除失败:该任务已有设计报工记录,不能删除”。
- 如果任务状态为 `已完成`,提示“删除失败:任务已完成,不能删除”。
- 如果任务状态不是 `待开始`,提示对应状态不能删除。
- 只有实时查询确认可删除时,才调用 `设计报工_任务_删除`
- 删除调用增加异常捕获,接口异常时提示“删除失败”。
5. 新增数据库脚本 `db_backups/fix_design_report_delete_guard_20260709.sql`
- 重新发布 `dbo.设计报工_任务_删除`
- 只允许 `待开始` 且无报工记录、无校验记录的任务删除。
- 任务不存在、已有报工、已有校验、已完成、非待开始状态、删除 0 行均返回 `result=0`
- 删除成功时才返回 `result=1`
6. 同步更新完整建库脚本 `db_backups/create_design_report_task_module_20260630.sql` 中的删除过程定义。
7. 发布删除防护脚本到目标库 `YL_MESDB`,日志中未记录数据库密码。
8. 验证 DID=1 删除:
- 执行 `设计报工_任务_删除 @DID=1` 返回 `result=0`
- 返回消息为“删除失败:该任务已有设计报工记录,不能删除”。
- DID=1 任务仍存在。
9. 使用事务临时创建一个 `待开始` 且无报工记录的测试任务,验证可删除场景:
- 删除过程返回 `result=1``message=删除成功`
- 事务内删除后任务残留为 0。
- 回滚后测试数据残留为 0。
10. 执行 `npm run build`,构建通过,仅有项目既有资源体积和 Browserslist / baseline 数据过期 warning。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `db_backups/fix_design_report_delete_guard_20260709.sql`
- `db_backups/create_design_report_task_module_20260630.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 任务 1 这类已有报工记录的设计任务,现在删除时会提示删除失败。
- 前端删除前会实时查库,不再只依赖表格旧数据。
- 后端删除过程已补充完整保护,只允许未开始且无关联业务记录的任务删除。
### 验证结果
- DID=1 删除返回失败,提示“该任务已有设计报工记录,不能删除”。
- 可删除的待开始测试任务仍能正常删除。
- 测试数据无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-09 DesignReportTask 增加类别字段
### 用户提问
- 用户要求:设计报工模块增加字段“类别”,类型为文本输入。
### 执行过程
1. 检查 `DesignReportTask` 下四个页面:
- `Task/index.vue`
- `Report/index.vue`
- `Check/index.vue`
- `HoursReport/index.vue`
2. 确认“类别”应作为设计任务主数据字段保存,并在各业务查询中展示和筛选。
3. 修改 `Task/index.vue`
- 查询区增加“类别”文本输入框。
- 表格增加“类别”列。
- 新建/编辑设计任务弹框增加“类别”文本输入框。
- 表单初始数据增加 `类别`
- 任务查询参数增加 `类别`
- 新增、编辑保存参数增加 `类别`
- 删除前实时查询任务详情时补充 `类别` 参数,避免过程参数不一致。
4. 修改 `Report/index.vue`
- 查询区增加“类别”文本输入框。
- 表格增加“类别”列。
- 报工任务查询参数增加 `类别`
- 开始/结束/完成前实时查询任务详情时补充 `类别` 参数。
5. 修改 `Check/index.vue`
- 查询区增加“类别”文本输入框。
- 表格增加“类别”列。
- 工时校验查询参数增加 `类别`
6. 修改 `HoursReport/index.vue`
- 查询区增加“类别”文本输入框。
- 表格增加“类别”列。
- 工时报表查询参数增加 `类别`
- 树形标题中优先显示“类别 | 任务描述”,方便按类别识别任务。
7. 修改完整建库脚本 `db_backups/create_design_report_task_module_20260630.sql`
- `MES_设计报工_任务` 表增加 `[类别] nvarchar(100) NULL`
- 增加 `COL_LENGTH` 兼容判断,旧库缺少字段时自动 `ALTER TABLE`
- 以下过程增加 `@类别` 参数、返回字段和筛选条件:
- `设计报工_任务_查询`
- `设计报工_任务_新增`
- `设计报工_任务_编辑`
- `设计报工_记录_查询`
- `设计报工_工时校验_查询`
- `设计报工_工时报表_作业者工时_查询`
8. 新增增量脚本 `db_backups/add_design_report_category_field_20260709.sql`
- 用于直接更新现有数据库,不重建已有业务对象。
- 增加任务表“类别”字段。
- 重建上述 6 个查询/新增/编辑相关过程。
9. 将增量脚本发布到目标数据库 `192.168.2.92 / YL_MESDB`,日志中不记录数据库密码。
10. 数据库验证:
- 检查 `MES_设计报工_任务``类别` 字段存在,结果为 `1`
- 检查 6 个相关存储过程均包含 `@类别` 参数和 `[类别]` 字段,结果均为 `1`
- 第一次事务验证时误按旧理解传入了 `@任务状态`,数据库返回该参数不存在;随后查询真实过程签名并按真实参数重新验证。
- 第二次事务验证中执行新增,返回 `result=1``message=新增成功`、验证 DID 为 `6`,新增类别为 `结构`
- 同一事务内执行编辑,返回 `result=1``message=编辑成功`,编辑后类别为 `电气`
- 事务回滚后验证数据残留数量为 `0`
11. 前端静态检查:
- 使用 `rg``Select-String` 确认四个页面均存在“类别”查询输入、表格列和查询参数。
12. 执行 `npm run build`
- 构建通过。
- 仅有项目既有资源体积超限 warning以及 Browserslist / baseline-browser-mapping 数据过期提示。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `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_category_field_20260709.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计报工模块已增加“类别”文本字段。
- 新建设计任务和编辑设计任务可以录入、保存、修改“类别”。
- 任务管理、设计报工、工时校验、工时报表四个页面均支持按“类别”筛选并展示“类别”列。
- 数据库表和相关存储过程已同步更新到目标库。
### 验证结果
- 数据库字段存在,相关存储过程均已包含“类别”。
- 新增/编辑事务验证通过,测试数据已回滚,无残留。
- `npm run build` 构建通过,仅有项目既有 warning。
## 2026-07-10 DesignReportTask Check 和 HoursReport 菜单权限补录
### 用户提问
- 用户要求给 `DesignReportTask``check``HoursReport` 添加账号代码 `1` 的二级菜单权限。
- 目标数据库为 `192.168.2.92 / YL_MESDB`,目标表为 `[dbo].[登录基础数据_二级菜单]`
- 数据库账号信息由用户提供,本日志不记录数据库明文密码。
### 执行过程
1. 读取当前项目目录,确认存在 `gptlog-process/gpdlog.md``db_backups``DesignReportTask` 相关历史记录。
2. 使用 `rg` 搜索 `登录基础数据_二级菜单``DesignReportTask``HoursReport``check`,确认项目内已有设计报工模块和历史菜单处理记录。
3. 确认本机存在 `sqlcmd`,路径为 SQL Server ODBC 170 工具目录下的 `SQLCMD.EXE`
4. 读取 `db_backups/add_design_report_task_menu_account1_20260709.sql`,确认历史脚本中四个页面的菜单定义:
- `DesignReportTask/Task/index`:设计任务
- `DesignReportTask/Report/index`:设计报工
- `DesignReportTask/Check/index`:设计工时校验
- `DesignReportTask/HoursReport/index`:设计工时报表
5. 第一次直接读取脚本和日志时发现 PowerShell 默认编码显示中文乱码,随后改用 `Get-Content -Encoding UTF8` 重新读取,确认脚本内容和日志中文正常。
6. 使用 `sqlcmd -f 65001` 连接目标库,查询账号代码 `1``DesignReportTask/Check/index``DesignReportTask/HoursReport/index``设计工时校验``设计工时报表`,执行前未查询到对应记录。
7. 同步查询账号代码 `1` 的一级父菜单,确认“生产管理”父菜单存在且启用,`id=3`
8. 查询 `[dbo].[登录基础数据_二级菜单]` 表结构,确认:
- `IDD` 为 identity 字段。
- `id` 不是 identity需要手工维护。
- 菜单字段包含 `pid``path``componet``name``title``icon``账号代码``模块代码``是否启用``操作时间` 等。
9. 查询当前最大 `id``249`
10. 查询账号代码 `1` 下已有 `DesignReportTask` 菜单,确认已有:
- `id=248``设计任务``DesignReportTask/Task/index`,已启用。
- `id=249``设计报工``DesignReportTask/Report/index`,已启用。
11. 在事务中补录并启用两条缺失菜单:
- `id=250``pid=3``path=DesignReportTask/Check/index``componet=/ProductionManagement/DesignReportTask/Check/index``name=DesignReportCheck``title=设计工时校验``icon=PayStateSearch``账号代码=1``模块代码=250``是否启用=1`
- `id=251``pid=3``path=DesignReportTask/HoursReport/index``componet=/ProductionManagement/DesignReportTask/HoursReport/index``name=DesignReportHoursReport``title=设计工时报表``icon=DimensionsSummaryReport``账号代码=1``模块代码=251``是否启用=1`
12. 事务提交后 SQL 返回汇总:插入 `2` 条,更新启用 `2` 条,父菜单 `parent_id=3`
13. 再次查询账号代码 `1` 下所有 `DesignReportTask` 菜单,确认共有四条并全部启用:
- `248`:设计任务
- `249`:设计报工
- `250`:设计工时校验
- `251`:设计工时报表
14. 本次未修改前端代码和业务表结构,只修改了目标数据库中的二级菜单权限记录,并追加本日志。
### 结论
- 账号代码 `1` 已补齐 `DesignReportTask``Check``HoursReport` 两个页面的二级菜单权限。
- 两条菜单均挂在账号代码 `1` 的“生产管理”父菜单下,父菜单 `id=3`
- 当前账号代码 `1``DesignReportTask` 四个菜单 `Task``Report``Check``HoursReport` 均存在且 `是否启用=1`
### 验证结果
- `设计工时校验``id=250``pid=3``是否启用=1`
- `设计工时报表``id=251``pid=3``是否启用=1`
- 最终复查查询返回 `DesignReportTask` 四条菜单,编号为 `248``251`
## 2026-07-10 上传所有修改到远程
### 用户提问
- 用户要求:上传所有修改到远程。
### 执行过程
1. 检查 Git 工作区状态,确认当前存在已修改、已删除和未跟踪文件。
2. 确认当前分支为 `snapshot/local-save-20260625-154806`
3. 确认远程仓库为 `origin`,地址为 `http://154.8.160.151:3000/meswork/MES_Manage_View_V20.git`
4. 查询最近一次提交,当前 HEAD 为 `bd9ca09 feat: 增加设备数据导出`
5. 使用 `git status -sb` 确认当前分支跟踪 `origin/snapshot/local-save-20260625-154806`
6. 使用 `git branch -vv` 确认本地分支已绑定同名远程分支。
7. 使用 `git diff --stat` 汇总已跟踪文件改动,确认包含设计报工模块前端、数据库脚本、文档、日志和设备资料目录删除等改动。
8. 使用 `git ls-files --others --exclude-standard` 汇总未跟踪文件,确认包含 `AGENTS.md`、设计报工相关增量 SQL 脚本和数据备份 JSON。
9. 执行 `git fetch origin` 刷新远程状态。
10. 第一次执行上游分支检查时PowerShell 将 `@{u}` 解析为哈希字面量导致命令失败;随后改用引号包裹 `@{u}` 重新执行。
11. 重新确认上游分支为 `origin/snapshot/local-save-20260625-154806`
12. 使用 `git rev-list --left-right --count HEAD...'@{u}'` 确认本地与远程提交差异为 `0 0`,提交前不存在分叉。
13. 使用 `git status --porcelain | Measure-Object -Line` 统计当前工作区有 `32` 条状态记录。
14. 按日志规则先追加本条中文执行记录,本条记录将随同本次提交一起推送到远程。
15. 后续将执行 `git add -A` 全量暂存当前可见改动,创建提交,并推送到当前跟踪远程分支。
### 结论
- 已确认当前分支和远程分支未分叉,可以直接提交并推送。
- 本次按用户“所有修改”的要求处理,不筛除当前工作区中的已修改、已删除和未跟踪文件。
- 本日志记录会随同本次提交一起上传到远程。
## 2026-07-10 上传所有修改到远程结果补充
### 执行过程
1. 执行 `git add -A`,将当前工作区全部已修改、已删除和未跟踪文件纳入暂存区。
2. `git add -A` 过程中出现若干 LF/CRLF 换行符提示,未阻止暂存。
3. 使用 `git status --short` 复核暂存区,确认新增、修改、删除均已暂存。
4. 使用 `git diff --cached --stat` 复核暂存统计,确认本次暂存共 `35` 个文件变更,包含 `3033` 行新增和 `780` 行删除。
5. 执行 `git commit -m "chore: 上传当前工作区修改"` 创建提交。
6. 提交创建成功,提交号为 `a6a92ff`,提交信息为 `chore: 上传当前工作区修改`
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`
### 结论
- 设计报工点击“结束”后会先弹出确认窗口。
- 弹框显示 id 号、物料编码、物料名称、任务描述,并支持填写“进度说明”。
- 只有点击弹框“确认”后才会真正执行结束报工。
- “进度说明”已落库到报工记录,并在校验页面和工时报表中展示。
### 验证结果
- 数据库增量脚本已发布到 `192.168.2.92 / YL_MESDB`
- 数据库事务验证通过,测试数据已回滚。
- `npm run build` 构建通过,仅有项目既有体积和 Browserslist 数据过期 warning。
## 2026-07-10 上传设计报工相关修改到远程
### 用户提问
- 用户要求“上传所有修改到远程”。
### 执行过程
1. 在完成设计报工相关前端修改、数据库脚本发布、数据库事务验证和前端构建验证后,检查 Git 工作区。
2. 确认本地分支为 `snapshot/local-save-20260625-154806`,跟踪远端分支 `origin/snapshot/local-save-20260625-154806`
3. 执行 `git fetch origin` 刷新远端状态。
4. 检查本地与远端提交数量差异,结果为 `0 0`,确认推送前本地和远端没有分叉。
5. 使用内容搜索检查待提交文件中未包含数据库明文密码。
6. 暂存本批设计报工相关改动文件:
- `db_backups/add_design_report_progress_note_20260710.sql`
- `db_backups/create_design_report_task_module_20260630.sql`
- `db_backups/fix_design_report_check_status_20260710.sql`
- `db_backups/move_design_report_task_to_rd_menu_account1_20260710.sql`
- `gptlog-process/gpdlog.md`
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
7. 执行 `git diff --cached --check`,未发现空白错误。
8. 创建提交:
- 提交号:`e89cef4`
- 提交信息:`feat: 完善设计报工研发管理流程`
9. 执行 `git push`,将提交推送到远端 `origin/snapshot/local-save-20260625-154806`
10. 为满足项目日志要求,追加本条中文执行记录,并继续将该日志补充同步到远端。
### 结论
- 设计报工相关功能和数据库脚本改动已提交并推送到远端。
- 功能提交号为 `e89cef4`
- 本条日志补充将继续提交并推送到同一远端分支。
## 2026-07-11 设计工时报表增加数据导出功能
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/HoursReport/index` 页面,增加数据导出功能。
### 执行过程
1. 读取仓库根目录 `AGENTS.md`,确认每次执行结束后必须将提问、结论和完整执行过程以中文追加到 `gptlog-process/gpdlog.md`
2. 搜索菜单、工作文档和前端源码,确认菜单虽然位于 `ResearchManagement`,但真实组件路径仍为 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
3. 检查目标页面现有实现,确认:
- 页面通过 `设计报工_工时报表_作业者工时_查询` 一次查询全部结果,没有分页。
- 查询结果在前端组装为“操作人、日期、任务”三级树形结构。
- 页面已有开始日期、结束日期、操作人、项目号、物料编码、类别和任务 ID 筛选条件。
4. 搜索项目内已有 Excel 导出实现,确认项目已安装并普遍使用 `xlsx`,导出按钮采用 Element UI 的 `el-icon-download` 和成功、失败、无数据消息提示。
5. 确定采用前端导出当前查询结果的方案,不新增后端接口,也不重复请求数据库;导出顺序保持页面树形显示顺序。
6. 修改 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- 在查询按钮旁增加“导出”按钮。
- 查询加载中或当前无数据时禁用导出按钮。
- 增加独立的 `exporting` 状态,导出过程中显示加载状态。
- 引入 `xlsx`
- 新增树形数据递归扁平化方法,按操作人、日期、任务的顺序生成 Excel 数据。
- 导出操作人汇总、日期汇总和任务明细,并增加“层级”列便于识别数据类型。
- 导出页面现有字段:操作人/日期/任务、工作日期、RID、DID、项目号、物料编码、物料名称、图号、类别、报工次数、工时、开始时间、结束时间、校验状态、进度说明和备注。
- 为各列设置适合中文内容的列宽。
- 导出文件名使用 `设计工时报表_yyyyMMdd_HHmmss.xlsx` 格式。
- 增加无数据、导出成功和导出失败提示及异常日志。
7. 执行 `npx eslint src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`,单文件 ESLint 检查通过;仅出现项目依赖的 Browserslist 和 Baseline 数据过期提示。
8. 首次执行生产构建时调用超时并被终止,没有形成有效验证结果。
9. 使用充足超时时间重新执行 `npm run build`Webpack 生产构建成功;仅有项目原有的大资源体积警告和浏览器兼容数据库过期提示。
10. 检查 Git 工作区和差异:构建未留下 `dist` 版本控制变更,`git diff --check` 未发现空白错误。
11. 启动本地开发服务器进行预览验证。首次开发编译耗时较长,在 HTTP 轮询截止后随即完成,日志显示 `webpack compiled successfully`
12. 确认开发服务器使用 HTTPS使用忽略本地证书校验的请求访问 `https://localhost:1997/`,返回 HTTP `200`。随后将开发服务器重启为日志输出到系统临时目录,清理工作区临时日志,并保持预览服务运行。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 设计工时报表页面已增加 Excel 数据导出功能。
- 导出内容使用当前筛选后的完整树形报表数据,并保留操作人汇总、日期汇总和任务明细层级。
- 不需要新增或修改后端接口。
### 验证结果
- 单文件 ESLint 检查通过。
- `npm run build` 生产构建通过。
- `git diff --check` 通过。
- 本地开发服务器编译成功,`https://localhost:1997/` 返回 HTTP `200`
## 2026-07-11 产品合格率工位菜单迁移到质量管理
### 用户提问
- 用户要求将 `ProductionManagement/ProductPassRateWorkstation/index` 页面放到“质量管理”菜单下,并提供了目标数据库 `192.168.2.92` 的授权凭据。
- 按安全要求,本日志不记录数据库明文密码。
### 执行过程
1. 搜索前端页面、菜单脚本和项目工作文档,确认:
- 页面组件为 `src/views/ProductionManagement/ProductPassRateWorkstation/index.vue`
- 菜单路由为 `ProductPassRateWorkstation/index`
- 组件配置为 `/ProductionManagement/ProductPassRateWorkstation/index`
- 原菜单脚本 `db_backups/add_product_pass_rate_workstation_menu_20260630.sql` 按生产管理中的“生产计划跟踪”菜单复制权限和父级。
2. 检查本机数据库工具,确认可使用 `sqlcmd` 连接 SQL Server。
3. 使用用户提供的凭据只读查询 `192.168.2.92 / YL_MESDB`,查询结果显示:
- 产品合格率工位菜单共有 11 条,分别属于账号代码 `1、1004、1006、1007、2008、2010、2014、2015、2018、2026、2027`
- 11 条目标菜单原来均位于生产管理下,`pid=3`
- 账号 `1、1004、1007、2010、2026、2027` 已有质量管理根菜单。
- 账号 `1006、2008、2014、2015、2018` 缺少质量管理根菜单。
4. 查询菜单表结构,确认:
- 菜单表为 `dbo.登录基础数据_二级菜单`
- `IDD` 是标识列和主键,业务菜单 `id` 可在不同账号间复用。
- 现有质量管理根菜单统一使用 `id=4、pid=0、path=/QualityManagement、componet=/layout/Layout`
5. 查询账号代码 `1` 的质量管理子菜单,确认菜单归属由 `pid=4` 决定,组件源码不必搬到 `QualityManagement` 目录。因此保留原组件路径,避免修改动态路由和源码目录。
6. 新增幂等增量脚本 `db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql`
- 动态收集所有已有产品合格率工位菜单的账号。
- 对缺少质量管理根菜单的目标账号补齐标准质量管理根菜单。
- 在菜单 ID 4 被其他菜单占用时主动终止事务,避免错误覆盖。
- 将全部产品合格率工位菜单的 `pid` 更新为 `4`
- 保留路由和组件配置,并统一启用状态、模块代码和操作时间。
- 使用事务和 `XACT_ABORT` 保证迁移原子性。
7. 使用 `sqlcmd` 将增量脚本发布到 `192.168.2.92 / YL_MESDB`,执行成功:
- 11 条目标菜单全部更新为 `pid=4`
- 5 个缺失质量管理根菜单的账号已补齐父菜单。
8. 检查旧初始化脚本,发现已有记录重复执行时不会修改 `pid`,但以后为新账号创建菜单时仍可能放回生产管理。
9. 修改 `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
- 父菜单解析由生产管理改为质量管理。
- 仅在账号存在质量管理根菜单时创建目标菜单。
- 更新已有目标菜单时同步将 `pid` 调整为对应质量管理根菜单 ID。
10. 在目标数据库重复执行修改后的旧初始化脚本脚本执行成功11 条目标菜单仍全部保持 `pid=4`,验证不会回退到生产管理。
11. 首次执行最终一致性查询时,第一项统计已返回 11 条全部迁移成功,但后续语句因误将 CTE 跨多条 SQL 语句复用而报“对象名 Targets 无效”;该错误只发生在只读校验查询中,不影响此前已提交的迁移事务。
12. 将校验查询改为表变量后重新执行,完整验证通过:
- 目标菜单总数11。
- 质量管理下数量11。
- 生产管理残留数量0。
- 启用数量11。
- 缺失质量管理父菜单数量0。
- 单账号重复目标菜单数量0。
13. 执行 `git diff --check` 检查脚本差异,未发现空白错误。
### 修改文件
- `db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql`
- `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 产品合格率工位页面已经从生产管理菜单迁移到质量管理菜单。
- 页面组件仍保留在 `ProductionManagement/ProductPassRateWorkstation/index`,只调整数据库菜单层级。
- 当前已有该页面权限的 11 个账号均可通过质量管理菜单访问,原来缺少质量管理根菜单的账号已补齐父菜单。
- 旧初始化脚本已同步修正,后续重复部署不会将该页面重新放回生产管理。
### 验证结果
- 数据库增量脚本发布成功。
- 修改后的旧初始化脚本重复执行成功。
- 11 条目标菜单全部为 `pid=4`,生产管理残留为 0。
- 缺失父菜单和重复菜单均为 0。
- `git diff --check` 通过。
## 2026-07-11 上传全部修改到远程
### 用户提问
- 用户要求把当前所有修改上传到远程仓库。
### 执行过程
1. 检查 Git 工作区,确认待上传修改包括:
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`:设计工时报表 Excel 导出功能。
- `db_backups/move_product_pass_rate_workstation_to_quality_menu_20260711.sql`:产品合格率工位菜单迁移增量脚本。
- `db_backups/add_product_pass_rate_workstation_menu_20260630.sql`:旧菜单初始化脚本改为使用质量管理父菜单。
- `gptlog-process/gpdlog.md`:对应任务的中文执行日志。
2. 确认当前分支为 `snapshot/local-save-20260625-154806`,跟踪远端分支 `origin/snapshot/local-save-20260625-154806`
3. 检查待提交内容,确认没有构建产物或其他临时文件。
4. 执行 `git diff --check`,未发现空白错误。
5. 执行 `git fetch origin` 刷新远端状态。
6. 首次统计本地与远端分叉时PowerShell 将未加引号的 `@{u}` 解析为自身语法,导致 Git 收到错误参数;给修订参数加引号后重新执行成功。
7. 正确的分叉统计结果为 `0 0`,本地提交和远端提交在上传前完全同步,没有分叉。
8. 对已跟踪差异和未跟踪文件执行数据库密码及常见凭据特征扫描,匹配数量均为 0确认用户提供的数据库明文密码未写入待上传文件。
9. 暂存三个功能文件并执行 `git diff --cached --check`,检查通过。
10. 创建功能提交:
- 提交号:`0784746`
- 提交信息:`feat: 增加工时报表导出并调整质量菜单`
- 变更统计3 个文件,新增 244 行,删除 7 行。
11. 将本次上传过程追加到 `gptlog-process/gpdlog.md`,创建独立日志提交。
12. 执行 `git push`,将功能提交和日志提交一起推送到 `origin/snapshot/local-save-20260625-154806`
13. 推送后重新检查本地与远端提交差异及工作区状态,确认远端已包含全部修改。
### 结论
- 当前工作区内的设计工时报表导出、产品合格率工位菜单迁移、旧菜单脚本修正和对应中文日志已全部提交并上传到远程。
- 功能提交号为 `0784746`
### 验证结果
- `git diff --check` 通过。
- `git diff --cached --check` 通过。
- 凭据特征扫描结果为 0。
- 上传前本地与远端分叉为 `0 0`
- 推送后本地与远端同步,工作区无未提交修改。
## 2026-07-15 设计报工限制、重复报工及多类说明功能
### 用户提问
- 修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`:一个人不能同时开始多个任务,点击开始时提示哪个任务未关闭。
- 任务点击完成后仍允许再次开始和结束,第二次开始、结束后也可以再次完成。
- 增加“异常说明”和“奇思妙想”功能,允许随时多次录入文字;列表按“时间换行内容”的格式显示,多次录入显示多条。
- “进度说明”采用与异常说明相同的列表显示格式。
- 将“未结束人员”改名为“设计正在对应”。
- 在设计任务页面同时显示异常说明、奇思妙想、进度说明和设计正在对应字段。
### 执行过程
1. 读取仓库根目录 `AGENTS.md`,确认本次执行结束后必须将提问、结论和完整执行过程以中文追加到 `gptlog-process/gpdlog.md`
2. 检查目标报工页、设计任务页、校验页、工时报表页、相关 SQL 增量脚本、项目命令和 Git 工作区状态。
3. 确认报工页原有逻辑只校验当前行的 `当前用户未结束报工数`,无法可靠阻止同一人员跨任务同时开始;前后端还把“已完成”作为禁止重新开始的终态。
4. 确认原有结束弹窗已经可以录入进度说明,数据库报工记录也已有对应字段,但任务查询和两个任务列表尚未聚合显示进度历史。
5. 确认异常说明和奇思妙想没有独立数据表及保存过程,不能仅靠前端完成持久化和多条历史展示,因此确定增加幂等数据库增量脚本。
6. 检查工作区已有改动,发现设计任务页存在用户未提交的表单布局调整,质量检验页面也存在无关修改;本次保留所有已有改动,只在设计任务页追加所需列表字段,并对该页原有布局改动做必要的空格格式整理。
7. 修改报工页列表:
- 将“未结束人员”列标题改为“设计正在对应”,继续使用原有 `未结束报工人员` 返回字段。
- 新增进度说明、异常说明和奇思妙想三列。
- 三列使用保留换行的样式展示历史内容。
8. 修改报工页操作区:
- “开始”按钮不再因任务已完成而禁用。
- 新增“异常说明”和“奇思妙想”两个文字按钮。
- 新增通用说明录入弹窗,显示 DID 和任务描述,内容必填,最多 2000 字。
- 保存时调用新增存储过程,并携带当前操作人 ID 和姓名。
9. 增加开始前全任务实时查询:如果当前人员已有任何未结束记录,提示“任务 DID + 任务描述尚未关闭,请先结束该任务”;查询失败时阻止开始,避免绕过校验。
10. 保留结束按钮仅在当前任务存在本人未结束记录时启用;已完成任务重新开始后状态变为执行中,结束后变为已结束,因此可以再次点击完成。
11. 修改设计任务页列表,新增“设计正在对应”、进度说明、异常说明和奇思妙想四列,展示格式与报工页一致。
12. 新增 `db_backups/update_design_report_task_notes_and_restart_20260715.sql`
- 幂等补齐报工记录的进度说明字段。
- 新建 `MES_设计报工_任务说明` 表,保存异常说明和奇思妙想的多条记录、操作人及录入时间。
- 新建 `设计报工_任务说明_新增` 保存过程,校验任务、说明类型和非空内容。
- 重建 `设计报工_任务_查询`,聚合进度说明、异常说明和奇思妙想,单条格式为“时间 + 换行 + 内容”,多条之间留空行。
- 重建设计报工开始过程,取消已完成任务禁止开始的限制。
- 开始过程使用按人员标识生成的 `sp_getapplock` 事务锁,防止两个页面并发点击时同时产生两条未结束记录。
- 开始过程跨全部任务检查当前人员的未结束记录,返回未关闭 DID 和任务描述。
- 重建设计报工结束过程,允许重新开始后的任务结束,并按现有方式保存本轮进度说明。
13. 首次执行两目标页面 ESLint 时,报工页无错误;设计任务页报告用户原有布局调整中的多余空格、空行和异步箭头函数格式问题。
14. 对设计任务页做最小格式整理后,再次执行两目标页面 ESLint检查通过仅输出项目依赖的 Browserslist 和 Baseline 数据过期提示。
15. 对三个目标文件执行 `git diff --check`,检查通过;全工作区检查仍能看到无关的 `OtherInbound.vue` 原有尾随空格,本次没有修改该文件。
16. 执行 `npm run build`webpack 生产构建成功;仅有项目原有的大资源体积警告和浏览器兼容数据过期提示,构建没有留下受版本控制的 `dist` 改动。
17. 尝试使用当前 Windows 集成身份对目标数据库 `192.168.2.92 / YL_MESDB` 做只读连通性检查,服务器拒绝 Guest 身份登录;未猜测或查找数据库凭据,也未向目标数据库发布脚本。
18. 检查本地开发服务,确认进程来自当前仓库,访问 `https://localhost:1997/` 返回 HTTP 200。
19. 为验证 SQL在独立 LocalDB 测试实例中创建最小基础表。前两次使用 PowerShell 标准输入传递中文 SQL 时发生代码页解析错误,均未进入增量脚本有效验证;每次都在 `finally` 中删除测试实例,随后核对并清理由第一次测试生成的 MDF/LDF 文件。
20. 改用 UTF-8 SQL 测试夹具和 `sqlcmd -i -f 65001` 重跑隔离测试,增量脚本编译及业务场景验证通过:
- 状态为已完成的任务可以重新开始。
- 同一人员未结束第一项任务时开始第二项任务,被正确拦截并返回第一项任务的 DID 和描述。
- 第一项任务可以正常结束并保存进度说明,状态回到已结束。
- 连续保存两条异常说明和一条奇思妙想均成功。
- 任务查询按要求返回进度说明、两条异常说明和奇思妙想的“时间换行内容”历史。
21. 验证结束后删除临时 SQL 测试夹具、LocalDB 实例及测试数据文件,确认不保留测试数据。
22. 最终检查目标文件状态和差异,确认未修改用户无关的质量检验页面,未提交或推送任何文件。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `db_backups/update_design_report_task_notes_and_restart_20260715.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 同一人员只能保留一个未结束的设计报工任务,前端会提示具体未关闭任务,数据库事务锁同时保证并发场景不会绕过限制。
- 已完成任务可以重新开始、结束,并在新一轮结束后再次完成。
- 异常说明和奇思妙想支持在任意任务状态下多次录入;进度说明、异常说明和奇思妙想均按“时间换行内容”显示多条历史。
- 报工页和设计任务页都已显示进度说明、异常说明、奇思妙想和“设计正在对应”。
- 前端代码和数据库增量脚本均已在本机验证;由于当前身份没有目标 SQL Server 登录权限,增量脚本尚未发布到目标数据库,目标环境启用新功能前必须执行该脚本。
### 验证结果
- 两目标页面 ESLint 检查通过。
- 三个目标文件 `git diff --check` 通过。
- `npm run build` 生产构建通过。
- 隔离 LocalDB 中增量脚本编译通过,重新开始、跨任务拦截、结束及多条说明聚合场景验证通过。
- `https://localhost:1997/` 返回 HTTP 200本地开发服务保持运行。
## 2026-07-15 发布设计报工增量脚本到目标数据库
### 用户提问
- 用户提供目标数据库地址 `192.168.2.92`、数据库管理员账号及密码,要求继续完成数据库发布。
- 按安全要求,本日志不记录数据库明文密码。
### 执行过程
1. 使用用户提供的 SQL Server 凭据连接 `192.168.2.92 / YL_MESDB`,先执行只读预检。
2. 预检确认目标数据库为 `YL_MESDB`,服务器为 `YLLT-MES`,数据库兼容级别为 150。
3. 确认 `MES_设计报工_任务``MES_设计报工_记录` 和记录表的 `进度说明` 字段已经存在;`MES_设计报工_任务说明` 表和 `设计报工_任务说明_新增` 过程尚不存在。
4. 确认设计报工查询、开始、结束、完成过程均存在,其中查询和开始过程仍为本次修改前的旧版本。
5. 使用 `sqlcmd` 的失败即退出模式和 UTF-8 输入模式执行 `db_backups/update_design_report_task_notes_and_restart_20260715.sql`,脚本发布成功。
6. 发布后检查数据库对象定义,确认:
- 任务说明表已创建。
- 任务说明保存过程已创建。
- 开始过程已包含 `sp_getapplock` 人员并发锁。
- 查询过程已包含异常说明、奇思妙想和进度说明聚合。
- 开始过程已移除“任务已完成,不能开始”的旧限制。
7. 在目标数据库外层事务中插入两条临时设计任务,执行完整业务验证:
- 状态为已完成的第一条任务开始成功。
- 同一测试人员在第一条任务未结束时开始第二条任务,被正确拦截,返回第一条任务 DID 和任务描述。
- 第一条任务结束成功并保存第一轮进度,随后完成成功。
- 第一条任务第二次开始、结束并保存第二轮进度,随后再次完成成功。
- 连续新增两条异常说明和一条奇思妙想,三次保存均成功。
- 任务查询返回两次报工记录、最终已完成状态、两轮进度说明、两条异常说明和一条奇思妙想;显示内容符合“时间换行内容”的多条格式。
8. 回滚外层测试事务,并查询确认名称以 `Codex发布验证_` 开头的测试任务数量为 0没有向正式库遗留测试任务、报工记录或说明记录。
9. 检查本地工作区,数据库发布没有生成新的临时文件或构建产物;保留用户原有的无关工作区修改。
### 结论
- `update_design_report_task_notes_and_restart_20260715.sql` 已成功发布到 `192.168.2.92 / YL_MESDB`
- 同一人员跨任务同时开始限制、未关闭任务提示、已完成任务重新开始和再次完成、进度说明历史、异常说明及奇思妙想多条录入功能均已在目标数据库验证通过。
- 验证数据已全部回滚,正式数据库无测试数据残留。
### 验证结果
- 数据库对象和过程定义检查通过。
- 两轮“开始、结束、完成”验证通过。
- 跨任务重复开始拦截验证通过。
- 多条进度、异常说明和奇思妙想聚合验证通过。
- 回滚后测试任务数量为 0。
## 2026-07-15 设计报工按钮、说明悬停及任务可见范围调整
### 用户提问
- 设计报工点击开始后,当前任务的开始按钮应变为灰色且不可点击。
- 进度说明、异常说明和奇思妙想在列表正常显示时应单行省略,避免撑高行高;鼠标悬停对应字段时显示完整内容。
- 设计任务新建弹窗需在指派对象前增加“对齐可见”字段,并使用与指派对象相同的人员多选方式。
- 设计报工页面根据登录账号限制任务范围,只显示本人创建、对齐可见包含本人以及指派对象包含本人的任务。
### 执行过程
1. 重新检查报工页和设计任务页现有模板、数据模型、人员查询、任务新增/编辑参数及目标数据库过程结构。
2. 检查登录流程和 Vuex 用户状态,确认登录态 `id` 来源于 `Personnel_Number`,与设计任务人员选择器使用的 `人员编号`一致,可以直接用于对齐可见和指派对象精确匹配。
3. 调整设计报工开始按钮:
- 恢复 `canStart` 行级判断。
- 当前行 `当前用户未结束报工数` 大于 0 时开始按钮禁用并显示为灰色。
- 其他任务的开始按钮仍可点击,继续保留提示具体未关闭任务的逻辑。
4. 调整报工页和设计任务页的三类说明展示:
- 进度说明、异常说明和奇思妙想正常状态使用单行、溢出隐藏和省略号,不再撑高表格行。
- 每个字段外层增加 Element UI Tooltip非空内容悬停时显示完整历史。
- Tooltip 内容保留原有换行,设置最大宽度、最大高度、自动纵向滚动和长文本换行。
5. 在设计任务列表增加“对齐可见”列,便于维护人员直接确认任务可见范围。
6. 在设计任务新增/编辑弹窗的“指派对象”之前增加“对齐可见”多选人员字段:
- 使用独立的远程人员选项集合,避免与指派对象搜索互相覆盖。
- 保存人员编号列表到 `对齐可见ID`,保存人员姓名列表到 `对齐可见`
- 编辑时还原已选人员,并补齐当前远程列表中不存在的已选项。
- 每次打开新建弹窗时刷新对齐可见人员列表。
7. 扩展数据库增量脚本:
- 幂等增加任务表 `对齐可见ID``对齐可见` 两个字段。
- 查询过程返回两个新字段。
- 重建任务新增和编辑过程,支持保存及修改对齐可见人员。
- 仅当查询传入当前登录人员时应用报工页可见范围;不传人员的设计任务维护页继续返回全部任务。
8. 第一版可见范围按用户最初要求实现为“本人创建或对齐可见包含本人”。用户随后补充“指派对象的任务也可见”,立即终止正在进行的旧版本构建,避免把不完整版本作为最终验证结果。
9. 将查询可见范围扩展为三种关系的并集:
- 当前人员姓名等于创建人。
- 当前人员编号或姓名存在于对齐可见列表。
- 当前人员编号或姓名存在于指派对象列表。
10. 使用隔离 LocalDB 对第一版字段和查询规则进行验证:
- 不传当前人员时维护页返回全部三条任务。
- 创建人只能看到本人创建任务。
- 同时具有创建和对齐关系的人员返回两条任务。
- 仅对齐可见人员返回对应任务。
- 无任何关系人员返回 0 条。
- 编辑对齐可见后,新人员立即能查询到任务,并返回对齐可见字段。
11. 用户补充指派对象规则后,再次使用隔离 LocalDB 验证:
- 指派对象列表包含当前人员时能返回对应任务。
- 无创建、对齐或指派关系的人员返回 0 条。
12. 两次 LocalDB 验证均使用独立临时实例;验证后删除 SQL 测试夹具、实例及 MDF/LDF 文件,没有遗留测试资源。
13. 执行两目标页面 ESLint检查通过仅输出项目依赖的 Browserslist 和 Baseline 数据过期提示。
14. 对目标前端文件和数据库脚本执行 `git diff --check`,检查通过。
15. 执行 `npm run build`;用户补充指派对象规则前的构建被主动终止,补齐最终规则后重新执行生产构建并成功通过,仅有项目原有的大资源体积及浏览器数据过期警告。
16. 使用用户此前提供的数据库凭据,将扩展后的幂等脚本重新发布到 `192.168.2.92 / YL_MESDB`,发布成功;日志不记录明文密码。
17. 在目标数据库检查确认:
- 两个对齐可见字段已经存在。
- 查询过程包含指派对象可见逻辑。
- 新增和编辑过程均包含对齐可见参数。
18. 在目标数据库外层事务中执行正式环境验证:
- 本人创建任务查询返回 1 条。
- 对齐可见任务查询返回 1 条。
- 指派对象任务查询返回 1 条。
- 无关系人员查询返回 0 条。
- 不传人员的设计任务维护查询仍返回指定任务。
19. 回滚目标数据库测试事务,确认 `Codex可见验证_` 测试任务残留数量为 0。
20. 最终再次执行 ESLint、生产构建、目标文件空白检查和本地开发服务访问检查全部通过`https://localhost:1997/` 返回 HTTP 200。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `db_backups/update_design_report_task_notes_and_restart_20260715.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 当前人员开始任务后,该任务行的开始按钮会立即在刷新后变灰并不可点击;其他任务仍可点击并提示未关闭任务。
- 三类说明列表保持单行省略,悬停可查看保留换行的完整内容,不再导致表格行高过高。
- 设计任务新增和编辑弹窗已支持“对齐可见”人员多选,并在列表显示选中人员。
- 设计报工页面只显示本人创建、对齐可见包含本人或指派对象包含本人的任务;设计任务维护页仍显示全部任务。
- 数据库字段和过程已发布到目标库,正式环境事务验证通过且无测试数据残留。
### 验证结果
- 两目标页面 ESLint 检查通过。
- 目标文件 `git diff --check` 通过。
- 最终 `npm run build` 生产构建通过。
- 隔离 LocalDB 的新增、编辑、创建人可见、对齐可见和指派可见场景通过。
- 目标数据库三类可见关系及维护页全量查询验证通过。
- 目标数据库回滚后测试任务数量为 0。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-15 上传当前全部修改到远程仓库
### 用户提问
- 用户要求将当前工作区的所有修改上传到远程仓库。
### 执行过程
1. 检查 Git 工作区、当前分支、跟踪分支和远程地址,确认当前分支为 `snapshot/local-save-20260625-154806`,跟踪 `origin/snapshot/local-save-20260625-154806`
2. 确认待上传内容共 7 个文件:
- 设计报工前端两个页面。
- 设计报工数据库增量脚本。
- 及时齐套跟踪结果数据库脚本。
- 其他入库检验页面。
- 销售退货检验页面。
- 中文执行日志。
3. 检查差异统计:暂存后共新增 1200 行、删除 79 行;设计报工数据库脚本为新增文件,其余 6 个文件为修改文件。
4. 执行 `git diff --check`,首次发现 `OtherInbound.vue` 新增差异中存在一行尾随空白;使用最小编辑删除空白,不改变质量检验业务逻辑。
5. 再次执行全工作区和暂存区空白检查,均通过;仅输出 Git 对部分文件未来行尾转换的提示。
6. 对已跟踪差异和未跟踪数据库脚本执行数据库密码、`SQLCMDPASSWORD` 及常见密码参数特征扫描,结果均无命中;用户提供的数据库明文密码未写入任何待上传文件。
7. 执行 `git fetch origin` 刷新远程状态。
8. 比较本地与远程提交,分叉结果为 `0 0`;上传前本地 HEAD 和远程跟踪分支均为 `9e58193`,不存在远程新提交或本地未推送提交。
9. 对 4 个修改页面执行 ESLint
- 两个设计报工页面检查通过,仅有项目依赖数据过期提示。
- 两个质量检验页面因文件原有双引号、分号、模板换行、缩进和未定义全局函数等旧代码风格,报告大量存量规则错误。
- 未使用自动修复重写近千行用户代码,避免产生与本次功能无关的大范围格式变更。
10. 采用此前已完成的最终生产构建作为质量检验页面的编译验证;该构建包含本次全部前端改动并成功通过,仅有项目原有的大资源体积和浏览器数据过期警告。
11. 确认设计报工数据库脚本已在隔离 LocalDB 和目标数据库验证通过,及时齐套脚本已在目标数据库针对销售订单 `261079`、生产订单 `7912` 验证通过。
12. 检查本地开发服务,`https://localhost:1997/` 返回 HTTP 200生产构建没有留下受版本控制的 `dist` 改动。
13. 执行 `git add -A` 暂存当前全部修改,并复核暂存区确实包含全部 7 个文件。
14. 对暂存区再次执行 `git diff --cached --check` 和凭据特征扫描,检查通过。
15. 创建功能提交:
- 提交号:`38771ef`
- 提交信息:`feat: 完善设计报工、质检及齐套跟踪`
- 变更统计7 个文件,新增 1200 行,删除 79 行。
16. 执行 `git push origin snapshot/local-save-20260625-154806`,功能提交成功推送到远程,远程分支从 `9e58193` 更新到 `38771ef`
17. 功能提交推送成功后,按仓库 `AGENTS.md` 要求追加本条完整中文上传过程日志,并将通过独立日志提交继续同步到同一远程分支。
### 结论
- 用户要求的当前全部业务修改已经创建提交并成功上传到远程分支。
- 功能提交号为 `38771ef`
- 数据库明文密码没有进入提交内容。
- 本条上传过程日志将通过后续独立提交同步到远程,确保工作区最终无未提交修改。
### 验证结果
- 上传前本地与远程分叉为 `0 0`
- 全工作区和暂存区 `git diff --check` 通过。
- 暂存区凭据特征扫描无命中。
- 两个设计报工页面 ESLint 通过。
- 最终生产构建通过。
- 功能提交已成功推送至远程。
## 2026-07-16 发货状态列表增加订单及生产数量字段
### 用户提问
- 用户要求修改 `ProductionManagement/DeliveryNoticeList/index`,增加订单数量(取计划数量)、入库数量、完成数量和合格数量四个字段。
### 执行过程
1. 从当前工作目录及元利相关项目中搜索目标路径,定位实际文件为 `C:\WorkYuanLy\MES_Manage_View_V20\src\views\ProductionManagement\DeliveryNoticeList\index.vue`
2. 检查目标页面现有实现,确认列表通过存储过程 `装配中心任务看板_发货状态查询` 获取数据并直接赋值给 `tableData`,现有“数量”列使用 `交货数量 || 计划数量`,页面已有统一的 `formatQuantity` 数量格式化方法。
3. 搜索项目内相同字段的使用方式,确认中文字段可以直接通过 `scope.row` 访问;检查项目依赖和构建命令,确认项目为 Vue 2、Element UI 和 Webpack 5。
4. 读取仓库根目录 `AGENTS.md`,确认每次执行后必须将提问、结论和完整执行过程以中文追加到 `gptlog-process/gpdlog.md`
5. 修改目标列表:
- 将原“数量”列调整为“订单数量”,固定读取 `计划数量`
- 新增“入库数量”列,读取 `入库数量`
- 新增“完成数量”列,读取 `完成数量`
- 新增“合格数量”列,读取 `合格数量`
- 四列均复用 `formatQuantity`,统一处理空值、整数和小数显示。
6. 使用文本检索复核目标页面,确认四个列名和对应字段均已写入,原“交货数量或计划数量”的混合显示逻辑已移除。
7. 首次执行 `npm run build` 时,构建超过 180 秒工具超时;期间只输出 Baseline、Browserslist 数据过期提示,没有模板或代码错误,超时进程随后已终止。
8. 使用更长超时重新执行 `npm run build`Webpack 在约 40 秒内成功完成生产构建。
9. 构建仅保留项目原有的大体积字体、图片、第三方库、入口文件体积警告,以及 Baseline、Browserslist 数据过期提示;没有新增编译错误。
10. 按仓库要求在本日志末尾追加本次完整中文执行记录,未修改或覆盖已有历史日志。
### 修改文件
- `src/views/ProductionManagement/DeliveryNoticeList/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 发货状态列表现在包含订单数量、入库数量、完成数量和合格数量四个独立字段。
- 订单数量严格读取后端返回的 `计划数量`,不再与 `交货数量` 混用。
- 查询请求和筛选条件保持不变,四个字段直接使用现有存储过程返回值。
### 验证结果
- 目标文件字段检索检查通过。
- `npm run build` 生产构建通过。
- 仅存在项目原有的资源体积及依赖数据过期警告,无编译错误。
## 2026-07-15 设计工时报表增加任务工时页签
### 用户提问
- 用户指定修改 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`,说明当前页面为按日期和人员计算的工时报表。
- 要求在同一页面新增一个按 DID 计算的工时报表,顶部页签切换方式参考 `ProductionManagement/Timesheet/index`
- 原报表命名为“作业者工时”,新增报表命名为“任务工时”。
### 执行过程
1. 检查用户指定的 `Report/index.vue`、设计报工模块全部页面、菜单脚本、项目文档及参考页面 `ProductionManagement/Timesheet/index.vue`
2. 确认用户描述的按日期和人员计算报表实际位于 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`,菜单名为“设计工时报表”;指定的 `Report/index.vue` 实际是设计报工开始、结束、完成操作页。
3. 根据菜单路由和业务意图,选择修改正确的 `HoursReport/index.vue`,避免把报工操作页面误改成工时报表。
4. 阅读参考 Timesheet 页面“作业者工时”和“任务工时”页签、查询切换、树形数据组装及导出逻辑。
5. 检查现有设计作业者工时查询过程 `设计报工_工时报表_作业者工时_查询`,确认现有结构为操作人→工作日期→报工明细三级树。
6. 查询目标数据库现有设计报工记录和现有报表返回结果,确认筛选参数、字段类型、工时秒数、校验状态、进度说明及备注的数据口径。
7. 修改 `HoursReport/index.vue`
- 增加 Element UI 顶部页签,名称为“作业者工时”和“任务工时”。
- 默认显示“作业者工时”,保留原有人员→日期→明细三级树和全部字段。
- 新增“任务工时”表格,使用 DID→操作人两级树。
- DID 根节点显示任务描述、项目号、物料、图号、类别、报工次数、总工时、最早开始、最晚结束和综合校验状态。
- 操作人子节点显示该人员在当前 DID 上的报工次数、工时、起止时间、校验状态、进度说明和备注。
- 两个页签共用开始日期、结束日期、操作人、项目号、物料编码、类别和 DID 筛选条件。
- 点击页签时查询对应报表过程。
- 底部总工时根据当前页签根节点动态计算。
- 导出按钮根据当前页签导出对应树形数据,工作表和文件名分别使用“作业者工时”或“任务工时”。
8. 新增数据库脚本 `db_backups/add_design_report_task_hours_report_20260715.sql`,创建过程 `设计报工_工时报表_任务工时_查询`
9. 新过程沿用原作业者工时的全部筛选条件,只统计已正常结束的设计报工记录,并按 DID 汇总根节点、按 DID 和操作人汇总子节点。
10. 新过程对每个汇总层计算报工次数、工时小时、最早开始时间、最晚结束时间;校验状态区分“已校验”“未校验”“部分校验”;进度说明按结束时间和内容聚合,备注同步聚合。
11. 执行前端单文件 ESLint 和目标差异空白检查,均通过;仅输出项目依赖的 Browserslist 和 Baseline 数据过期提示。
12. 在独立 LocalDB 测试实例中创建最小任务和报工表,执行新过程脚本并插入两个人员共同报工同一 DID 的测试数据。
13. 隔离验证结果DID 10 根节点汇总 2 次、1.50 小时、状态“部分校验”;张三子节点 1 次、1.00 小时、已校验;李四子节点 1 次、0.50 小时、未校验;任务及人员的进度说明和备注聚合正确。
14. 删除 LocalDB 测试夹具、测试实例及 MDF/LDF 文件,确认没有临时测试资源残留。
15. 执行 `npm run build`,生产构建成功;仅有项目原有的大资源体积和浏览器兼容数据过期警告,未生成受版本控制的 `dist` 变更。
16. 使用用户此前提供的数据库凭据,将 `add_design_report_task_hours_report_20260715.sql` 发布到 `192.168.2.92 / YL_MESDB`;日志不记录明文密码。
17. 在目标库创建新过程成功,修改时间为 `2026-07-15 18:14:19`
18. 使用临时表只读接收目标库作业者工时和任务工时两个过程的完整返回结果,交叉核对真实数据:
- 两个报表统计的已结束报工次数均为 30。
- 任务工时根节点与人员子节点结构正确。
- 多人任务 DID 1 汇总为 3 次、0.02 小时;子节点为超级管理员 2 次、张一帆 1 次。
- 两种报表按不同维度分别先保留两位小数,跨全部分组求和存在 0.01 至 0.02 小时累计舍入差,属于分组舍入口径差异,不影响单个 DID 汇总。
19. 最终再次执行 HoursReport 页面 ESLint、目标文件 `git diff --check`、数据库对象检查和本地服务检查,均通过;`https://localhost:1997/` 返回 HTTP 200。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `db_backups/add_design_report_task_hours_report_20260715.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计工时报表现在同一页面提供“作业者工时”和“任务工时”两个顶部页签。
- 原作业者工时功能、筛选条件和三级树结构保持不变。
- 新任务工时按照 DID 汇总,并可展开查看每位操作人的工时贡献。
- 查询、总工时和 Excel 导出都会随当前页签切换。
- 新任务工时查询过程已经发布到目标数据库并通过真实数据验证。
### 验证结果
- HoursReport 单文件 ESLint 通过。
- 目标文件 `git diff --check` 通过。
- 隔离 LocalDB 的 DID 及人员汇总验证通过。
- `npm run build` 生产构建通过。
- 目标数据库过程发布成功。
- 目标库真实数据中两个报表的已结束报工次数均为 30多人 DID 展开结构正确。
- 本地开发服务返回 HTTP 200。
## 2026-07-15 修复及时齐套生产订单 7912 工艺路线颜色
### 用户提问
- 修改 `PlanManagement/TimelyKitTrackingResult/index`
- 搜索销售订单 `261079` 后展开子项,生产订单 `7912` 的工艺路线状态不正确。
- 第 4 序已经完成 5 个,应显示蓝色;第 5 序已经发料,应显示绿色。
- 要求参考“生产计划跟踪”页面搜索生产订单 `7912` 时的工艺路线。
### 执行过程
1. 检查 `src/views/PlanManagement/TimelyKitTrackingResult/index.vue`、参考页面 `src/views/ProductionManagement/ProductionPlanTrack/index.vue`、及时齐套查询脚本和原项目验收文档。
2. 对比两页的工艺路线前端算法,确认蓝色、绿色、红色判断和连续外协分组处理逻辑完全一致:
- 收检合格数大于 0、报工或辅助结束显示蓝色。
- 外协工序收料数大于收检合格数与不合格数之和时显示绿色。
- 连续且 `外协分组` 相同的工序统一采用该组最后一道工序的颜色。
3. 确认及时齐套页面不直接计算数据库状态,而是解析 `生产管理_及时齐套跟踪结果_查询` 返回的 `工艺路线明细` JSON 后着色。
4. 查询目标数据库过程参数和生产订单 `7912``View_生产订单_MES` 原始工序数据。首次查询误用了视图不存在的 `开始时间` 字段而失败,删除该字段后重新查询成功。
5. 原始数据确认:
- 第 4 序数铣,计划数 5、完成数 5、收料数 5、收检合格数 5任务状态为已完成应显示蓝色。
- 第 5 序调质,收料数 5、收检数 0、任务状态为已开工应显示绿色。
- 第 6 序喷砂尚未开始,应显示红色。
6. 执行参考过程 `生产管理_生产计划跟踪` 查询订单 `7912`,确认参考数据包含 `外协分组`
- 第 2 至第 4 序的外协分组为空,属于同一连续组,跟随第 4 序显示蓝色。
- 第 5 序外协分组为 2独立显示绿色。
- 第 6 序外协分组为 3独立显示红色。
7. 执行及时齐套查询过程查询销售订单 `261079`。首次命令同时使用了互斥的 `sqlcmd -W``-y` 选项而失败,修正选项后重新执行成功。
8. 检查及时齐套对生产订单 `7912` 的实际返回 JSON确认完成数、收料数、收检数均正确但每道工序都缺少 `外协分组` 字段。
9. 定位根因:前端把缺少分组字段的第 2 至第 6 序全部视为同一个连续外协组,最终全部跟随第 6 序显示红色;因此不是页面蓝绿基础判断错误,而是后端 JSON 字段缺失。
10. 修改当前最新及时齐套过程脚本 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`,在 `工艺路线明细` JSON 中增加 `p2.[外协分组]`
11. 发布前执行差异和空白检查,确认脚本只增加一个返回字段,不改变筛选、缺件匹配或其他统计口径;目标库当前过程定义检查结果为确实缺少该字段。
12. 使用用户此前提供的数据库凭据,将修改后的过程脚本发布到 `192.168.2.92 / YL_MESDB`;日志不记录明文密码。
13. 发布后重新执行销售订单 `261079` 的及时齐套查询,从实际过程输出中提取生产订单 `7912` 的工艺路线 JSON并按页面当前算法复算
- 第 4 序数铣:外协第一组,收检合格 5最终颜色为蓝色。
- 第 5 序调质:外协分组 2收料 5、收检 0最终颜色为绿色。
- 第 6 序喷砂:外协分组 3未收料未收检最终颜色为红色。
14. 检查目标数据库过程定义,确认 `p2.[外协分组]` 已发布。
15. 执行及时齐套页面 ESLint检查无错误仅保留页面原有 `v-html` 安全规则警告和项目依赖数据过期提示。
16. 执行数据库脚本 `git diff --check`,检查通过;访问本地开发服务 `https://localhost:1997/` 返回 HTTP 200。
17. 保留工作区中用户已有的设计报工和质量检验相关修改,本次未改动或回退这些无关文件。
### 修改文件
- `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
- `gptlog-process/gpdlog.md`
### 结论
- `TimelyKitTrackingResult/index.vue` 的现有颜色算法与生产计划跟踪一致,无需重复修改前端算法。
- 实际问题是及时齐套查询返回的工艺路线 JSON 漏掉 `外协分组`,导致多个不同外协组被错误合并并统一显示红色。
- 字段已补齐并发布到目标数据库;销售订单 `261079`、生产订单 `7912` 现在第 4 序显示蓝色,第 5 序显示绿色,第 6 序显示红色,与生产计划跟踪一致。
### 验证结果
- 目标数据库原始工序和参考生产计划跟踪数据对比通过。
- 目标过程发布成功,定义中已包含 `p2.[外协分组]`
- 实际过程返回 JSON 已包含第 5 序分组 2、第 6 序分组 3。
- 使用页面现有算法复算结果为第 4 序蓝色、第 5 序绿色、第 6 序红色。
- 页面 ESLint 无错误,只有原有 `v-html` warning。
- SQL 差异空白检查通过。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-15 上传设计任务工时报表全部修改到远程仓库
### 用户提问
- 用户要求将当前工作区中的所有修改上传到远程仓库。
### 执行过程
1. 检查 Git 工作区、当前分支、跟踪分支和远程状态,确认当前分支为 `snapshot/local-save-20260625-154806`,跟踪 `origin/snapshot/local-save-20260625-154806`
2. 确认本次待上传内容共 3 个文件:
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `db_backups/add_design_report_task_hours_report_20260715.sql`
- `gptlog-process/gpdlog.md`
3. 复核本次功能验证结果HoursReport 单文件 ESLint 通过,`npm run build` 生产构建通过,目标文件空白检查通过,独立 LocalDB 汇总测试通过,目标数据库真实数据交叉验证通过,本地开发服务返回 HTTP 200。
4. 对工作区差异执行 `git diff --check`,检查通过。
5. 对已跟踪差异和未跟踪文件执行数据库凭据及常见明文密码特征扫描,检查无命中;用户此前提供的数据库明文密码未写入待上传文件。
6. 检查工作区没有待提交的 `dist` 构建产物或临时测试资源。
7. 执行 `git fetch origin` 刷新远程状态,比较本地和跟踪分支,上传前分叉结果为 `0 0`;本地 HEAD 与远程跟踪分支均为 `4f42c3a`
8. 执行 `git add -A` 暂存当前全部修改,复核暂存区确实只包含上述 3 个文件,共新增 334 行、删除 50 行。
9. 对暂存区再次执行 `git diff --cached --check` 和凭据特征扫描,均检查通过。
10. 创建功能提交:
- 提交号:`9d08fb1`
- 提交信息:`feat: 增加设计任务工时报表`
- 变更统计3 个文件,新增 334 行、删除 50 行。
11. 执行 `git push origin snapshot/local-save-20260625-154806`,功能提交成功推送到远程,远程分支从 `4f42c3a` 更新到 `9d08fb1`
12. 功能提交推送成功后,按照仓库 `AGENTS.md` 要求追加本条完整中文上传过程日志,并通过独立日志提交继续同步到同一远程分支。
### 结论
- 设计任务工时报表页签、任务工时数据库过程脚本及此前执行日志已创建功能提交并成功上传到远程分支。
- 功能提交号为 `9d08fb1`
- 数据库明文密码未进入任何提交内容。
- 本条上传过程日志将通过后续独立提交同步到远程,完成后再次校验本地与远程一致性。
### 验证结果
- 上传前本地与远程分叉为 `0 0`
- 工作区和暂存区空白检查通过。
- 暂存区凭据特征扫描无命中。
- HoursReport 页面 ESLint 通过。
- 生产构建通过。
- 独立 LocalDB 和目标数据库查询验证通过。
- 功能提交已成功推送至远程。
## 2026-07-17 设计任务分类、领导批示及历史记录权限调整
### 用户提问
- 用户要求修改 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`,将分类改为固定下拉选项:实验、研发、方案评审、售前、订单、确认、售后问题指导、售后物料准备、返修品处理、其他。
- 用户要求任务描述和设计要求只有创建人可以修改。
- 用户要求在设计任务界面和报工界面的操作位置增加作用相同的“领导批示”,并将“领导批示”字段放在两个列表的第一列。
- 用户要求领导批示、异常、奇思妙想、进度按“日期+编辑人,换行,内容”的方式显示,并按倒序排列,第一条为最新内容。
### 执行过程
1. 读取仓库根目录 `AGENTS.md`,确认必须把提问、结论和完整执行过程以中文追加到 `gptlog-process/gpdlog.md`
2. 检查设计报工模块的 `Task/index.vue``Report/index.vue``HoursReport/index.vue`、现有存储过程脚本和当前用户 Vuex 字段,确认设计任务页为任务维护界面,报工页为开始、结束、完成及异常/奇思妙想录入界面。
3. 检查现有数据库脚本 `update_design_report_task_notes_and_restart_20260715.sql`,确认异常说明和奇思妙想存储在 `MES_设计报工_任务说明`,进度说明存储在 `MES_设计报工_记录`;现有聚合缺少编辑人且按正序返回。
4. 检查当前工作区,确认用户已有 `DeliveryNoticeList/index.vue``gptlog-process/gpdlog.md` 修改;本次保留这些修改,没有覆盖或回退。
5. 修改设计任务页面:
- 查询条件“类别”和新建/编辑表单“类别”改为固定选项下拉框。
- 在列表第一列增加固定的“领导批示”列。
- 在操作区增加“领导批示”按钮和录入弹窗,通过统一过程 `设计报工_任务说明_新增` 保存。
- 根据当前登录人员姓名与任务创建人判断编辑权限;非创建人打开编辑弹窗时,任务描述和设计要求禁用。
- 调整领导批示、进度说明、异常说明、奇思妙想的单元格样式,保留日期/编辑人与内容之间的换行,最多显示约四行并可通过提示框查看完整历史。
6. 修改设计报工页面:
- 查询条件“类别”使用与任务页面相同的固定下拉选项。
- 在列表第一列增加固定的“领导批示”列。
- 在操作区增加“领导批示”按钮,复用异常说明和奇思妙想的同一录入弹窗及保存过程。
- 同步调整四类历史字段的换行显示样式。
7. 新增数据库迁移 `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- 将任务说明类型约束扩展为领导批示、异常说明、奇思妙想。
- 扩展 `设计报工_任务说明_新增`,允许保存领导批示。
- 更新 `设计报工_任务_查询`,返回领导批示,并为四类历史内容拼接日期、编辑人、换行和内容。
- 所有历史聚合按业务时间降序、流水号降序排列,时间相同时仍保证后录入内容在前。
- 更新 `设计报工_任务_编辑`,只有最后编辑人与创建人一致时才更新任务描述和设计要求,防止绕过前端直接调用接口越权修改。
8. 执行两个 Vue 文件的 ESLint检查通过仅输出项目已有的 Baseline 和 Browserslist 数据过期提示。
9. 执行目标文件 `git diff --check`,检查通过;仅有仓库换行符转换提示,无空白错误。
10. 在本机 SQL Server 2019 LocalDB 创建一次性 `YL_MESDB` 最小测试库,包含任务、报工记录和任务说明三张测试表以及测试数据。
11. 首次执行迁移时发现动态删除检查约束直接拼接 `QUOTENAME` 的写法在 SQL Server 2019 报语法错误;将其改为先生成变量,再通过 `sys.sp_executesql` 执行。
12. 从干净测试库重新执行修正后的迁移,执行成功。
13. 隔离数据库行为验证:
- “领导批示”可以通过统一任务说明过程保存。
- 最新领导批示位于较早批示之前,且显示为日期和编辑人后换行显示内容。
- 最新进度位于较早进度之前,并包含报工编辑人。
- 异常说明和奇思妙想同样按最新内容在前返回。
- 非创建人调用任务编辑过程后,任务描述和设计要求保持原值。
- 创建人调用任务编辑过程后,两字段正常更新。
14. 验证结束后删除 LocalDB 测试数据库和两个临时验证脚本,确认没有测试资源残留。
15. 尝试使用当前 Windows 身份连接 `192.168.2.92 / YL_MESDB` 做发布前检查,远端登录超时;未猜测或使用未提供的数据库凭据,因此本次迁移脚本未发布到生产库。
16. 执行 `npm run build`Webpack 生产构建成功仅保留项目已有的大资源体积、Baseline 和 Browserslist 数据过期警告,没有编译错误,也没有产生受版本控制的 `dist` 变化。
17. 检查现有本地开发服务,`https://localhost:1997/` 返回 HTTP 200。
18. 按仓库要求追加本条完整中文执行日志,并再次复核工作区差异。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计任务分类已经改为用户指定的十项固定下拉选项,报工页查询使用同一选项集。
- 设计任务和报工列表的第一列均为领导批示,两个页面都可以通过同一数据库过程录入。
- 领导批示、异常说明、奇思妙想和进度说明统一显示日期、编辑人及换行后的内容,最新记录排在第一条。
- 任务描述和设计要求已经同时受到前端禁用和数据库过程保护,只有创建人可以修改。
- 前端与数据库迁移均已实现并通过本地验证;迁移脚本因生产数据库当前身份登录超时尚未发布。
### 验证结果
- 两个目标 Vue 文件 ESLint 通过。
- 目标差异空白检查通过。
- SQL Server 2019 LocalDB 迁移执行通过。
- 领导批示保存、四类历史格式及倒序验证通过。
- 创建人和非创建人权限行为验证通过。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
- LocalDB 测试数据库和临时文件已清理。
## 2026-07-17 发布设计任务领导批示迁移到生产数据库
### 用户提问
- 用户提供生产数据库 `192.168.2.92``sa` 账号凭据,用于发布上一项设计任务分类、领导批示、历史记录格式和创建人编辑权限相关数据库迁移。
### 执行过程
1. 使用用户提供的数据库账号连接 `192.168.2.92 / YL_MESDB`;密码仅通过当前 PowerShell 进程的 `SQLCMDPASSWORD` 环境变量传递,命令结束后立即删除该环境变量,未将密码写入项目文件或本日志。
2. 发布前只读检查目标数据库和对象,确认当前数据库为 `YL_MESDB`,登录账号正确,并确认以下对象均存在:
- `dbo.MES_设计报工_任务说明`
- `dbo.设计报工_任务说明_新增`
- `dbo.设计报工_任务_查询`
- `dbo.设计报工_任务_编辑`
3. 使用 `sqlcmd -b -C -l 30 -f 65001` 执行迁移脚本 `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`;发布过程返回成功,数据库上下文为 `YL_MESDB`
4. 发布后检查任务说明类型约束:
- 约束名称为 `CK_MES_设计报工_任务说明_类型`
- 约束已启用且为可信状态。
- 定义中同时包含领导批示、异常说明和奇思妙想,检查通过。
5. 检查三个过程的修改时间,均为 `2026-07-17 11:50:08`,确认本次发布已更新目标对象。
6. 使用 SQL Server 首结果集元数据检查 `设计报工_任务_查询`,确认第一列为非空 `nvarchar(max)` 类型的“领导批示”。
7. 检查过程定义,确认领导批示保存逻辑、进度及任务说明按时间倒序聚合、缺少编辑人时的兜底显示均已发布。
8. 首次自动检查创建人权限时使用 SQL `LIKE` 匹配含方括号的字段名,方括号被 SQL 解释为模式字符而产生误报;改用 `CHARINDEX` 分别检查任务描述 CASE、设计要求 CASE 和创建人与最后编辑人比较条件,三项均通过,未重新执行迁移。
9. 从生产任务表选择最新 DID实际执行更新后的 `设计报工_任务_查询`;查询成功,确认新聚合语句可以在生产真实数据上正常运行。该验证为只读操作,未新增或修改业务数据。
10. 按仓库 `AGENTS.md` 要求追加本条完整中文执行过程日志,日志不记录明文密码。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 设计任务领导批示、四类历史记录格式及倒序、创建人编辑权限迁移已成功发布到 `192.168.2.92 / YL_MESDB`
- “领导批示”已经成为任务查询结果的第一列,数据库保存过程允许领导批示类型。
- 任务描述和设计要求的数据库创建人权限保护已生效。
- 数据库密码未写入任何项目文件或执行日志。
### 验证结果
- 生产数据库连接和发布前对象检查通过。
- 数据库迁移脚本执行通过。
- 任务说明约束启用、可信且定义正确。
- 三个目标过程修改时间已更新。
- 查询首列“领导批示”元数据检查通过。
- 历史格式及倒序定义检查通过。
- 创建人权限定义检查通过。
- 生产库真实 DID 查询执行通过。
## 2026-07-17 调整设计任务分类、增加任务来源并恢复默认行高
### 用户提问
- 用户要求分类选项删除“确认”,增加“售中”和“售后信息确认”。
- 用户要求增加“任务来源”字段并放在类别旁边。
- 用户要求列表页面不要根据历史内容调整行高,使用默认行高。
### 执行过程
1. 检查设计任务页 `Task/index.vue`、设计报工页 `Report/index.vue`、上一轮数据库迁移和当前工作区状态。
2. 确认两个页面共用相同分类选项;任务表尚无“任务来源”字段;领导批示、进度说明、异常说明和奇思妙想的 `.note-history` 样式使用多行显示并设置了最小、最大高度。
3. 确认工作区还存在用户的发货列表、工时校验和工时编辑等修改,本次没有覆盖或回退这些无关内容。
4. 修改设计任务页分类选项,删除独立选项“确认”,新增“售中”和“售后信息确认”;最终选项为实验、研发、方案评审、售前、售中、订单、售后信息确认、售后问题指导、售后物料准备、返修品处理、其他。
5. 在设计任务页增加任务来源:
- 查询区在类别右侧增加任务来源文本筛选。
- 列表在类别右侧增加任务来源列。
- 新建、编辑表单在类别右侧增加任务来源输入框,最大长度 200。
- 空表单、查询参数、实时查询参数和新增/编辑保存参数均接入任务来源。
6. 在设计报工页同步使用新分类选项,并在类别右侧增加任务来源查询条件和列表列;普通查询、最新任务查询及当前未结束任务查询均传递任务来源参数。
7. 将两个页面的历史内容单元格恢复为单行、20 像素最小高度和超出省略显示,移除多行及最大高度设置;完整历史仍可通过原有悬浮提示查看,因此表格行高不再随内容增加。
8. 扩展数据库迁移 `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- 当字段不存在时,为 `MES_设计报工_任务` 增加可空 `nvarchar(200)` 任务来源列。
- 更新 `设计报工_任务_查询`,增加任务来源参数、返回列和模糊筛选,并把返回列放在类别与任务描述之间。
- 更新 `设计报工_任务_新增`,保存任务来源。
- 更新 `设计报工_任务_编辑`,更新任务来源,同时保留上一轮任务描述和设计要求的创建人权限保护。
9. 执行两个 Vue 文件 ESLint 和目标差异空白检查,均通过;仅输出项目已有的 Baseline、Browserslist 数据过期及换行符提示。
10. 在 SQL Server 2019 LocalDB 创建一次性最小测试库和三张设计报工测试表,执行扩展后的迁移成功。
11. 首次运行隔离验证命令时漏传 LocalDB 数据库名,连接默认落到 `master`,因此提示找不到测试过程和表;该命令未修改任何业务数据。补充 `-d YL_MESDB` 后重新验证成功。
12. LocalDB 验证结果:
- 任务来源字段为 `nvarchar(200)`
- 查询结果中的类别、任务来源、任务描述依次为第 7、8、9 列。
- 查询、新增、编辑三个过程均包含任务来源参数。
- 使用“售中”和“客户现场”新增测试任务成功。
- 将分类编辑为“售后信息确认”、任务来源编辑为“售后反馈”成功。
- 按“售后反馈”筛选查询成功返回测试任务。
13. 删除 LocalDB 测试数据库和临时验证脚本,确认没有临时资源残留。
14. 使用用户已提供的生产数据库账号连接 `192.168.2.92 / YL_MESDB`,发布前确认生产任务表尚无任务来源字段和相应过程参数。
15. 通过当前进程的 `SQLCMDPASSWORD` 环境变量执行扩展后的迁移,发布成功;密码未写入脚本或日志,命令结束后删除环境变量。
16. 生产库发布后验证:
- 任务来源字段存在且为 `nvarchar(200)`
- 查询结果中任务来源位于类别和任务描述之间。
- 查询、新增、编辑三个过程均包含任务来源参数。
- 三个过程修改时间均为 `2026-07-17 13:36:33`
- 使用生产库最新真实 DID 执行带任务来源参数的查询成功,验证过程为只读操作。
17. 执行 `npm run build`Webpack 生产构建成功;仅有项目已有的大资源体积和浏览器数据过期警告,没有编译错误或受版本控制的构建产物变化。
18. 检查 `https://localhost:1997/` 返回 HTTP 200检查分类、任务来源参数、单行样式和临时资源均符合要求检查数据库密码未进入仓库。
19.`AGENTS.md` 要求追加本条完整中文执行日志。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 分类已删除“确认”,增加“售中”和“售后信息确认”,两个页面选项一致。
- 任务来源已经加入设计任务的查询、新建、编辑和列表,并加入设计报工的查询和列表,显示位置紧邻类别。
- 列表历史内容恢复单行省略显示,行高不再根据内容自动增加,悬浮提示仍显示完整内容。
- 任务来源数据库字段和查询、新增、编辑过程已发布到生产数据库。
### 验证结果
- 两个目标 Vue 文件 ESLint 通过。
- 目标差异空白检查通过。
- LocalDB 任务来源新增、编辑、筛选和列顺序验证通过。
- 临时测试数据库和脚本已清理。
- 生产数据库迁移发布成功。
- 生产库字段、三个过程参数和查询列顺序检查通过。
- 生产库真实 DID 查询通过。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-17 迁移设计任务完成功能并增加领导批示角色权限
### 用户提问
- 用户要求把“完成”功能由设计报工页面迁移到设计任务页面。
- 用户要求设计任务和设计报工页面默认不显示已完成任务。
- 用户要求领导批示按钮增加权限限制,只有权限包含“领导”的角色才能显示。
- 用户随后补充:权限包含“管理员”的角色也可以显示领导批示按钮。
### 执行过程
1. 检查设计任务页、设计报工页、用户登录、Vuex 用户状态、动态路由权限、数据库角色表和设计报工相关过程。
2. 确认原“完成”按钮和完整校验逻辑位于 `Report/index.vue`,包括实时任务查询、未结束报工校验、至少一次已结束报工校验、完成确认和 `设计报工_任务_完成` 调用。
3. 确认当前登录状态只保存角色编号Vuex 的 `roles` 固定为 `admin` 以驱动历史路由框架,不能代表真实角色功能;真实角色名称存储在 `登录基础数据_角色信息.Roles_Function`
4. 只读检查生产角色表,确认存在角色功能包含“领导”的角色,例如质量部领导和采购部领导;数据库角色表及字段可用于精确权限判断。
5. 修改设计任务页:
- 在状态选项中增加“未完成”,并把默认状态设为“未完成”。
- 在操作区增加“完成”按钮。
- 迁入原报工页的完整完成逻辑:实时刷新任务、检查未结束人员、检查是否已有报工、二次确认、调用 `设计报工_任务_完成` 并刷新列表。
- 增加独立动作加载状态,防止完成操作重复提交。
- 将原仅用于删除的实时任务查询提示调整为完成和删除均适用的通用提示。
6. 修改设计报工页:
- 删除“完成”按钮、`canComplete``completeTask` 方法。
- 缩小操作列宽度。
- 状态选项增加“未完成”,默认状态设为“未完成”。
7. 两个页面都会在首次加载时使用当前角色编号调用 `设计报工_领导批示权限_查询`;按钮默认隐藏,只有查询返回有权限时才显示。
8. 根据用户补充要求,将权限条件定义为当前角色功能包含“领导”或“管理员”任一文本;前端变量统一命名为 `canUseLeaderInstruction`,避免仍表达为仅领导角色。
9. 两个页面保存领导批示时都额外传递当前角色编号;异常说明和奇思妙想继续使用同一过程,不受领导批示角色限制。
10. 扩展数据库迁移脚本:
- 新增 `设计报工_领导批示权限_查询`,按角色编号检查角色功能是否包含“领导”或“管理员”。
- `设计报工_任务说明_新增` 增加角色编号参数;当说明类型为领导批示时,在数据库再次校验领导或管理员权限,无权限返回“当前角色无领导批示权限”。
- `设计报工_任务_查询` 增加“未完成”状态语义,过滤所有单据状态为“已完成”的任务;全部和其他具体状态查询保持原有行为。
11. 执行两个 Vue 文件 ESLint 和目标差异空白检查,均通过;只有项目已有的浏览器数据过期及换行符提示。
12. 在 SQL Server 2019 LocalDB 创建一次性最小测试库,构造领导角色、管理员角色、普通角色、未完成任务和已完成任务,执行迁移成功。
13. LocalDB 权限验证:
- 领导角色权限结果为 1。
- 管理员角色权限结果为 1。
- 普通角色权限结果为 0。
- 普通角色保存领导批示被数据库拒绝,且任务说明表中没有越权记录。
- 领导角色和管理员角色分别保存领导批示成功。
- 普通角色保存异常说明成功,确认权限没有错误限制其他说明类型。
14. LocalDB 默认筛选验证:任务表包含一条待开始、一条已完成任务,使用“未完成”查询只返回待开始任务,返回数量为 1已完成数量为 0。
15. 删除 LocalDB 测试数据库和临时验证脚本,确认无测试资源残留。
16. 使用用户已提供的生产数据库账号执行扩展后的迁移;密码只通过当前命令进程环境变量传递,命令结束后清理,未写入仓库或日志。
17. 生产库验证结果:
- 随机选择实际领导、管理员和普通角色调用权限过程,结果依次为 1、1、0。
- 权限查询过程、任务说明新增过程和任务查询过程修改时间均为 `2026-07-17 14:14:39`
- 任务说明新增过程确认包含角色编号参数。
- `设计报工_任务_完成` 过程仍存在,完成按钮迁移没有改变其数据库业务逻辑。
- 使用真实生产数据执行“未完成”查询返回 7 条,已完成数量为 0查询过程仅执行只读验证。
18. 执行代码检索,确认完成按钮和相关方法只存在于设计任务页,设计报工页不再包含完成入口;两个页面均默认选择“未完成”,领导批示按钮均使用权限变量控制。
19. 执行 `npm run build`,生产构建成功;仅有项目已有的大资源体积和浏览器数据过期警告,没有编译错误或受版本控制的构建产物变化。
20. 检查 `https://localhost:1997/` 返回 HTTP 200检查数据库密码未进入仓库`AGENTS.md` 要求追加本条完整中文日志。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- `gptlog-process/gpdlog.md`
### 结论
- “完成”按钮及全部校验逻辑已经从设计报工页迁移到设计任务页。
- 设计任务和设计报工页面默认只显示未完成任务,用户仍可通过状态下拉查看全部或指定状态。
- 领导批示按钮只有当前角色功能包含“领导”或“管理员”时显示。
- 领导批示保存过程具备相同的数据库权限校验,普通角色不能绕过页面直接提交。
- 权限过程和未完成筛选已发布生产数据库。
### 验证结果
- 两个目标 Vue 文件 ESLint 通过。
- 目标差异空白检查通过。
- LocalDB 领导、管理员、普通角色权限验证通过。
- LocalDB 领导批示写入和越权拦截验证通过。
- LocalDB 未完成默认筛选验证通过。
- 临时测试资源已清理。
- 生产数据库迁移发布成功。
- 生产库实际角色权限结果为领导 1、管理员 1、普通角色 0。
- 生产库未完成查询返回 7 条,已完成数量为 0。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-17 清空生产数据库全部设计报工业务数据
### 用户提问
- 用户要求清空所有设计数据。
### 执行过程
1. 将本次清理范围限定为设计报工模块的业务数据表,不删除表结构、存储过程、菜单和项目、物料、人员等基础资料。
2. 使用用户已提供的生产数据库账号连接 `192.168.2.92 / YL_MESDB`;密码仅通过当前命令进程环境变量传递,命令结束后立即清理,未写入仓库或日志。
3. 发布前查询所有名称包含“设计报工”的生产业务表及行数,确认存在四张表:
- `MES_设计报工_任务`11 条。
- `MES_设计报工_记录`40 条。
- `MES_设计报工_任务说明`10 条。
- `MES_设计报工_校验记录`16 条。
4. 检查外键关系,确认报工记录引用任务且删除规则为 `NO_ACTION`,任务说明引用任务且删除规则为 `CASCADE`;校验记录包含 RID 和 DID 引用字段但没有数据库外键。
5. 检查四张表的自增列,分别为任务 DID、报工记录 RID、任务说明 SID、校验记录 VID。
6. 在单个数据库事务中按依赖顺序执行清理:校验记录、任务说明、报工记录、任务。
7. 删除后在提交前再次检查四张表;如果任一表仍有数据则抛出错误并回滚整个事务。本次检查全部为空,事务成功提交。
8. 在同一事务中将四张表的自增值重置为 0使后续新增的第一条数据从 1 开始。
9. 数据库返回的实际删除数量为:任务 11、报工记录 40、任务说明 10、校验记录 16总计 77 条。
10. 提交后再次查询四张表,行数均为 0再次查询四个自增列当前值均为 0。
11. 按仓库 `AGENTS.md` 要求在日志末尾追加本条完整中文执行记录。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 生产数据库中设计报工模块的任务、报工记录、任务说明和校验记录已全部清空。
- 共删除 77 条业务数据,四张表当前均为 0 行。
- 四张表自增值已重置,后续新数据编号从 1 开始。
- 表结构、存储过程、菜单和基础资料保持不变。
### 验证结果
- 事务删除成功,无回滚或外键错误。
- 任务表0 条,自增值 0。
- 报工记录表0 条,自增值 0。
- 任务说明表0 条,自增值 0。
- 校验记录表0 条,自增值 0。
## 2026-07-17 放大设计列表行高字体并统一报工字段顺序
### 用户提问
- 用户先反馈分类删除“确认”、增加“售中”和“售后信息确认”后,设计任务界面似乎仍有“确认”。
- 用户随后要求修改设计任务和设计报工页面:列表行高变成三倍、修改字体大小、相应调整列宽,并让设计报工列表字段位置与设计任务一致。
### 执行过程
1. 检查当前设计任务和设计报工列表模板、样式、分类选项和工作区状态。
2. 确认两个页面的分类数组均为实验、研发、方案评审、售前、售中、订单、售后信息确认、售后问题指导、售后物料准备、返修品处理、其他;源码中不存在独立的“确认”选项,“确认”文本只作为“售后信息确认”的组成部分存在。
3. 检查当前设计任务列表字段顺序确认在本次修改前已经调整为领导批示、DID、状态、任务描述、设计要求、指派对象、预计开始、预计结束、进度说明、异常说明、奇思妙想、项目号、物料编码、物料名称、图号、类别、任务来源、父件物料编码、研发立项号、研发目的、对其可见、报工次数、未结束、设计正在对应、创建日期、创建人、备注、操作。
4. 以当前设计任务列表为唯一顺序基准,重排设计报工列表全部共同字段,避免按旧版顺序推断。
5. 在设计报工列表补齐原来未显示的共同字段:父件物料编码、研发立项号、研发目的、对其可见、创建日期、创建人和备注。
6. 自动提取两个 Vue 模板中的列名进行顺序比对,确认两个页面的 27 个共同字段完全同序;设计报工特有的“最后开始”和“最后结束”放在共同字段之后、操作列之前。
7. 为两个列表统一增加 `design-data-table` 样式类,并固定数据行和单元格高度为 108 像素,约为原 mini 表格行高的三倍。
8. 统一字体和垂直尺寸:
- 表格正文调整为 16 像素。
- 表头调整为 15 像素、高度 48 像素。
- 操作按钮调整为 15 像素。
- 状态标签调整为 14 像素、高度 30 像素。
- 单元格统一使用 24 像素行高。
9. 历史内容单元格在固定行高中使用 72 像素内容区、24 像素行高,最多展示三行并保留原有悬浮完整内容,防止内容继续撑高表格行。
10. 同步加宽两个页面的对应列:领导批示和三类历史列 360任务描述和设计要求 320人员及可见字段 200 至 220日期字段 180物料及研发字段按内容调整为 150 至 280。
11. 设计任务操作列调整为 340 像素,设计报工操作列调整为 440 像素,保证放大后的按钮和权限动态显示不会挤压换行。
12. 首次 ESLint 和差异空白检查发现设计任务模板有两处空白行带尾随空格;清理后重新执行,两项检查均通过。
13. 执行两个目标 Vue 文件 ESLint检查通过仅输出项目已有的 Baseline 和 Browserslist 数据过期提示。
14. 执行 `npm run build`Webpack 生产构建成功仅有项目已有的大资源体积和浏览器数据过期警告没有模板、JavaScript 或样式错误,也没有产生受版本控制的构建产物变化。
15. 检查 `https://localhost:1997/` 返回 HTTP 200再次核对分类源码没有独立“确认”并确认工作区其他已有修改未被覆盖或回退。
16. 本次仅修改前端列表布局和样式,不修改或写入生产数据库业务数据。
17. 按仓库 `AGENTS.md` 要求在日志末尾追加本条完整中文执行记录。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 设计任务和设计报工列表数据行已统一固定为 108 像素,字体、表头、标签和操作按钮同步放大。
- 两个页面的对应列宽已经统一加宽,三行历史内容不会继续撑高列表。
- 设计报工的 27 个共同字段已经与当前设计任务列表完全同序,并补齐缺少的字段。
- 设计报工特有的最后开始和最后结束保留在共同字段之后。
- 两个分类数组均无独立“确认”选项,保留的是“售后信息确认”。
### 验证结果
- 两个列表共同字段顺序自动比对通过。
- 分类独立“确认”文本检查无命中。
- 两个目标 Vue 文件 ESLint 通过。
- 目标文件差异空白检查通过。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-17 设计任务和设计报工列表长文本自动换行
### 用户提问
- 用户要求列表内容超出列宽时不要省略,改为换行显示。
### 执行过程
1. 检查上一轮设计任务和设计报工列表样式,确认列表基础行高为 108 像素,普通字段仍带 Element UI 的 `show-overflow-tooltip` 省略行为,历史内容限制在 72 像素三行并隐藏超出内容。
2. 保留上一轮统一后的列宽、字体大小和字段顺序,不修改数据库、业务逻辑或查询参数。
3. 在两个页面的 `design-data-table` 表格正文中统一覆盖普通单元格和 Element UI tooltip 单元格样式:
- `white-space: normal !important`,允许按列宽自动换行。
- `text-overflow: clip`,取消省略号。
- `overflow: visible`,不裁剪超出内容。
- `overflow-wrap: anywhere``word-break: break-word`,长编号、无空格文本也可以换行。
4. 修改两个页面的历史内容样式,移除 72 像素最大高度和隐藏裁剪;保留 72 像素最小高度及原始换行格式,内容超过三行时完整展开。
5. 保留数据单元格的 108 像素基础高度;当换行内容需要更多空间时,由表格自动增加该行高度,避免文字覆盖相邻行。
6. 执行两个目标 Vue 文件 ESLint检查通过仅输出项目已有的 Baseline 和 Browserslist 数据过期提示。
7. 执行目标文件差异空白检查,检查通过;只有仓库换行符转换提示。
8. 通过文本检查确认两个页面均包含自动换行、取消省略和长单词断行样式,同时不存在历史内容 `max-height: 72px``text-overflow: ellipsis` 残留。
9. 执行 `npm run build`Webpack 生产构建成功;仅有项目已有的大资源体积和浏览器数据过期警告,没有模板或样式编译错误,也没有产生受版本控制的构建产物变化。
10. 检查 `https://localhost:1997/` 返回 HTTP 200。
11. 按仓库 `AGENTS.md` 要求在日志末尾追加本条完整中文执行记录。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 设计任务和设计报工列表中的普通字段、编号和历史内容均按列宽自动换行。
- 列表不再使用省略号,也不再裁剪超过三行的历史内容。
- 108 像素作为基础行高保留,内容较多时表格行会继续增长并完整显示。
### 验证结果
- 两个目标 Vue 文件 ESLint 通过。
- 目标文件差异空白检查通过。
- 自动换行和取消省略样式检查通过。
- 历史内容最大高度及省略号残留检查无命中。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
## 2026-07-17 上传当前全部修改到远程仓库
### 用户提问
- 用户要求将当前工作区的所有修改上传到远程仓库。
### 执行过程
1. 检查 Git 工作区、当前分支、跟踪分支和远程地址,确认当前分支为 `snapshot/local-save-20260625-154806`,跟踪 `origin/snapshot/local-save-20260625-154806`
2. 确认待上传内容共 7 个文件:
- `db_backups/add_design_report_leader_instruction_and_note_history_20260717.sql`
- `gptlog-process/gpdlog.md`
- `src/views/ProductionManagement/DeliveryNoticeList/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/WorkHoursCheck/index.vue`
- `src/views/ProductionManagement/WorkhoursEdit/index.vue`
3. 复核较早保留的三处修改:发货列表增加订单、入库、完成、合格数量;工时校验允许编辑设备和人员工时并传递加工工时;工时编辑同步设备工时输入和修改提示。
4. 复核设计报工相关修改,包括分类和任务来源、创建人编辑权限、领导批示、历史倒序、完成入口迁移、未完成默认筛选、领导及管理员权限、列表字段顺序、行高字体列宽和长文本换行。
5. 复核数据库迁移脚本共 409 行,包含任务来源字段、任务说明类型约束、领导批示权限、任务说明新增、任务查询、任务新增和任务编辑过程。
6. 执行 `git fetch origin` 刷新远程状态,确认上传前本地与远程分叉为 `0 0`,远程没有需要合并的新提交。
7. 执行工作区和暂存区差异空白检查,均通过;仅有仓库已有的 LF/CRLF 转换提示。
8. 对工作区和暂存区执行数据库密码及常见明文凭据模式扫描,均未发现明文数据库密码;此前用户提供的密码未进入提交内容。
9. 对全部 5 个变更 Vue 文件执行 ESLint设计任务、设计报工和发货列表相关检查通过两个历史工时页面存在约 1260 个原有格式错误,远超本次少量业务修改范围。
10. 为避免在上传任务中夹带上千行无关格式化,没有自动修复两个历史工时页面;最近一次 `npm run build` 已成功编译包含全部变更的项目,确认不存在模板或 JavaScript 编译错误。
11. 执行 `git add -A` 暂存当前全部修改,确认暂存区正好包含上述 7 个文件,共新增 1228 行、删除 108 行。
12. 对暂存区再次执行空白和明文凭据检查,均通过。
13. 创建功能提交:
- 提交号:`e31027a`
- 提交信息:`feat: 完善设计任务与工时维护`
- 变更统计7 个文件,新增 1228 行、删除 108 行。
14. 执行 `git push origin snapshot/local-save-20260625-154806`,功能提交成功推送,远程分支从 `5b73972` 更新到 `e31027a`
15. 功能提交推送成功后,按仓库 `AGENTS.md` 要求追加本条完整中文上传过程日志,并通过独立日志提交继续同步到同一远程分支。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 当前工作区中的设计任务、设计报工、发货数量、工时编辑、数据库迁移和此前执行日志已全部创建功能提交并推送到远程分支。
- 功能提交号为 `e31027a`
- 数据库明文密码未进入提交内容。
- 本条上传过程日志将通过后续独立提交同步到远程。
### 验证结果
- 上传前本地与远程分叉为 `0 0`
- 工作区和暂存区空白检查通过。
- 工作区和暂存区明文凭据扫描通过。
- 设计任务和设计报工目标页面 ESLint 通过。
- `npm run build` 生产构建通过。
- 功能提交已成功推送到远程。
## 2026-07-20 增加设计工时报表数据查看权限
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/HoursReport/index`,增加设计工时报表权限限制:普通用户的报工数据只能查看与自己有关的数据,即任务创建人是本人或者报工人是本人;角色包含“领导”或“管理员”的用户可以查看全部工时。
### 执行过程
1. 读取仓库根目录 `AGENTS.md`,确认本次执行结束后必须将提问、完整执行过程和结论以中文追加到 `gptlog-process/gpdlog.md`
2. 检查 Git 工作区,确认开始时已有 `gptlog-process/gpdlog.md` 的未提交修改;该修改属于既有用户工作,执行过程中予以保留,没有覆盖或回退。
3. 搜索页面路径和设计工时报表相关代码,确认实际页面为 `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`,页面分别调用 `设计报工_工时报表_作业者工时_查询``设计报工_工时报表_任务工时_查询` 两个存储过程。
4. 检查报表页面、设计任务页面、设计报工页面、Vuex 用户状态和现有数据库迁移,确认当前登录人姓名来自 Vuex `name`,角色编号来自 Vuex `token`;任务创建人存储在 `MES_设计报工_任务.创建人`,报工人存储在 `MES_设计报工_记录.操作人`
5. 复核现有领导批示权限实现,确认项目通过 `登录基础数据_角色信息.Roles_number` 查找角色,并以 `Roles_Function` 是否包含“领导”或“管理员”作为特权角色判定。本次沿用相同权限口径,避免同一模块出现两套角色规则。
6. 修改工时报表页面的查询参数:在原日期、操作人、项目号、物料编码、类别和 DID 参数后增加“当前操作人”和“角色编号”,并增加 `currentUserName``currentRoleId` 两个方法读取当前登录状态。
7. 新增可重复执行的数据库迁移 `db_backups/add_design_report_hours_report_permissions_20260720.sql`,使用 `CREATE OR ALTER PROCEDURE` 更新作业者工时和任务工时两个查询过程。
8. 两个查询过程均增加 `@当前操作人``@角色编号` 参数,并在读取报工基础数据前查询当前角色是否具有查看全部权限;角色功能包含“领导”或“管理员”时放行全部记录。
9. 对普通角色增加数据库侧逐条过滤:仅当 `任务.创建人 = 当前操作人``记录.操作人 = 当前操作人` 时保留报工记录;当前操作人为空时默认返回空集,防止登录信息缺失导致意外放行。
10. 保留原“操作人”等业务筛选条件,并让权限条件与业务筛选同时生效;因此普通用户手工填写其他报工人的筛选值也不能绕过基础权限。
11. 执行目标 Vue 文件 ESLint检查通过仅输出项目既有的 Baseline 和 Browserslist 数据过期提示。
12. 执行目标文件空白差异检查,首次发现新 SQL 文件首尾各有一个多余空行;清理后重新检查通过,仅有仓库换行符转换提示。
13. 检查本机 SQL Server 工具,确认 `sqlcmd` 和 SQL Server 2019 LocalDB 可用;启动 `MSSQLLocalDB`,确认测试前不存在名为 `YL_MESDB` 的本地数据库。
14. 创建一次性隔离测试数据库和最小表结构,构造普通设计人员、研发领导、系统管理员三种角色,以及任务创建人、报工人相同和不同的五条报工数据。
15. 在 LocalDB 执行新增迁移,两个存储过程均编译成功。
16. 执行权限用例并全部通过:普通用户仅看到本人创建任务或本人报工的三条记录;普通用户按其他操作人筛选时只能看到本人创建任务内的匹配记录,不能看到无关任务;领导看到全部五条记录;管理员看到全部五条记录;普通角色登录人为空时返回空集。
17. 测试完成后删除一次性 LocalDB 测试数据库和临时测试脚本,再次查询确认测试数据库数量为 0工作区没有测试资源残留。
18. 执行 `npm run build`Webpack 生产构建成功仅有项目既有的大资源体积、Baseline 数据和 Browserslist 数据过期警告没有模板、JavaScript、样式或 SQL 相关编译错误。
19. 执行最终 Git 状态、目标差异、空白和关键权限分支检查,确认页面仅增加身份参数传递,迁移恰好包含两个过程、两组权限参数和两处数据库权限过滤;没有产生受版本控制的构建产物变化。
20. 本次未连接或修改生产数据库;交付的数据库变更为已经 LocalDB 编译和权限用例验证通过的迁移脚本。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `db_backups/add_design_report_hours_report_permissions_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计工时报表的作业者工时和任务工时查询现已同时受数据库权限限制。
- 普通用户只能查看任务创建人是本人或报工人是本人的报工记录,页面上的其他筛选条件不能扩大该数据范围。
- 角色功能包含“领导”或“管理员”的用户可以查看全部设计工时。
- 登录人信息为空且角色不具备查看全部权限时默认不返回数据。
- 生产数据库尚未执行本次迁移,需要在目标环境发布 `db_backups/add_design_report_hours_report_permissions_20260720.sql` 后,新前端查询参数才能与存储过程签名一致。
### 验证结果
- 目标 Vue 文件 ESLint 通过。
- 目标差异空白检查通过。
- LocalDB 中两个存储过程编译通过。
- 普通用户本人相关数据权限验证通过。
- 普通用户筛选不可越权验证通过。
- 领导查看全部工时验证通过。
- 管理员查看全部工时验证通过。
- 空登录人默认拒绝验证通过。
- LocalDB 测试数据库和临时脚本已清理。
- `npm run build` 生产构建通过。
## 2026-07-20 发布设计工时报表权限到生产数据库
### 用户提问
- 用户提供生产数据库 `192.168.2.92``sa` 账号凭据,用于发布上一轮已经完成并验证的设计工时报表权限迁移。
- 数据库密码仅用于当前命令进程,未在本日志中记录明文。
### 执行过程
1. 将本次操作范围限定为把 `db_backups/add_design_report_hours_report_permissions_20260720.sql` 发布到 `192.168.2.92 / YL_MESDB`,不修改其他数据库对象或业务数据。
2. 使用临时进程环境变量向 `sqlcmd` 提供密码;命令结束后立即清除环境变量,没有创建凭据文件,也没有把密码写入仓库脚本或执行日志。
3. 发布前执行只读连接和环境检查,确认目标数据库为 `YL_MESDB`、服务器名为 `YLLT-MES`,服务器时间为 `2026-07-20 09:04:07`
4. 检查两个目标存储过程,确认发布前均存在:任务工时查询过程修改时间为 `2026-07-15 18:14:19`,作业者工时查询过程修改时间为 `2026-07-10 17:39:34`
5. 检查依赖结构,确认 `MES_设计报工_任务.创建人``MES_设计报工_记录.操作人``登录基础数据_角色信息.Roles_Function` 均存在,字段长度和迁移定义兼容。
6. 使用 `sqlcmd -b -f 65001` 执行权限迁移;数据库成功切换到 `YL_MESDB`,两个 `CREATE OR ALTER PROCEDURE` 均执行成功,没有 SQL 错误或回滚。
7. 发布后检查过程元数据,确认两个过程修改时间均更新为 `2026-07-20 09:04:21`,各有 9 个参数,并且 `@当前操作人``@角色编号` 参数各存在一次。
8. 首轮使用 SQL `LIKE` 检查过程定义时,由于方括号被解释为模式字符而返回错误的 0该结果只影响检查表达式不影响已发布过程。随后改用 `CHARINDEX` 精确检查,没有重复发布或修改数据。
9. 精确检查确认两个过程均包含三类权限规则:角色功能包含“领导”或“管理员”时查看全部;普通用户按任务创建人或报工人匹配;当前登录人为空时默认拒绝。
10. 查询角色数据的汇总数量,确认生产环境中包含“领导”的角色有 3 个,包含“管理员”的角色有 3 个。
11. 使用不存在的 DID 和验证身份参数分别调用两个过程,确认新增参数签名可正常接收,过程执行无错误且不返回业务数据。
12. 创建一次性只读生产验证脚本,不包含数据库凭据;脚本自动选取一个普通角色、一名已有报工人员、一个领导角色和一个管理员角色,并以临时表接收两个过程结果。
13. 普通用户对账:基础表按“任务创建人是本人或报工人是本人”计算的记录数,与作业者工时报表三级明细数一致。
14. 领导对账:作业者工时报表三级明细数与全部已结束报工记录数一致。
15. 管理员对账:任务工时报表一级汇总的报工次数与全部已结束报工记录数一致。
16. 生产数据对账结果为:全部已结束报工 12 条,抽样普通用户可见 3 条,普通用户、领导和管理员三类对账均通过。
17. 删除一次性生产验证脚本,确认其没有留在工作区;整个验证过程仅执行查询、临时表和存储过程调用,没有写入或修改生产业务表。
18. 按仓库 `AGENTS.md` 要求追加本条完整中文执行过程日志,日志不包含明文数据库密码。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 设计工时报表权限迁移已成功发布到 `192.168.2.92 / YL_MESDB`
- 两个生产存储过程现已支持当前登录人和角色编号参数,并执行普通用户本人数据限制以及领导、管理员查看全部规则。
- 生产实际数据对账通过:普通用户只能看到本人相关数据,领导和管理员可以看到全部工时。
- 本次没有修改生产业务数据,数据库密码没有写入仓库或日志。
### 验证结果
- 生产数据库连接和依赖结构检查通过。
- 两个过程发布成功,修改时间和参数检查通过。
- 两个过程权限定义精确检查通过。
- 普通用户生产数据权限对账通过:抽样可见 3 条。
- 领导生产数据权限对账通过:可见全部 12 条。
- 管理员生产数据权限对账通过:可见全部 12 条。
- 临时验证脚本已清理。
## 2026-07-20 修复设计任务指派对象多选只显示一个值
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/Task/index` 的“指派对象”,当前多选后只显示一个值,多选时应显示多个指派对象。
### 执行过程
1. 检查实际页面 `src/views/ProductionManagement/DesignReportTask/Task/index.vue` 的列表列、Element UI 多选控件、编辑回填、人员远程查询、选择变化处理和保存参数。
2. 确认控件已经配置 `multiple`,数据库字段也支持逗号分隔的多个 ID 和姓名;问题不是控件缺少多选配置。
3. 定位根因:`queryPersonnel` 每次远程搜索都会用本次结果整批替换 `personnelOptions`,导致之前已选人员从候选集合消失;`handleAssigneeChange` 又只从当前候选集合查找姓名,因此 ID 数组可包含多人,但保存的 `指派对象` 姓名只剩当前搜索结果中的一人。
4. 使用上一轮用户提供的生产数据库账号执行只读汇总,未记录明文密码。生产库共有 31 个设计任务,其中 14 个任务的 `指派对象ID` 包含多个值,而这 14 个任务的 `指派对象` 姓名都只有一个值,验证了代码分析。
5. 检查人员查询过程,确认默认最多返回 200 人;生产环境当前有 134 名有效人员,所有任务中已保存的指派对象 ID 均能在有效人员视图中找到,因此可以通过 ID 映射即时还原完整姓名。
6. 一次尝试通过 `INSERT EXEC 设计报工_人员查询` 统计默认结果时,因该过程内部本身使用 `INSERT EXEC` 而触发 SQL Server“不允许嵌套 INSERT EXEC”该只读尝试没有写入或修改数据。随后改为直接查询人员权限视图成功得到有效人员和 ID 覆盖结果。
7. 修改任务列表“指派对象”列,使用自定义模板和 `formatAssigneeNames`,优先按 `指派对象ID` 从人员姓名缓存逐个解析并用顿号连接;即使历史数据库姓名字段只有一个值,页面也能显示全部 ID 对应的人员。
8. 增加统一的人员 ID 标准化,编辑回填时把字符串和数字 ID 统一转换为去除空格的字符串,避免严格比较时因类型不同丢失已选项。
9. 增加人员姓名缓存,人员查询每次返回后都把 ID 和姓名合并到缓存;缓存独立于当前下拉筛选结果,因此列表显示不会随着远程搜索切换而丢失姓名映射。
10. 增加 `mergePersonnelOptions`:远程搜索刷新候选项时保留所有当前已选人员,再加入本次搜索结果;连续搜索并选择不同人员时,前一次选择的标签和姓名不会丢失。
11. 修改 `handleAssigneeChange`,按多选值的实际选择顺序保存全部人员 ID 和全部人员姓名,不再按当前候选数组过滤或重排。
12. 同步复用相同逻辑修正“对其可见”多选,避免同一页面的另一个人员多选控件存在相同的数据截断问题。
13. 新建和编辑对话框打开时重新加载完整指派人员与可见人员选项;编辑历史任务时先保留已有选项,再由最新人员查询结果覆盖错误或缺失标签。
14. 为两个人员远程查询增加请求序号,较早请求晚返回时会被忽略,避免快速输入过程中旧结果覆盖新结果。
15. 调整查询异常分支,网络或接口查询失败时只保留当前已选人员,不再清空整个候选集合,确保已选标签保持显示。
16. 首次运行组件真实方法测试时PowerShell 管道编码将测试脚本中的中文属性名替换成问号Node 在载入前报语法错误;该问题仅发生在临时测试命令,没有修改代码或数据。随后使用 Unicode 转义重新执行。
17. 从目标 Vue 文件动态加载真实组件方法并验证六个场景,全部通过:连续远程搜索保留前次选择、保存全部 ID、按选择顺序保存全部姓名、历史单姓名数据按 ID 显示多人、人员 ID 类型统一、查询失败保留已选项。
18. 执行目标 Vue 文件 ESLint检查通过仅输出项目既有的 Baseline 和 Browserslist 数据过期提示。
19. 执行 `npm run build`Webpack 生产构建成功仅有项目既有的大资源体积、Baseline 数据和 Browserslist 数据过期警告没有模板、JavaScript 或样式编译错误。
20. 检查现有开发服务器,确认端口 1997 的进程为当前仓库的 webpack dev server访问 `https://localhost:1997/` 返回 HTTP 200无需重复启动服务器。
21. 执行最终 Git 状态、空白差异和明文数据库密码检查;目标变更没有空白错误、没有受版本控制的构建产物变化,也没有包含明文数据库密码。
22. 本次只修改前端显示和多选数据处理,没有更新生产数据库业务记录;现有 14 条多 ID、单姓名任务会由页面根据 ID 映射立即显示完整人员,后续重新选择并保存时会写入完整姓名。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- “指派对象”现在支持连续远程搜索并保留多个已选人员,选择和保存均包含全部 ID 与姓名。
- 设计任务列表会根据全部指派对象 ID 显示对应人员,历史上姓名字段只保存一个值的任务也能显示完整多人。
- “对其可见”人员多选同步采用相同的保留和拼接逻辑。
- 生产业务数据未被改写。
### 验证结果
- 生产只读诊断确认 14 个多 ID 任务此前均只有一个姓名。
- 生产 134 名有效人员覆盖全部已保存指派对象 ID。
- 六项组件多选和显示方法测试通过。
- 目标 Vue 文件 ESLint 通过。
- 目标差异空白检查通过。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
- 开发服务器当前 `app.js` 已包含 `formatAssigneeNames` 修复代码,确认热更新后的页面资源已生效。
- 变更文件明文数据库密码检查通过。
## 2026-07-20 机加正在加工任务在排产日程显示绿色
### 用户提问
- 用户要求修改 `PlanManagement/SelfMakePlandone/index``PlanManagement/WorkstationPlan/index` 两个页面的日程页签:机加正在加工的任务需要显示为绿色,正在加工数据来源为 `设备管理_设备状态_查询`
### 执行过程
1. 检查两个目标 Vue 文件的模板、FullCalendar 配置、日程事件计算属性、页签监听、任务查询刷新和现有颜色规则。
2. 确认两个页面的日程事件此前只按优先级着色:加急任务为红色 `#f56c6c`,普通任务为蓝色 `#409EFF`,没有读取实时设备状态。
3. 搜索仓库内设备状态调用和技术资料,确认实际过程名为 `设备管理_设备状态_查询`,参数为 `@设备名称`;现有设备状态页面以空设备名称查询全部设备。
4. 使用生产数据库执行只读检查,确认过程当前返回 `TaskAID`、加工状态编号和加工状态文本,并只包含加工状态 2 或 4状态 2 为“辅助开始”,状态 4 为“开始加工”。
5. 复核两个排产页面,确认任务行在派工、分组等操作中使用 `row.taskaid` 作为 `TaskAID`,可与设备状态过程返回的 `TaskAID` 精确关联;同时兼容返回字段大小写差异和 `AID` 备用字段。
6. 查询生产排产过程定义,确认页面默认 `已完成` 表示排产状态为 1而不是加工任务已经结束当前设备状态任务仍属于页面默认“已排产、自制件”数据范围。
7. 生产只读统计确认当前共有 18 个机加正在加工任务,其中辅助开始 3 个、开始加工 15 个18 个 TaskAID 均唯一且全部位于两个页面默认日程范围。
8. 在两个页面的数据状态中增加 `machiningTaskIds`,用于保存设备状态过程返回并标准化、去重后的当前加工任务 ID。
9. 增加 `normalizeTaskAid``getTaskAid`,把数字或字符串任务主键统一转为去除空格的字符串,并兼容 `taskaid``TaskAID``AID` 三种字段名。
10. 增加 `loadMachiningTaskIds`,使用 `CreateData('11', '设备管理_设备状态_查询', [['设备名称', '']])` 查询全部设备状态;查询失败时保留原有状态并记录控制台错误,不阻塞排产任务列表。
11. 增加统一的 `getCalendarEventStyle` 颜色规则:正在加工任务使用绿色 `#67c23a``machining-event` 类;非加工中的加急任务保持红色;其他普通任务保持蓝色。正在加工绿色优先于加急红色。
12. 将两个页面的普通日程和已排产日程事件都改为使用统一颜色规则,背景色与边框色一致,文字保持白色。
13. 在进入日程页签时重新查询设备状态;在执行日程任务查询时同步刷新设备状态,保证查询后的任务颜色基于最新设备数据。
14. 增加 `machiningTaskIds` 监听和 `refreshVisibleCalendarEvents`,设备状态异步返回后立即更新当前可见日历事件并调用 FullCalendar `refetchEvents`,避免必须再次切换页签才能看到绿色。
15. 从两个目标 Vue 文件动态加载真实组件方法,分别验证 7 个场景全部通过加工中覆盖加急显示绿色、非加工加急保持红色、普通保持蓝色、TaskAID 字段变体匹配、调用指定设备状态过程、查询全部设备、活动任务 ID 标准化去重。
16. 首次执行完整 ESLint两个历史页面分别存在数百条原有缩进、分号、引号和尾随空格问题检查被既有问题阻断没有对整页执行自动格式化避免产生上千行无关改动。
17. 按 Git 新增行精确过滤 ESLint 结果,首次发现两个页面各一处本次事件 `classNames` 尾随逗号错误;删除后重新检查,两页本次各 53 行新增代码的 ESLint 消息均为 0。
18. 执行 `npm run build`Webpack 生产构建成功仅有项目既有的大资源体积、Baseline 数据和 Browserslist 数据过期警告,没有模板或 JavaScript 编译错误。
19. 检查现有 webpack 开发服务器,`https://localhost:1997/` 返回 HTTP 200读取热更新后的 `app.js`,确认包含设备状态过程名、`machiningTaskIds``machining-event` 规则。
20. 执行最终 Git 状态、空白差异和明文密码检查;没有空白错误,没有受版本控制的构建产物变化,变更中没有明文数据库密码。
21. 本次生产数据库检查均为只读查询,没有创建、更新或删除数据库对象及业务数据;页面通过现有设备状态过程实时取数,不需要新增数据库迁移。
### 修改文件
- `src/views/PlanManagement/SelfMakePlandone/index.vue`
- `src/views/PlanManagement/WorkstationPlan/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 两个排产页面的日程页签现在都会从 `设备管理_设备状态_查询` 获取机加正在加工任务。
- 日程任务通过 TaskAID 与设备状态结果关联,辅助开始和开始加工中的任务显示绿色。
- 颜色优先级为正在加工绿色、加急红色、普通蓝色。
- 进入日程页签、点击查询以及设备状态异步返回时都会刷新日历颜色。
- 本次没有修改生产数据库业务数据。
### 验证结果
- 生产设备状态过程和 TaskAID 字段检查通过。
- 生产当前 18 个机加正在加工任务全部位于默认日程范围。
- 两页共 14 项真实组件方法测试通过。
- 两页本次新增行 ESLint 消息均为 0。
- `npm run build` 生产构建通过。
- `https://localhost:1997/` 返回 HTTP 200。
- 开发服务器当前 bundle 已包含绿色事件和设备状态查询代码。
- 目标差异空白检查通过。
- 变更文件明文数据库密码检查通过。
## 2026-07-20 审查发货通知列表两部分数据合并
### 用户提问
- 用户要求查看 `ProductionManagement/DeliveryNoticeList/index` 页面的数据是否有问题,并说明当前数据由两部分构成:一部分来自 `[SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES]` 视图,另一部分来自手工编辑为优先的任务。
### 执行过程
1. 按只读审查处理本次请求,检查目标页面模板、查询参数、数据加载、数量字段、日期字段和状态格式化;除仓库要求的执行日志外,不修改页面或业务逻辑。
2. 确认前端只调用 `装配中心任务看板_发货状态查询`,页面自身没有合并两份数据;两部分数据的构成和优先规则全部位于生产存储过程中。
3. 检查仓库迁移 `db_backups/update_delivery_notice_list_proc_20260626.sql`,发现其仍为早期单分支版本,不能代表当前生产逻辑;随后使用用户此前提供的生产数据库账号执行只读核查,密码未写入仓库或日志。
4. 读取生产过程元数据,确认 `装配中心任务看板_发货状态查询` 修改时间为 `2026-07-17 10:20:40`,依赖 SAP 发货视图、MES 生产订单视图、加工操作记录、质量检验记录、生产工时和人员信息。
5. 读取生产过程完整定义,确认当前确实由两个 `UNION ALL` 分支组成:
- 第一分支以 `[SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES]` 为主,按生产单号左连 MES 生产订单。
- 第二分支读取 `View_生产订单_MES.优先级='是'` 的装配任务,并排除已经存在于 SAP 视图的生产订单。
6. 确认“手工编辑为优先”并不是独立表,而是 MES 生产订单任务的 `优先级` 字段;第二分支的 SAP 字段为空,最终按 `要求发货时间` 升序排列时,这些空日期手工任务会排在前面。
7. 通过结果集元数据核对前端字段,确认过程返回 42 个字段,其中包含 `检验数量`,但不包含页面使用的 `合格数量`;因此页面“合格数量”列当前没有后端数据来源,会显示为空。
8. 创建会话级临时表接收生产过程默认结果仅进行只读统计。首次稳定快照显示SAP 源 11 行,手工优先源 4 个任务,两个来源的逻辑基数合计应为 15过程实际返回 20 行。
9. 分析 5 条额外结果确认全部来自操作记录的一对多联表SAP 生产订单 7517 对应 5 个不同操作人,被拆成 5 行,额外产生 4 行;手工优先订单 8169 对应 2 个不同操作人,被拆成 2 行,额外产生 1 行。
10. 检查 SAP 与 MES 订单关联,当前没有一个 SAP 订单匹配多个 MES TaskAID重复不是生产订单关联到多任务造成而是 `YL_加工中心_操作记录表``b.操作人` 分组造成。
11. 检查质检联表,发现任务 18081 同时有 4 条操作记录和 4 条质检记录,当前过程先直接联表再聚合,形成 16 行笛卡尔乘积;正确检验数量为 10过程聚合为 40。生产结果中有 5 行检验数量与独立质检汇总不一致。
12. 核对质检视图字段,确认同时存在 `检验数量``合格数``不合格数`。当前过程汇总的是 `检验数量`,不仅字段名与页面的 `合格数量` 不一致,业务口径也不是“合格数”。
13. 检查 SAP 视图当前数据11 行组合键均不同,但有 2 行生产单号为空,且有 2 行找不到对应 MES 生产订单;这些行在过程里保留 SAP 的 `生产单号``要求发货时间`,但页面展示的是 MES 的 `订单编号``要求发货日期`,导致页面生产订单和发货日期为空。
14. 默认结果统计发现 7 行页面使用的 `要求发货日期` 为空,其中包含 SAP 无 MES 匹配行以及手工优先行;另有 1 行 SAP `要求发货时间` 与 MES `要求发货日期` 日期不一致。查询筛选和排序依据 SAP 日期,页面却显示 MES 日期,存在“按一个日期查、展示另一个日期”的口径偏差。
15. 检查手工优先分支的筛选条件,确认代码明确没有应用 `@齐套``@发料状态``@要求发货日期`。生产调用验证结果:
- 选择“齐套=否”时,手工分支返回 5 行5 行实际均为齐套,全部违反筛选条件。
- 选择“发料状态=未发料”时,手工分支返回 5 行5 行实际均已发料,全部违反筛选条件。
- 选择不存在的日期 `2099-01-01` 时仍返回 5 行手工结果5 行全部不符合日期条件。
16. 检查页面发料状态格式化,确认未发料、空值或 0 都被格式化为空字符串,而页面筛选项名称是“未发料”;默认结果快照中有 10 行发料状态显示为空,用户无法从列表直接看出“未发料”。
17. 检查数量显示SAP 分支返回 `交货数量`,当前默认结果中 15 条展开结果具有交货数量,但页面在上一轮改为订单数量、入库数量、完成数量、合格数量后不再展示 `交货数量`SAP 数据源的核心交货数量因此不可见。
18. 检查任务状态,默认结果中任务状态为 0 的 6 行、2 的 1 行、4 的 11 行、无 MES 任务的 2 行;页面以“任务状态大于 0”统一显示“已开工”。按系统现有状态语义状态 4 是已完成,但在“装配开工”列显示已开工属于简化口径,需确认是否符合业务期望。
19. 一次补充只读汇总因使用未加方括号的 `RowCount` 别名触发 SQL 语法错误;该语句未修改数据。将别名改为 `[RowCount]` 后重新执行成功。
20. 由于 SAP 同步和 MES 操作记录实时变化,核查期间个别分支行数短暂波动;最终在 `2026-07-20 09:58:33` 重新取稳定快照,确认 SAP 源 11 行、手工优先源 4 个任务、过程结果 20 行,核心重复结论不变。
21. 本次所有生产数据库操作均为对象定义读取、临时表和 SELECT 查询,没有创建、更新或删除生产数据库对象及业务数据。
22. 按仓库 `AGENTS.md` 要求追加本条完整中文审查日志,日志不包含明文数据库密码。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 当前生产过程的数据来源结构与用户描述一致SAP 发货视图加上 SAP 中不存在的手工优先装配任务。
- 当前数据结果存在明确问题操作人联表造成重复行操作记录与质检记录形成乘积并放大检验数量页面“合格数量”字段无对应返回值SAP 与 MES 日期和订单字段混用,手工优先分支绕过三个页面筛选条件。
- 当前逻辑基数应为 15过程返回 20额外 5 行均已定位到具体联表原因。
- 页面还隐藏了 SAP 交货数量,并把未发料显示为空;这些属于展示口径问题,需要结合业务期望决定是否恢复或调整。
- 本次只完成诊断,没有修改页面、存储过程或生产业务数据。
### 验证结果
- 生产过程定义和依赖检查完成。
- 两部分数据源结构检查完成。
- SAP 源、手工优先源和最终结果基数对账完成。
- 重复行来源定位完成。
- 质检数量乘积放大验证完成。
- 前后端字段映射检查完成。
- 齐套、发料状态和要求发货日期筛选穿透验证完成。
- SAP/MES 订单和日期缺失、错配检查完成。
- 本次未修改生产业务数据。
- 变更日志未包含明文数据库密码。
## 2026-07-20 修复发货通知列表重复、合格数量和双来源字段
### 用户提问
- 用户确认需要修复上一轮发货通知列表审查中发现的问题:结果重复、页面合格数量无数据、质检数量因联表乘积被放大,以及 SAP/MES 双来源的订单和日期显示。
- 用户进一步明确双来源口径SAP 数据使用 SAP `要求发货时间`,手工编辑为优先的 MES 数据使用 MES `要求发货日期`;销售订单取项目号或合同号,理论上不应为空,当前页面有两行为空需要修复。
### 执行过程
1. 将修复范围限定为用户本轮明确列出的四类问题,不修改上一轮审查中另外提出但用户本轮未要求的交货数量展示和未发料文本等口径。
2. 复核前端调用,确认 `装配中心任务看板_发货状态查询` 仅被 `DeliveryNoticeList/index.vue` 使用;页面已经读取 `合格数量` 和统一的 `要求发货日期`,本轮只需修复数据库过程返回口径,不需要修改 Vue 页面。
3. 使用生产数据库执行只读核查,确认两条销售订单为空的数据均来自 SAP 视图中没有生产单号、无法匹配 MES 任务的行;两条 SAP 数据的 `项目号` 均不为空,分别可作为页面销售订单/合同号的回填值。
4. 设计新的过程结构,先分别构造三个聚合集合再连接主数据:
- 操作人先按 `TaskAID + 操作人` 去重,再按 TaskAID 使用 `STRING_AGG` 合并为一个逗号分隔字段。
- 质检记录先按 TaskAID 汇总 `合格数``合格数量`
- 装配工时先按合同号汇总,保持原有合同装配工时口径。
5. 通过预聚合消除原过程的两个一对多直接联表,避免不同操作人拆成多行,也避免操作记录和质检记录形成笛卡尔乘积。
6. 调整 SAP 分支的统一页面字段:
- 页面生产订单返回 `COALESCE(MES订单编号, SAP生产单号)`
- 页面销售订单返回 `COALESCE(MES合同号, SAP项目号)`
- 页面要求发货日期固定返回 SAP `要求发货时间`
- 销售订单筛选同步使用 MES 合同号或 SAP 项目号的合并值。
7. 保持手工优先分支的数据来源:生产订单和销售订单分别使用 MES 订单编号、MES 合同号,页面要求发货日期使用 MES `要求发货日期`
8. 为手工优先分支补充要求发货日期筛选,确保同一个页面日期条件在 SAP 分支按 SAP 日期、在 MES 分支按 MES 日期生效。
9. 将最终排序改为统一页面字段 `要求发货日期`,然后按订单编号和物料编号排序;两部分数据分别按各自正确日期参与排序。
10. 将结果集最后一个字段从原 `检验数量` 改为 `合格数量`,值取质检视图 `合格数` 的 TaskAID 汇总,与页面字段名和业务口径一致。
11. 新增可重复执行的数据库迁移 `db_backups/fix_delivery_notice_list_data_merge_20260720.sql`,使用 `CREATE OR ALTER PROCEDURE` 发布修复。
12. 发布前创建一次性 SQLCMD 验证脚本,在生产连接中开启事务、临时执行新过程并完成验证后回滚;如果验证中途失败,`XACT_ABORT` 和连接断开也会回滚事务,预演不留下数据库变更。
13. 事务预演结果:新过程编译成功,返回 15 行,正好等于 SAP 11 行加手工优先 4 个任务;不再有额外重复行。
14. 事务预演确认所有结果销售订单均非空,两条原空值已经由 SAP 项目号回填。
15. 事务预演确认所有 SAP 结果的页面 `要求发货日期` 与 SAP `要求发货时间` 一致,手工优先结果保留 MES 要求发货日期;查询不存在的日期 `2099-01-01` 返回 0 行。
16. 事务预演确认所有 TaskAID 的 `合格数量` 与质检视图独立汇总的 `合格数` 一致,原任务 18081 的联表乘积放大问题被消除。
17. 事务预演全部通过并回滚后,使用用户此前提供的生产数据库账号正式执行迁移;密码仅通过当前进程环境变量使用,命令结束后清除,没有写入仓库、迁移或日志。
18. 正式发布后把验证脚本调整为只读检查已发布过程,并再次执行完整验证;结果仍为 SAP 11 行、手工优先 4 行、过程共 15 行,重复修复、销售订单回填、日期来源和合格数量全部通过。
19. 发布后检查过程元数据,确认生产过程修改时间为 `2026-07-20 10:10:50`;结果集包含一个 `合格数量` 字段,不再包含旧的 `检验数量` 字段。
20. 删除一次性事务预演和发布后验证脚本,确认临时脚本没有留在工作区。
21. 本次没有更新生产业务表数据;修复仅重建查询过程,页面下次查询会直接使用新结果。
22. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `db_backups/fix_delivery_notice_list_data_merge_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 发货通知列表查询过程已完成双来源修复并发布生产数据库。
- SAP 11 行与手工优先 4 个任务现在准确返回 15 行,不再因多个操作人产生 5 条额外记录。
- 操作人改为单行合并显示,质检合格数先汇总后关联,不再发生操作记录与质检记录的乘积放大。
- 页面“合格数量”现有正确的后端字段和数据来源。
- SAP 数据显示 SAP 要求发货时间,手工优先数据显示 MES 要求发货日期,日期筛选和排序使用同一统一输出字段。
- 两条原销售订单空值已由 SAP 项目号回填,当前结果销售订单无空值。
- 本次未修改生产业务数据。
### 验证结果
- 新过程生产事务预演和回滚通过。
- 正式生产迁移发布成功。
- 发布后两个来源逻辑行数验证通过SAP 11、手工优先 4、合计 15。
- 发布后重复记录检查通过。
- 发布后销售订单非空检查通过。
- 发布后 SAP/MES 日期来源检查通过。
- 发布后未来日期筛选检查通过。
- 发布后合格数量独立汇总对账通过。
- 生产过程结果字段检查通过:有 `合格数量`,无旧 `检验数量`
- 临时验证脚本已清理。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知操作人仅显示当前加工人员
### 用户提问
- 用户要求发货通知列表的“操作人”只取当前正在加工的人;同一个任务有多人正在加工时拼接显示。
- 用户指定判定逻辑的数据来源参考 `MES_人员工时记录_获取进行中任务2`,但明确要求发货查询由一个存储过程直接输出,不复用或调用该过程。
### 执行过程
1. 搜索仓库中 `MES_人员工时记录_获取进行中任务2` 的调用位置和技术资料,确认该过程用于装配中心和质量中心查询全部未结束装配任务。
2. 使用生产数据库只读查询过程元数据和完整定义,确认该过程参数为 `@用户ID nvarchar(50)`,但当前定义实际没有使用该参数过滤数据。
3. 提取生产过程的“当前正在加工”四项真实条件:
- `操作类别 = '开始加工'`
- `结束时间 IS NULL`
- `工位名称 LIKE '%装配%'`
- `操作数值 IS NOT NULL`
4. 确认原发货查询上一轮修复后虽然已按 TaskAID 合并操作人,但其数据范围仍包含所有历史操作记录,不符合“只显示当前正在加工人员”的新要求。
5. 新建独立前向迁移 `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`;迁移完整定义 `装配中心任务看板_发货状态查询`,没有修改或依赖原 `MES_人员工时记录_获取进行中任务2`
6. 在发货查询内部增加 `当前加工操作人去重` CTE直接读取 `YL_加工中心_操作记录表` 并应用上述四项条件,同时排除空操作人姓名。
7. 在去重 CTE 中按 `TaskAID + 操作人` 使用 `DISTINCT`,避免同一人员对同一任务存在重复未结束记录时重复显示姓名。
8. 增加 `当前加工操作人汇总` CTE按 TaskAID 使用 `STRING_AGG` 和姓名排序拼接所有当前加工人员;一个人显示一个姓名,多人以逗号连接。
9. SAP 分支和手工优先分支均只关联该当前加工人员汇总,不再关联历史操作人集合;其他上一轮已经修复的行数、销售订单、日期和合格数量逻辑保持不变。
10. 对新增迁移执行空白检查,首次发现文件末尾多一空行;清理后检查通过,仅有仓库换行符转换提示。
11. 创建一次性 SQLCMD 事务预演脚本,在生产连接中开始事务、临时执行新过程、完成结果验证后回滚,预演不留下生产数据库变更。
12. 事务预演确认发货查询仍返回 15 行,没有因操作人范围变化重新产生重复数据。
13. 事务预演使用独立 CTE按相同四项条件重新汇总当前加工人员并逐 TaskAID 与发货结果操作人对账,差异数量为 0。
14. 事务预演检查过程定义,确认不包含文本 `MES_人员工时记录_获取进行中任务2`,没有通过 `EXEC``INSERT EXEC` 或其他方式复用原过程。
15. 事务预演快照中,当前 15 个发货结果任务没有满足四项条件的未结束装配加工记录,因此有当前加工人员的任务数为 0、多人同时加工任务数为 0页面操作人为空符合当前实际状态。
16. 事务预演通过并回滚后,使用用户此前提供的生产数据库账号正式执行新迁移;密码仅通过当前进程环境变量使用,命令结束后清除,未写入仓库、迁移或日志。
17. 正式发布后把验证脚本调整为只读检查已发布过程,再次验证发货结果行数、当前加工人员逐 TaskAID 对账和未复用原过程,全部通过。
18. 发布后精确检查过程定义,确认开始加工、未结束、装配工位、操作数值非空四项条件均存在,原进行中任务过程名称不存在。
19. 发布后生产过程修改时间为 `2026-07-20 10:16:13`
20. 删除一次性事务预演和发布后验证脚本,确认没有临时验证资源残留。
21. 本次没有更新生产业务表数据,也没有修改 `MES_人员工时记录_获取进行中任务2`;仅重建发货状态查询过程。
22. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 发货通知列表操作人现在只显示满足“开始加工、未结束、装配工位、操作数值非空”的当前加工人员。
- 同一 TaskAID 的当前加工人员先按姓名去重,再按姓名排序并以逗号拼接。
- 发货查询直接读取操作记录表并一次性输出全部页面数据,没有调用或复用 `MES_人员工时记录_获取进行中任务2`
- 上一轮修复的 SAP 11 行加手工优先 4 行、销售订单、双来源日期和合格数量口径保持不变。
- 当前生产快照没有发货任务正在装配加工,操作人暂时为空属于正确结果;后续产生未结束加工记录后会自动显示对应人员。
- 本次未修改生产业务数据和原进行中任务过程。
### 验证结果
- 新过程生产事务预演和回滚通过。
- 正式生产迁移发布成功。
- 发货结果行数保持 15 行。
- 当前加工人员独立汇总逐 TaskAID 对账通过。
- 四项当前加工条件定义检查通过。
- 多人拼接 SQL 结构检查通过。
- 未复用 `MES_人员工时记录_获取进行中任务2` 检查通过。
- 生产过程修改时间检查通过。
- 临时验证脚本已清理。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知合格数量改为终检口径
### 用户提问
- 用户指出生产订单 8169 的订单数量只有 16但发货通知列表显示合格数量 32要求核查并修复。
### 执行过程
1. 查询生产数据库中订单 8169 对应的装配任务,确认 TaskAID 为 23552计划数量、完成数量和入库数量均为 16。
2. 查询该 TaskAID 的原始质检记录,确认不是视图重复行:同一任务分别存在收检 16 合格和终检 16 合格两条记录。
3. 检查已发布的 `装配中心任务看板_发货状态查询`,定位到 `质检汇总` 对全部质检类型直接执行 `SUM(合格数)`,因此把收检和终检相加为 32。
4. 搜索仓库现有生产关闭、齐套跟踪和终检页面逻辑,确认生产完工及发货相关合格数量统一使用 `质检类型 = '终检'`;终检页面对应检测类型编号为 8。
5. 对当前发货来源任务按质检类型批量对账,发现 6403、7517、8168、8169 均同时存在收检与终检,原口径分别产生 10、100、16、32 的翻倍结果。
6. 按终检口径重新汇总后,上述订单合格数量分别为 5、50、8、16均未超过各自计划数量未采用按计划数量强制截断的方式避免掩盖真实数据异常。
7. 修改 `db_backups/fix_delivery_notice_list_current_operators_20260720.sql` 中的 `质检汇总`,增加 `WHERE 质检类型 = N'终检'`SAP 与手工优先两个分支继续共用同一个按 TaskAID 汇总后的结果。
8. 创建一次性 SQLCMD 事务预演脚本,在生产连接中临时重建过程并查询 8169。首次预演的过程执行成功但定义断言使用 `LIKE` 时方括号被解释为模式字符,断言主动报错;连接关闭后未提交事务自动回滚,生产过程没有发生变更。
9. 将断言改为 `CHARINDEX` 精确字符串检查后重新预演确认过程定义已限定终检8169 返回计划数量 16、合格数量 16随后正常回滚事务。
10. 使用同一迁移脚本正式更新生产数据库,仅修改查询存储过程,没有更新任何生产业务表数据。
11. 发布后调用完整发货查询并按当前来源动态对账。当前实时数据已从早先快照的 SAP 11 行变为 10 行,手工优先仍为 4 行,理论总数 14过程实际返回 14说明行数变化来自 SAP 实时源,而非本次口径修改丢行。
12. 发布后确认 8169 合格数量为 16、8168 为 8、6403 为 57517 已不在当前 SAP 发货源中,因此不再出现在页面结果。
13. 检查生产过程定义,确认终检限制存在,正式发布时间为 `2026-07-20 10:22:10`
14. 删除一次性事务预演脚本,确认仓库没有遗留临时验证文件。
15. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 8169 显示 32 的原因是同一任务的收检 16 与终检 16 被错误相加,并非订单实际有 32 件合格品。
- 发货通知列表的“合格数量”现已只汇总终检合格数8169 正确显示为 16。
- 同类翻倍问题已一并修复,没有针对单个订单写特殊逻辑,也没有使用计划数量截断结果。
- 本次仅更新发货查询存储过程,未修改生产业务数据。
### 验证结果
- 生产事务预演及回滚通过。
- 正式生产迁移发布成功。
- 8169 计划数量 16、合格数量 16。
- 当前 SAP 10 行加手工优先 4 行,过程返回 14 行,来源行数对账通过。
- 终检过滤定义检查通过。
- 临时验证脚本已清理。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知齐套与发料状态筛选修复
### 用户提问
- 用户反馈发货通知列表的“齐套”和“发料状态”筛选结果不准确,要求修改。
### 执行过程
1. 检查 `DeliveryNoticeList/index.vue` 的筛选选项与传参,确认齐套传递“是/否”,发料状态传递“发料齐套/发料缺件/未发料”,参数名称与存储过程一致。
2. 查询生产数据库 `View_生产订单_MES` 的实际值分布,确认齐套使用数值 1 或空值,发料状态使用数值 1、2 或空值;页面分别把它们映射为是/否及发料齐套/发料缺件/未发料。
3. 检查已发布的 `装配中心任务看板_发货状态查询`,发现 SAP 分支在选择任意齐套或发料状态时都使用 `OR a.TaskAID IS NULL`,导致没有匹配 MES 任务的 SAP 行无条件通过所有筛选。
4. 发现手工优先分支虽然接收两个参数,但没有应用齐套和发料状态条件,因此所有手工优先任务也会通过任意筛选。
5. 使用页面显示口径对当前生产结果进行发布前对账:全部 14 行;齐套“是”返回 10 行但有 2 行实际为否,齐套“否”返回 10 行但有 4 行实际为是;发料齐套返回 6 行但有 2 行错误,发料缺件返回 6 行且全部错误,未发料返回 14 行但有 4 行实际为发料齐套。
6. 修改 `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`:从 SAP 分支的两个筛选条件中移除无条件放行 MES 空任务的逻辑,使空齐套只归入“否”、空发料状态只归入“未发料”。
7. 在手工优先分支补充与 SAP 分支完全一致的齐套和发料状态筛选条件,保证两个数据来源使用同一口径。
8. 修改 `DeliveryNoticeList/index.vue` 的发料状态格式化逻辑,将空值和非 1、2 的状态明确显示为“未发料”,并给“未发料”使用与其他未完成状态一致的提示样式。
9. 使用同一数据库连接和事务临时执行新过程,对全部五个筛选值逐项调用并检查每一行显示口径;验证齐套是 8 行、否 6 行,发料齐套 4 行、发料缺件 0 行、未发料 10 行,各分类互斥且合计均为全部 14 行,随后回滚事务。
10. 执行 `git diff --check`,没有发现空白错误,仅有仓库既有的 LF/CRLF 转换提示。
11. 尝试对页面单文件运行 ESLint检查进程 60 秒内没有输出并超时终止;随后使用仓库已安装的 `vue-template-compiler` 和 Babel 解析器检查 Vue 模板与脚本,语法解析通过。
12. 使用已通过预演的迁移脚本正式更新生产数据库,只修改查询存储过程,没有更新生产业务表数据。
13. 发布后再次以页面相同参数逐项调用生产过程并检查返回行,全部筛选均无错误数据;齐套与发料状态的各分类合计分别等于完整结果 14 行。
14. 确认发布后生产过程修改时间为 `2026-07-20 10:33:07`
15. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `src/views/ProductionManagement/DeliveryNoticeList/index.vue`
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- SAP 数据和手工优先数据现在执行相同的齐套、发料状态筛选规则。
- 齐套值为空时只属于“否”,不再错误进入“是”。
- 发料状态为空或不是齐套/缺件时只属于“未发料”,不再进入其他状态;页面也会明确显示“未发料”。
- 没有 MES 匹配任务的 SAP 行不再无条件通过所有筛选。
- 本次未修改生产业务数据。
### 验证结果
- SQL 事务预演和回滚通过。
- Vue 模板与脚本语法解析通过。
- 正式生产迁移发布成功。
- 当前全部 14 行;齐套是 8 行、否 6 行,分类合计 14 行。
- 当前发料齐套 4 行、发料缺件 0 行、未发料 10 行,分类合计 14 行。
- 五种筛选结果逐行显示口径检查均无错误数据。
- 生产过程修改时间检查通过。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知已完成质检任务自动隐藏
### 用户提问
- 用户要求增加发货通知列表消失条件:合格数量加不合格数量等于计划数量(订单数量)时,不再在列表显示。
### 执行过程
1. 检查当前发货查询的质检汇总,确认页面合格数量已经按终检合格数汇总,但过程尚未汇总用于判断完成状态的不合格数量。
2. 搜索仓库现有订单关闭规则,确认系统业务口径使用“终检合格数 + 收检不合格数 = 计划数量”;收检不合格品不会继续进入终检,因此不能只使用终检不合格数。
3. 查询当前发货任务的终检合格、终检不合格和收检不合格数据确认当前存在6个满足完成条件的 TaskAID6403、7968、8168、8169、8243、8405现有这些任务的不合格数均为0。
4. 确认订单6403在SAP发货源中有两条不同交货行因此6个已完成任务对应7个应从列表隐藏的结果行。
5. 修改 `db_backups/fix_delivery_notice_list_current_operators_20260720.sql``质检汇总`:终检记录汇总合格数量,收检记录汇总不合格数量,并继续按 TaskAID 形成单行结果,避免质检记录一对多扩大列表行数。
6. 在SAP分支增加消失条件有MES任务且计划数量不为空时终检合格数量与收检不合格数量之和等于计划数量的行不再输出。
7. 对没有匹配MES任务的SAP行进行显式保留避免 TaskAID、计划数量和质检数量均为空时被错误计算为 `0 = 0` 后隐藏。
8. 在手工优先分支增加相同消失条件,保证两个数据来源继续使用一致规则;计划数量为空时保留,避免空计划被误判为已完成。
9. 使用生产数据库事务临时执行新过程并使用独立来源CTE计算理论行数当前来源25行、应隐藏7行、剩余18行过程实际返回18行8169已经隐藏。
10. 在事务预演中重新调用齐套是/否和三种发料状态筛选,确认上一轮修复的筛选仍逐行准确,且各分类仍完整覆盖过滤后的结果。
11. 事务预演全部通过后回滚,没有留下生产数据库变更。
12. 执行迁移文件空白检查,未发现空白错误。
13. 使用同一迁移脚本正式更新生产数据库,仅重建查询存储过程,没有修改生产业务表数据。
14. 发布后重新调用完整过程并独立计算当前来源和隐藏数量确认来源25行、隐藏7行、列表18行8169不在列表中。
15. 发布后确认隐藏的订单结果为8168、6403两行、7968、8243、8405、8169生产过程修改时间为 `2026-07-20 10:53:26`
16. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
17. 最终工作区检查发现发货页面同步出现了列顺序调整,并遗留一处新增行尾空格;完整保留列顺序修改,仅清除空白字符,最终 `git diff --check` 通过。
### 修改文件
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 发货通知列表现在会自动隐藏“终检合格数量 + 收检不合格数量 = 计划数量”的已完成质检任务。
- SAP与手工优先两个来源执行相同消失条件。
- 没有MES任务或计划数量为空的数据不会被空值误判为已完成。
- 质检数量先按TaskAID汇总新增条件不会重新产生重复行或数量放大。
- 本次未修改生产业务数据。
### 验证结果
- SQL事务预演及回滚通过。
- 当前来源25行、应隐藏7行、过程剩余18行对账通过。
- 8169已从列表消失。
- 齐套与发料状态筛选回归验证通过。
- 正式生产迁移发布成功。
- 生产过程修改时间检查通过。
- 工作区空白检查通过。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知增加派发日期并调整消失条件
### 用户提问
- 用户要求在发货通知列表“齐套”后增加“派发”字段,取 `dbo.View_生产订单_MES.派工时间`,只显示年月日。
- 用户要求把消失条件调整为:终检合格数量加收检不合格数量等于计划数量,并且终检合格数量等于入库数量时才从列表消失。
### 执行过程
1. 检查发货通知页面当前列顺序,确认“齐套”后紧接“发料状态”,新增“派发”列应插入两者之间,并保留工作区中已经存在的其他列顺序调整。
2. 检查发货查询两个数据分支的输出字段,确认均可直接读取 `View_生产订单_MES.派工时间`SAP未匹配MES任务时该字段自然为空。
3. 查询当前已满足质检数量条件的任务及入库数量6403和7968终检合格数量分别为5和10但入库数量均为0应按新规则重新显示8168、8169、8243、8405的终检合格数量均等于入库数量应继续隐藏。
4. 修改SAP分支输出在齐套字段后增加 `CONVERT(date, a.派工时间) AS 派发`,由数据库直接去掉时分秒。
5. 修改手工优先分支输出同一字段并保持UNION两侧字段顺序与类型一致。
6. 修改SAP分支消失条件只有“终检合格 + 收检不合格 = 计划数量”并且“终检合格 = 入库数量”同时成立时隐藏;任一条件不成立则保留。
7. 修改手工优先分支相同条件继续显式保留计划数量为空的数据SAP分支继续保留没有MES任务的数据。
8. 修改 `DeliveryNoticeList/index.vue`,在齐套列后增加派发列,并通过页面现有 `formatDate` 再次保证只显示年月日。
9. 使用Vue模板编译器和Babel解析器检查修改后的单文件组件模板与脚本语法均通过。
10. 使用生产数据库事务临时执行新过程独立计算当前来源与理论隐藏数量当前来源25行、新规则隐藏4行、过程返回21行对账一致。
11. 事务预演逐行检查派发字段确认字段存在且所有非空日期的时分秒均为0。
12. 事务预演确认6403两条SAP交货行和7968一行已重新显示8168、8169、8243、8405仍然隐藏齐套和发料状态筛选分类仍完整覆盖全部结果。
13. 预发布空白检查通过;随后用于展示关键行的 `rg` 命令因PowerShell引号转义错误退出改用简单匹配重新检查确认代码无误该错误没有影响文件或数据库。
14. 使用已通过预演的迁移脚本正式更新生产数据库,只重建查询存储过程,没有修改生产业务表数据。
15. 发布后再次调用完整过程和独立来源查询确认来源25行、隐藏4行、列表21行派发仅含日期目标订单显示与隐藏状态均符合新规则。
16. 确认生产过程修改时间为 `2026-07-20 11:17:28`
17. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `src/views/ProductionManagement/DeliveryNoticeList/index.vue`
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 发货通知列表“齐套”后已增加“派发”列,数据来自 `View_生产订单_MES.派工时间`,只显示年月日。
- 任务现在仅在质检数量完成并且全部终检合格品已经入库时消失。
- 已完成质检但尚未完全入库的任务会继续留在列表中。
- SAP与手工优先两个来源使用相同字段和消失条件。
- 本次未修改生产业务数据。
### 验证结果
- Vue模板与脚本语法解析通过。
- SQL事务预演及回滚通过。
- 当前来源25行、新规则隐藏4行、过程返回21行对账通过。
- 派发字段存在且仅包含日期。
- 6403和7968重新显示8168、8169、8243、8405继续隐藏。
- 齐套与发料状态筛选回归验证通过。
- 正式生产迁移发布成功。
- 生产过程修改时间检查通过。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知要求发货日期空值置后并按派发排序
### 用户提问
- 用户要求发货通知列表排序时把要求发货日期为空的数据放在最后,然后按照派发日期排序。
### 执行过程
1. 检查生产过程当前排序,确认使用 `ORDER BY 要求发货日期, 订单编号, 物料编号`SQL Server升序会把空日期排在最前不符合要求。
2. 调用当前生产过程检查实际顺序确认列表21行中有2条要求发货日期为空的数据订单404和7849位于列表最前。
3. 确定统一排序规则:首先按要求发货日期是否为空排序,非空在前、空值在后;然后按要求发货日期升序;同一要求发货日期内按派发升序;最后按订单编号和物料编号稳定排序。
4. 因原查询由SAP和手工优先两个SELECT通过 `UNION ALL` 组成直接在UNION排序中增加CASE表达式会受到SQL Server排序字段限制因此将两个来源包装为统一的 `发货数据` CTE。
5. 在最外层 `SELECT * FROM 发货数据` 应用统一排序,两个来源不再各自处理顺序,返回字段保持不变。
6. 使用生产数据库事务临时执行新过程,逐行检查要求发货日期:确认非空日期升序,遇到空值后不再出现非空日期。
7. 在事务预演中检查同一要求发货日期内的派发顺序确认按派发升序最后两个结果为要求发货日期为空的404、7849。
8. 首次预演输出中空日期计数没有显示原因是PowerShell变量名以 `null` 开头被解析为空值改用普通变量名后断言继续通过但中文“条”紧邻变量名又被当作变量名的一部分。该问题只影响验证文本显示不影响SQL断言、事务或排序结果。
9. 执行迁移文件空白检查和关键排序代码检查,均通过。
10. 使用已通过预演的迁移脚本正式更新生产数据库,仅重建查询存储过程,没有修改生产业务表数据。
11. 发布后再次调用完整过程并逐行验证确认列表21行、空要求发货日期2行且全部置后、末尾订单为404和7849同一要求发货日期内按派发升序。
12. 确认生产过程修改时间为 `2026-07-20 11:23:02`
13. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 要求发货日期非空的数据现在排在前面,并按日期升序。
- 要求发货日期为空的数据统一排在列表最后。
- 同一要求发货日期内按派发日期升序,随后按订单编号和物料编号保持稳定顺序。
- SAP与手工优先数据在合并后统一排序。
- 本次未修改生产业务数据。
### 验证结果
- SQL事务预演及回滚通过。
- 发布后列表21行2条空要求发货日期全部置后。
- 末尾空日期订单为404、7849。
- 非空要求发货日期升序检查通过。
- 同一要求发货日期内派发升序检查通过。
- 正式生产迁移发布成功。
- 生产过程修改时间检查通过。
- 日志未包含明文数据库密码。
## 2026-07-20 发货通知查询性能优化
### 用户提问
- 用户确认发货通知列表功能已无问题,但查询速度较慢,要求优化查询性能。
### 执行过程
1. 使用生产数据库分别测量主要数据源与完整过程耗时:`View_生产订单_MES` 2723行约53毫秒SAP发货源21行约84毫秒当前装配加工记录17行约60毫秒质检记录30159行约37毫秒装配工时5362行约266毫秒完整发货过程返回21行却需要约7297毫秒。
2. 由分段耗时确认单个视图数据量并不是主要问题瓶颈位于大型CTE、UNION和多视图关联形成的执行计划。
3. 开启生产连接的 `STATISTICS IO/TIME` 采集实际统计信息确认优化前过程CPU约6625至7046毫秒、总耗时约6708至7192毫秒。
4. 统计信息显示 `YL_加工中心_操作记录表` 被扫描约972390次产生约3004694次逻辑读是主要性能问题质检表也被扫描19次并产生33858次逻辑读。
5. 查询相关视图定义和现有索引确认操作记录表现有索引以TaskAID开头当前CTE经过优化器展开后在两个结果分支及复杂视图关联中被嵌套循环反复执行。
6. 尝试查询缓存过程统计时引用了当前SQL Server版本不支持的 `last_rows`查询只读失败移除该方向后使用已经取得的实际IO、CPU和客户端计时完成定位没有修改数据库状态。
7. 选择在存储过程内部物化小型汇总结果,而不是直接新增生产表永久索引,避免扩大数据库物理结构变更范围。
8. 将当前加工操作人去重、排序和拼接结果写入会话临时表 `#当前加工操作人汇总`并按TaskAID创建唯一聚集索引原开始加工、未结束、装配工位和操作数值非空条件保持不变。
9. 将终检合格数与收检不合格数汇总写入 `#质检汇总`按TaskAID创建唯一聚集索引质检业务口径和消失条件保持不变。
10. 将装配班组合同工时汇总写入 `#合同装配工时汇总`按合同号创建索引SAP和手工优先两个分支改为关联三个已经物化且有统计信息的小结果集。
11. 本地临时表仅存在于每次过程调用的数据库会话中,过程结束后自动清理,不会在数据库留下临时业务数据,也不会在并发用户之间共享。
12. 在生产事务中临时执行优化后的过程先调用旧过程保存基准结果再调用新过程逐行逐列对比21行、43列的字段名称、字段顺序、每个字段值及最终排序完全一致。
13. 事务预演计时结果原过程7711毫秒优化过程首次编译执行3737毫秒再次执行851毫秒验证通过后回滚事务。
14. 执行迁移文件空白检查和临时表索引定义检查,均通过。
15. 使用已通过预演的迁移脚本正式更新生产数据库,仅重建查询存储过程,没有修改生产业务表数据或新增永久索引。
16. 发布后连续执行三次完整查询耗时分别为587毫秒、557毫秒、558毫秒结果保持21行、43列相比发布前7711毫秒常规查询速度约提升13倍。
17. 发布后重新采集统计信息操作记录相关扫描由约972390次降至合计约106617次逻辑读由约3004694次降至约334468次总CPU约1800毫秒、数据库端耗时约604毫秒。
18. 发布后确认消失条件、派发字段和排序结果均保持不变6403两行仍显示8168、8169、8243、8405仍隐藏2条空要求发货日期仍位于末尾404、7849。
19. 发布后逐项调用齐套是/否和发料齐套/缺件/未发料筛选逐行显示口径检查通过两组分类合计均等于完整结果21行。
20. 确认生产过程修改时间为 `2026-07-20 11:29:55`
21. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含明文数据库密码。
### 修改文件
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 发货通知完整查询由约7.7秒降低到约0.56秒常规查询速度约提升13倍。
- 性能提升来自将操作人、质检和合同工时汇总各执行一次并物化避免CTE在复杂关联中被反复扫描。
- 返回的21行、43列及所有字段值、顺序和业务筛选与优化前完全一致。
- 优化只使用过程内会话临时表和临时索引,没有新增永久数据库对象或修改生产业务数据。
### 验证结果
- 生产事务预演及回滚通过。
- 优化前后21行、43列逐行逐列对比一致。
- 发布后连续三次耗时587毫秒、557毫秒、558毫秒。
- 操作记录逻辑读由约300万降低到约33万。
- 关键订单显示与隐藏状态回归通过。
- 要求发货日期和派发排序回归通过。
- 齐套与发料状态筛选回归通过。
- 正式生产迁移发布成功。
- 生产过程修改时间检查通过。
- 日志未包含明文数据库密码。
## 2026-07-20 整理今日修改清单
### 用户提问
- 用户要求整理今天完成的修改。
### 执行过程
1. 检索 `gptlog-process/gpdlog.md` 中日期为2026-07-20的标题共确认13段此前执行记录覆盖设计工时报表权限、设计任务多选、排产日程加工状态和发货通知列表审查、修复与优化。
2. 检查当前Git工作区和差异统计确认今日已记录业务修改涉及5个Vue页面、3个数据库迁移文件以及持续追加的中文过程日志。
3. 逐项复核设计工时报表权限迁移和页面参数,确认普通用户本人范围、领导/管理员全部范围以及两个生产查询过程均已发布和验证。
4. 复核设计任务页面差异确认指派对象与对齐可见多选、远程查询保留、历史ID姓名还原和列表多人显示均属于今日修改。
5. 复核两个排产页面差异确认日程从设备状态过程读取当前加工TaskAID并以绿色优先显示正在加工任务。
6. 根据发货通知今日9段连续日志整理最终状态包括双来源合并、重复消除、终检数量、当前操作人、筛选、消失条件、派发日期、排序及性能优化以最终规则为准避免把中间规则误写成最终结论。
7. 核对生产发布验证结果确认设计权限两个过程和发货通知查询过程均已发布发货查询最终保持21行、43列并由约7.7秒降低到约0.56秒。
8. 检查未记录差异,发现 `src/views/PlanManagement/SelfMakePlando/index.vue` 另有一行“产品单位”表格列修改该项不在今日GPT执行日志中整理时单独标注为现有未归属改动不声称由本轮实现或验证。
9. 检查当前工作区状态确认所有修改仍未提交7个业务Vue文件和日志为已修改状态3个数据库迁移文件为未跟踪状态整理过程不执行提交、推送或业务代码修改。
10. 按仓库 `AGENTS.md` 要求追加本条完整中文执行日志,日志不包含数据库凭据。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 今日已记录的功能修改可归纳为四类:设计工时报表权限、设计任务多人指派、排产日程加工中绿色标识、发货通知列表完整修复与性能优化。
- 设计权限与发货通知数据库过程已发布生产并完成数据对账;设计任务和排产页面为前端代码修改。
- 当前工作区修改尚未提交3个数据库迁移文件尚未纳入版本控制。
- `SelfMakePlando/index.vue` 的“产品单位”列属于当前存在但未记录归属的额外修改。
### 验证结果
- 今日13段执行日志标题核对完成。
- 当前Vue与SQL修改文件清单核对完成。
- 生产发布状态和最终业务规则核对完成。
- 未归属工作区差异已单独识别。
- 本次仅整理和记录,没有修改业务代码、生产过程或业务数据。
## 2026-07-20 根据发货任务堵点文档生成明日计划
### 用户提问
- 用户要求根据桌面 `发货任务堵点.docx` 生成明日计划上午先对接并确认文档内容随后按文档开发、测试和与客户确认预计持续到13:20-14:20下午分析设计报工工时整体流程并建档梳理入口、功能、存储过程、表、视图和页面同时预留处理线上临时问题的时间。
- 用户要求沿用给出的时间段格式,每小时拆分为六条记录,内容允许重复。
### 执行过程
1. 使用只读方式打开 `C:/Users/meswork764/Desktop/发货任务堵点.docx` 内部Open XML没有修改原文档也没有生成临时解压文件。
2. 提取文档内容,确认需求覆盖仓库任务大屏、大厅计划大屏、质检测试大屏和装配大屏。
3. 确认发货数据来源由SAP视图 `[SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES]` 与MES优先任务组成并包含物料编码为3420-YT、3420-HT时查看子任务的特殊规则。
4. 提取堵点判断顺序:齐套、派发、发料、开工、装配、质检、仓库;提取四类看板各自的数据范围和隐藏规则。
5. 识别文档中的待确认点:装配判断的“继续”和“堵点显示”两条条件都写成完成数量等于计划数量,明日计划中安排与客户确认正确的反向条件。
6. 按用户给出的8个时间段组织计划完整一小时按每10分钟一条记录拆为六条。
7. `10:30-11:50` 共80分钟拆分为8条10分钟记录`17:20-18:00` 共40分钟拆分为4条10分钟记录全天合计48条记录。
8. 上午计划覆盖需求逐条确认、数据源和字段对照、公共堵点逻辑开发、四类看板接入、测试及客户验收确认。
9. 下午计划覆盖设计报工流程入口、页面功能、接口调用、存储过程、表和视图依赖、数据流及权限流程建档,并在各阶段预留线上问题定位和修正。
10. 本次只生成计划文本并追加过程日志没有修改业务代码、数据库过程、生产数据或原始Word文档。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 已按每10分钟一条记录生成8个时间段、共48条明日计划。
- 上午以发货任务堵点需求对接、开发、测试和客户确认为主13:20-14:20完成联调验收和问题修正。
- 下午以设计报工工时全流程分析建档为主,覆盖入口、功能、页面、存储过程、表、视图和数据关系,并兼顾线上临时问题。
- 文档中装配判断条件重复的问题已明确列为需求确认项。
### 验证结果
- Word文档内容读取完成。
- 8个时间段全部覆盖。
- 完整小时均拆分为6条10分钟记录。
- 非完整小时按实际分钟数拆分总计48条。
- 本次未修改原始文档和业务资源。
## 2026-07-20 调整明日计划记录格式
### 用户提问
- 用户要求去掉明日计划中“108:30-08:40”一类子序号和子时间格式任务可以写得稍大一些允许重复。
### 执行过程
1. 保留用户给出的8个主时间段和“明日计划”总体结构。
2. 每个主时间段仍安排6条记录便于按下发要求录入共48条。
3. 删除每条记录前的子序号和10分钟起止时间只保留任务描述。
4. 将过细的字段级、步骤级内容合并为需求对接、数据梳理、功能开发、联调测试、客户确认、流程建档和问题处理等较大工作项。
5. 上午继续围绕发货任务堵点文档开展对接、开发、测试和客户确认;下午继续围绕设计报工工时整体流程开展页面、过程、表、视图和数据流分析建档。
6. 对开发、测试、需求确认、文档整理和线上问题处理等持续性工作允许在同一或相邻时间段重复记录。
7. 本次只调整计划文本和追加过程日志没有修改业务代码、数据库、生产数据或原始Word文档。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 明日计划已改为8个主时间段、每段6条大工作项。
- 每条记录不再包含子序号和10分钟时间格式。
- 工作项粒度更适合报工填写,持续性任务允许重复。
### 验证结果
- 8个主时间段保留。
- 每段6条记录共48条。
- 子序号和子时间已移除。
- 本次未修改业务资源。
## 2026-07-21 新增四类大屏发货任务堵点查询
### 用户提问
- 用户要求根据桌面 `发货任务堵点.docx` 修改大厅计划、仓库、装配和质检测试大屏,并指定已完成的发货通知页面及 `装配中心任务看板_发货状态查询` 作为参考。
- 经需求确认,装配阶段在完成数量小于计划数量时显示“装配”,相等后继续检查质检和入库;质检大屏使用序检检验数量。
### 执行过程
1. 只读分析需求文档、四个大屏和发货通知参考实现,确认需为不同看板提供不同来源及过滤规则,且不应直接改变发货通知页现有查询口径。
2. 只读核查生产库字段和枚举,确认终检合格、收检不合格的既有业务口径;确认序检数据在质检记录中对应 `检测类型编号=6、质检类型=收检`
3. 新建迁移 `db_backups/create_shipping_bottleneck_dashboard_proc_20260721.sql`,定义独立过程 `dbo.发货任务堵点_看板查询`,参数支持大厅、仓库、装配、质检四种看板类型。
4. 数据源第一部分读取 `[SAP].[SBO_YL].[dbo].[UBT_ODRF_ODLNMES]` 并左连 MES 生产订单;第二部分读取 `View_生产订单_MES.优先级='是'` 的装配任务,并排除已存在于 SAP 的订单。
5. 预先按 TaskAID 汇总当前装配操作人、终检合格数量、收检不合格数量和序检检验数量,并按合同号汇总装配工时,避免一对多连接造成重复和数量放大。
6. 特殊物料编码包含 `3420-YT``3420-HT``3420-YF` 时堵点直接返回“见子任务”;其他记录依次判断齐套、派发、发料、开工、装配、质检、待入库。
7. 大厅过滤“终检合格+收检不合格=计划数量”的记录;仓库仅返回 SAP 来源;装配仅返回完成数量小于计划数量;质检仅返回序检检验数量小于完成数量。
8. 在事务中临时执行迁移并调用四种参数预演结果为大厅16行、仓库17行、装配12行、质检2行随后回滚确认迁移可编译且口径正确。
9. 两个前端项目完成过程切换和堵点字段接入后,分别执行 `npm run build`,构建成功,仅有既有非阻断警告。
10. 首次正式发布在提交前的 PowerShell 数据校验中因 DBNull 转 decimal 失败,异常处理成功回滚事务,未创建生产过程。
11. 修正校验脚本的空值处理后重新执行,事务内验证仓库仅含 SAP、大厅不含已完成质检任务、装配不含已完成装配任务、质检不含已完成序检任务全部通过后提交。
12. 正式发布后过程创建及修改时间为 `2026-07-21 10:06:45`独立复核四种结果仍为16、17、12、2行每种结果包含28个字段和堵点字段。
13. 核对原 `装配中心任务看板_发货状态查询` 修改时间仍为 `2026-07-20 11:29:55`,确认发货通知参考过程没有被本次发布覆盖。
14. 使用本地 Vite 页面连接生产接口在1920×1080下检查大厅、仓库、装配和质检页面字段及实时数据正常显示。
15. 页面复核发现仓库旧汇总过程的发货数量与新SAP明细不一致前端改为从 `发货任务堵点_看板查询` 的仓库结果计算发货任务、小于今日和加急条数,未再修改数据库过程。
### 修改文件
- `db_backups/create_shipping_bottleneck_dashboard_proc_20260721.sql`
- `gptlog-process/gpdlog.md`
- 外部看板项目的四个页面数据接入文件。
### 结论
- 四类大屏现共用独立的发货堵点过程,并按看板类型执行各自的数据来源和隐藏条件。
- 生产过程发布成功,原发货通知查询保持不变,数据库结果、前端构建和页面显示检查均通过。
- 本次只创建查询过程,没有更新生产业务表数据;日志未记录数据库密码。
## 2026-07-21 上传所有修改
### 用户提问
- 用户要求上传当前工作区中的所有修改。
### 执行过程
1. 检查 Git 状态,确认当前分支为 `snapshot/local-save-20260625-154806`,并已跟踪远端分支 `origin/snapshot/local-save-20260625-154806`
2. 检查远端配置,确认拉取和推送地址均为 `origin` 对应的 MES 前端仓库。
3. 核对工作区全部修改,确认内容涵盖计划日历加工状态着色、自制计划产品单位、发货任务看板字段与数据合并、设计任务人员显示、设计报工工时报表权限、委外页面调整,以及 3 份数据库备份脚本;`materialReturn.vue` 最初显示为修改,暂存规范化后确认没有实际内容差异,因此未进入提交。
4. 执行 `git diff --check`,未发现尾随空格或空白格式错误;仅出现 Git 关于部分文件后续可能由 LF 转换为 CRLF 的提示。
5. 首次执行 `npm run build` 时因 124 秒命令时限到期而未返回结果,因此提高命令时限后重新执行。
6. 第二次执行 `npm run build` 成功Webpack 编译完成仅有资源体积超出建议值、Browserslist 数据过期等非阻断警告,没有编译错误。
7. 将本次中文执行日志追加至 `gptlog-process/gpdlog.md`,随后使用 `git add -A` 暂存全部修改。
8. 将全部暂存内容提交,并推送至远端当前分支 `origin/snapshot/local-save-20260625-154806`
9. 推送后复核本地分支与远端分支状态,确认全部修改已上传且工作区无未提交文件。
### 修改文件
- `gptlog-process/gpdlog.md`
- `src/views/PlanManagement/SelfMakePlando/index.vue`
- `src/views/PlanManagement/SelfMakePlandone/index.vue`
- `src/views/PlanManagement/WorkstationPlan/index.vue`
- `src/views/ProductionManagement/DeliveryNoticeList/index.vue`
- `src/views/ProductionManagement/DesignReportTask/HoursReport/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/SaleOutsourceMange/index.vue`
- `db_backups/add_design_report_hours_report_permissions_20260720.sql`
- `db_backups/fix_delivery_notice_list_current_operators_20260720.sql`
- `db_backups/fix_delivery_notice_list_data_merge_20260720.sql`
### 结论
- 当前工作区的全部修改已统一提交并推送到远端当前分支。
- 项目生产构建验证通过,没有阻断上传的编译错误。
### 验证结果
- `git diff --check`:通过。
- `npm run build`:通过,存在非阻断警告。
- Git 推送:成功。
- 推送后工作区:干净,本地分支与远端分支同步。
## 2026-07-20 评估明日计划可完成性
### 用户提问
- 用户询问调整后的明日计划是否合理、能否完成。
### 执行过程
1. 将计划区分为“报工记录拆分”和“实际交付承诺”两个维度评估避免因为48条记录数量较多而误判为48个独立交付项。
2. 复核上午发货堵点范围,确认涉及公共数据源、七级堵点判断、特殊物料子任务、四个任务大屏、各自隐藏规则、测试和客户确认,实际范围较大。
3. 识别需求未完全确定的风险:文档装配判断正反条件重复、质检“前序不合格数”口径、仓库不合格数来源、特殊物料子任务展示方式仍需客户确认。
4. 评估上午有效工作时间约4小时40分钟若已有发货查询基础可以复用、客户及时确认且四个大屏共用后端输出完成公共查询、主要页面接入和首轮测试有可能但四屏全部开发、完整回归和客户修改在14:20前完成存在较高风险。
5. 评估下午设计报工流程建档范围页面、功能、存储过程、表、视图和数据流的第一版目录及主流程可以在约3小时内完成若要求逐字段、逐参数验证并同时处理线上问题则难以当天形成完整定稿。
6. 建议增加14:20阶段检查点发货功能按期通过时切换报工建档若仍有联调问题优先保证发货功能闭环将报工建档目标降为第一版框架和对象清单。
7. 建议把需求确认、公共堵点查询、至少一个核心看板接入、首轮测试和报工流程第一版文档设为必须完成项;四个看板全部优化、客户新增调整、完整报工技术档案作为争取完成项。
8. 本次只进行计划评估并追加过程日志,没有修改计划文件、业务代码、数据库或生产数据。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 该计划用于报工填写是合理的,任务方向和时间顺序基本正确。
- 该计划作为当天全部交付承诺偏满,主要风险是四个大屏同时开发测试、客户确认时效以及临时线上问题。
- 在需求上午及时冻结、公共逻辑能够复用且没有较大线上问题的情况下,核心任务可以完成;全部扩展内容能否完成不应作刚性承诺。
- 建议以14:20为切换检查点并保留最后40分钟作为修正和归档缓冲。
### 验证结果
- 上午开发范围和未确认口径已识别。
- 下午建档范围和可交付粒度已评估。
- 必须完成项、争取完成项和阶段检查点已给出。
- 本次未修改业务资源。
## 2026-07-21 生成工时模块全流程技术说明 PDF
### 用户提问
- 用户要求详细整理从加工中心、装配中心开始,到工时校验结束的全部工时相关功能,包括页面、存储过程、计算方法、数据表、视图等,并生成 PDF 文件。
- 用户提供了数据库只读查询条件,明确要求只可查询、不可修改。
### 执行过程
1. 检索生产管理前端目录及数据库备份脚本,定位加工中心、装配中心、工时修正、工时校验、人员绑定、班次管理等相关页面。
2. 逐页提取 `CreateData` 调用、前端校验条件、开始/结束动作、加班选择、异常工时、工时编辑和 SAP 调用逻辑。
3. 确认加工中心通过 `MES_ProductTask_WorkingStart``MES_ProductTask_HelpStart``MES_ProductTask_HelpEnd``MES_ProductTask_ProdReport` 产生工时记录。
4. 确认装配中心通过 `MES_人员工时记录_开始``MES_人员工时记录_结束` 产生人员工时和加班记录。
5. 确认工时修正页面可更新起止时间、设备工时、人员工时和班次标准工时,并支持补录操作记录。
6. 确认工时校验页面按昨日以前记录进行筛选,调用批量工时计算过程,并逐条补充 SAP 工序和资源、提交资源工时单据,上传成功后保存校验副本。
7. 使用只读 SQL 查询数据库系统目录,核对当前存储过程参数、对象类型、对象依赖、表字段、索引、视图定义、函数定义和班次配置;未执行任何业务存储过程,未写入或修改数据库数据。
8. 读取 `MES_ProductCenter_OptRecord_Save` 当前定义,确认设备总时长、暂停总时长和实际工时的计算与开始/结束记录配对规则。
9. 读取 `计算人员工时``计算班次重叠秒数` 当前定义,确认人员、工位、班次绑定及重叠秒数的拆分逻辑。
10. 读取 `usp_CalculateDailyRatio``usp_CalculateShiftTime``usp_CalculateUploadMinutes``usp_BatchValidateWorkTime``usp_ValidateWorkTime` 当前定义,整理当日归一化系数、班次内外拆分及 SAP 上传分钟公式。
11. 读取 `View_生产工时视图``View_生产工时视图全部``View_校验后的生产工时``View_工位人员绑定数``View_设备工位人员` 当前定义,整理视图连接、字段优先级和过滤规则。
12. 核对 `YL_加工中心_操作记录表``生产管理_工时校验_校验工时表``YL_加工中心_报工记录`、班次及绑定相关表的字段用途。
13. 核对 `src/api/b1s.js` 和工时校验页面,整理 SAP `ProductionOrders` 查询/更新、资源行计划量调整和 `InventoryGenExits` 工时单据映射。
14. 明确文档边界:以工时校验为终点;工时查询、工时报表、结算工时和设计报工属于校验后统计或其他业务域,不作为主流程展开。
15. 整理当前实现中的重点风险包括班次配置与代码注释不一致、日期筛选参数未生效、300 秒跳过 SAP、批量计算详情未落库、直接校验前端硬编码权限、校验表缺少唯一约束等。
16. 编写详细 HTML 文档,包含目录、总流程、页面清单、加工/装配流程、工时修正、校验流程、计算公式、过程函数矩阵、表视图说明、SAP 映射、状态单位、风险和验收用例。
17. 使用本机 Edge 无头打印生成 PDF保留 HTML 作为可维护源文件。
18. 使用 PDF 文本解析检查成品,共 20 页、约 1.5 万个可检索字符无空白页关键过程、视图、SAP 接口和风险章节均存在。
19. 检查 PDF 字体对象,确认包含嵌入式 TrueType 字体;使用浏览器截图确认 HTML 中文和版式正常。Node 版 PDF.js 画布后端对部分中文子集字体映射不完整,因此该预览图不作为成品显示判定依据。
20. 计算 PDF SHA256 校验值,并将仅用于校验的临时浏览器配置和预览图片移出工作区。
21. 保留工作区中与本任务无关的既有修改,不覆盖、不撤销,也不纳入本次文档内容。
### 新增文件
- `doc/工时模块全流程技术说明_20260721.html`
- `doc/工时模块全流程技术说明_20260721.pdf`
### 结论
- 已完成从加工中心、装配中心到工时校验结束的工时模块全流程整理。
- 文档详细覆盖 6 个直接或支撑页面、核心存储过程和函数、事实表与校验表、统一工时视图、人员/班次绑定、设备与人员工时计算、加班规则、SAP 上传以及现状风险。
- 数据库查询全过程为只读,没有修改数据库对象、配置或业务数据。
- PDF 共 20 页可检索、无空白页HTML 源文件一并保留,便于后续更新。
### 验证结果
- 前端页面和调用链检索:完成。
- 数据库当前对象定义只读核对:完成。
- PDF 文件生成:成功。
- PDF 页数20 页。
- PDF 可检索文本:约 1.5 万字符。
- PDF 空白页0 页。
- PDF SHA256`C2A90033708903EB3AC64AD015369F6D136236A375A315869D8B5EAE8B9F68B8`
## 2026-07-21 扩展工时模块 PDF 范围
### 用户提问
- 用户确认工时查询、工时报表和结算工时也属于工时模块,需要补充外协部分、生产计划跟踪报表等功能。
- 用户确认设计报工不纳入本文,并要求删除“现状风险与核对项”章节。
### 执行过程
1. 检索 `Workhours``Timesheet``SettlementWorkhours``OutsourceMange``SaleOutsourceMange``OutsourceSheet``ProductionPlanTrack` 页面,提取查询参数、树形分组、汇总公式、导出和外协发收料调用。
2. 使用只读 SQL 查询当前数据库定义,核对 `生产管理_工时查询_工序工时_查询`、项目/作业者/任务/设备四类工时统计过程、`生产管理_结算工时_查询``生产管理_生产计划跟踪`、外协管理和外协报表过程。
3. 确认工时查询使用当前生产工时视图,按 TaskAID、日期、单次开始记录形成三级工序工时树并关联工艺库标准工时。
4. 确认工时报表使用包含已关闭订单的全量工时视图,提供项目、作业者、任务和设备四个页签及四套导出过程;人员班组用于工时类型分类。
5. 确认结算工时连接生产计划、资源任务和工时视图,按物料及订单工位形成两层汇总,计算报工、辅助、合计和单件结算工时。
6. 读取 `View_外协报表视图`、外协任务查询、外协发料保存和外协收料保存定义,确认外协发料写“收料”记录、外协收料写“报工”记录。
7. 确认标准生产工时视图排除工位为“外协”的记录,因此外协不参与内部设备/人员工时校验,而通过外协任务、操作事件、采购、发收料和质检链路单独跟踪。
8. 读取生产计划跟踪过程,确认其合并全部订单、工艺标准工时、操作起止、外协结束、收检/终检和任务状态,并由前端生成订单工序路线。
9. 修改文档封面、范围、总流程和页面清单,将查询、报表、结算、外协和生产计划跟踪纳入完整工时模块。
10. 新增“工时查询、工时报表与结算工时”章节,详细记录数据范围、三级结构、有效工时口径、结算公式和导出方式。
11. 新增“外协与生产计划跟踪”章节,详细记录外协在工时体系中的边界、派工、发料、收料、外协报表和生产路线跟踪。
12. 扩展存储过程、数据表、视图、页面调用矩阵和代码来源清单,并统一重排为 16 章。
13. 将设计报工、设计工时校验和设计工时报表明确列为排除业务域。
14. 完整删除“现状风险与核对项”及原验收用例,不保留目录链接或章节残留。
15. 重新使用 Edge 生成 PDF并用 PDF 文本解析检查页数、可检索字符、空白页和新增页面路径。
16. 使用浏览器截图复核新版封面、目录、中文字体和版式,显示正常。
17. 数据库操作全过程仅执行只读查询,没有执行存储过程,没有修改数据库对象、配置或业务数据。
### 修改文件
- `doc/工时模块全流程技术说明_20260721.html`
- `doc/工时模块全流程技术说明_20260721.pdf`
- `gptlog-process/gpdlog.md`
### 结论
- 工时查询、工时报表、结算工时、外协管理、外协报表和生产计划跟踪已纳入工时模块说明。
- 设计报工相关页面和数据库对象明确排除。
- “现状风险与核对项”章节已完整删除。
- 新版文档共 23 页,覆盖从现场报工、外协业务、工时校验到查询、统计、结算和生产计划跟踪的完整链路。
### 验证结果
- HTML 章节数量16 章。
- PDF 页数23 页。
- PDF 可检索文本:约 1.99 万字符。
- PDF 空白页0 页。
- 新增页面路径检查:全部存在。
- 已删除章节残留检查:未发现。
- PDF SHA256`93D33B50BBDF7FBF42D3B70A744C76F494AEF3F9CDC8C90F1FC9237976577567`
## 2026-07-21 根据工作内容生成明日计划
### 用户提问
- 用户提供 8 个明日工作时间段,要求根据生产退库接口、采购申请接口、大屏刷新与设备状态、及时拣配机加/装配报表、标牌打印内容管理及临时调整归档等内容生成明日计划。
- 用户要求每小时拆分为 6 条记录,内容允许重复。
### 执行过程
1. 保留用户给出的 8 个主时间段和工作先后顺序。
2. 按每 10 分钟一条记录拆分:完整 1 小时时间段各生成 6 条。
3. `10:30-11:50` 共 80 分钟,生成 8 条记录;`17:20-18:00` 共 40 分钟,生成 4 条记录。
4. 全天共生成 48 条计划记录。
5. `08:30-09:30` 围绕生产退库接口和采购申请接口的现状核对、参数修改、联调及验证安排。
6. `09:30-10:30` 围绕所有大屏自动刷新方式、刷新时间、机加看板一设备运行状态及明细安排。
7. `10:30-11:50``13:20-14:20` 围绕 SAP 及时拣配机加报表的数据源、字段、接口、页面和联调安排。
8. `13:20-14:20``14:20-15:20` 同时衔接及时拣配装配报表的数据对接、开发、测试和修正。
9. `15:20-17:20` 围绕标牌打印内容管理页面的字段对接、功能开发、测试和修改安排。
10. `17:20-18:00` 安排大屏及报工临时调整、版本整理和当日修改归档。
11. 本次只生成计划文本并追加过程日志,没有修改业务代码、数据库对象或业务数据。
### 修改文件
- `gptlog-process/gpdlog.md`
### 结论
- 已按 8 个主时间段生成 48 条明日计划记录。
- 完整小时均拆分为 6 条,非完整小时按实际每 10 分钟一条拆分。
- 计划覆盖接口修改、大屏调整、及时拣配机加/装配报表、标牌打印内容管理、临时问题和版本归档。
### 验证结果
- 主时间段8 个。
- 完整小时拆分:每段 6 条。
- 80 分钟时段8 条。
- 40 分钟时段4 条。
- 全天计划记录48 条。
## 2026-07-22 检查及时齐套跟踪结果订单 8238 少一条数据
### 用户提问
- 用户反馈“生产管理-及时齐套跟踪结果”查询生产订单(订单编号)`8238` 时,存储过程只返回 6 条数据,而 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc]` 中有 7 条,要求检查原因。
- 用户进一步明确问题位于存储过程而非页面,并提供数据库 `192.168.2.92` 的连接账号和密码;日志不记录明文密码。
### 执行过程
1. 在项目中检索“及时齐套”“齐套跟踪”和 `VIEW_Jijiankukc`,定位查询过程为 `dbo.生产管理_及时齐套跟踪结果_查询`,本地对应脚本为 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
2. 检查本地过程脚本,确认过程先从 SAP 视图读取未发货数量大于 0 的缺件,再在最终结果处使用 `ROW_NUMBER()` 分组去重,并仅保留 `rn = 1`
3. 使用用户提供的连接信息,以只读方式连接 `192.168.2.92 / YL_MESDB`;未执行任何数据库写入、对象发布或数据修改。
4. 查询线上过程元数据,确认 `dbo.生产管理_及时齐套跟踪结果_查询` 最后修改时间为 `2026-07-15 14:25:11.830`,线上定义同时包含 SAP 源级去重和最终结果去重逻辑。
5. 查询 `[SAP].[SBO_YL].[dbo].[VIEW_Jijiankukc] WHERE DocEntry = 8238`,确认共有 7 条缺件记录SAP 行号分别为 `2、3、21、28、33、48、75`,且未发货数量均大于 0。
6. 执行 `EXEC dbo.[生产管理_及时齐套跟踪结果_查询] @订单号 = 8238`,确认过程实际返回 6 条SAP 行号为 `2、3、21、28、48、75`,缺少 SAP 行号 `33`
7. 对比缺少的 SAP 行号 `33` 与保留的行号 `48`:行号 33 为物料 `23601-032-A6x6x25`(平键),缺件数量 2行号 48 为物料 `23202-030-M5x12`(螺钉),缺件数量 5两条均为外购件且“在制采购”均为 `4957`
8. 核对过程字段映射,确认外购件的“缺件生产订单号”实际取 `在制采购`。最终去重按“订单号 + 缺件生产订单号”分组;当该字段为空时才改用“缺件物料编码 + SAP 行号”。因此两种不同外购物料因共同的 `在制采购 = 4957` 被错误归到同一组。
9. 使用与过程一致的分组和排序表达式复算 7 条记录SAP 行号 48 因缺件数量 5 较大得到 `rn = 1` 并保留SAP 行号 33 得到 `rn = 2`,被最终 `WHERE rn = 1` 排除;其余 5 条均为各自分组的 `rn = 1`
10. 本次按“检查原因”的范围仅完成只读诊断,未修改业务代码、存储过程或数据库数据。
### 结论
- 页面或 SAP 视图没有少数据,少一条发生在 `dbo.生产管理_及时齐套跟踪结果_查询` 的末级去重。
- 被排除的是 SAP 行号 `33`、物料 `23601-032-A6x6x25`(平键)。它与 SAP 行号 `48`、物料 `23202-030-M5x12`(螺钉)的“在制采购”均为 `4957`,过程误把两条不同外购物料视为同一“缺件生产订单号”分组。
- 分组内按缺件数量倒序,行号 48 的缺件数量为 5得到 `rn = 1`;行号 33 的缺件数量为 2得到 `rn = 2` 并被过滤,所以最终由 7 条变成 6 条。
- 若后续修复,外购件不应仅按“在制采购”去重,应至少将物料编码或 SAP 行号纳入去重键;自制件仍可按实际缺件生产订单号归并。该修复本次未执行。
### 验证结果
- SAP 视图订单 82387 条。
- 存储过程订单 82386 条。
- 明确缺失记录SAP 行号 33平键缺件数量 2。
- 末级去重复算:行号 33 的 `rn = 2`,行号 48 的 `rn = 1`
- 数据库修改:无。
## 2026-07-22 修正及时齐套跟踪结果订单 8238 外购缺件误去重
### 用户提问
- 用户确认上一轮诊断结论正确,要求修正 `dbo.生产管理_及时齐套跟踪结果_查询` 将订单 `8238` 的两种不同外购物料误合并的问题。
### 执行过程
1. 制定执行步骤:核对线上与本地去重逻辑、修改过程脚本、事务预演、正式发布、回归验证和追加日志。
2. 读取本地 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql` 第 379 至 425 行,并读取线上过程定义末段,确认两者均按“订单号 + 缺件生产订单号”执行最终 `ROW_NUMBER()` 去重。
3. 检查该 SQL 脚本的 Git 状态,确认修改前脚本没有用户的未提交改动,可以在现有最新过程脚本上进行最小范围修改。
4. 修改最终去重键:当 `[缺件属性] = N'外购'` 时,优先使用“缺件物料编码 + SAP 行号”;非外购件仍优先使用缺件生产订单号,缺件生产订单号为空时仍回退到“缺件物料编码 + SAP 行号”。
5. 创建临时事务预演脚本,在同一数据库会话中先将线上旧过程对订单 8238 的结果写入临时表,然后开启事务、加载新过程定义、再次执行过程并比较前后结果,最后回滚事务。
6. 事务预演结果:修改前 6 条、修改后 7 条;唯一新增记录为 SAP 单据 `8238`、SAP 行号 `33`、物料 `23601-032-A6x6x25`(平键)、缺件数量 2、缺件属性“外购”、缺件生产订单号 `4957`
7. 事务预演未发现减少记录,也未发现相同 SAP 单据和 SAP 行号的重复结果;事务正常回滚。
8. 删除仅用于预演的临时 SQL 文件,确认线上过程修改时间仍为 `2026-07-15 14:25:11.830` 且尚未包含新分组分支,证明预演没有残留线上修改。
9. 对正式脚本执行 `git diff --check`,未发现空白符或补丁格式错误;差异仅为最终分组 `CASE` 中新增一条外购判断。
10. 使用 `sqlcmd -b` 正式执行 `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`,成功发布 `dbo.生产管理_及时齐套跟踪结果_查询`
11. 发布后通过存储过程方式执行订单号 8238结果为 7 条SAP 行号为 `2、3、21、28、33、48、75`SAP 视图中未发货数量大于 0 的记录同样为 7 条、7 个不同 SAP 行。
12. 发布后确认行号 33 的平键和行号 48 的螺钉均正常返回,虽然两条的缺件生产订单号均为 `4957`,但不再互相覆盖;结果中相同 SAP 单据和 SAP 行号的重复数量为 0。
13. 首次使用 SQL `LIKE` 检查线上定义时,由于方括号在 `LIKE` 模式中具有特殊含义而得到错误的 0改用 `CHARINDEX` 精确检查后,确认线上定义已经包含新的外购分组分支,并仍保留自制件按缺件生产订单号归并的分支。
14. 线上过程最新修改时间为 `2026-07-22 09:00:01.960`
15. 保留工作区内原有的其他未提交修改,没有覆盖或撤销与本任务无关的文件。
### 修改文件
- `db_backups/update_timely_kit_tracking_result_multi_detail_orders_20260630.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 已修正外购物料共用“在制采购”编号时被末级去重误合并的问题。
- 外购件现在按“订单号 + 物料编码 + SAP 行号”区分,自制件仍按“订单号 + 缺件生产订单号”归并,原有自制件逻辑未改变。
- 订单 8238 的平键和螺钉现在都会返回,存储过程结果已由 6 条恢复为与 SAP 视图一致的 7 条。
- 修正后的存储过程已经正式发布到 `192.168.2.92 / YL_MESDB`
### 验证结果
- 事务预演:修改前 6 条,修改后 7 条,唯一新增 SAP 行号 33无减少、无重复随后回滚成功。
- 正式发布:成功。
- 线上新外购分组分支:存在。
- 线上原自制件归并分支:保留。
- SAP 视图订单 82387 条7 个不同 SAP 行。
- 存储过程订单 82387 条SAP 行号完整。
- 存储过程结果重复 SAP 键0。
- `git diff --check`:通过。
## 2026-07-22 修正工时校验人员工时在加工工时为零时的显示
### 用户提问
- 用户要求修改 `src/views/ProductionManagement/WorkHoursCheck/index.vue` 的“人员工时”列,解决 `scope.row.加工工时 = 0` 时的计算问题。
### 执行过程
1. 检查“人员工时”列、设备工时列、编辑表单及 SAP 上传逻辑,确认业务口径为:加工工时大于 0 时属于设备工时,人员工时显示 0加工工时为 0 时,人员工时显示“总时长 / 60”。
2. 检查工作区差异,发现该行已有未提交尝试,条件使用多个 `OR` 判断,导致条件恒为真,且真值分支直接返回加工工时,无法正确处理加工工时为 0 的情况。
3. 首次应用补丁时,该行在读取后发生并行变化,补丁因上下文不一致而未应用;重新读取最新文件后,确认代码恢复为 `scope.row.加工工时 != NULL ? 0 : scope.row.总时长 / 60`
4. 将表达式修改为:先用 `Number(scope.row.加工工时 || 0)` 统一数值类型;等于 0 时显示 `Number(scope.row.总时长 || 0) / 60`,否则显示 0保留原两位小数及末尾零清理规则。
5. 使用 Node 复算边界值:加工工时为数值 0、字符串 `"0"``null` 和空字符串时,人员工时分别按总时长折算;加工工时为正数或正数字符串时显示 0。
6. `git diff --check` 通过。随后启动页面 ESLint但用户切换到新任务时该检查被中断本次表达式本身未产生语法错误。
### 修改文件
- `src/views/ProductionManagement/WorkHoursCheck/index.vue`
### 结论
- 加工工时为 0、`"0"`、空值或空字符串时,人员工时现在正确显示“总时长 / 60”。
- 加工工时大于 0 时,人员工时显示 0。
### 验证结果
- 加工工时 0、总时长 3600显示 60。
- 加工工时 `"0"`、总时长 3600显示 60。
- 加工工时 `null`、总时长 1800显示 30。
- 加工工时 1200、总时长 3600显示 0。
- `git diff --check`:通过。
## 2026-07-22 增加设计报工工时校验数据权限
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/Check/index` 页面数据权限:普通用户只能查看自己创建任务或自己报工的数据;角色包含“领导”或“管理员”的用户可以查看全部数据。
### 执行过程
1. 检索页面路径,确认项目中的实际文件为 `src/views/ProductionManagement/DesignReportTask/Check/index.vue`,页面查询过程为 `dbo.设计报工_工时校验_查询`
2. 检查审核页面查询参数、当前用户获取方式和存储过程定义。修改前页面未传当前用户或角色,线上校验查询过程只有 8 个筛选参数,并直接调用无权限限制的 `dbo.设计报工_记录_查询`
3. 检查本模块已有的 `add_design_report_hours_report_permissions_20260720.sql` 和工时报表页面,确认现有权限口径使用当前用户名、角色编号及 `登录基础数据_角色信息.Roles_Function`,角色功能包含“领导”或“管理员”时可查看全部。
4. 核对线上表结构:任务表具有 `创建人` 字段;报工记录表具有 `操作人ID``操作人` 字段;角色表包含 `Roles_number``Roles_Function`
5. 查询线上特权角色,确认当前包含超级管理员、质量部领导、管理员、采购部领导、设备管理员和技术部领导等角色,均可按“领导/管理员”关键字识别。
6. 修改审核页面 `buildSearchParams()`,增加 `当前操作人``角色编号` 参数;增加 `currentRoleId()`,沿用模块现有方式从 Vuex `token` getter 取得角色编号。
7. 新增 `db_backups/add_design_report_check_permissions_20260722.sql`,重新定义 `dbo.设计报工_工时校验_查询`。过程保留原 8 个筛选参数和返回字段,并增加 `@当前操作人``@角色编号` 两个可选参数。
8. 新过程通过角色表判断 `Roles_Function` 是否包含“领导”或“管理员”。特权角色不限制数据;普通角色必须满足任务创建人等于当前用户,或报工操作人等于当前用户;当前用户名为空且不是特权角色时不返回数据。
9. 创建临时事务预演脚本,在事务内加载新过程并测试四种身份:普通用户“张立柱”返回 53 条,空用户名返回 0 条,技术部领导返回全部 184 条,超级管理员返回全部 184 条。
10. 对普通用户的 53 条结果逐行核对,越权记录为 0反向检查全部任务创建人或报工人为“张立柱”的记录遗漏记录为 0。
11. 回滚预演事务并删除临时脚本;确认线上过程仍为原 8 个参数且不含新权限参数,证明预演没有残留修改。
12. 对正式 SQL 和页面差异执行 `git diff --check`,检查通过。
13. 正式执行 `add_design_report_check_permissions_20260722.sql`,成功发布 `dbo.设计报工_工时校验_查询``192.168.2.92 / YL_MESDB`
14. 发布后重新调用线上过程:普通用户“张立柱”返回 53 条,与独立 SQL 计算的本人相关记录 53 条一致;空用户名返回 0 条;技术部领导和超级管理员均返回当前全部 184 条。
15. 检查线上过程元数据,确认参数已从 8 个增加到 10 个,包含当前操作人和角色编号,且同时包含“领导”和“管理员”角色判断;线上修改时间为 `2026-07-22 10:22:33.010`
16. 执行页面 ESLint。完整规则检查发现页面原有第 58 行属性顺序警告和第 315 行函数括号空格错误,均不在本次差异中;临时关闭这两条既有规则后重新检查,本次修改通过,仅有依赖数据过期提示。
17. 保留工作区内其他未提交修改,没有覆盖或撤销与本任务无关的文件。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Check/index.vue`
- `db_backups/add_design_report_check_permissions_20260722.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计报工工时校验页面现在由数据库查询过程执行数据权限,不依赖前端返回后再过滤。
- 普通用户只能查看自己创建任务产生的报工记录,或操作人为自己的报工记录。
- 当前用户名为空的普通角色不返回数据,避免登录信息缺失时放开权限。
- `Roles_Function` 包含“领导”或“管理员”的角色可以查看全部数据。
- 权限过程已正式发布到生产数据库。
### 验证结果
- 普通用户“张立柱”53 条;预期 53 条;越权 0遗漏 0。
- 普通角色且当前用户为空0 条。
- 技术部领导184 条,与全部记录一致。
- 超级管理员184 条,与全部记录一致。
- 线上过程参数10 个,权限参数及角色判断均存在。
- `git diff --check`:通过。
- 页面 ESLint排除两项既有规则通过。
## 2026-07-22 为设计任务和设计报工增加附件功能
### 用户提问
- 用户要求在设计任务和设计报工界面增加“上传附件”和“查看附件”功能,上传和查看方法参考 `ProcessManagement/PartDrawing/index`
- 用户特别说明附件不一定是 PDF需要正确处理不同文件类型的查看方式还要求解决上传文件重名覆盖问题可使用时间戳或更可靠的唯一命名方案。
### 执行过程
1. 检索参考页面和目标页面,确认参考文件为 `src/views/ProcessManagement/PartDrawing/index.vue`,目标文件为 `src/views/ProductionManagement/DesignReportTask/Task/index.vue``Report/index.vue`;两个目标文件修改前没有未提交差异。
2. 拆解参考页面上传链路:使用 `MESUploadFile.ashx` 接收 `file + params`,参数包含业务编号、表名、上传人和上传时间;文件访问根路径为 `/webpage/part/`;参考页的 PDF 查看使用 `seepdf`
3. 查询线上 `物料基础数据_零件图纸` 表结构和近期数据,确认通用上传表具有 `id、num、uid、name、suffix、是否启用、worker、uploadTime` 8 个字段,且上传接口按实际文件名保存物理文件。
4. 查询 `工艺管理_图纸维护_查看图纸` 当前定义并使用只读 HTTP 请求核对文件路径。确认近期文件不能通过 `uid.pdf` 访问,而可以通过 URL 编码后的 `name.pdf` 访问;因此数据库 `uid` 不是当前真实文件路径,物理重名必须在上传前处理。
5. 确定附件按设计任务 `DID` 共享:设计任务页面和设计报工页面查看同一任务时使用同一附件集合,允许一个任务上传多份附件。
6. 新增 `db_backups/create_design_report_attachments_20260722.sql`,创建与通用上传接口兼容的 `dbo.MES_设计报工_附件` 表,字段顺序和基础上传表保持一致,并增加按 `num、是否启用、id` 查询的索引。
7. 在同一脚本中新增 `dbo.设计报工_附件_查询`,按 `DID` 查询启用附件,返回附件 ID、原文件名、物理存储文件名、文件类型、上传人和上传时间。
8. 设计物理文件唯一命名规则:`DESIGN_TASK_<DID>_<年月日时分秒毫秒>_<随机串>__<清洗后的原文件名>.<扩展名>`。时间戳和浏览器密码学随机数共同保证唯一,任务 ID 便于定位;双下划线作为内部名前缀和原文件名的分隔符。
9. 文件名清洗会替换 Windows 文件系统不允许的字符、去除尾部点号和空格、限制总长度;上传时创建真正的新 `File`/`Blob` 并将唯一名称作为 multipart 文件名提交,因此数据库记录和物理目录都不会因同名附件互相覆盖。
10. 查询过程通过双下划线分隔符去掉内部唯一前缀,列表仍向用户显示原文件名;同名附件可以并存,并可通过上传人和上传时间区分。
11. 新增共享组件 `src/views/ProductionManagement/DesignReportTask/components/TaskAttachments.vue`,集中实现附件对话框、最多 10 个文件选择、单文件 100MB 限制、逐个上传、结果统计、附件查询、文件类型显示、预览和下载。
12. 非 PDF 查看采用分流策略PDF、PNG/JPG/JPEG/GIF/BMP/WebP 和 TXT/CSV/JSON/Markdown 等浏览器可安全展示格式在新窗口预览Word、Excel、压缩包及其他格式通过 Blob 下载并使用原文件名保存,由本机程序查看。
13. 安全复核时将 SVG、HTML、HTM 和 XML 从直接预览列表移除,改为下载后查看,避免主动内容在附件站点直接执行。
14. 在设计任务页面操作列增加带上传和查看图标的“上传附件”“查看附件”按钮,将操作列宽度从 340 调整为 540并注册共享附件组件。
15. 在设计报工页面操作列增加相同两个按钮,将操作列宽度从 440 调整为 640并注册同一共享附件组件两个页面调用统一的 `openAttachments(row, mode)`
16. 初次运行共享组件 ESLint 时发现文件名清洗正则的控制字符范围触发 `no-control-regex`;考虑浏览器文件名不会包含该范围,移除控制字符范围并保留 Windows 非法字符处理,随后三个 Vue 文件 ESLint 全部通过。
17. 创建临时事务预演脚本,在事务内创建附件表和过程,插入一个启用的 DOCX 示例和一个停用的 PDF 示例。查询正确返回 `报价附件_最终版.docx`,保留唯一物理文件名,停用附件未返回,索引存在。
18. 回滚事务、删除临时预演脚本,并确认线上附件表和过程均不存在,证明预演没有残留对象或数据。
19. 正式执行 `create_design_report_attachments_20260722.sql`,成功发布 `MES_设计报工_附件``设计报工_附件_查询``192.168.2.92 / YL_MESDB`
20. 发布后检查线上对象:附件表共 8 个兼容字段,任务查询索引存在,查询过程有 1 个 `@DID` 参数,修改时间为 `2026-07-22 13:38:17.420`;新表当前 0 条数据。
21. 执行 `npm run build`Webpack 生产构建成功,仅保留项目原有字体、图片和入口包体积警告。
22. 使用相同随机算法在同一批次生成 1000 个标识1000 个均唯一,重复数为 0实际文件名还同时包含 DID 和毫秒时间戳。
23. 启动本地开发服务器。因 1997 端口已有服务,新实例自动使用 `https://127.0.0.1:1998/`HTTP 状态为 200最后一次热更新编译成功。
24. 最终对 SQL、共享组件和两个页面执行 `git diff --check`,检查通过;未覆盖或撤销工作区内其他用户修改。
25. 没有向生产附件目录上传测试文件:现有上传接口没有提供可确认删除物理文件的测试清理能力,为避免留下孤立测试文件,本次使用线上既有上传行为、兼容表结构、数据库事务、前端 ESLint、生产构建和开发服务器编译完成验证。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `src/views/ProductionManagement/DesignReportTask/components/TaskAttachments.vue`
- `db_backups/create_design_report_attachments_20260722.sql`
- `gptlog-process/gpdlog.md`
### 结论
- 设计任务和设计报工页面均已增加上传附件和查看附件入口,并共享同一套附件数据和组件逻辑。
- 附件不限制为 PDF浏览器适合展示的安全格式直接预览Office、压缩包和主动内容格式下载后查看。
- 物理文件名采用 DID、毫秒时间戳、密码学随机串和原文件名组合同名附件不会覆盖界面仍显示原文件名。
- 附件数据库表和查询过程已经正式发布到生产数据库。
- 本地开发服务器运行于 `https://127.0.0.1:1998/`
### 验证结果
- 共享组件 ESLint通过。
- 设计任务页面 ESLint通过。
- 设计报工页面 ESLint通过。
- 数据库事务预演通过DOCX 原文件名还原正确,停用附件过滤正确,随后回滚成功。
- 数据库正式发布:成功。
- 线上附件表字段8 个,与通用上传接口参考表兼容。
- 线上任务附件索引:存在。
- 线上附件查询过程:存在,参数 1 个。
- 线上附件表当前数据0 条。
- 1000 次随机标识测试1000 个唯一0 个重复。
- `npm run build`:通过,存在非阻断包体积警告。
- 开发服务器:`https://127.0.0.1:1998/`,状态 200热更新编译成功。
- `git diff --check`:通过。
- 生产物理文件上传测试:未执行,避免遗留无法确认清理的孤立测试文件。
- 安全预览类型调整后的最终 `npm run build`:再次通过,生成 `static/js/app.2f4b894c.js`,仅有原有包体积警告。
## 2026-07-22 增加研发类别立项号必填校验
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/Task/index`:当类别选择“研发”时,研发立项号必须填写。
### 执行过程
1. 定位项目中的实际页面路径为 `src/views/ProductionManagement/DesignReportTask/Task/index.vue`,并保留该文件中刚增加的附件功能修改。
2. 检查任务表单、规则对象、编辑回填和保存入口,确认保存统一通过 `this.$refs.taskForm.validate()`,但原表单只有任务描述必填规则;类别和研发立项号表单项均未绑定校验属性。
3. 为研发立项号表单项增加 `prop="研发立项号"`,并通过 `:required="formData.类别 === '研发'"` 动态显示必填标识。
4. 在规则对象中增加研发立项号自定义校验器,失焦和内容变化时触发。
5. 新增 `validateResearchProjectNo`:类别严格等于“研发”且研发立项号去除首尾空格后为空时,返回“请输入研发立项号”;其他情况通过。
6. 为类别选择增加 `handleCategoryChange`。从“研发”切换到其他类别时,清除研发立项号已有的校验错误,避免非研发类别残留红色错误状态。
7. 使用独立逻辑复算三种边界:研发且空值为不通过;研发且填写 `RD-2026-001` 为通过;订单类别且空值为通过。
8. 执行该页面 ESLint检查通过仅有项目依赖数据过期提示。
9. 检查本地开发服务器 `https://127.0.0.1:1998/`,状态为 200最终热更新 Webpack 编译成功。
10. 执行 `git diff --check`,检查通过;本次未修改数据库对象或业务数据,也未覆盖工作区内其他修改。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Task/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 新建或编辑设计任务时,类别为“研发”且研发立项号为空或仅包含空格,保存会被阻止并提示“请输入研发立项号”。
- 类别不是“研发”时,研发立项号仍为可选字段。
- 从研发切换到其他类别后,旧的必填错误会自动清除。
### 验证结果
- 研发 + 空立项号:校验失败。
- 研发 + `RD-2026-001`:校验通过。
- 订单 + 空立项号:校验通过。
- 页面 ESLint通过。
- 开发服务器热更新编译:通过。
- `git diff --check`:通过。
- 数据库修改:无。
## 2026-07-22 为设计报工列表增加五分钟静默刷新
### 用户提问
- 用户要求修改 `ResearchManagement/DesignReportTask/Report/index`,在不影响现有操作的情况下,每 5 分钟自动刷新一次列表。
### 执行过程
1. 定位项目中的实际页面为 `src/views/ProductionManagement/DesignReportTask/Report/index.vue`,并保留该文件中已增加的附件上传和查看功能。
2. 检查页面生命周期、查询方法、开始/结束报工、说明弹窗、附件弹窗和通用操作方法,确认原页面没有定时器及生命周期清理逻辑,`searchTable()` 每次都会显示表格加载遮罩和查询失败消息。
3. 检索项目其他自动刷新实现,发现部分页面直接使用 `setInterval(this.searchTable, 300000)`,该方式会在用户操作和弹窗期间刷新,也无法处理请求返回顺序,因此本页面未直接照搬。
4. 定义 `AUTO_REFRESH_INTERVAL = 5 * 60 * 1000`,即 300000 毫秒;在页面数据中增加 `refreshTimer``querySequence`
5. 新增 `startAutoRefresh``stopAutoRefresh`。组件挂载或从 keep-alive 恢复时启动定时器,组件停用或销毁时清除定时器;启动方法具备幂等判断,避免 mounted 和 activated 重复创建定时器。
6. 新增 `shouldSkipAutoRefresh`,当页面不可见、正在手工查询、正在执行报工/说明操作、结束报工弹窗打开、说明弹窗打开或附件对话框打开时,自动刷新直接跳过。
7. 新增 `refreshTableSilently`,只在页面空闲时调用 `searchTable({ silent: true })`,自动刷新不显示表格加载遮罩,也不会弹出查询失败消息。
8. 扩展 `searchTable(options)`,保留原手工查询调用方式;只有明确传入 `silent: true` 才进入静默模式,所以查询按钮、回车查询和业务操作后的主动刷新行为保持不变。
9. 每次查询递增 `querySequence` 并保存本次请求编号。响应返回时只有编号仍为最新的请求才允许更新列表,防止较早发起的自动刷新覆盖之后发起的手工查询结果。
10. 静默请求返回时再次检查操作状态。如果自动请求发出后用户打开弹窗或开始操作,该响应会被忽略,不会在操作过程中替换表格行。
11. 执行页面 ESLint检查通过仅有项目依赖数据过期提示。
12. 执行 `npm run build`,生产构建成功,生成 `static/js/app.074e6ff6.js`;仅保留项目原有包体积警告。
13. 复算定时周期和跳过条件:周期为 300000 毫秒;操作中、结束弹窗、说明弹窗、附件弹窗和页面隐藏场景均返回跳过。
14. 检查本地开发服务器 `https://127.0.0.1:1998/`,状态为 200最终热更新 Webpack 编译成功。
15. 执行 `git diff --check`,检查通过;本次未修改数据库对象或业务数据,也未覆盖工作区内其他修改。
### 修改文件
- `src/views/ProductionManagement/DesignReportTask/Report/index.vue`
- `gptlog-process/gpdlog.md`
### 结论
- 设计报工列表现在每 5 分钟执行一次后台静默刷新。
- 手工查询、开始/结束报工、保存说明、结束/说明弹窗和附件上传/查看均不会被自动刷新打断。
- 页面隐藏、离开或销毁时不会继续无效刷新;返回页面后会自动恢复定时器。
- 并发请求使用序号保护,旧自动请求不会覆盖较新的手工查询结果。
### 验证结果
- 自动刷新周期300000 毫秒。
- 空闲状态:允许静默刷新。
- 操作中:跳过自动刷新。
- 结束报工弹窗打开:跳过自动刷新。
- 说明弹窗打开:跳过自动刷新。
- 附件对话框打开:跳过自动刷新。
- 页面隐藏:跳过自动刷新。
- 页面 ESLint通过。
- `npm run build`:通过,存在非阻断包体积警告。
- 开发服务器热更新编译:通过。
- `git diff --check`:通过。
- 数据库修改:无。