/**
|
* 提取追溯码。
|
*
|
* 现场标签印的是追溯二维码,内容为「追溯网址?code=追溯码」;
|
* 扫码枪也可能把整段网址直接提交,所有扫码入口都应先经过这里规范化。
|
* 后端 MesTraceCodeUtils 保持同一口径。
|
*/
|
export function extractCode(raw: string): string {
|
let value = raw.trim();
|
if (!value) throw new Error('请扫描或输入追溯码');
|
if (/^https?:\/\//i.test(value)) {
|
let code: string | null;
|
try {
|
code = new URL(value).searchParams.get('code');
|
} catch {
|
throw new Error('追溯网址格式不正确');
|
}
|
if (!code) throw new Error('该追溯网址不包含追溯码');
|
value = code.trim();
|
}
|
if (!value || value.length > 64 || /\s/.test(value)) {
|
throw new Error('追溯码格式不正确');
|
}
|
return value;
|
}
|