新增合格率字段到生产工序的新增和编辑页面,并在表格中显示相关参数。增加生产记录选择和批量删除功能。
已修改4个文件
240 ■■■■■ 文件已修改
src/components/PIMTable/PIMTable.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/Edit.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/New.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionProcess/index.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/PIMTable/PIMTable.vue
@@ -26,6 +26,7 @@
      type="selection"
      width="55"
      v-if="isSelection"
      :selectable="rowSelectable"
    />
    <el-table-column align="center" label="序号" type="index" width="60" />
@@ -333,6 +334,11 @@
  },
});
// 选择框禁用控制:行对象上如果有 disabled === true,则不允许选中
const rowSelectable = (row, index) => {
  return !row.disabled;
};
// Data
const uploadRefs = ref([]);
const currentFiles = ref({});
src/views/productionManagement/productionProcess/Edit.vue
@@ -28,6 +28,9 @@
        <el-form-item label="工资定额" prop="salaryQuota">
          <el-input v-model="formState.salaryQuota" type="number" :step="0.001" />
        </el-form-item>
        <el-form-item label="合格率" prop="qualifiedRate">
          <el-input v-model="formState.qualifiedRate" type="number" :step="0.01" />
        </el-form-item>
        <el-form-item label="是否质检" prop="isQuality">
          <el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/>
        </el-form-item>
@@ -70,6 +73,7 @@
  no: props.record.no,
  remark: props.record.remark,
  salaryQuota: props.record.salaryQuota,
  qualifiedRate: props.record.qualifiedRate,
  isQuality: props.record.isQuality,
});
@@ -91,7 +95,8 @@
      no: newRecord.no || '',
      remark: newRecord.remark || '',
      salaryQuota: newRecord.salaryQuota || '',
      isQuality: props.record.isQuality,
      qualifiedRate: newRecord.qualifiedRate || '',
      isQuality: newRecord.isQuality,
    };
  }
}, { immediate: true, deep: true });
@@ -105,6 +110,7 @@
      no: props.record.no || '',
      remark: props.record.remark || '',
      salaryQuota: props.record.salaryQuota || '',
      qualifiedRate: props.record.qualifiedRate || '',
      isQuality: props.record.isQuality,
    };
  }
src/views/productionManagement/productionProcess/New.vue
@@ -28,6 +28,9 @@
        <el-form-item label="工资定额" prop="salaryQuota">
          <el-input v-model="formState.salaryQuota" type="number" :step="0.001" />
        </el-form-item>
        <el-form-item label="合格率" prop="qualifiedRate">
          <el-input v-model="formState.qualifiedRate" type="number" :step="0.01" />
        </el-form-item>
        <el-form-item label="是否质检" prop="isQuality">
          <el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/>
        </el-form-item>
@@ -63,6 +66,7 @@
  name: '',
  remark: '',
  salaryQuota:  '',
  qualifiedRate: '',
  isQuality: false,
});
src/views/productionManagement/productionProcess/index.vue
@@ -48,6 +48,50 @@
                @pagination="pagination"
                :total="page.total"></PIMTable>
    </div>
    <!-- 工序生产记录列表弹框 -->
    <el-dialog v-model="isShowProcessParamModal"
               title="生产记录"
               width="800px">
      <div style="text-align: right"
           class="mb10">
        <el-button type="primary"
                   @click="showSelectProductParamModal">新增</el-button>
        <el-button type="danger"
                   plain
                   @click="handleDeleteProcessParam"
                   :disabled="processParamSelectedRows.length === 0">批量删除</el-button>
      </div>
      <PIMTable rowKey="id"
                :column="processParamColumns"
                :tableData="processParamTableData"
                :page="processParamPage"
                :isSelection="true"
                @selection-change="handleProcessParamSelectionChange"
                @pagination="processParamPagination"
                :total="processParamPage.total"></PIMTable>
    </el-dialog>
    <!-- 选择生产记录弹框 -->
    <el-dialog v-model="isShowSelectParamModal"
               title="选择生产记录"
               width="800px">
      <PIMTable rowKey="id"
                :column="productParamColumns"
                :tableData="productParamTableData"
                :page="productParamPage"
                :isSelection="true"
                @selection-change="handleProductParamSelectionChange"
                @pagination="productParamPagination"
                :total="productParamPage.total"></PIMTable>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary"
                     @click="handleAddProcessParam">确定</el-button>
          <el-button @click="isShowSelectParamModal = false">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <new-process v-if="isShowNewModal"
                 v-model:visible="isShowNewModal"
                 @completed="getList" />
@@ -80,6 +124,12 @@
    importData,
    downloadTemplate,
  } from "@/api/productionManagement/productionProcess.js";
  import {
    listPage as listProcessParamPage,
    del as delProcessParam,
    addProductProcessParameter,
  } from "@/api/productionManagement/productProcessParameter.js";
  import { listPage as listProductParamPage } from "@/api/productionManagement/productionRecords.js";
  import { getToken } from "@/utils/auth";
  const data = reactive({
@@ -101,6 +151,10 @@
    {
      label: "工资定额",
      prop: "salaryQuota",
    },
    {
      label: "合格率",
      prop: "qualifiedRate",
    },
    {
      label: "是否质检",
@@ -125,6 +179,13 @@
      width: 280,
      operation: [
        {
          name: "查看",
          type: "text",
          clickFun: row => {
            showProcessParamModal(row);
          },
        },
        {
          name: "编辑",
          type: "text",
          clickFun: row => {
@@ -134,12 +195,59 @@
      ],
    },
  ]);
  // 工序已绑定的生产记录列表列配置
  const processParamColumns = ref([
    { label: "参数编码", prop: "code" },
    { label: "参数项", prop: "parameterItem" },
    {
      label: "参数类型",
      prop: "type",
      formatData: val => {
        const dictList = (proxy.useDict && proxy.useDict("parameter_tyep")?.parameter_tyep) || [];
        const list = dictList.value || dictList;
        const hit = (list || []).find(d => d.value === val);
        return hit ? hit.label : val;
      },
    },
    { label: "单位", prop: "unit" },
    { label: "参数格式", prop: "parameterFormat" },
    {
      label: "是否必填",
      prop: "isRequired",
      formatData: v => (v === "1" || v === 1 ? "是" : "否"),
    },
  ]);
  // 可选择的生产记录列表列配置
  const productParamColumns = ref([
    { label: "参数编码", prop: "code" },
    { label: "参数项", prop: "parameterItem" },
    {
      label: "参数类型",
      prop: "type",
      formatData: val => {
        const dictList = (proxy.useDict && proxy.useDict("parameter_tyep")?.parameter_tyep) || [];
        const list = dictList.value || dictList;
        const hit = (list || []).find(d => d.value === val);
        return hit ? hit.label : val;
      },
    },
    { label: "单位", prop: "unit" },
    { label: "参数格式", prop: "parameterFormat" },
    {
      label: "是否必填",
      prop: "isRequired",
      formatData: v => (v === "1" || v === 1 ? "是" : "否"),
    },
  ]);
  const tableData = ref([]);
  const selectedRows = ref([]);
  const tableLoading = ref(false);
  const isShowNewModal = ref(false);
  const isShowEditModal = ref(false);
  const isShowProcessParamModal = ref(false);
  const isShowSelectParamModal = ref(false);
  const record = ref({});
  const currentProcess = ref(null);
  const importDialogVisible = ref(false);
  const importDialogRef = ref(null);
  const page = reactive({
@@ -147,6 +255,20 @@
    size: 100,
    total: 0,
  });
  const processParamPage = reactive({
    current: 1,
    size: 100,
    total: 0,
  });
  const productParamPage = reactive({
    current: 1,
    size: 100,
    total: 0,
  });
  const processParamTableData = ref([]);
  const productParamTableData = ref([]);
  const processParamSelectedRows = ref([]);
  const productParamSelectedRows = ref([]);
  const { proxy } = getCurrentInstance();
  // 导入相关配置
@@ -165,6 +287,16 @@
    page.current = obj.page;
    page.size = obj.limit;
    getList();
  };
  const processParamPagination = obj => {
    processParamPage.current = obj.page;
    processParamPage.size = obj.limit;
    getProcessParamList();
  };
  const productParamPagination = obj => {
    productParamPage.current = obj.page;
    productParamPage.size = obj.limit;
    getProductParamList();
  };
  const getList = () => {
    tableLoading.value = true;
@@ -187,6 +319,14 @@
    selectedRows.value = selection;
  };
  const handleProcessParamSelectionChange = selection => {
    processParamSelectedRows.value = selection;
  };
  const handleProductParamSelectionChange = selection => {
    productParamSelectedRows.value = selection;
  };
  // 打开新增弹框
  const showNewModal = () => {
    isShowNewModal.value = true;
@@ -197,6 +337,88 @@
    record.value = row;
  };
  // 查看当前工序的生产记录
  const showProcessParamModal = row => {
    currentProcess.value = row;
    isShowProcessParamModal.value = true;
    processParamPage.current = 1;
    getProcessParamList();
  };
  const getProcessParamList = () => {
    if (!currentProcess.value) return;
    const params = {
      processId: currentProcess.value.id,
      ...processParamPage,
    };
    listProcessParamPage(params).then(res => {
      processParamTableData.value = res.data.records || [];
      processParamPage.total = res.data.total || 0;
    });
  };
  // 删除当前工序绑定的生产记录
  const handleDeleteProcessParam = () => {
    const ids = processParamSelectedRows.value.map(item => item.id);
    if (!ids.length) {
      proxy.$modal.msgWarning("请选择要删除的记录");
      return;
    }
    proxy.$modal
      .confirm("是否确认删除选中的生产记录?")
      .then(() => delProcessParam(ids))
      .then(() => {
        proxy.$modal.msgSuccess("删除成功");
        getProcessParamList();
      })
      .catch(() => {});
  };
  // 打开选择生产记录弹框
  const showSelectProductParamModal = () => {
    isShowSelectParamModal.value = true;
    productParamPage.current = 1;
    getProductParamList();
  };
  const getProductParamList = () => {
    const params = {
      ...productParamPage,
    };
    listProductParamPage(params).then(res => {
      const records = res.data.records || [];
      // 已绑定到当前工序的生产记录,不允许再次选择 -> 根据参数编码打上 disabled 标记
      const boundCodeSet = new Set(
        (processParamTableData.value || [])
          .map(item => item.code ?? item.parameterCode)
          .filter(code => !!code)
      );
      productParamTableData.value = records.map(item => ({
        ...item,
        disabled: item.code ? boundCodeSet.has(item.code) : false,
      }));
      productParamPage.total = res.data.total || 0;
    });
  };
  // 确认给当前工序新增生产记录
  const handleAddProcessParam = () => {
    if (!currentProcess.value) return;
    const selectedList = productParamSelectedRows.value || [];
    if (!selectedList.length) {
      proxy.$modal.msgWarning("请选择要绑定的生产记录");
      return;
    }
    // processId 放在路径里,body 直接传选中的生产记录数组
    addProductProcessParameter(currentProcess.value.id, selectedList)
      .then(() => {
        proxy.$modal.msgSuccess("新增成功");
        isShowSelectParamModal.value = false;
        getProcessParamList();
      })
      .catch(() => {});
  };
  // 删除
  function handleDelete() {
    const no = selectedRows.value.map(item => item.no);