src/views/productionManagement/workOrder/index.vue
@@ -24,13 +24,7 @@
                :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="编辑时间"
@@ -289,6 +283,19 @@
          <!--          </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"
@@ -490,6 +497,7 @@
    productWorkOrderPage,
    updateProductWorkOrder,
    addProductMain,
    getProductWorkOrderById,
    downProductWorkOrder,
    addProductionMachineRecord,
    productionMachineRecordListPage,
@@ -1075,25 +1083,13 @@
      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",
    },
    {
@@ -1217,6 +1213,8 @@
    teamList: [],
    deviceId: null,
  });
  // 班组人员产量时长明细 [{ userId, userName, quantity, workHour }]
  const personList = ref([]);
  const teamSelectOptions = computed(() => {
    const base =
      Array.isArray(reportForm.userIdsList) && reportForm.userIdsList.length > 0
@@ -1544,7 +1542,7 @@
      });
  };
  const showReportDialog = row => {
  const showReportDialog = async row => {
    currentReportRowData.value = row;
    reportForm.planQuantity = row.planQuantity - row.completeQuantity;
    reportForm.quantity = row.planQuantity - row.completeQuantity;
@@ -1557,7 +1555,7 @@
    reportForm.replenishQty = 0;
    reportForm.teamList = [];
    reportForm.scrapQty = 0;
    reportForm.addQty = 0;
    reportForm.addQty = row.processRouteAddNum ? Number(row.processRouteAddNum) : 0;
    reportForm.userIds = row.userIds || [];
    // 合并工单报工人和工序报工人,去重
@@ -1576,6 +1574,34 @@
        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();
@@ -1648,10 +1674,23 @@
      //   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) {