tuqin
15 小时以前 8dd12f3fb9f2c8c8b319bad323209f28429a80ef
feat(mes): 扫码追溯适配16位纯数字编码

编码统一为16位纯数字后无法按前缀判断类型,改为调用后端接口解析类型后再走对应追溯接口。
已修改2个文件
51 ■■■■■ 文件已修改
src/api/mes/pro/bagCode/index.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/components/qr-trace-modal.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/bagCode/index.ts
@@ -192,6 +192,16 @@
  );
}
/**
 * 扫码追溯:根据编码解析其类型(bag / pallet / batch)。
 * 编码统一为「16 位纯数字」后无法按前缀判断类型,改由后端解析;均不匹配返回 null。
 */
export function resolveTraceType(code: string) {
  return requestClient.get<'bag' | 'batch' | 'pallet' | null>(
    `/mes/pro/trace/resolve-type?code=${encodeURIComponent(code)}`,
  );
}
/** 查询袋码分页 */
export function getBagCodePage(params: MesProBagCodeApi.PageParams) {
  return requestClient.get<PageResult<MesProBagCodeApi.BagCode>>(
src/views/mes/pro/components/qr-trace-modal.vue
@@ -11,7 +11,7 @@
  import { Button, Empty, Input, message, Spin, Tag } from "ant-design-vue";
  import { getBagCodeByCode } from "#/api/mes/pro/bagCode";
  import { getBagCodeByCode, resolveTraceType } from "#/api/mes/pro/bagCode";
  import { getBatchByCode } from "#/api/mes/pro/batch";
  import { getPalletByCode } from "#/api/mes/pro/pallet";
  import { getQrConfig } from "#/api/mes/trace/config";
@@ -72,24 +72,6 @@
    return trimmed;
  }
  /** 识别二维码内容类型:批次号(含临时批次码)/ 托盘码(含临时托盘码)/ 袋码 */
  function resolveCodeType(raw: string): TraceType | undefined {
    const value = raw.trim().toUpperCase();
    if (/^PB-\d{8}$/.test(value)) {
      return "batch";
    }
    if (/^PL-\d{8}$/.test(value)) {
      return "pallet";
    }
    if (/^.*-P\d{2}$/.test(value)) {
      return "pallet";
    }
    if (/^BAG-\d{8}$/.test(value) || /^.*-\d{4}$/.test(value)) {
      return "bag";
    }
    return "batch";
  }
  function resetState() {
    currentCode.value = undefined;
    traceType.value = undefined;
@@ -113,11 +95,6 @@
      message.warning("二维码内容过长,请检查是否扫描正确");
      return;
    }
    const type = resolveCodeType(value);
    if (!type) {
      message.warning("无法识别二维码类型");
      return;
    }
    loading.value = true;
    searched.value = true;
    searchError.value = false;
@@ -128,15 +105,21 @@
    palletTrace.value = undefined;
    batchTrace.value = undefined;
    try {
      if (type === "batch") {
        batchTrace.value = await getBatchByCode(value);
        traceTypeLabel.value = "批次号";
      // 编码已统一为「16 位纯数字」,无法再按前缀判断类型,改由后端按编码解析类型
      const type = await resolveTraceType(value);
      if (type === "bag") {
        bagTrace.value = await getBagCodeByCode(value);
        traceTypeLabel.value = "袋码";
      } else if (type === "pallet") {
        palletTrace.value = await getPalletByCode(value);
        traceTypeLabel.value = "托盘码";
      } else if (type === "batch") {
        batchTrace.value = await getBatchByCode(value);
        traceTypeLabel.value = "批次号";
      } else {
        bagTrace.value = await getBagCodeByCode(value);
        traceTypeLabel.value = "袋码";
        searchError.value = true;
        currentCode.value = undefined;
        return;
      }
      traceType.value = type;
    } catch {