# 生产报工拆分(开始报工/结束报工)及工人权限过滤 ## 涉及页面 - 生产工单列表页(可报工工单筛选) - 生产报工页(开始报工 / 结束报工) - 报工台账页(实际工时展示) ## API ### 新增接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | /productionProductMain/startWork | 开始报工 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | productionOperationTaskId | Long | 是 | 生产工单ID | | userId | Long | 是 | 报工人员ID | **响应:** `{ "code": 200, "msg": "操作成功", "data": true }` ### 变更接口 **`POST /productionProductMain/addProductMain`(结束报工)**: 入参增加: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 开始报工返回的 ProductionProductMain ID | **`GET /productionOperationTask/page`、`/productionOperationTask/list`**: 新增查询参数: | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | filterMine | Boolean | 否 | 为 true 时仅返回当前用户被指派的工单 | ### 响应字段变更 **`GET /productionProductMain/listPage`、`/page`、`/{id}`**: 新增响应字段: | 参数 | 类型 | 说明 | |------|------|------| | actualStartTime | String | 实际开始时间 (yyyy-MM-dd HH:mm:ss) | | actualEndTime | String | 实际结束时间 (yyyy-MM-dd HH:mm:ss) | ## 前端修改点 ### 1. 生产报工页 — 拆分为两步操作 **开始报工按钮:** ```html 开始报工 ``` ```js handleStartWork() { this.$confirm('确认开始报工?', '提示', { type: 'info' }).then(() => { startWork({ productionOperationTaskId: this.taskId, userId: this.selectedUserId }).then(res => { this.startRecordId = res.data; // 保存返回的报工记录ID,供结束报工使用 this.$message.success('开始报工成功'); this.refreshTaskStatus(); }); }); } ``` **结束报工按钮(原报工提交按钮改造):** ```html 结束报工 ``` ```js handleFinishWork() { this.$refs.form.validate(valid => { if (valid) { addProductMain({ id: this.startRecordId, // 必须传入开始报工记录ID quantity: this.form.quantity, scrapQty: this.form.scrapQty, userId: this.selectedUserId, productionOperationParamList: this.paramList }).then(() => { this.$message.success('结束报工成功'); this.resetForm(); }); } }); } ``` ### 2. 工单列表页 — 权限过滤 增加"仅看我的"筛选开关: ```html ``` ```js data() { return { filterMine: false, } }, methods: { handleFilterChange(val) { this.loadTaskList(); }, loadTaskList() { const params = { ...this.queryParams }; if (this.filterMine) { params.filterMine = true; } listTask(params).then(res => { this.taskList = res.rows; }); } } ``` ### 3. 报工台账页 — 展示实际工时 台账中的 `workHour` 字段现在基于实际开始/结束时间自动计算(以小时为单位),前端直接展示即可,无需额外处理。 ## 注意事项 - 报工流程变为两步:先调用 `/startWork` 开始,再调用 `/addProductMain`(传入开始报工返回的 `id`)结束 - 开始报工后工单状态变为"生产中",结束报工后才创建产出品、投入品和核算记录 - 实际工时 = actualEndTime - actualStartTime,自动计算(也可手动传入 workHour 覆盖) - 工单未指派(userIds 为空或 `[]`)时所有工人可操作;已指派时仅被指派人可操作 - 前端需缓存 `startRecordId`(开始报工返回的 ID),结束报工时传入 - 如果用户关闭页面后重新打开,需要查询 `status=0` 的进行中报工记录来恢复 `startRecordId`