刘光辉
4 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import type { DmsCustomBarcode } from '#/api/x/dms/watermarkParameters';
 
export interface DmsFixedPrintNumber {
  serialNumber: string;
  countSerialNumber?: string;
  taskSequence?: number;
}
 
/** 在线配置负责显示格式,接口仍接收原 customBarcode 数组。 */
export type DmsPrintBarcodeBuilder = (number: Readonly<DmsFixedPrintNumber>) => DmsCustomBarcode[] | Promise<DmsCustomBarcode[]>;
 
export async function buildDmsPrintBarcode(number: DmsFixedPrintNumber, builder?: DmsPrintBarcodeBuilder): Promise<DmsCustomBarcode[]> {
  const entries = builder
    ? await builder(Object.freeze({ ...number }))
    : [
        {
          barValue: number.serialNumber,
          barText: `打印流水号: ${number.serialNumber}${number.countSerialNumber ? `  计数流水号: ${number.countSerialNumber}` : ''}`,
        },
      ];
  // 格式可变,编码身份和每页覆盖不变,不能用预览的第一份号覆盖后续份号。
  if (
    !Array.isArray(entries) ||
    entries.length !== 1 ||
    entries[0]?.barValue !== number.serialNumber ||
    entries[0]?.page != null ||
    typeof entries[0]?.barText !== 'string' ||
    !entries[0].barText.trim()
  ) {
    throw new Error('打印条码配置必须使用当前固定流水号,提供显示文字并覆盖每页');
  }
  return entries.map((entry) => ({ ...entry }));
}
 
/** 每次预览/发送读取在线接口;不做跨操作缓存,修改格式无需重启。 */
export function createDmsPrintBarcodeBuilder(interfaceId: string): DmsPrintBarcodeBuilder {
  if (!interfaceId.trim()) throw new Error('未配置打印流水显示格式接口');
  return async (number) => {
    const { getDataInterfaceDataSelect } = await import('#/api/systemData/dataInterface');
    const response = await getDataInterfaceDataSelect({
      interfaceId,
      currentPage: 1,
      pageSize: 2,
      paramList: [
        { field: 'dayin_liushuihao', defaultValue: number.serialNumber },
        { field: 'jishu_liushuihao', defaultValue: number.countSerialNumber || '' },
      ],
    });
    if (response.code !== 200 || !Array.isArray(response.data?.list) || response.data.list.length !== 1) {
      throw new Error('打印流水显示格式接口必须返回一条有效配置,请检查在线数据接口');
    }
    return buildDmsPrintBarcode(number, () => response.data.list);
  };
}