| | |
| | | :tableData="tableData" |
| | | :page="page" |
| | | :tableLoading="tableLoading" |
| | | @pagination="pagination"> |
| | | <template #completionStatus="{ row }"> |
| | | <el-progress :percentage="toProgressPercentage(row?.completionStatus)" |
| | | :color="progressColor(toProgressPercentage(row?.completionStatus))" |
| | | :status="toProgressPercentage(row?.completionStatus) >= 100 ? 'success' : ''" /> |
| | | </template> |
| | | </PIMTable> |
| | | @pagination="pagination" /> |
| | | </div> |
| | | <el-dialog v-model="editDialogVisible" |
| | | title="编辑时间" |
| | |
| | | <!-- </el-col>--> |
| | | </el-row> |
| | | </el-form> |
| | | <el-table :data="personList" border style="margin-top: 12px;"> |
| | | <el-table-column label="生产人" prop="userName" min-width="100" align="center" /> |
| | | <el-table-column label="产量" min-width="120" align="center"> |
| | | <template #default="scope"> |
| | | <el-input-number v-model="scope.row.quantity" :min="0" :controls="false" placeholder="产量" style="width: 100%" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="生产时长(分钟)" min-width="140" align="center"> |
| | | <template #default="scope"> |
| | | <el-input-number v-model="scope.row.workHour" :min="0" :controls="false" placeholder="时长(分钟)" style="width: 100%" /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" |
| | |
| | | productWorkOrderPage, |
| | | updateProductWorkOrder, |
| | | addProductMain, |
| | | getProductWorkOrderById, |
| | | downProductWorkOrder, |
| | | addProductionMachineRecord, |
| | | productionMachineRecordListPage, |
| | |
| | | width: "140", |
| | | }, |
| | | { |
| | | label: "加放数", |
| | | prop: "processRouteAddNum", |
| | | width: "100", |
| | | }, |
| | | { |
| | | label: "完成数量", |
| | | prop: "completeQuantity", |
| | | width: "140", |
| | | }, |
| | | { |
| | | label: "完成进度", |
| | | prop: "completionStatus", |
| | | dataType: "slot", |
| | | slot: "completionStatus", |
| | | width: "140", |
| | | }, |
| | | { |
| | | label: "计划开始时间", |
| | | prop: "planStartTime", |
| | | width: "140", |
| | | }, |
| | | { |
| | | label: "计划结束时间", |
| | | prop: "planEndTime", |
| | | width: "140", |
| | | }, |
| | | { |
| | |
| | | teamList: [], |
| | | deviceId: null, |
| | | }); |
| | | // 班组人员产量时长明细 [{ userId, userName, quantity, workHour }] |
| | | const personList = ref([]); |
| | | const teamSelectOptions = computed(() => { |
| | | const base = |
| | | Array.isArray(reportForm.userIdsList) && reportForm.userIdsList.length > 0 |
| | |
| | | }); |
| | | }; |
| | | |
| | | const showReportDialog = row => { |
| | | const showReportDialog = async row => { |
| | | currentReportRowData.value = row; |
| | | reportForm.planQuantity = row.planQuantity - row.completeQuantity; |
| | | reportForm.quantity = row.planQuantity - row.completeQuantity; |
| | |
| | | reportForm.replenishQty = 0; |
| | | reportForm.teamList = []; |
| | | reportForm.scrapQty = 0; |
| | | reportForm.addQty = 0; |
| | | reportForm.addQty = row.processRouteAddNum ? Number(row.processRouteAddNum) : 0; |
| | | reportForm.userIds = row.userIds || []; |
| | | |
| | | // 合并工单报工人和工序报工人,去重 |
| | |
| | | userId: item.userId, |
| | | nickName: item.nickName, |
| | | })); |
| | | |
| | | // 获取报工弹窗数据,带出默认班组成员(合并排产人员与机台操作员,去重) |
| | | personList.value = []; |
| | | try { |
| | | const res = await getProductWorkOrderById(row.id); |
| | | const reportPersons = (Array.isArray(res?.data?.reportPersons) |
| | | ? res.data.reportPersons |
| | | : [] |
| | | ) |
| | | .filter(p => p && typeof p === "object") |
| | | .map(p => ({ |
| | | userId: p.userId ?? p.id ?? "", |
| | | userName: String(p.userName || p.nickName || "").trim(), |
| | | })) |
| | | .filter(p => p.userName !== ""); |
| | | personList.value = reportPersons.map(p => ({ |
| | | userId: p.userId, |
| | | userName: p.userName, |
| | | quantity: null, |
| | | workHour: null, |
| | | })); |
| | | reportForm.teamList = reportPersons.map(p => ({ |
| | | userId: p.userId, |
| | | userName: p.userName, |
| | | })); |
| | | } catch (err) { |
| | | console.error("获取报工弹窗数据失败", err); |
| | | } |
| | | |
| | | nextTick(() => { |
| | | reportFormRef.value?.clearValidate(); |
| | |
| | | // return; |
| | | // } |
| | | |
| | | // 校验各班组产量之和等于报工总产量 |
| | | const personQuantityTotal = personList.value.reduce( |
| | | (sum, p) => sum + (Number(p.quantity) || 0), |
| | | 0 |
| | | ); |
| | | if (personQuantityTotal !== quantity) { |
| | | ElMessageBox.alert("各班组产量之和必须等于报工总产量", "提示", { |
| | | confirmButtonText: "确定", |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | const submitData = { |
| | | ...reportForm, |
| | | quantity: quantity, |
| | | scrapQty: scrapQty, |
| | | personList: personList.value, |
| | | }; |
| | | addProductMain(submitData).then(res => { |
| | | if (res.code === 200) { |