zhangwencui
2026-04-28 b7e3bc6bbe2f6464f4f92e457212fac7ea61758d
src/views/productionManagement/workOrderManagement/components/MaterialDialog.vue
@@ -1,86 +1,119 @@
<template>
  <div>
    <el-dialog
      v-model="dialogVisible"
    <el-dialog v-model="dialogVisible"
      title="物料"
      width="1200px"
      @close="handleCloseMaterialDialog"
    >
      <el-table v-loading="materialTableLoading" :data="materialTableData" border row-key="id">
        <el-table-column label="工序名称" prop="processName" min-width="140" />
        <el-table-column label="原料名称" prop="materialName" min-width="140" />
        <el-table-column label="原料型号" prop="materialModel" min-width="140" />
        <el-table-column label="计量单位" prop="unit" min-width="100" />
        <el-table-column label="线边仓数量" prop="pickQty" min-width="100" />
        <el-table-column label="补料数量" prop="supplementQty" min-width="100" />
        <el-table-column label="实际数量" min-width="140">
               @close="handleCloseMaterialDialog">
      <el-table v-loading="materialTableLoading"
                :data="materialTableData"
                border
                row-key="id">
        <el-table-column label="工序名称"
                         prop="processName"
                         min-width="140" />
        <el-table-column label="原料名称"
                         prop="materialName"
                         min-width="140" />
        <el-table-column label="原料型号"
                         prop="materialModel"
                         min-width="140" />
        <el-table-column label="计量单位"
                         prop="unit"
                         min-width="100" />
        <el-table-column label="线边仓数量"
                         prop="pickQty"
                         min-width="100" />
        <el-table-column label="补料数量"
                         prop="supplementQty"
                         min-width="100" />
        <el-table-column label="实际数量"
                         min-width="140">
          <template #default="{ row }">
            <el-input-number
              v-model="row.actualQty"
            <el-input-number v-model="row.actualQty"
              :min="0"
              :precision="3"
              :step="1"
              controls-position="right"
              style="width: 100%;"
            />
                             style="width: 100%;" />
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" fixed="right" width="180">
        <el-table-column label="操作"
                         align="center"
                         fixed="right"
                         width="180">
          <template #default="{ row }">
            <el-button type="primary" link @click="openSupplementDialog(row)">补料</el-button>
            <el-button type="info" link @click="openSupplementRecordDialog(row)">补料记录</el-button>
            <el-button type="primary"
                       link
                       @click="openSupplementDialog(row)">补料</el-button>
            <el-button type="info"
                       link
                       @click="openSupplementRecordDialog(row)">补料记录</el-button>
          </template>
        </el-table-column>
      </el-table>
      <template #footer>
        <span class="dialog-footer">
          <el-button type="primary" :loading="pickSubmitting" @click="handleSubmitPick">领用</el-button>
          <el-button type="primary"
                     :loading="pickSubmitting"
                     @click="handleSubmitPick">领用</el-button>
          <el-button @click="dialogVisible = false">取消</el-button>
        </span>
      </template>
    </el-dialog>
    <FormDialog
      v-model="supplementDialogVisible"
    <FormDialog v-model="supplementDialogVisible"
      title="补料"
      width="500px"
      @confirm="handleSubmitSupplement"
    >
      <el-form ref="supplementFormRef" :model="supplementForm" :rules="supplementRules" label-width="100px">
        <el-form-item label="补料数量" prop="supplementQty">
          <el-input-number
            v-model="supplementForm.supplementQty"
                @confirm="handleSubmitSupplement">
      <el-form ref="supplementFormRef"
               :model="supplementForm"
               :rules="supplementRules"
               label-width="100px">
        <el-form-item label="补料数量"
                      prop="supplementQty">
          <el-input-number v-model="supplementForm.supplementQty"
            :min="0.001"
            :precision="3"
            :step="1"
            style="width: 100%;"
          />
                           style="width: 100%;" />
        </el-form-item>
        <el-form-item label="补料原因" prop="supplementReason">
          <el-input
            v-model="supplementForm.supplementReason"
        <el-form-item label="补料原因"
                      prop="supplementReason">
          <el-input v-model="supplementForm.supplementReason"
            type="textarea"
            :rows="3"
            maxlength="200"
            show-word-limit
            placeholder="请输入补料原因"
          />
                    placeholder="请输入补料原因" />
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button type="primary" :loading="supplementSubmitting" @click="handleSubmitSupplement">确定</el-button>
          <el-button type="primary"
                     :loading="supplementSubmitting"
                     @click="handleSubmitSupplement">确定</el-button>
          <el-button @click="supplementDialogVisible = false">取消</el-button>
        </span>
      </template>
    </FormDialog>
    <el-dialog v-model="supplementRecordDialogVisible" title="补料记录" width="900px">
      <el-table v-loading="supplementRecordLoading" :data="supplementRecordTableData" border row-key="id">
        <el-table-column label="补料数量" prop="supplementQty" min-width="100" />
        <el-table-column label="补料原因" prop="supplementReason" min-width="200" />
        <el-table-column label="补料人" prop="supplementUserName" min-width="120" />
        <el-table-column label="补料日期" prop="supplementTime" min-width="160" />
    <el-dialog v-model="supplementRecordDialogVisible"
               title="补料记录"
               width="900px">
      <el-table v-loading="supplementRecordLoading"
                :data="supplementRecordTableData"
                border
                row-key="id">
        <el-table-column label="补料数量"
                         prop="supplementQty"
                         min-width="100" />
        <el-table-column label="补料原因"
                         prop="supplementReason"
                         min-width="200" />
        <el-table-column label="补料人"
                         prop="supplementUserName"
                         min-width="120" />
        <el-table-column label="补料日期"
                         prop="supplementTime"
                         min-width="160" />
      </el-table>
      <template #footer>
        <span class="dialog-footer">
@@ -139,8 +172,12 @@
const supplementRecordTableData = ref([]);
const supplementRules = {
  supplementQty: [{ required: true, message: "请输入补料数量", trigger: "blur" }],
  supplementReason: [{ required: true, message: "请输入补料原因", trigger: "blur" }],
    supplementQty: [
      { required: true, message: "请输入补料数量", trigger: "blur" },
    ],
    supplementReason: [
      { required: true, message: "请输入补料原因", trigger: "blur" },
    ],
};
const loadMaterialTable = async row => {
  if (!row?.id) return;
@@ -235,7 +272,12 @@
  if (materialTableData.value.length === 0) {
    return { valid: false, message: "暂无可领用物料" };
  }
  const invalidRow = materialTableData.value.find(item => item.actualQty === null || item.actualQty === undefined || item.actualQty === "");
    const invalidRow = materialTableData.value.find(
      item =>
        item.actualQty === null ||
        item.actualQty === undefined ||
        item.actualQty === ""
    );
  if (invalidRow) {
    return { valid: false, message: "请填写实际数量后再领用" };
  }