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);
|
};
|
}
|