云
8 天以前 a241b66efcc41e973290a6722fb7a4d79b833ea1
src/views/mes/qc/ipqc/index.vue
@@ -9,20 +9,61 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteIpqc, exportIpqc, getIpqcPage } from '#/api/mes/qc/ipqc';
import {
  deleteIpqc,
  exportIpqc,
  getIpqcPage,
  importIpqc,
  importIpqcTemplate,
} from '#/api/mes/qc/ipqc';
import { $t } from '#/locales';
import QcImportFormModal from '#/views/mes/qc/components/import-form-modal.vue';
import QcReportGenerateModal from '#/views/mes/qc/components/report-generate-modal.vue';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
/** 本页对应 mes_qc_type 的值:2 过程检验 */
const QC_TYPE = 2;
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ReportModal, reportModalApi] = useVbenModal({
  connectedComponent: QcReportGenerateModal,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: QcImportFormModal,
  destroyOnClose: true,
});
/** 刷新表格 */
function handleRefresh() {
  gridApi.query();
}
/** 批量导入过程检验单 */
function handleImport() {
  importModalApi
    .setData({
      title: '批量导入过程检验单',
      templateApi: importIpqcTemplate,
      importApi: importIpqc,
      fileName: '过程检验单导入模板.xls',
      hints: [
        '仅允许导入 xls、xlsx 格式文件;必填列:检验单名称、检验类型、生产工单号、工位名称、合格品数量、不合格品数量。',
        '「产品物料由生产工单自动推导」,模板不填物料;「检验类型」按字典名称填写(自制工序检验 / 首检 / 巡检 / 自检 / 成品检验)。',
        '「生产工单号」需与「生产管理 - 生产工单」中的工单号一致;「工位名称」需与「基础数据 - 工位管理」中的名称一致。',
        '合格品数量 + 不合格品数量 必须等于「检测数量」(留空时自动取两者之和);工废 + 料废 + 其他废品 之和不得超过不合格品数量。',
        '「质检方案」填方案名称,留空则按物料自动匹配 IPQC 方案;「检测人员」留空取当前登录用户;「检测日期」可留空。',
        '逐行导入,失败行不影响成功行;导入后的检验单为「待检验」状态,可在列表中继续编辑、录入检测结果。',
      ],
    })
    .open();
}
/** 创建过程检验单 */
@@ -55,10 +96,17 @@
  }
}
/** 导出表格 */
/** 导出表格(按列表筛选条件导出) */
async function handleExport() {
  const data = await exportIpqc(await gridApi.formApi.getValues());
  downloadFileFromBlobPart({ fileName: '过程检验单.xls', source: data });
}
/** 出报告:数据由后端从该质检单取,前端只选模板 */
function handleReport(row: MesQcIpqcApi.Ipqc) {
  reportModalApi
    .setData({ qcType: QC_TYPE, qcId: row.id, qcNo: row.code })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -93,8 +141,10 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ReportModal />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="过程检验单列表">
      <template #toolbar-tools>
        <TableAction
@@ -105,6 +155,13 @@
              icon: ACTION_ICON.ADD,
              auth: ['mes:qc-ipqc:create'],
              onClick: handleCreate,
            },
            {
              label: '批量导入',
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-ipqc:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
@@ -125,6 +182,14 @@
        <TableAction
          :actions="[
            {
              label: '出报告',
              type: 'link',
              icon: ACTION_ICON.AUDIT,
              auth: ['qc-report:instance:generate'],
              ifShow: row.status === MesQcStatusEnum.FINISHED,
              onClick: handleReport.bind(null, row),
            },
            {
              label: $t('common.edit'),
              type: 'link',
              icon: ACTION_ICON.EDIT,