云
114 分钟以前 7a93a85f75bcfc8001ea1d3b921860806a8209ac
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
/**
 * 提取追溯码。
 *
 * 现场标签印的是追溯二维码,内容为「追溯网址?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;
}