云
6 小时以前 7a93a85f75bcfc8001ea1d3b921860806a8209ac
src/views/wls/returnissue/modules/line-list.vue
@@ -5,6 +5,8 @@
import type { MesWmReturnIssueDetailApi } from '#/api/mes/wm/returnissue/detail';
import type { MesWmReturnIssueLineApi } from '#/api/mes/wm/returnissue/line';
import type { TraceResult } from '#/utils/traceLookup';
import { computed, reactive, ref } from 'vue';
import { useVbenModal } from '@vben/common-ui';
@@ -18,7 +20,9 @@
  deleteReturnIssueLine,
  getReturnIssueLinePage,
} from '#/api/mes/wm/returnissue/line';
import TraceScanPanel from '#/components/TraceScanPanel.vue';
import { $t } from '#/locales';
import { findMaterialStocks, traceQuantity } from '#/utils/traceLookup';
import { BarcodeDetail, PrinterLabel } from '#/views/wls/barcode/components';
import { useLineGridColumns } from '../data';
@@ -62,6 +66,40 @@
/** 添加物料 */
function handleCreate() {
  lineFormModalApi.setData({ issueId: props.issueId }).open();
}
/** 扫码带出:按追溯码匹配线边库库存记录后打开新增退料行 */
async function handleTraceConfirm(trace: TraceResult) {
  try {
    const stocks = await findMaterialStocks(trace, { virtualFilter: 'only' });
    const stock = stocks.find((item) => (item.quantity ?? 0) > 0) ?? stocks[0];
    if (!stock) {
      message.warning('未找到该追溯码对应的线边库库存记录');
      return;
    }
    const quantity = traceQuantity(trace);
    lineFormModalApi
      .setData({
        defaults: {
          batchCode: stock.batchCode,
          batchId: stock.batchId,
          itemId: stock.itemId,
          materialDisplayName: [stock.itemName, stock.specification]
            .filter(Boolean)
            .join(' | '),
          materialStockId: stock.id,
          quantity:
            quantity && stock.quantity
              ? Math.min(quantity, stock.quantity)
              : (quantity ?? stock.quantity),
          quantityMax: stock.quantity,
        },
        issueId: props.issueId,
      })
      .open();
  } catch (e) {
    message.error(e instanceof Error ? e.message : '扫码带出失败');
  }
}
/** 编辑物料 */
@@ -180,6 +218,11 @@
  <div>
    <LineFormModal @success="handleRefresh" />
    <DetailFormModal @success="handleDetailSuccess" />
    <TraceScanPanel
      v-if="isEditable"
      title="扫码带出退料明细"
      @confirm="handleTraceConfirm"
    />
    <Grid table-title="物料信息">
      <template v-if="isEditable" #toolbar-tools>
        <TableAction